From 521ac2d13fb43873002ac62a2316303c7fe29aef Mon Sep 17 00:00:00 2001 From: Alexander Rose <alexander.rose@weirdbyte.de> Date: Sat, 17 Sep 2022 11:43:18 -0700 Subject: [PATCH] stereo camera improvements - fix param updates not applied - better param ranges and description - add timer.mark for left/right camera --- CHANGELOG.md | 4 ++++ src/mol-canvas3d/camera/stereo.ts | 6 +++--- src/mol-canvas3d/canvas3d.ts | 5 ++++- src/mol-canvas3d/passes/draw.ts | 4 ++++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef65c1210..886944148 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ Note that since we don't clearly distinguish between a public and private interf ## [Unreleased] - Integration of Dual depth peeling - OIT method +- Stereo camera improvements + - Fix param updates not applied + - Better param ranges and description + - Add timer.mark for left/right camera ## [v3.17.0] - 2022-09-11 diff --git a/src/mol-canvas3d/camera/stereo.ts b/src/mol-canvas3d/camera/stereo.ts index 011142719..4742dd93f 100644 --- a/src/mol-canvas3d/camera/stereo.ts +++ b/src/mol-canvas3d/camera/stereo.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2020-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> @@ -13,8 +13,8 @@ import { Camera, ICamera } from '../camera'; import { Viewport } from './util'; export const StereoCameraParams = { - eyeSeparation: PD.Numeric(0.064, { min: 0.01, max: 0.5, step: 0.001 }), - focus: PD.Numeric(10, { min: 1, max: 100, step: 0.01 }), + eyeSeparation: PD.Numeric(0.062, { min: 0.02, max: 0.1, step: 0.001 }, { description: 'Distance between left and right camera.' }), + focus: PD.Numeric(10, { min: 1, max: 20, step: 0.1 }, { description: 'Apparent object distance.' }), }; export const DefaultStereoCameraProps = PD.getDefaultValues(StereoCameraParams); export type StereoCameraProps = PD.Values<typeof StereoCameraParams> diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts index 834f86d16..24223dca1 100644 --- a/src/mol-canvas3d/canvas3d.ts +++ b/src/mol-canvas3d/canvas3d.ts @@ -826,7 +826,10 @@ namespace Canvas3D { if (props.camera?.helper) helper.camera.setProps(props.camera.helper); if (props.camera?.manualReset !== undefined) p.camera.manualReset = props.camera.manualReset; - if (props.camera?.stereo !== undefined) Object.assign(p.camera.stereo, props.camera.stereo); + if (props.camera?.stereo !== undefined) { + Object.assign(p.camera.stereo, props.camera.stereo); + stereoCamera.setProps(p.camera.stereo.params); + } if (props.cameraResetDurationMs !== undefined) p.cameraResetDurationMs = props.cameraResetDurationMs; if (props.transparentBackground !== undefined) p.transparentBackground = props.transparentBackground; if (props.dpoitIterations !== undefined) p.dpoitIterations = props.dpoitIterations; diff --git a/src/mol-canvas3d/passes/draw.ts b/src/mol-canvas3d/passes/draw.ts index 747b50057..b286e5840 100644 --- a/src/mol-canvas3d/passes/draw.ts +++ b/src/mol-canvas3d/passes/draw.ts @@ -390,8 +390,12 @@ export class DrawPass { renderer.setPixelRatio(this.webgl.pixelRatio); if (StereoCamera.is(camera)) { + if (isTimingMode) this.webgl.timer.mark('StereoCamera.left'); this._render(renderer, camera.left, scene, helper, toDrawingBuffer, transparentBackground, props); + if (isTimingMode) this.webgl.timer.markEnd('StereoCamera.left'); + if (isTimingMode) this.webgl.timer.mark('StereoCamera.right'); this._render(renderer, camera.right, scene, helper, toDrawingBuffer, transparentBackground, props); + if (isTimingMode) this.webgl.timer.markEnd('StereoCamera.right'); } else { this._render(renderer, camera, scene, helper, toDrawingBuffer, transparentBackground, props); } -- GitLab