@zephyr3d/scene 0.9.25 → 0.9.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animationset.js +92 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
- package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
- package/dist/animation/joint_dynamics/controller.js +7 -5
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -4
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/skeleton.js +79 -25
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/spring/multi_chain_spring_system.js +577 -179
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +4 -3
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
- package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
- package/dist/animation/spring/spring_particle.js +2 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +11 -3
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +10 -0
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/engine.js +53 -43
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptingsystem.js +119 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +3 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +284 -67
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/zhair/zhair_format.js +288 -0
- package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
- package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
- package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
- package/dist/asset/model.js +184 -69
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +268 -44
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +3 -1
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +9044 -5139
- package/dist/index.js +17 -6
- package/dist/index.js.map +1 -1
- package/dist/material/eye.js +932 -0
- package/dist/material/eye.js.map +1 -0
- package/dist/material/hair.js +917 -0
- package/dist/material/hair.js.map +1 -0
- package/dist/material/hairstrand.js +842 -0
- package/dist/material/hairstrand.js.map +1 -0
- package/dist/material/hairstrand_data.js +162 -0
- package/dist/material/hairstrand_data.js.map +1 -0
- package/dist/material/lambert.js +5 -2
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +48 -10
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +120 -19
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +5 -4
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +106 -19
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +4 -4
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +48 -11
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mtoon.js +6 -5
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrblueprint.js +146 -28
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrblueprint_instance.js +501 -0
- package/dist/material/pbrblueprint_instance.js.map +1 -0
- package/dist/material/pbrmr.js +15 -16
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/shader/helper.js +734 -23
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +55 -0
- package/dist/material/shader/terrain_blend.js.map +1 -0
- package/dist/material/skin.js +192 -32
- package/dist/material/skin.js.map +1 -1
- package/dist/material/spriteblueprint.js +16 -1
- package/dist/material/spriteblueprint.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +86 -23
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/water.js +2059 -72
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +167 -7
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/coloradjust.js +2 -1
- package/dist/posteffect/coloradjust.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +2 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +3 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +664 -56
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +46 -44
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +368 -69
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +16 -9
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +121 -36
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +44 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +8 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +156 -5
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cull_visitor.js +20 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +36 -2
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +26 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +3 -2
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +6 -3
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +57 -15
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +130 -20
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +6 -3
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/oit.js +29 -0
- package/dist/render/oit.js.map +1 -0
- package/dist/render/render_queue.js +39 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +4 -0
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +1 -0
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +2 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +379 -10
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/shadow_mask_pass.js +73 -8
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/sky.js +166 -126
- package/dist/render/sky.js.map +1 -1
- package/dist/render/underwater.js +624 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/water_caustics.js +1380 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/weightedblended_oit.js +3 -2
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +8 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +4 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/hair.js +963 -0
- package/dist/scene/hair.js.map +1 -0
- package/dist/scene/light.js +5 -1
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +481 -47
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +3 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +3 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +6 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +3 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +6 -1
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +3 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +6 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/texture_cache.js +309 -0
- package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
- package/dist/scene/water.js +546 -4
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/diffusion.js +54 -0
- package/dist/shaders/diffusion.js.map +1 -0
- package/dist/shaders/shadow.js +33 -21
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/temporal.js +71 -33
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +22 -19
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +56 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +546 -0
- package/dist/shadow/dom.js.map +1 -0
- package/dist/shadow/pcf_opt.js +3 -5
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/receiver_bias.js +41 -0
- package/dist/shadow/receiver_bias.js.map +1 -0
- package/dist/shadow/shader.js +20 -60
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +89 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +1 -1
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +150 -37
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/shape.js +11 -2
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +50 -9
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +112 -2
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +142 -49
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +490 -25
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +898 -4
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +434 -101
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +401 -5
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +186 -26
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +26 -5
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/hair.js +1141 -0
- package/dist/utility/serialization/scene/hair.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +84 -4
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1867 -166
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +231 -14
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +141 -7
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +4 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +4 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +4 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1105 -21
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +9 -8
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/values.js +49 -2
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/render/rendergraph/frame_graph_context.js +0 -41
- package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
- package/dist/shaders/ssgi.js +0 -63
- package/dist/shaders/ssgi.js.map +0 -1
- package/dist/shaders/ssgi_reprojection.js +0 -118
- package/dist/shaders/ssgi_reprojection.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.js","sources":["../../src/camera/camera.ts"],"sourcesContent":["import type { CubeFace, Immutable, Nullable, Plane } from '@zephyr3d/base';\r\nimport {\r\n DEPTH_CLEAR_VALUE,\r\n REVERSE_Z,\r\n DRef,\r\n Vector2,\r\n Matrix4x4,\r\n Frustum,\r\n Vector4,\r\n Vector3,\r\n Ray,\r\n halton23\r\n} from '@zephyr3d/base';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport type { Drawable, PickTarget } from '../render/drawable';\r\nimport type { BaseTexture } from '@zephyr3d/device';\r\nimport { Compositor } from '../posteffect/compositor';\r\nimport type { Scene } from '../scene/scene';\r\nimport type {\r\n BaseCameraController,\r\n IBaseEvent,\r\n IControllerKeydownEvent,\r\n IControllerKeyupEvent,\r\n IControllerPointerDownEvent,\r\n IControllerPointerMoveEvent,\r\n IControllerPointerUpEvent,\r\n IControllerWheelEvent\r\n} from './base';\r\nimport type { OIT } from '../render/oit';\r\nimport { TAA } from '../posteffect/taa';\r\nimport { SSGI } from '../posteffect/ssgi';\r\nimport { SSR } from '../posteffect/ssr';\r\nimport { SSS } from '../posteffect/sss';\r\nimport { SkinSSS } from '../posteffect/skinsss';\r\nimport { Tonemap } from '../posteffect/tonemap';\r\nimport { FXAA } from '../posteffect/fxaa';\r\nimport { Bloom } from '../posteffect/bloom';\r\nimport { SAO } from '../posteffect/sao';\r\nimport { MotionBlur } from '../posteffect/motionblur';\r\nimport { ColorAdjust } from '../posteffect/coloradjust';\r\nimport { getDevice } from '../app/api';\r\nimport type { ScreenConfig } from '../app/screen';\r\nimport { ScreenAdapter } from '../app/screen';\r\nimport { ABufferOIT } from '../render/abuffer_oit';\r\nimport { WeightedBlendedOIT } from '../render/weightedblended_oit';\r\nimport { DualDepthPeelingOIT } from '../render/dualdepthpeeling_oit';\r\nimport type { HistoryResourceManager } from '../render';\r\nimport type { FrameGraphContext, RenderPipeline } from '../render';\r\nimport { RGHistoryResources } from '../render/rendergraph/history_resources';\r\nimport { calculateEV100, calculatePhysicalExposure } from '../utility/physical';\r\nimport type { LightingMode } from '../utility/physical';\r\n\r\n/**\r\n * Result of a camera picking operation.\r\n *\r\n * Used by GPU/CPU picking flows to report what was intersected.\r\n *\r\n * @public\r\n */\r\nexport type PickResult = {\r\n /** Distance from ray origin to intersection point (world units). */\r\n distance: number;\r\n /** Intersection point in world space. */\r\n intersectedPoint: Vector3;\r\n /** The intersected drawable, if known. */\r\n drawable: Drawable;\r\n /** Logical pick target information. */\r\n target: PickTarget;\r\n};\r\n\r\n/**\r\n * Temporal history resources used by reprojection (TAA, motion blur).\r\n *\r\n * @public\r\n */\r\nexport type CameraHistoryData = {\r\n prevColorTex: Nullable<BaseTexture>;\r\n prevMotionVectorTex: Nullable<BaseTexture>;\r\n prevSSRReflectTex: Nullable<BaseTexture>;\r\n prevSSRMotionVectorTex: Nullable<BaseTexture>;\r\n};\r\n\r\n/**\r\n * Camera render path mode.\r\n * @public\r\n */\r\nexport type RenderPath = 'forward';\r\n/**\r\n * Camera Order-Independent Transparency mode.\r\n * @public\r\n */\r\nexport type CameraOITMode = 'none' | 'weighted' | 'abuffer' | 'dual-depth';\r\n/**\r\n * Subsurface Scattering debug visualization modes (implementation-defined).\r\n * @public\r\n */\r\nexport type SSSDebugView =\r\n | 'none'\r\n | 'scatter_mask'\r\n | 'scatter_softness'\r\n | 'scatter_radius'\r\n | 'scatter_falloff'\r\n | 'profile_energy'\r\n | 'profile_transmission'\r\n | 'profile_boundary'\r\n | 'diffuse'\r\n | 'blur'\r\n | 'screen_thinness'\r\n | 'thin_transmission_mask'\r\n | 'thin_lighting'\r\n | 'transmission_shadow';\r\n/**\r\n * Subsurface Scattering quality presets that resolve multiple internal settings for convenience.\r\n * @public\r\n */\r\nexport type SSSQualityPreset = 'quality' | 'balanced' | 'performance';\r\n/**\r\n * Resolved Subsurface Scattering settings after applying the quality preset. These are the actual settings used by the SSS post effect.\r\n * @public\r\n */\r\nexport type SSSResolvedSettings = {\r\n halfRes: boolean;\r\n blurKernelSize: number;\r\n blurStdDev: number;\r\n blurDepthCutoff: number;\r\n normalCutoff: number;\r\n};\r\n\r\n/** Screen Space Global Illumination quality preset. @public */\r\nexport type SSGIQualityPreset = 'quality' | 'balanced' | 'performance' | 'custom';\r\n\r\n/** Resolved trace and denoise settings used by the SSGI post effect. @public */\r\nexport type SSGIResolvedSettings = {\r\n halfRes: boolean;\r\n raysPerPixel: number;\r\n maxSteps: number;\r\n denoisePasses: number;\r\n};\r\n\r\nconst SSGI_QUALITY_PRESET_SETTINGS: Record<Exclude<SSGIQualityPreset, 'custom'>, SSGIResolvedSettings> = {\r\n quality: { halfRes: false, raysPerPixel: 2, maxSteps: 64, denoisePasses: 4 },\r\n balanced: { halfRes: true, raysPerPixel: 1, maxSteps: 48, denoisePasses: 4 },\r\n performance: { halfRes: true, raysPerPixel: 1, maxSteps: 24, denoisePasses: 4 }\r\n};\r\n\r\ntype SSSDefaultSettings = {\r\n blurScale: number;\r\n strength: number;\r\n transmissionStrength: number;\r\n transmissionPower: number;\r\n multiScatter: number;\r\n};\r\n\r\nconst SSS_DEFAULT_SETTINGS: SSSDefaultSettings = {\r\n blurScale: 11,\r\n strength: 0.65,\r\n transmissionStrength: 0.18,\r\n transmissionPower: 2.1,\r\n multiScatter: 0.08\r\n};\r\n\r\nconst SSS_QUALITY_PRESET_SETTINGS: Record<SSSQualityPreset, SSSResolvedSettings> = {\r\n quality: {\r\n halfRes: false,\r\n blurKernelSize: 11,\r\n blurStdDev: 3.5,\r\n blurDepthCutoff: 0.24,\r\n normalCutoff: 0.82\r\n },\r\n balanced: {\r\n halfRes: false,\r\n blurKernelSize: 9,\r\n blurStdDev: 3,\r\n blurDepthCutoff: 0.26,\r\n normalCutoff: 0.78\r\n },\r\n performance: {\r\n halfRes: true,\r\n blurKernelSize: 7,\r\n blurStdDev: 2.4,\r\n blurDepthCutoff: 0.32,\r\n normalCutoff: 0.72\r\n }\r\n};\r\n\r\n/**\r\n * A renderable camera node that manages view/projection math, frusta,\r\n * input control, picking, and a post-processing chain via a compositor.\r\n *\r\n * Key features:\r\n * - Maintains projection, view, VP, and inverse VP matrices and lazily recomputes them when invalidated.\r\n * - Provides world- and view-space frusta for culling and clipping.\r\n * - Supports perspective and orthographic projections.\r\n * - Integrates with post effects (Tonemap, FXAA, TAA, Bloom, SSR, SSS, SSAO, Motion Blur) through an internal `Compositor`.\r\n * - Handles temporal jitter and history state when TAA or motion blur are enabled.\r\n * - Emits picking rays from screen coordinates and supports async GPU picking.\r\n * - Optional controller integration for user input handling.\r\n *\r\n * Performance notes:\r\n * - Matrices/frusta are computed on demand and cached until invalidation.\r\n * - Temporal jitter and history are set up only when required by enabled features and device support.\r\n *\r\n * @public\r\n */\r\nexport class Camera extends SceneNode {\r\n /** @internal Halton 2-3 sequence used for TAA jittering. */\r\n private static readonly _halton23 = halton23(16);\r\n /** @internal Per-camera history resources. */\r\n private static readonly _historyData: WeakMap<Camera, CameraHistoryData> = new WeakMap();\r\n /** @internal Per-camera history resource manager. */\r\n private static readonly _historyResourceManager: WeakMap<Camera, HistoryResourceManager> = new WeakMap();\r\n /** @internal Screen adapter for this camera */\r\n protected _screenAdapter: ScreenAdapter;\r\n /** @internal Whether the camera is adapted */\r\n protected _adapted: boolean;\r\n /** @internal Adapted viewport */\r\n protected _adaptedViewport: Nullable<number[]>;\r\n /** @internal Adapted relative viewport */\r\n protected _adaptedRelativeViewport: Nullable<number[]>;\r\n /** @internal RenderTarget version */\r\n protected _adaptedVersion: number;\r\n /** @internal Projection matrix. */\r\n protected _projMatrix: Matrix4x4;\r\n /** @internal Inverse projection matrix. */\r\n protected _invProjMatrix: Matrix4x4;\r\n /** @internal View matrix (world -\\> camera). */\r\n protected _viewMatrix: Matrix4x4;\r\n /** @internal View-projection matrix. */\r\n protected _viewProjMatrix: Matrix4x4;\r\n /** @internal Inverse view-projection matrix. */\r\n protected _invViewProjMatrix: Matrix4x4;\r\n /** @internal Framebuffer clear color, disabled when null. Default is null */\r\n protected _clearColor: Vector4;\r\n /** @internal Framebuffer depth clear value, disabled when null. Default is 1 */\r\n protected _clearDepth: number;\r\n /** @internal Framebuffer stencil clear value, disabled when null. Default is 0 */\r\n protected _clearStencil: number;\r\n /** @internal Optional clip plane in camera space. */\r\n protected _clipPlane: Nullable<Plane>;\r\n /** @internal Camera controller (input). */\r\n protected _controller: Nullable<BaseCameraController>;\r\n /** @internal World-space frustum (from VP). */\r\n protected _frustum: Nullable<Frustum>;\r\n /** @internal View-space frustum (from P). */\r\n protected _frustumV: Nullable<Frustum>;\r\n /** @internal Dirty flag indicating derived matrices/frusta need recompute. */\r\n protected _dirty: boolean;\r\n /** @internal Viewport [x, y, w, h]; null uses full framebuffer. */\r\n protected _viewport: Nullable<number[]>;\r\n /** @internal Scissor rectangle [x, y, w, h]; null uses viewport. */\r\n protected _scissor: Nullable<number[]>;\r\n /** @internal Clip plane mask for custom clipping schemes. */\r\n protected _clipMask: number;\r\n /** @internal Order-Independent Transparency reference. */\r\n protected _oit: DRef<OIT>;\r\n /** @internal OIT algorithm selection mode. */\r\n protected _oitMode: CameraOITMode;\r\n /** @internal ABuffer OIT layer budget. */\r\n protected _oitABufferLayers: number;\r\n /** @internal Dual depth peeling OIT peel iteration count. */\r\n protected _oitDualDepthPeels: number;\r\n /** @internal Whether to perform a depth pre-pass. */\r\n protected _depthPrePass: boolean;\r\n /** @internal Render path selection for scene renderer. */\r\n protected _renderPath: RenderPath;\r\n /** @internal Whether command buffers may be reused for optimization. */\r\n protected _commandBufferReuse: boolean;\r\n /** @internal Hi-Z acceleration enable (primarily for SSR). */\r\n protected _HiZ: boolean;\r\n /** @internal Screen-space shadow mask enable (Forward+ deferred shadows). */\r\n protected _screenSpaceShadowMask: boolean;\r\n /** @internal If true, a float point backbuffer will be used. The default value is true */\r\n protected _HDR: boolean;\r\n /** @internal Tonemap enable flag (via post effect). */\r\n protected _toneMap: boolean;\r\n /** @internal Tonemap post effect reference. */\r\n protected _postEffectTonemap: DRef<Tonemap>;\r\n /** @internal Tonemap exposure. */\r\n protected _tonemapExposure: number;\r\n /** @internal Lens aperture expressed as an f-number. */\r\n protected _aperture: number;\r\n /** @internal Shutter-open time in seconds. */\r\n protected _shutterSpeed: number;\r\n /** @internal Sensor sensitivity. */\r\n protected _ISO: number;\r\n /** @internal Exposure compensation in stops. */\r\n protected _exposureCompensation: number;\r\n /** @internal Lighting mode currently reflected by the post effect ordering. */\r\n protected _postProcessingLightingMode: Nullable<LightingMode>;\r\n /** @internal Motion blur enable flag (via post effect). */\r\n protected _motionBlur: boolean;\r\n /** @internal Motion blur post effect reference. */\r\n protected _postEffectMotionBlur: DRef<MotionBlur>;\r\n /** @internal Motion blur strength. */\r\n protected _motionBlurStrength: number;\r\n /** @internal Bloom enable flag (via post effect). */\r\n protected _bloom: boolean;\r\n /** @internal Bloom post effect reference. */\r\n protected _postEffectBloom: DRef<Bloom>;\r\n /** @internal Bloom downsample level cap. */\r\n protected _bloomMaxDownsampleLevels: number;\r\n /** @internal Bloom downsample resolution limit. */\r\n protected _bloomDownsampleLimit: number;\r\n /** @internal Bloom threshold. */\r\n protected _bloomThreshold: number;\r\n /** @internal Bloom threshold knee (soft thresholding). */\r\n protected _bloomThresholdKnee: number;\r\n /** @internal Bloom intensity. */\r\n protected _bloomIntensity: number;\r\n /** @internal Color adjustment enable flag (via post effect). */\r\n protected _colorAdjustEnabled: boolean;\r\n /** @internal Color adjustment post effect reference. */\r\n protected _postEffectColorAdjust: DRef<ColorAdjust>;\r\n /** @internal Color adjustment saturation. */\r\n protected _colorAdjustSaturation: number;\r\n /** @internal Color adjustment contrast. */\r\n protected _colorAdjustContrast: number;\r\n /** @internal Color adjustment hue (degrees). */\r\n protected _colorAdjustHue: number;\r\n /** @internal Color adjustment sharpen amount. */\r\n protected _colorAdjustSharpen: number;\r\n\r\n /** @internal FXAA enable flag (via post effect). */\r\n protected _FXAA: boolean;\r\n /** @internal FXAA post effect reference. */\r\n protected _postEffectFXAA: DRef<FXAA>;\r\n\r\n /** @internal TAA enable flag (via post effect). */\r\n protected _TAA: boolean;\r\n /** @internal TAA post effect reference. */\r\n protected _postEffectTAA: DRef<TAA>;\r\n /** @internal TAA debug mode (implementation-defined). */\r\n protected _TAADebug: number;\r\n /** @internal Cascaded shadow debug visualization flag. */\r\n protected _shadowDebugCascades: boolean;\r\n\r\n /** @internal SSR enable flag (via post effect). */\r\n protected _SSR: boolean;\r\n /** @internal SSR post effect reference. */\r\n protected _postEffectSSR: DRef<SSR>;\r\n /** @internal SSR parameter vector: (maxDistance, iterations, thickness, reserved). */\r\n protected _ssrParams: Vector4;\r\n /** @internal SSR roughness cutoff; above this SSR is suppressed. */\r\n protected _ssrMaxRoughness: number;\r\n /** @internal SSR roughness factor scaling. */\r\n protected _ssrRoughnessFactor: number;\r\n /** @internal SSR stride for ray marching. */\r\n protected _ssrStride: number;\r\n /** @internal Whether SSR thickness is computed automatically. */\r\n protected _ssrCalcThickness: boolean;\r\n /** @internal SSR blur scale. */\r\n protected _ssrBlurriness: number;\r\n /** @internal SSR blur depth cutoff. */\r\n protected _ssrBlurDepthCutoff: number;\r\n /** @internal SSR blur kernel size. */\r\n protected _ssrBlurKernelSize: number;\r\n /** @internal SSR Gaussian blur standard deviation. */\r\n protected _ssrBlurStdDev: number;\r\n /** @internal Whether SSR temporal accumulation is enabled. */\r\n protected _ssrTemporal: boolean;\r\n /** @internal SSR temporal blending weight in [0, 1]. */\r\n protected _ssrTemporalWeight: number;\r\n /** @internal SSGI enable flag (via post effect). */\r\n protected _SSGI: boolean;\r\n /** @internal SSGI post effect reference. */\r\n protected _postEffectSSGI: DRef<SSGI>;\r\n /** @internal SSGI quality preset. */\r\n protected _ssgiQualityPreset: SSGIQualityPreset;\r\n /** @internal Resolved SSGI trace/denoise settings. */\r\n protected _ssgiResolvedSettings: SSGIResolvedSettings;\r\n /** @internal SSGI irradiance composite strength. */\r\n protected _ssgiIntensity: number;\r\n /** @internal Strength of the ambient occlusion traced alongside SSGI. */\r\n protected _ssgiAOIntensity: number;\r\n /** @internal Contrast curve of the SSGI ambient occlusion. */\r\n protected _ssgiAOPower: number;\r\n /** @internal Fraction of environment irradiance removed by an occluding hit. */\r\n protected _ssgiSkyOcclusion: number;\r\n /** @internal Maximum view-space ray distance. */\r\n protected _ssgiMaxDistance: number;\r\n /** @internal Ray hit thickness. */\r\n protected _ssgiThickness: number;\r\n /** @internal Linear trace stride. */\r\n protected _ssgiStride: number;\r\n /** @internal Firefly clamp applied to sampled radiance. */\r\n protected _ssgiMaxRayIntensity: number;\r\n /** @internal Whether SSGI temporal accumulation is enabled. */\r\n protected _ssgiTemporal: boolean;\r\n /** @internal Weight of valid reprojected irradiance. */\r\n protected _ssgiTemporalWeight: number;\r\n /** @internal Maximum linear-depth delta in scene units accepted by reprojection. */\r\n protected _ssgiDepthReject: number;\r\n /** @internal Minimum normal dot product accepted by reprojection. */\r\n protected _ssgiNormalReject: number;\r\n /** @internal SSS enable flag (via post effect). */\r\n protected _SSS: boolean;\r\n /** @internal SSS post effect reference. */\r\n protected _postEffectSSS: DRef<SSS>;\r\n /** @internal SSS blur scale in pixels per authored width unit. */\r\n protected _sssBlurScale: number;\r\n /** @internal High-level preset that resolves SSS blur quality controls. */\r\n protected _sssQualityPreset: SSSQualityPreset;\r\n /** @internal SSS composite strength. */\r\n protected _sssStrength: number;\r\n /** @internal SSS thin-shell transmission strength. */\r\n protected _sssTransmissionStrength: number;\r\n /** @internal SSS thin-shell transmission exponent. */\r\n protected _sssTransmissionPower: number;\r\n /** @internal SSS multi-scatter energy compensation. */\r\n protected _sssMultiScatter: number;\r\n /** @internal Cached runtime SSS settings after applying the quality preset. */\r\n protected _sssResolvedSettings: SSSResolvedSettings;\r\n /** @internal SSS debug visualization mode. */\r\n protected _sssDebugView: SSSDebugView;\r\n /** @internal Skin SSS enable flag (via post effect). */\r\n protected _skinSSS: boolean;\r\n /** @internal Skin SSS post effect reference. */\r\n protected _postEffectSkinSSS: DRef<SkinSSS>;\r\n /** @internal Skin SSS final blend strength. */\r\n protected _skinSSSStrength: number;\r\n /** @internal Skin SSS mask opacity bias. */\r\n protected _skinSSSOpacity: number;\r\n /** @internal Skin SSS blur tap spacing in pixels. */\r\n protected _skinSSSSampleStep: number;\r\n /** @internal Skin SSS depth rejection scale. */\r\n protected _skinSSSDepthScale: number;\r\n /** @internal Skin SSS blurred multiplier boost. */\r\n protected _skinSSSColorBoost: number;\r\n /** @internal SSAO enable flag (via post effect). */\r\n protected _SSAO: boolean;\r\n /** @internal SSAO post effect reference. */\r\n protected _postEffectSSAO: DRef<SAO>;\r\n /** @internal SSAO scale (sampling radius multiplier). */\r\n protected _SSAOScale: number;\r\n /** @internal SSAO bias (self-shadowing reduction). */\r\n protected _SSAOBias: number;\r\n /** @internal SSAO sample radius. */\r\n protected _SSAORadius: number;\r\n /** @internal SSAO intensity. */\r\n protected _SSAOIntensity: number;\r\n /** @internal SSAO blur depth cutoff. */\r\n protected _SSAOBlurDepthCutoff: number;\r\n\r\n /** @internal Pending GPU-pick promise (one-shot). */\r\n protected _pickResultPromise: Nullable<Promise<Nullable<PickResult>>>;\r\n /** @internal Resolver for the pending pick promise. */\r\n protected _pickResultResolve: Nullable<(result: Nullable<PickResult>) => void>;\r\n /** @internal Last pick X position (viewport-relative). */\r\n protected _pickPosX: number;\r\n /** @internal Last pick Y position (viewport-relative). */\r\n protected _pickPosY: number;\r\n /** @internal Last resolved pick result (optional cache). */\r\n protected _pickResult: Nullable<PickResult>;\r\n\r\n /** @internal Current jitter value in clip space (x, y). */\r\n protected _jitterValue: Vector2;\r\n /** @internal Previous frame’s jitter value. */\r\n protected _prevJitterValue: Nullable<Vector2>;\r\n /** @internal Current jittered VP matrix. */\r\n protected _jitteredVPMatrix: Matrix4x4;\r\n /** @internal Inverse of the current jittered VP matrix. */\r\n protected _jitteredInvVPMatrix: Matrix4x4;\r\n /** @internal Previous frame’s non-jittered VP matrix. */\r\n protected _prevVPMatrix: Nullable<Matrix4x4>;\r\n /** @internal Previous frame’s camera world position. */\r\n protected _prevPosition: Nullable<Vector3>;\r\n /** @internal Previous frame’s jittered VP matrix. */\r\n protected _prevJitteredVPMatrix: Nullable<Matrix4x4>;\r\n /** @internal Post-processing compositor attached to this camera. */\r\n protected _compositor: Compositor;\r\n /** @internal Pointer interaction rectangle in css pixels (relative to canvas) */\r\n protected _interactionRect: Nullable<[left: number, top: number, width: number, height: number]>;\r\n /** @internal captured by which mouse button (-1 if not captured) */\r\n protected _capturedButton: number;\r\n /**\r\n * Creates a new camera node.\r\n *\r\n * Initializes projection/view matrices, temporal fields, controller linkage, and\r\n * builds the default post-processing pipeline on the internal compositor.\r\n *\r\n * @param scene - The scene that owns this camera.\r\n * @param projectionMatrix - Optional projection matrix to initialize with.\r\n */\r\n constructor(scene: Nullable<Scene>, projectionMatrix?: Matrix4x4) {\r\n super(scene);\r\n this._projMatrix = projectionMatrix || Matrix4x4.identity();\r\n this._invProjMatrix = Matrix4x4.invert(this._projMatrix);\r\n this._viewMatrix = Matrix4x4.identity();\r\n this._viewProjMatrix = Matrix4x4.identity();\r\n this._invViewProjMatrix = Matrix4x4.identity();\r\n this._clipPlane = null;\r\n this._clearColor = new Vector4(0, 0, 0, 1);\r\n this._clearDepth = DEPTH_CLEAR_VALUE;\r\n this._clearStencil = 0;\r\n this._dirty = true;\r\n this._controller = null;\r\n this._viewport = null;\r\n this._adaptedViewport = null;\r\n this._adaptedRelativeViewport = null;\r\n this._adaptedVersion = 0;\r\n this._scissor = null;\r\n this._clipMask = 0;\r\n this._frustum = null;\r\n this._frustumV = null;\r\n this._oit = new DRef();\r\n this._oitMode = 'none';\r\n this._oitABufferLayers = 20;\r\n this._oitDualDepthPeels = 8;\r\n this._depthPrePass = false;\r\n this._renderPath = 'forward';\r\n this._screenAdapter = new ScreenAdapter();\r\n this._adapted = false;\r\n this._HiZ = false;\r\n this._screenSpaceShadowMask = true;\r\n this._HDR = true;\r\n this._toneMap = true;\r\n this._postEffectTonemap = new DRef();\r\n this._tonemapExposure = 1;\r\n this._aperture = 16;\r\n this._shutterSpeed = 1 / 125;\r\n this._ISO = 100;\r\n this._exposureCompensation = 0;\r\n this._postProcessingLightingMode = null;\r\n this._motionBlur = false;\r\n this._postEffectMotionBlur = new DRef();\r\n this._motionBlurStrength = 1;\r\n this._bloom = false;\r\n this._postEffectBloom = new DRef();\r\n this._bloomMaxDownsampleLevels = 4;\r\n this._bloomDownsampleLimit = 32;\r\n this._bloomThreshold = 0.8;\r\n this._bloomThresholdKnee = 0;\r\n this._bloomIntensity = 1;\r\n this._colorAdjustEnabled = false;\r\n this._postEffectColorAdjust = new DRef();\r\n this._colorAdjustSaturation = 1;\r\n this._colorAdjustContrast = 1;\r\n this._colorAdjustHue = 0;\r\n this._colorAdjustSharpen = 0;\r\n this._FXAA = false;\r\n this._postEffectFXAA = new DRef();\r\n this._TAA = false;\r\n this._postEffectTAA = new DRef();\r\n this._TAADebug = 0;\r\n this._shadowDebugCascades = false;\r\n this._SSR = false;\r\n this._postEffectSSR = new DRef();\r\n this._ssrParams = new Vector4(64, 96, 0.9, 0);\r\n this._ssrMaxRoughness = 0.55;\r\n this._ssrRoughnessFactor = 1;\r\n this._ssrStride = 1;\r\n this._ssrCalcThickness = false;\r\n this._ssrBlurriness = 0.008;\r\n this._ssrBlurDepthCutoff = 2;\r\n this._ssrBlurKernelSize = 5;\r\n this._ssrBlurStdDev = 4;\r\n this._ssrTemporal = true;\r\n this._ssrTemporalWeight = 0.85;\r\n this._SSGI = false;\r\n this._postEffectSSGI = new DRef();\r\n this._ssgiQualityPreset = 'quality';\r\n const defaultSSGIQualityPreset = SSGI_QUALITY_PRESET_SETTINGS.quality;\r\n this._ssgiResolvedSettings = { ...defaultSSGIQualityPreset };\r\n this._ssgiIntensity = 0.7;\r\n this._ssgiAOIntensity = 0.8;\r\n this._ssgiAOPower = 1;\r\n this._ssgiSkyOcclusion = 1;\r\n this._ssgiMaxDistance = 32;\r\n this._ssgiThickness = 0.5;\r\n this._ssgiStride = 1;\r\n this._ssgiMaxRayIntensity = 10;\r\n this._ssgiTemporal = true;\r\n this._ssgiTemporalWeight = 0.94;\r\n this._ssgiDepthReject = 0.5;\r\n this._ssgiNormalReject = 0.75;\r\n this._SSS = false;\r\n this._postEffectSSS = new DRef();\r\n this._sssBlurScale = SSS_DEFAULT_SETTINGS.blurScale;\r\n this._sssQualityPreset = 'balanced';\r\n this._sssStrength = SSS_DEFAULT_SETTINGS.strength;\r\n this._sssTransmissionStrength = SSS_DEFAULT_SETTINGS.transmissionStrength;\r\n this._sssTransmissionPower = SSS_DEFAULT_SETTINGS.transmissionPower;\r\n this._sssMultiScatter = SSS_DEFAULT_SETTINGS.multiScatter;\r\n const defaultSSSQualityPreset = SSS_QUALITY_PRESET_SETTINGS.balanced;\r\n this._sssResolvedSettings = {\r\n halfRes: defaultSSSQualityPreset.halfRes,\r\n blurKernelSize: defaultSSSQualityPreset.blurKernelSize,\r\n blurStdDev: defaultSSSQualityPreset.blurStdDev,\r\n blurDepthCutoff: defaultSSSQualityPreset.blurDepthCutoff,\r\n normalCutoff: defaultSSSQualityPreset.normalCutoff\r\n };\r\n this.updateSSSResolvedSettings();\r\n this._sssDebugView = 'none';\r\n this._skinSSS = false;\r\n this._postEffectSkinSSS = new DRef();\r\n this._skinSSSStrength = 1;\r\n this._skinSSSOpacity = 0.18;\r\n this._skinSSSSampleStep = 2;\r\n this._skinSSSDepthScale = 80;\r\n this._skinSSSColorBoost = 1;\r\n this._SSAO = false;\r\n this._postEffectSSAO = new DRef();\r\n this._SSAOScale = 10;\r\n this._SSAOBias = 1;\r\n this._SSAOIntensity = 0.025;\r\n this._SSAORadius = 100;\r\n this._SSAOBlurDepthCutoff = 2;\r\n this._pickResult = null;\r\n this._commandBufferReuse = true;\r\n this._jitteredVPMatrix = new Matrix4x4();\r\n this._jitteredInvVPMatrix = new Matrix4x4();\r\n this._jitterValue = new Vector2(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n this._pickPosX = 0;\r\n this._pickPosY = 0;\r\n this._compositor = new Compositor();\r\n this._capturedButton = -1;\r\n this._interactionRect = null;\r\n this.updatePostProcessing();\r\n if (scene && !scene.mainCamera) {\r\n scene.mainCamera = this;\r\n }\r\n }\r\n /**\r\n * The compositor that owns and runs the camera's post-processing chain.\r\n */\r\n get compositor() {\r\n return this._compositor;\r\n }\r\n /**\r\n * Pointer interaction rectangle in css pixels (relative to canvas)\r\n */\r\n get interactionRect() {\r\n return this._interactionRect;\r\n }\r\n set interactionRect(rect) {\r\n this._interactionRect = rect;\r\n }\r\n /**\r\n * Framebuffer clear color, or `null` to disable.\r\n */\r\n get clearColor() {\r\n return this._clearColor;\r\n }\r\n set clearColor(v) {\r\n this._clearColor = v?.clone() ?? null;\r\n }\r\n /**\r\n * Framebuffer stencil clear value, disabled when null. Default is 0.\r\n */\r\n get clearDepth() {\r\n return this._clearDepth;\r\n }\r\n set clearDepth(v) {\r\n this._clearDepth = v;\r\n }\r\n /**\r\n * Framebuffer stencil clear value, disabled when null. Default is 0.\r\n */\r\n get clearStencil() {\r\n return this._clearStencil;\r\n }\r\n set clearStencil(v) {\r\n this._clearStencil = v;\r\n }\r\n /**\r\n * Whether Hi-Z acceleration is enabled.\r\n *\r\n * Often improves SSR performance with little quality impact when supported.\r\n */\r\n get HiZ() {\r\n return this._HiZ;\r\n }\r\n set HiZ(val) {\r\n this._HiZ = !!val;\r\n }\r\n /**\r\n * Whether the screen-space shadow mask is enabled.\r\n *\r\n * When enabled, shadow-casting lights are lit through the clustered pass and\r\n * sample a pre-rendered screen-space shadow mask instead of each casting an\r\n * additional full-scene additive light pass. Requires the depth prepass\r\n * (always on in Forward+).\r\n */\r\n get screenSpaceShadowMask() {\r\n return this._screenSpaceShadowMask;\r\n }\r\n set screenSpaceShadowMask(val) {\r\n this._screenSpaceShadowMask = !!val;\r\n }\r\n /**\r\n * Render path used by the scene renderer.\r\n */\r\n get renderPath() {\r\n return this._renderPath;\r\n }\r\n set renderPath(_val: RenderPath) {\r\n this._renderPath = 'forward';\r\n }\r\n /**\r\n * Whether HDR backbuffer is enabled.\r\n *\r\n * Tonemap should be disabled when not using HDR backbuffer.\r\n */\r\n get HDR() {\r\n return this._HDR;\r\n }\r\n set HDR(val) {\r\n this._HDR = !!val;\r\n }\r\n /**\r\n * Whether tonemapping is enabled via the post effect.\r\n */\r\n get toneMap() {\r\n return this._postEffectTonemap.get()!.enabled;\r\n }\r\n set toneMap(val) {\r\n this._postEffectTonemap.get()!.enabled = !!val;\r\n }\r\n /**\r\n * Whether motion blur is enabled via the post effect.\r\n */\r\n get motionBlur() {\r\n return this._postEffectMotionBlur.get()!.enabled;\r\n }\r\n set motionBlur(val) {\r\n this._postEffectMotionBlur.get()!.enabled = !!val;\r\n }\r\n /** Motion blur strength */\r\n get motionBlurStrength() {\r\n return this._motionBlurStrength;\r\n }\r\n set motionBlurStrength(val) {\r\n this._motionBlurStrength = val;\r\n if (this._postEffectMotionBlur.get()) {\r\n this._postEffectMotionBlur.get()!.strength = this._motionBlurStrength;\r\n }\r\n }\r\n /**\r\n * Gets whether Bloom is enabled.\r\n */\r\n get bloom() {\r\n return this._postEffectBloom.get()!.enabled;\r\n }\r\n set bloom(val) {\r\n this._postEffectBloom.get()!.enabled = !!val;\r\n }\r\n /**\r\n * Maximum bloom downsample levels\r\n */\r\n get bloomMaxDownsampleLevels() {\r\n return this._bloomMaxDownsampleLevels;\r\n }\r\n set bloomMaxDownsampleLevels(val) {\r\n this._bloomMaxDownsampleLevels = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.maxDownsampleLevel = val;\r\n }\r\n }\r\n /**\r\n * Bloom downsample limit\r\n */\r\n get bloomDownsampleLimit() {\r\n return this._bloomDownsampleLimit;\r\n }\r\n set bloomDownsampleLimit(val) {\r\n this._bloomDownsampleLimit = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.downsampleLimit = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold\r\n */\r\n get bloomThreshold() {\r\n return this._bloomThreshold;\r\n }\r\n set bloomThreshold(val) {\r\n this._bloomThreshold = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.threshold = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold knee\r\n */\r\n get bloomThresholdKnee() {\r\n return this._bloomThresholdKnee;\r\n }\r\n set bloomThresholdKnee(val) {\r\n this._bloomThresholdKnee = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.thresholdKnee = val;\r\n }\r\n }\r\n /**\r\n * Bloom intensity\r\n */\r\n get bloomIntensity() {\r\n return this._bloomIntensity;\r\n }\r\n set bloomIntensity(val) {\r\n this._bloomIntensity = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.intensity = val;\r\n }\r\n }\r\n /** Whether color adjustment is enabled. */\r\n get colorAdjust() {\r\n return this._postEffectColorAdjust.get()!.enabled;\r\n }\r\n set colorAdjust(val) {\r\n this._postEffectColorAdjust.get()!.enabled = !!val;\r\n }\r\n /** Color adjustment saturation, 1 means unchanged. */\r\n get colorAdjustSaturation() {\r\n return this._colorAdjustSaturation;\r\n }\r\n set colorAdjustSaturation(val) {\r\n this._colorAdjustSaturation = val;\r\n if (this._postEffectColorAdjust.get()) {\r\n this._postEffectColorAdjust.get()!.saturation = val;\r\n }\r\n }\r\n /** Color adjustment contrast, 1 means unchanged. */\r\n get colorAdjustContrast() {\r\n return this._colorAdjustContrast;\r\n }\r\n set colorAdjustContrast(val) {\r\n this._colorAdjustContrast = val;\r\n if (this._postEffectColorAdjust.get()) {\r\n this._postEffectColorAdjust.get()!.contrast = val;\r\n }\r\n }\r\n /** Color adjustment hue in degrees. */\r\n get colorAdjustHue() {\r\n return this._colorAdjustHue;\r\n }\r\n set colorAdjustHue(val) {\r\n this._colorAdjustHue = val;\r\n if (this._postEffectColorAdjust.get()) {\r\n this._postEffectColorAdjust.get()!.hue = val;\r\n }\r\n }\r\n /** Color adjustment sharpen amount, 0 means disabled. */\r\n get colorAdjustSharpen() {\r\n return this._colorAdjustSharpen;\r\n }\r\n set colorAdjustSharpen(val) {\r\n this._colorAdjustSharpen = val;\r\n if (this._postEffectColorAdjust.get()) {\r\n this._postEffectColorAdjust.get()!.sharpen = val;\r\n }\r\n }\r\n /**\r\n * Gets whether FXAA is enabled.\r\n */\r\n get FXAA() {\r\n return this._postEffectFXAA.get()!.enabled;\r\n }\r\n set FXAA(val) {\r\n this._postEffectFXAA.get()!.enabled = !!val;\r\n }\r\n /**\r\n * Tonemap exposure\r\n */\r\n get toneMapExposure() {\r\n return this._tonemapExposure;\r\n }\r\n set toneMapExposure(val) {\r\n // syncPostProcessingMode() re-uploads the resolved exposure every frame, so this only needs to\r\n // record the authored value. Legacy scenes read it back verbatim; physical scenes ignore it.\r\n this._tonemapExposure = val;\r\n }\r\n /** Lens aperture as an f-number. */\r\n get aperture() {\r\n return this._aperture;\r\n }\r\n set aperture(val: number) {\r\n this._aperture = Math.max(0.0001, val);\r\n }\r\n /** Shutter-open time in seconds. */\r\n get shutterSpeed() {\r\n return this._shutterSpeed;\r\n }\r\n set shutterSpeed(val: number) {\r\n this._shutterSpeed = Math.max(0.000001, val);\r\n }\r\n /** Sensor sensitivity in ISO units. */\r\n get ISO() {\r\n return this._ISO;\r\n }\r\n set ISO(val: number) {\r\n this._ISO = Math.max(0.0001, val);\r\n }\r\n /** Exposure compensation in stops (EV). */\r\n get exposureCompensation() {\r\n return this._exposureCompensation;\r\n }\r\n set exposureCompensation(val: number) {\r\n this._exposureCompensation = val;\r\n }\r\n /** Photographic EV100 calculated from aperture, shutter time and ISO. */\r\n get EV100() {\r\n return calculateEV100(this._aperture, this._shutterSpeed, this._ISO);\r\n }\r\n /** Scene-linear physical exposure multiplier, including exposure compensation. */\r\n get exposure() {\r\n return calculatePhysicalExposure(\r\n this._aperture,\r\n this._shutterSpeed,\r\n this._ISO,\r\n this._exposureCompensation\r\n );\r\n }\r\n /**\r\n * Gets whether TAA is enabled.\r\n */\r\n get TAA() {\r\n return this._postEffectTAA.get()!.enabled;\r\n }\r\n set TAA(val) {\r\n this._postEffectTAA.get()!.enabled = !!val;\r\n }\r\n /**\r\n * Gets the debug flag for TAA\r\n */\r\n get TAADebug() {\r\n return this._TAADebug;\r\n }\r\n set TAADebug(val) {\r\n this._TAADebug = val;\r\n }\r\n /**\r\n * Enables cascade debug visualization for directional shadows.\r\n */\r\n get shadowDebugCascades() {\r\n return this._shadowDebugCascades;\r\n }\r\n set shadowDebugCascades(val) {\r\n this._shadowDebugCascades = !!val;\r\n }\r\n /**\r\n * Gets whether Screen Space Reflections (SSR) is enabled.\r\n */\r\n get SSR() {\r\n return this._postEffectSSR.get()!.enabled;\r\n }\r\n set SSR(val) {\r\n this._postEffectSSR.get()!.enabled = !!val;\r\n }\r\n /** Gets whether Screen Space Global Illumination is enabled for this camera. */\r\n get SSGI() {\r\n return this._postEffectSSGI.get()!.enabled;\r\n }\r\n set SSGI(val) {\r\n const next = !!val;\r\n if (next !== this._postEffectSSGI.get()!.enabled) {\r\n this._postEffectSSGI.get()!.enabled = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** High-level SSGI trace and denoise quality preset. */\r\n get ssgiQualityPreset() {\r\n return this._ssgiQualityPreset;\r\n }\r\n set ssgiQualityPreset(val: SSGIQualityPreset) {\r\n const next = Camera.resolveSSGIQualityPreset(val);\r\n if (next !== this._ssgiQualityPreset) {\r\n this._ssgiQualityPreset = next;\r\n if (next !== 'custom') {\r\n this._ssgiResolvedSettings = { ...SSGI_QUALITY_PRESET_SETTINGS[next] };\r\n }\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Resolved trace and denoise settings for the current SSGI preset. */\r\n get ssgiResolvedSettings(): Readonly<SSGIResolvedSettings> {\r\n return this._ssgiResolvedSettings;\r\n }\r\n /** Whether the custom SSGI trace runs at half resolution. */\r\n get ssgiHalfResolution() {\r\n return this._ssgiResolvedSettings.halfRes;\r\n }\r\n set ssgiHalfResolution(val) {\r\n this.updateSSGICustomSettings({ halfRes: !!val });\r\n }\r\n /** Number of diffuse rays traced per pixel by the custom SSGI preset. */\r\n get ssgiRaysPerPixel() {\r\n return this._ssgiResolvedSettings.raysPerPixel;\r\n }\r\n set ssgiRaysPerPixel(val) {\r\n this.updateSSGICustomSettings({\r\n raysPerPixel: Math.max(1, Math.min(4, Math.round(val ?? 1)))\r\n });\r\n }\r\n /** Maximum screen-space ray-march iterations used by the custom SSGI preset. */\r\n get ssgiMaxSteps() {\r\n return this._ssgiResolvedSettings.maxSteps;\r\n }\r\n set ssgiMaxSteps(val) {\r\n this.updateSSGICustomSettings({\r\n maxSteps: Math.max(1, Math.min(256, Math.round(val ?? 1)))\r\n });\r\n }\r\n /** Number of cross-bilateral a-trous passes used by the custom SSGI preset. */\r\n get ssgiDenoisePasses() {\r\n return this._ssgiResolvedSettings.denoisePasses;\r\n }\r\n set ssgiDenoisePasses(val) {\r\n this.updateSSGICustomSettings({\r\n denoisePasses: Math.max(0, Math.min(5, Math.round(val ?? 0)))\r\n });\r\n }\r\n /** SSGI diffuse irradiance multiplier. */\r\n get ssgiIntensity() {\r\n return this._ssgiIntensity;\r\n }\r\n set ssgiIntensity(val) {\r\n const next = Math.max(0, val ?? 0);\r\n if (next !== this._ssgiIntensity) {\r\n this._ssgiIntensity = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /**\r\n * How much environment irradiance an occluding hit removes, in [0, 1].\r\n *\r\n * A screen-space ray that hits geometry blocks the sky for that direction. At 1\r\n * the environment contribution is removed in full, which is what produces sky\r\n * occlusion in interiors and corners; lower values dim the sky less than the\r\n * geometry implies, for art direction or to compensate for the hemisphere a\r\n * screen-space trace cannot see. Only the removal is scaled — bounce light\r\n * measured at the hit is always kept, so lowering this brightens without ever\r\n * discarding indirect light. {@link Camera.ssgiIntensity} still bounds how dark\r\n * the result can get, so full occlusion also needs an intensity of 1.\r\n */\r\n get ssgiSkyOcclusion() {\r\n return this._ssgiSkyOcclusion;\r\n }\r\n set ssgiSkyOcclusion(val) {\r\n const next = Math.max(0, Math.min(1, val ?? 0));\r\n if (next !== this._ssgiSkyOcclusion) {\r\n this._ssgiSkyOcclusion = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /**\r\n * How strongly the ambient occlusion traced alongside SSGI darkens the scene,\r\n * in [0, 1]. 0 disables the composite entirely.\r\n *\r\n * The occlusion comes from the same rays that produce the irradiance, at no\r\n * extra trace cost, and is multiplied into the final opaque color — the same\r\n * semantics the standalone {@link SAO} post effect applies. **Enabling both at\r\n * once therefore darkens twice.** Its range is the SSGI trace range\r\n * ({@link Camera.ssgiMaxDistance}), so this is long-range occlusion rather than\r\n * the small-radius contact darkening a dedicated AO pass produces.\r\n *\r\n * Defaults to 0.8 rather than 1: SSGI irradiance already has sky occlusion\r\n * subtracted, so diffuse is partly occluded before this multiply is applied.\r\n */\r\n get ssgiAOIntensity() {\r\n return this._ssgiAOIntensity;\r\n }\r\n set ssgiAOIntensity(val) {\r\n this._ssgiAOIntensity = Math.max(0, Math.min(1, val ?? 0));\r\n }\r\n /**\r\n * Contrast curve applied to the SSGI ambient occlusion before it is composited.\r\n *\r\n * Values above 1 deepen the occluded regions, below 1 lift them. Purely an art\r\n * direction control on an already-traced quantity.\r\n */\r\n get ssgiAOPower() {\r\n return this._ssgiAOPower;\r\n }\r\n set ssgiAOPower(val) {\r\n this._ssgiAOPower = Math.max(0.01, val ?? 1);\r\n }\r\n /** Maximum SSGI ray length in view-space units. */\r\n get ssgiMaxDistance() {\r\n return this._ssgiMaxDistance;\r\n }\r\n set ssgiMaxDistance(val) {\r\n const next = Math.max(0, val ?? 0);\r\n if (next !== this._ssgiMaxDistance) {\r\n this._ssgiMaxDistance = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Depth thickness used by screen-space ray intersection tests. */\r\n get ssgiThickness() {\r\n return this._ssgiThickness;\r\n }\r\n set ssgiThickness(val) {\r\n const next = Math.max(0.0001, val ?? 0.0001);\r\n if (next !== this._ssgiThickness) {\r\n this._ssgiThickness = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Pixel stride used by the WebGL linear ray marcher. */\r\n get ssgiStride() {\r\n return this._ssgiStride;\r\n }\r\n set ssgiStride(val) {\r\n const next = Math.max(1, Math.round(val ?? 1));\r\n if (next !== this._ssgiStride) {\r\n this._ssgiStride = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Maximum per-ray radiance before temporal accumulation (firefly clamp). */\r\n get ssgiMaxRayIntensity() {\r\n return this._ssgiMaxRayIntensity;\r\n }\r\n set ssgiMaxRayIntensity(val) {\r\n const next = Math.max(0, val ?? 0);\r\n if (next !== this._ssgiMaxRayIntensity) {\r\n this._ssgiMaxRayIntensity = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Whether WebGPU SSGI temporal accumulation is enabled. */\r\n get ssgiTemporal() {\r\n return this._ssgiTemporal;\r\n }\r\n set ssgiTemporal(val) {\r\n const next = !!val;\r\n if (next !== this._ssgiTemporal) {\r\n this._ssgiTemporal = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Weight assigned to valid reprojected SSGI history. */\r\n get ssgiTemporalWeight() {\r\n return this._ssgiTemporalWeight;\r\n }\r\n set ssgiTemporalWeight(val) {\r\n this._ssgiTemporalWeight = Math.max(0, Math.min(1, val ?? 0));\r\n }\r\n /** Relative linear-depth rejection threshold for SSGI reprojection. */\r\n get ssgiDepthReject() {\r\n return this._ssgiDepthReject;\r\n }\r\n set ssgiDepthReject(val) {\r\n this._ssgiDepthReject = Math.max(0, val ?? 0);\r\n }\r\n /** Minimum world-normal dot product accepted by SSGI reprojection. */\r\n get ssgiNormalReject() {\r\n return this._ssgiNormalReject;\r\n }\r\n set ssgiNormalReject(val) {\r\n this._ssgiNormalReject = Math.max(-1, Math.min(1, val ?? 0));\r\n }\r\n /**\r\n * Gets the maximum roughness value for screen space reflections.\r\n * Controls the cutoff point where surfaces are considered too rough for SSR.\r\n */\r\n get ssrMaxRoughness() {\r\n return this._ssrMaxRoughness;\r\n }\r\n set ssrMaxRoughness(val) {\r\n this._ssrMaxRoughness = val;\r\n }\r\n /**\r\n * Gets the roughness factor for SSR calculations.\r\n * Affects how surface roughness influences reflection clarity.\r\n */\r\n get ssrRoughnessFactor() {\r\n return this._ssrRoughnessFactor;\r\n }\r\n set ssrRoughnessFactor(val) {\r\n this._ssrRoughnessFactor = val;\r\n }\r\n /**\r\n * Gets the stride value for SSR ray marching.\r\n * Controls the step size during ray marching. Larger values improve performance but may miss details.\r\n */\r\n get ssrStride() {\r\n return this._ssrStride;\r\n }\r\n set ssrStride(val) {\r\n this._ssrStride = val;\r\n }\r\n /**\r\n * Gets the maximum distance for SSR ray marching.\r\n * Defines how far rays will travel when searching for reflection intersections.\r\n */\r\n get ssrMaxDistance() {\r\n return this._ssrParams.x;\r\n }\r\n set ssrMaxDistance(val) {\r\n this._ssrParams.x = val;\r\n }\r\n /**\r\n * Gets the number of iterations for SSR ray marching.\r\n * Higher values provide more accurate reflections but impact performance.\r\n */\r\n get ssrIterations() {\r\n return this._ssrParams.y;\r\n }\r\n set ssrIterations(val) {\r\n this._ssrParams.y = val;\r\n }\r\n /**\r\n * Gets the thickness value for SSR calculations.\r\n * Determines the thickness threshold for surfaces when calculating reflections.\r\n */\r\n get ssrThickness() {\r\n return this._ssrParams.z;\r\n }\r\n set ssrThickness(val) {\r\n this._ssrParams.z = val;\r\n }\r\n /**\r\n * Gets whether SSR should calculate thickness automatically.\r\n * When enabled, the system will dynamically compute surface thickness for reflections.\r\n */\r\n get ssrCalcThickness() {\r\n return this._ssrCalcThickness;\r\n }\r\n set ssrCalcThickness(val) {\r\n this._ssrCalcThickness = !!val;\r\n }\r\n /**\r\n * Gets the blur scale factor for SSR.\r\n * Controls the overall intensity of the blur effect applied to reflections.\r\n */\r\n get ssrBlurScale() {\r\n return this._ssrBlurriness;\r\n }\r\n set ssrBlurScale(val) {\r\n this._ssrBlurriness = val;\r\n }\r\n /**\r\n * Gets the depth cutoff value for SSR blur.\r\n * Determines at what depth difference the blur effect should be reduced or eliminated.\r\n */\r\n get ssrBlurDepthCutoff() {\r\n return this._ssrBlurDepthCutoff;\r\n }\r\n set ssrBlurDepthCutoff(val) {\r\n this._ssrBlurDepthCutoff = val;\r\n }\r\n /**\r\n * Gets the kernel size for the SSR blur effect.\r\n * Defines the size of the blur kernel. Larger values create softer, more spread-out blur.\r\n */\r\n get ssrBlurKernelSize() {\r\n return this._ssrBlurKernelSize;\r\n }\r\n set ssrBlurKernelSize(val) {\r\n this._ssrBlurKernelSize = val;\r\n }\r\n /**\r\n * Gets the standard deviation for the SSR Gaussian blur.\r\n * Controls the distribution of the blur effect. Higher values create more pronounced blur.\r\n */\r\n get ssrBlurStdDev() {\r\n return this._ssrBlurStdDev;\r\n }\r\n set ssrBlurStdDev(val) {\r\n this._ssrBlurStdDev = val;\r\n }\r\n /**\r\n * Gets whether SSR temporal accumulation is enabled.\r\n */\r\n get ssrTemporal() {\r\n return this._ssrTemporal;\r\n }\r\n set ssrTemporal(val) {\r\n this._ssrTemporal = !!val;\r\n }\r\n /**\r\n * Gets SSR temporal blending weight in [0, 1].\r\n * Higher values rely more on reprojected history.\r\n */\r\n get ssrTemporalWeight() {\r\n return this._ssrTemporalWeight;\r\n }\r\n set ssrTemporalWeight(val) {\r\n this._ssrTemporalWeight = Math.max(0, Math.min(1, val ?? 0));\r\n }\r\n /**\r\n * Gets whether Screen Space Subsurface Scattering (SSS) is enabled.\r\n */\r\n get SSS() {\r\n return this._postEffectSSS.get()!.enabled;\r\n }\r\n set SSS(val) {\r\n this._postEffectSSS.get()!.enabled = !!val;\r\n }\r\n /** Global blur scale for screen-space SSS. */\r\n get sssBlurScale() {\r\n return this._sssBlurScale;\r\n }\r\n set sssBlurScale(val) {\r\n this._sssBlurScale = Math.max(0, val ?? 0);\r\n }\r\n /**\r\n * High-level quality preset for SSS blur controls.\r\n *\r\n * This is the primary user-facing SSS quality control and only affects\r\n * the blur sampling quality/performance tradeoff, not the authored look.\r\n */\r\n get sssQualityPreset() {\r\n return this._sssQualityPreset;\r\n }\r\n set sssQualityPreset(val: SSSQualityPreset) {\r\n const next = Camera.resolveSSSQualityPreset(val);\r\n if (next !== this._sssQualityPreset) {\r\n this._sssQualityPreset = next;\r\n this.updateSSSResolvedSettings();\r\n }\r\n }\r\n /** Final SSS composite strength. */\r\n get sssStrength() {\r\n return this._sssStrength;\r\n }\r\n set sssStrength(val) {\r\n this._sssStrength = Math.max(0, val ?? 0);\r\n }\r\n /** Thin-shell transmission strength. */\r\n get sssTransmissionStrength() {\r\n return this._sssTransmissionStrength;\r\n }\r\n set sssTransmissionStrength(val) {\r\n this._sssTransmissionStrength = Math.max(0, val ?? 0);\r\n }\r\n /** Thin-shell transmission exponent. */\r\n get sssTransmissionPower() {\r\n return this._sssTransmissionPower;\r\n }\r\n set sssTransmissionPower(val) {\r\n this._sssTransmissionPower = Math.max(0.1, val ?? 0.1);\r\n }\r\n /** Multi-scatter energy compensation factor. */\r\n get sssMultiScatter() {\r\n return this._sssMultiScatter;\r\n }\r\n set sssMultiScatter(val) {\r\n this._sssMultiScatter = Math.max(0, val ?? 0);\r\n }\r\n /** Resolved SSS blur settings after applying the quality preset. */\r\n get sssResolvedSettings(): Readonly<SSSResolvedSettings> {\r\n return this._sssResolvedSettings;\r\n }\r\n /** Debug visualization for screen-space SSS buffers. */\r\n get sssDebugView() {\r\n return this._sssDebugView;\r\n }\r\n set sssDebugView(val: SSSDebugView) {\r\n this._sssDebugView = val ?? 'none';\r\n }\r\n /** Gets whether the dedicated Skin SSS post effect is enabled. */\r\n get skinSSS() {\r\n return this._postEffectSkinSSS.get()!.enabled;\r\n }\r\n set skinSSS(val) {\r\n this._postEffectSkinSSS.get()!.enabled = !!val;\r\n }\r\n /** Final blend strength for the dedicated Skin SSS post effect. */\r\n get skinSSSStrength() {\r\n return this._skinSSSStrength;\r\n }\r\n set skinSSSStrength(val) {\r\n this._skinSSSStrength = Math.max(0, val ?? 0);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.strength = this._skinSSSStrength;\r\n }\r\n }\r\n /** Bias subtracted from the blurred skin mask before compositing. */\r\n get skinSSSOpacity() {\r\n return this._skinSSSOpacity;\r\n }\r\n set skinSSSOpacity(val) {\r\n this._skinSSSOpacity = Math.max(0, Math.min(1, val ?? 0));\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.opacity = this._skinSSSOpacity;\r\n }\r\n }\r\n /** Pixel spacing between blur taps. The reference shader uses 2. */\r\n get skinSSSSampleStep() {\r\n return this._skinSSSSampleStep;\r\n }\r\n set skinSSSSampleStep(val) {\r\n this._skinSSSSampleStep = Math.max(0.25, val ?? 0.25);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.sampleStep = this._skinSSSSampleStep;\r\n }\r\n }\r\n /** Depth rejection scale. The reference shader uses 80. */\r\n get skinSSSDepthScale() {\r\n return this._skinSSSDepthScale;\r\n }\r\n set skinSSSDepthScale(val) {\r\n this._skinSSSDepthScale = Math.max(0, val ?? 0);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.depthScale = this._skinSSSDepthScale;\r\n }\r\n }\r\n /** Multiplier applied to the blurred skin lighting multiplier before compositing. */\r\n get skinSSSColorBoost() {\r\n return this._skinSSSColorBoost;\r\n }\r\n set skinSSSColorBoost(val) {\r\n this._skinSSSColorBoost = Math.max(0, val ?? 0);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.colorBoost = this._skinSSSColorBoost;\r\n }\r\n }\r\n /** @internal */\r\n get ssrParams(): Immutable<Vector4> {\r\n return this._ssrParams;\r\n }\r\n /**\r\n * Gets whether SSAO is enabled.\r\n */\r\n get SSAO() {\r\n return this._postEffectSSAO.get()!.enabled;\r\n }\r\n set SSAO(val) {\r\n this._postEffectSSAO.get()!.enabled = !!val;\r\n }\r\n /** SSAO scale */\r\n get SSAOScale() {\r\n return this._SSAOScale;\r\n }\r\n set SSAOScale(val) {\r\n this._SSAOScale = val;\r\n if (this._postEffectSSAO.get()!) {\r\n this._postEffectSSAO.get()!.scale = val;\r\n }\r\n }\r\n /** SSAO bias */\r\n get SSAOBias() {\r\n return this._SSAOBias;\r\n }\r\n set SSAOBias(val) {\r\n this._SSAOBias = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get()!.bias = val;\r\n }\r\n }\r\n /** SSAO radius */\r\n get SSAORadius() {\r\n return this._SSAORadius;\r\n }\r\n set SSAORadius(val) {\r\n this._SSAORadius = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get()!.radius = val;\r\n }\r\n }\r\n /** SSAO intensity */\r\n get SSAOIntensity() {\r\n return this._SSAOIntensity;\r\n }\r\n set SSAOIntensity(val) {\r\n this._SSAOIntensity = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get()!.intensity = val;\r\n }\r\n }\r\n /** SSAO depth cutoff */\r\n get SSAOBlurDepthCutoff() {\r\n return this._SSAOBlurDepthCutoff;\r\n }\r\n set SSAOBlurDepthCutoff(val) {\r\n this._SSAOBlurDepthCutoff = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get()!.blurDepthCutoff = val;\r\n }\r\n }\r\n /** Whether to perform a depth pass */\r\n get depthPrePass() {\r\n return this._depthPrePass;\r\n }\r\n set depthPrePass(val) {\r\n this._depthPrePass = !!val;\r\n }\r\n /** Whether to allow command buffer reuse optimization */\r\n get commandBufferReuse() {\r\n return this._commandBufferReuse;\r\n }\r\n set commandBufferReuse(val) {\r\n this._commandBufferReuse = !!val;\r\n }\r\n /** Whether this camera is adapted to screen settins */\r\n get adapted() {\r\n return this._adapted;\r\n }\r\n set adapted(val) {\r\n if (val !== this._adapted) {\r\n this._adapted = !!val;\r\n this._adaptedViewport = null;\r\n this._adaptedRelativeViewport = null;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** OIT */\r\n get oit() {\r\n return this._oit.get();\r\n }\r\n set oit(val) {\r\n this._oit.set(val);\r\n const inferredMode = this.inferOITMode(val);\r\n if (inferredMode) {\r\n this._oitMode = inferredMode;\r\n }\r\n }\r\n /** OIT mode */\r\n get oitMode() {\r\n return this._oitMode;\r\n }\r\n set oitMode(val: CameraOITMode) {\r\n const mode = val ?? 'none';\r\n if (mode !== this._oitMode) {\r\n this._oitMode = mode;\r\n this._oit.set(this.createOITForMode(mode));\r\n }\r\n }\r\n /** ABuffer OIT layer budget. */\r\n get oitABufferLayers() {\r\n return this._oitABufferLayers;\r\n }\r\n set oitABufferLayers(val: number) {\r\n const layers = Math.max(1, Math.floor(val || 0));\r\n if (layers !== this._oitABufferLayers) {\r\n this._oitABufferLayers = layers;\r\n if (this._oitMode === 'abuffer') {\r\n this._oit.set(this.createOITForMode('abuffer'));\r\n }\r\n }\r\n }\r\n /** Dual depth peeling OIT peel iteration count. */\r\n get oitDualDepthPeels() {\r\n return this._oitDualDepthPeels;\r\n }\r\n set oitDualDepthPeels(val: number) {\r\n const peels = Math.max(1, Math.floor(val || 0));\r\n if (peels !== this._oitDualDepthPeels) {\r\n this._oitDualDepthPeels = peels;\r\n // Peel count only drives the per-frame pass loop, so update the live\r\n // instance in place instead of rebuilding it.\r\n const oit = this._oit.get();\r\n if (oit instanceof DualDepthPeelingOIT) {\r\n oit.numPeels = peels;\r\n }\r\n }\r\n }\r\n /** Clip plane mask */\r\n get clipMask() {\r\n return this._clipMask;\r\n }\r\n set clipMask(val) {\r\n this._clipMask = val;\r\n }\r\n /** Viewport used for rendering, if null, use full framebuffer size */\r\n get viewport(): Nullable<Immutable<number[]>> {\r\n if (this._adapted) {\r\n if (!this._adaptedViewport) {\r\n this._adaptedViewport = this.calcAdaptedViewport(this._adaptedViewport);\r\n }\r\n return this._adaptedViewport;\r\n }\r\n return this._viewport;\r\n }\r\n set viewport(rect: Nullable<Immutable<number[]>>) {\r\n this._viewport = rect?.slice() ?? null;\r\n }\r\n /** Scissor rectangle used for rendering, if null, use viewport value */\r\n get scissor(): Nullable<Immutable<number[]>> {\r\n return this._adapted ? this.viewport : this._scissor;\r\n }\r\n set scissor(rect: Nullable<Immutable<number[]>>) {\r\n this._scissor = rect?.slice() ?? null;\r\n }\r\n get relativeViewport(): Nullable<Immutable<number[]>> {\r\n if (this._adapted) {\r\n if (!this._adaptedRelativeViewport) {\r\n this._adaptedRelativeViewport = this.calcRelativeAdaptedViewport(this._adaptedRelativeViewport);\r\n }\r\n return this._adaptedRelativeViewport;\r\n }\r\n return this._viewport;\r\n }\r\n /**\r\n * Screen configuration used for adapting the camera viewport\r\n */\r\n get screenConfig(): Immutable<ScreenConfig> {\r\n return this._screenAdapter.config;\r\n }\r\n set screenConfig(config: Immutable<ScreenConfig>) {\r\n this._screenAdapter.config = config;\r\n }\r\n /**\r\n * Screen viewport used for adapting the camera viewport\r\n */\r\n get screenViewport(): Nullable<Immutable<number[]>> {\r\n return this._screenAdapter.viewport;\r\n }\r\n set screenViewport(viewport: Nullable<Immutable<number[]>>) {\r\n this._screenAdapter.viewport = viewport;\r\n }\r\n /**\r\n * Handle input events\r\n * @param ev - input event object\r\n * @param type - event type, default to ev.type\r\n * @returns Boolean value indicates whether the event was handled.\r\n */\r\n handleEvent<T extends IBaseEvent<any>>(ev: T, type?: string) {\r\n let handled = false;\r\n if (this._controller) {\r\n if (\r\n this._capturedButton < 0 &&\r\n (ev instanceof PointerEvent || ev instanceof WheelEvent) &&\r\n !this.posInViewport(ev.offsetX, ev.offsetY)\r\n ) {\r\n return false;\r\n }\r\n type = type ?? ev.type;\r\n if (type === 'pointerdown') {\r\n if (this._capturedButton < 0) {\r\n this._capturedButton = (ev as unknown as IControllerPointerDownEvent).button;\r\n }\r\n handled = this._controller.onMouseDown(ev as unknown as IControllerPointerDownEvent);\r\n } else if (type === 'pointerup') {\r\n handled = this._controller.onMouseUp(ev as unknown as IControllerPointerUpEvent);\r\n if (this._capturedButton === (ev as unknown as IControllerPointerUpEvent).button) {\r\n this._capturedButton = -1;\r\n }\r\n } else if (type === 'pointermove') {\r\n handled = this._controller.onMouseMove(ev as unknown as IControllerPointerMoveEvent);\r\n } else if (type === 'wheel') {\r\n handled = this._controller.onMouseWheel(ev as unknown as IControllerWheelEvent);\r\n } else if (type === 'keydown') {\r\n handled = this._controller.onKeyDown(ev as unknown as IControllerKeydownEvent);\r\n } else if (type === 'keyup') {\r\n handled = this._controller.onKeyUp(ev as unknown as IControllerKeyupEvent);\r\n }\r\n if (handled && ev.preventDefault) {\r\n ev.preventDefault();\r\n }\r\n }\r\n return handled;\r\n }\r\n /**\r\n * Constructs a ray based on the given screen coordinates.\r\n *\r\n * @param x - The x-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @param y - The y-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @returns The ray originating from the camera position and passing through the given screen coordinates.\r\n */\r\n constructRay(x: number, y: number) {\r\n const width = this.viewport ? this.viewport[2] : getDevice().getViewport().width;\r\n const height = this.viewport ? this.viewport[3] : getDevice().getViewport().height;\r\n const ndcX = (2 * x) / width - 1;\r\n const ndcY = 1 - (2 * y) / height;\r\n const nearClip = new Vector4(ndcX, ndcY, REVERSE_Z ? 1 : -1, 1);\r\n const farClip = new Vector4(ndcX, ndcY, REVERSE_Z ? 0 : 1, 1);\r\n const nearWorld = this.invViewProjectionMatrix.transform(nearClip);\r\n const farWorld = this.invViewProjectionMatrix.transform(farClip);\r\n if (this.isPerspective()) {\r\n nearWorld.scaleBy(1 / nearWorld.w);\r\n farWorld.scaleBy(1 / farWorld.w);\r\n }\r\n const vEye = this.isPerspective() ? this.getWorldPosition() : nearWorld.xyz();\r\n const vDir = Vector3.sub(farWorld.xyz(), vEye).inplaceNormalize();\r\n return new Ray(vEye, vDir);\r\n }\r\n /**\r\n * Place the camera by specifying the camera position and the target point\r\n * @param eye - The camera position\r\n * @param target - The target point to look at\r\n * @param up - The up vector\r\n * @returns self\r\n */\r\n lookAt(eye: Vector3, target: Vector3, up: Vector3) {\r\n return this.setLocalTransform(Matrix4x4.lookAt(eye, target, up));\r\n }\r\n /**\r\n * Place the camera to look at a given cube face at a given camera position\r\n * @param face - The cube face to look at\r\n * @param position - The camera position\r\n * @returns self\r\n */\r\n lookAtCubeFace(face: CubeFace, position?: Vector3) {\r\n return this.setLocalTransform(Matrix4x4.lookAtCubeFace(face, position ?? this.position));\r\n }\r\n /**\r\n * Setup a perspective projection matrix for the camera\r\n * @param fovY - The vertical field of view in radians.\r\n * @param aspect - The aspect ratio\r\n * @param zNear - The near clip plane\r\n * @param zFar - The far clip plane\r\n * @returns self\r\n */\r\n setPerspective(fovY: number, aspect: number, zNear: number, zFar: number) {\r\n this._projMatrix.perspective(fovY, aspect, zNear, zFar);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a orthogonal projection matrix for the camera\r\n * @param left - Left bound of the frustum\r\n * @param right - Right bound of the frustum\r\n * @param bottom - Bottom bound of the frustum\r\n * @param top - Top bound of the frustum\r\n * @param near - Near bound of the frustum.\r\n * @param far - Far bound of the frustum.\r\n * @returns self\r\n */\r\n setOrtho(left: number, right: number, bottom: number, top: number, near: number, far: number) {\r\n this._projMatrix.ortho(left, right, bottom, top, near, far);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a projection matrix for the camera\r\n * @param matrix - The projection matrix\r\n */\r\n setProjectionMatrix(matrix: Matrix4x4) {\r\n if (matrix && matrix !== this._projMatrix) {\r\n this._projMatrix = matrix;\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n }\r\n }\r\n /**\r\n * Gets the projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getProjectionMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._projMatrix;\r\n }\r\n /**\r\n * Gets the inverse projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getInvProjectionMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._invProjMatrix;\r\n }\r\n getRotationMatrix() {\r\n const rotationMatrix = new Matrix4x4();\r\n this.worldMatrix.decompose(null, rotationMatrix, null);\r\n const xAxis = rotationMatrix.getRow(0).xyz().scaleBy(-1);\r\n const yAxis = rotationMatrix.getRow(1).xyz();\r\n const zAxis = rotationMatrix.getRow(2).xyz().scaleBy(-1);\r\n rotationMatrix.setRow(0, new Vector4(xAxis.x, xAxis.y, xAxis.z, 0));\r\n rotationMatrix.setRow(1, new Vector4(yAxis.x, yAxis.y, yAxis.z, 0));\r\n rotationMatrix.setRow(2, new Vector4(zAxis.x, zAxis.y, zAxis.z, 0));\r\n return rotationMatrix;\r\n }\r\n /**\r\n * View matrix of the camera\r\n *\r\n * @remarks\r\n * Camera's view matrix will transform a point from the world space to the camera space\r\n */\r\n get viewMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._viewMatrix;\r\n }\r\n get viewProjectionMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._viewProjMatrix;\r\n }\r\n /**\r\n * The inverse-view-projection matrix of the camera\r\n *\r\n * @remarks\r\n * The inverse-view-projection matrix transforms a point from the clip space to the camera space\r\n */\r\n get invViewProjectionMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._invViewProjMatrix;\r\n }\r\n /** Gets the frustum of the camera */\r\n get frustum(): Immutable<Frustum> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._frustum!;\r\n }\r\n get frustumViewSpace(): Immutable<Frustum> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n if (!this._frustumV) {\r\n this._frustumV = new Frustum(this._projMatrix);\r\n }\r\n return this._frustumV!;\r\n }\r\n /** The camera controller */\r\n get controller() {\r\n return this._controller;\r\n }\r\n set controller(controller) {\r\n this.setController(controller);\r\n }\r\n /** {@inheritDoc SceneNode.isCamera} */\r\n isCamera(): this is Camera {\r\n return true;\r\n }\r\n /** Gets the near clip plane of the camera */\r\n getNearPlane() {\r\n return this.getProjectionMatrix().getNearPlane();\r\n }\r\n /** Gets the far clip plane of the camera */\r\n getFarPlane() {\r\n return this.getProjectionMatrix().getFarPlane();\r\n }\r\n /** Gets the vertical field of view of the camera */\r\n getFOV() {\r\n return this.getProjectionMatrix().getFov();\r\n }\r\n /** Gets the tangent of half of the vertical field of view */\r\n getTanHalfFovy() {\r\n return this.getProjectionMatrix().getTanHalfFov();\r\n }\r\n /** Gets the aspect ratio */\r\n getAspect() {\r\n return this.getProjectionMatrix().getAspect();\r\n }\r\n /** Returns true if the camera is perspective */\r\n isPerspective() {\r\n return this.getProjectionMatrix().isPerspective();\r\n }\r\n /** Returns true if the camera is orthographic */\r\n isOrtho() {\r\n return this.getProjectionMatrix().isOrtho();\r\n }\r\n /**\r\n * Gets the camera history data which is used in temporal reprojection\r\n * @returns Camera history data\r\n */\r\n getHistoryData() {\r\n let data = Camera._historyData.get(this);\r\n if (!data) {\r\n data = {\r\n prevColorTex: null,\r\n prevMotionVectorTex: null,\r\n prevSSRReflectTex: null,\r\n prevSSRMotionVectorTex: null\r\n };\r\n Camera._historyData.set(this, data);\r\n }\r\n return data;\r\n }\r\n /**\r\n * Clears the camera history data which is used in temporal reprojection\r\n */\r\n clearHistoryData() {\r\n const data = Camera._historyData.get(this);\r\n if (data) {\r\n if (data.prevColorTex) {\r\n getDevice().pool.releaseTexture(data.prevColorTex);\r\n }\r\n if (data.prevMotionVectorTex) {\r\n getDevice().pool.releaseTexture(data.prevMotionVectorTex);\r\n }\r\n if (data.prevSSRReflectTex) {\r\n getDevice().pool.releaseTexture(data.prevSSRReflectTex);\r\n }\r\n if (data.prevSSRMotionVectorTex) {\r\n getDevice().pool.releaseTexture(data.prevSSRMotionVectorTex);\r\n }\r\n Camera._historyData.delete(this);\r\n }\r\n const historyResourceManager = Camera._historyResourceManager.get(this);\r\n if (historyResourceManager) {\r\n historyResourceManager.dispose();\r\n Camera._historyResourceManager.delete(this);\r\n }\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n }\r\n /** @internal */\r\n private updatePostProcessing() {\r\n this._compositor.clear();\r\n if (!this._postEffectSSGI.get()) {\r\n const ssgi = new SSGI();\r\n ssgi.enabled = false;\r\n this._postEffectSSGI.set(ssgi);\r\n // SSGI resolves opaque linear HDR before SSR, transparency and AA.\r\n this._compositor.appendPostEffect(ssgi);\r\n }\r\n if (!this._postEffectSSR.get()) {\r\n const ssr = new SSR();\r\n ssr.enabled = false;\r\n this._postEffectSSR.set(ssr);\r\n this._compositor.appendPostEffect(ssr);\r\n }\r\n if (!this._postEffectSSS.get()) {\r\n const sss = new SSS();\r\n sss.enabled = false;\r\n this._postEffectSSS.set(sss);\r\n this._compositor.appendPostEffect(sss);\r\n }\r\n if (!this._postEffectSkinSSS.get()) {\r\n const skinSSS = new SkinSSS();\r\n skinSSS.enabled = false;\r\n skinSSS.strength = this._skinSSSStrength;\r\n skinSSS.opacity = this._skinSSSOpacity;\r\n skinSSS.sampleStep = this._skinSSSSampleStep;\r\n skinSSS.depthScale = this._skinSSSDepthScale;\r\n skinSSS.colorBoost = this._skinSSSColorBoost;\r\n this._postEffectSkinSSS.set(skinSSS);\r\n this._compositor.appendPostEffect(skinSSS);\r\n }\r\n if (!this._postEffectSSAO.get()) {\r\n const ssao = new SAO();\r\n ssao.enabled = false;\r\n ssao.scale = this._SSAOScale;\r\n ssao.bias = this._SSAOBias;\r\n ssao.radius = this._SSAORadius;\r\n ssao.intensity = this._SSAOIntensity;\r\n ssao.blurDepthCutoff = this._SSAOBlurDepthCutoff;\r\n this._postEffectSSAO.set(ssao);\r\n this._compositor.appendPostEffect(ssao);\r\n }\r\n if (!this._postEffectTAA.get()) {\r\n const taa = new TAA();\r\n taa.enabled = false;\r\n this._postEffectTAA.set(taa);\r\n this._compositor.appendPostEffect(taa);\r\n }\r\n if (!this._postEffectMotionBlur.get()) {\r\n const motionBlur = new MotionBlur();\r\n motionBlur.enabled = false;\r\n motionBlur.strength = this._motionBlurStrength;\r\n this._postEffectMotionBlur.set(motionBlur);\r\n this._compositor.appendPostEffect(motionBlur);\r\n }\r\n if (!this._postEffectTonemap.get()) {\r\n const tonemap = new Tonemap();\r\n tonemap.enabled = true;\r\n tonemap.exposure = this._tonemapExposure;\r\n this._postEffectTonemap.set(tonemap);\r\n this._compositor.appendPostEffect(tonemap);\r\n }\r\n if (!this._postEffectColorAdjust.get()) {\r\n const colorAdjust = new ColorAdjust();\r\n colorAdjust.enabled = false;\r\n colorAdjust.saturation = this._colorAdjustSaturation;\r\n colorAdjust.contrast = this._colorAdjustContrast;\r\n colorAdjust.hue = this._colorAdjustHue;\r\n colorAdjust.sharpen = this._colorAdjustSharpen;\r\n this._postEffectColorAdjust.set(colorAdjust);\r\n this._compositor.appendPostEffect(colorAdjust);\r\n }\r\n if (!this._postEffectFXAA.get()) {\r\n const fxaa = new FXAA();\r\n fxaa.enabled = false;\r\n this._postEffectFXAA.set(fxaa);\r\n this._compositor.appendPostEffect(fxaa);\r\n }\r\n if (!this._postEffectBloom.get()) {\r\n const bloom = new Bloom();\r\n bloom.enabled = false;\r\n bloom.maxDownsampleLevel = this._bloomMaxDownsampleLevels;\r\n bloom.downsampleLimit = this._bloomDownsampleLimit;\r\n bloom.threshold = this._bloomThreshold;\r\n bloom.thresholdKnee = this._bloomThresholdKnee;\r\n bloom.intensity = this._bloomIntensity;\r\n this._postEffectBloom.set(bloom);\r\n this._compositor.appendPostEffect(bloom);\r\n }\r\n }\r\n\r\n /** @internal */\r\n private syncPostProcessingMode(scene: Scene) {\r\n const tonemap = this._postEffectTonemap.get()!;\r\n // Physical lighting pre-exposes every light quantity on the CPU (see ShaderHelper.getPreExposure),\r\n // so the HDR buffer already sits near 1.0 and tonemapping only applies the ACES curve. Legacy\r\n // keeps its plain exposure multiplier.\r\n const usePhysicalExposure = scene.lightingMode === 'physical';\r\n tonemap.exposure = usePhysicalExposure ? 1 : this._tonemapExposure;\r\n const bloom = this._postEffectBloom.get()!;\r\n if (this._postProcessingLightingMode !== scene.lightingMode) {\r\n // SSGI histories contain scene-linear radiance. Never reuse them across lighting unit models.\r\n this.invalidateSSGIHistory();\r\n if (scene.lightingMode === 'physical') {\r\n this._compositor.movePostEffectBefore(bloom, tonemap);\r\n } else {\r\n this._compositor.movePostEffectAfter(bloom, this._postEffectFXAA.get()!);\r\n }\r\n this._postProcessingLightingMode = scene.lightingMode;\r\n }\r\n }\r\n\r\n private static resolveSSSQualityPreset(val: SSSQualityPreset) {\r\n switch (val) {\r\n case 'quality':\r\n case 'balanced':\r\n case 'performance':\r\n return val;\r\n default:\r\n return 'balanced';\r\n }\r\n }\r\n\r\n private static resolveSSGIQualityPreset(val: SSGIQualityPreset) {\r\n switch (val) {\r\n case 'quality':\r\n case 'balanced':\r\n case 'performance':\r\n case 'custom':\r\n return val;\r\n default:\r\n return 'quality';\r\n }\r\n }\r\n\r\n private updateSSGICustomSettings(settings: Partial<SSGIResolvedSettings>) {\r\n const next = { ...this._ssgiResolvedSettings, ...settings };\r\n if (\r\n this._ssgiQualityPreset !== 'custom' ||\r\n next.halfRes !== this._ssgiResolvedSettings.halfRes ||\r\n next.raysPerPixel !== this._ssgiResolvedSettings.raysPerPixel ||\r\n next.maxSteps !== this._ssgiResolvedSettings.maxSteps ||\r\n next.denoisePasses !== this._ssgiResolvedSettings.denoisePasses\r\n ) {\r\n this._ssgiQualityPreset = 'custom';\r\n this._ssgiResolvedSettings = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n\r\n /** @internal Invalidate only the histories owned by SSGI. */\r\n private invalidateSSGIHistory() {\r\n const history = Camera._historyResourceManager.get(this);\r\n history?.invalidate(RGHistoryResources.SSGI_SCENE_COLOR);\r\n history?.invalidate(RGHistoryResources.SSGI_IRRADIANCE);\r\n history?.invalidate(RGHistoryResources.SSGI_SURFACE);\r\n history?.invalidate(RGHistoryResources.SSGI_MOMENTS);\r\n history?.invalidate(RGHistoryResources.SSGI_AO);\r\n }\r\n\r\n private updateSSSResolvedSettings() {\r\n const source = SSS_QUALITY_PRESET_SETTINGS[this._sssQualityPreset];\r\n this._sssResolvedSettings.halfRes = source.halfRes;\r\n this._sssResolvedSettings.blurKernelSize = source.blurKernelSize;\r\n this._sssResolvedSettings.blurStdDev = source.blurStdDev;\r\n this._sssResolvedSettings.blurDepthCutoff = source.blurDepthCutoff;\r\n this._sssResolvedSettings.normalCutoff = source.normalCutoff;\r\n }\r\n /**\r\n * Renders a scene\r\n * @param scene - The scene to be rendered\r\n * @param compositor - Compositor instance that will be used to apply postprocess effects\r\n */\r\n render(scene: Scene) {\r\n const device = getDevice();\r\n this.syncPostProcessingMode(scene);\r\n scene.dispatchEvent('startrender', scene, this, this._compositor);\r\n device.pushDeviceStates();\r\n device.reverseVertexWindingOrder(false);\r\n scene.getRenderer().renderScene(scene, this);\r\n device.popDeviceStates();\r\n scene.dispatchEvent('endrender', scene, this, this._compositor);\r\n }\r\n /** Prepare current/previous camera transforms used by a motion-vector pass. @internal */\r\n prepareMotionVectorFrame(useTAA: boolean, width: number, height: number): void {\r\n const device = getDevice();\r\n if (useTAA) {\r\n const halton = Camera._halton23[device.frameInfo.frameCounter % Camera._halton23.length];\r\n this._jitterValue.setXY((halton[0] * 2) / width, (halton[1] * 2) / height);\r\n } else {\r\n this._jitterValue.setXY(0, 0);\r\n }\r\n this._jitteredVPMatrix.set(this.getProjectionMatrix());\r\n this._jitteredVPMatrix[8] += this._jitterValue.x;\r\n this._jitteredVPMatrix[9] += this._jitterValue.y;\r\n this._jitteredVPMatrix.multiplyRight(this.viewMatrix);\r\n Matrix4x4.invert(this._jitteredVPMatrix, this._jitteredInvVPMatrix);\r\n if (!this._prevJitteredVPMatrix) {\r\n this._prevJitteredVPMatrix = new Matrix4x4();\r\n this._prevJitteredVPMatrix.set(this._jitteredVPMatrix);\r\n this._prevJitterValue = new Vector2(this._jitterValue);\r\n }\r\n if (!this._prevVPMatrix) {\r\n this._prevVPMatrix = new Matrix4x4();\r\n this._prevVPMatrix.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n }\r\n /** Commit camera transforms after a motion-vector frame completes. @internal */\r\n commitMotionVectorFrame(): void {\r\n this._prevJitteredVPMatrix!.set(this._jitteredVPMatrix);\r\n this._prevJitterValue!.set(this._jitterValue);\r\n this._prevVPMatrix!.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n /** Clear temporal camera transforms when motion vectors are not in use. @internal */\r\n clearMotionVectorFrame(): void {\r\n this._jitterValue.setXY(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._jitteredInvVPMatrix.set(this.invViewProjectionMatrix);\r\n }\r\n async pickAsync(posX: number, posY: number) {\r\n this._pickPosX = posX;\r\n this._pickPosY = posY;\r\n if (!this._pickResultPromise) {\r\n this._pickResultPromise = new Promise<Nullable<PickResult>>((resolve) => {\r\n this._pickResultResolve = (result: Nullable<PickResult>) => {\r\n resolve(result);\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n };\r\n });\r\n }\r\n return this._pickResultPromise;\r\n }\r\n /** @internal */\r\n getPickResultResolveFunc() {\r\n return this._pickResultResolve;\r\n }\r\n /** @internal */\r\n getPickPosX() {\r\n return this._pickPosX;\r\n }\r\n /** @internal */\r\n getPickPosY() {\r\n return this._pickPosY;\r\n }\r\n /**\r\n * Updates the controller state\r\n */\r\n updateController() {\r\n this._controller?.update();\r\n }\r\n /**\r\n * Reset the controller\r\n */\r\n resetController() {\r\n this._controller?.reset();\r\n }\r\n /** @internal */\r\n get jitteredVPMatrix(): Immutable<Matrix4x4> {\r\n return this._jitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get jitteredInvVPMatrix(): Immutable<Matrix4x4> {\r\n return this._jitteredInvVPMatrix;\r\n }\r\n /** @internal */\r\n get jitterValue(): Immutable<Vector2> {\r\n return this._jitterValue;\r\n }\r\n /** @internal */\r\n get prevJitteredVPMatrix(): Nullable<Immutable<Matrix4x4>> {\r\n return this._prevJitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get prevJitterValue(): Nullable<Immutable<Vector2>> {\r\n return this._prevJitterValue;\r\n }\r\n /** @internal */\r\n get prevVPMatrix(): Nullable<Immutable<Matrix4x4>> {\r\n return this._prevVPMatrix;\r\n }\r\n /** @internal */\r\n get prevPosition(): Nullable<Immutable<Vector3>> {\r\n return this._prevPosition;\r\n }\r\n /**\r\n * Gets the camera history resource manager for temporal effects.\r\n */\r\n getHistoryResourceManager(): Nullable<HistoryResourceManager> {\r\n return Camera._historyResourceManager.get(this) ?? null;\r\n }\r\n /**\r\n * Sets the camera history resource manager for temporal effects.\r\n *\r\n * @internal\r\n */\r\n setHistoryResourceManager(manager: HistoryResourceManager): void {\r\n const current = Camera._historyResourceManager.get(this);\r\n if (current && current !== manager) {\r\n current.dispose();\r\n }\r\n Camera._historyResourceManager.set(this, manager);\r\n }\r\n /** @internal */\r\n private _renderPipeline: Nullable<RenderPipeline<FrameGraphContext>> = null;\r\n /**\r\n * The render pipeline that assembles this camera's frame graph. When null\r\n * (the default), the shared default Forward+ pipeline is used. Assign a\r\n * customized pipeline to override rendering for this camera only, e.g.\r\n * `camera.renderPipeline = createForwardPlusPipeline().insertAfter('SkyPass', myModule)`.\r\n */\r\n get renderPipeline(): Nullable<RenderPipeline<FrameGraphContext>> {\r\n return this._renderPipeline;\r\n }\r\n set renderPipeline(pipeline: Nullable<RenderPipeline<FrameGraphContext>>) {\r\n this._renderPipeline = pipeline;\r\n }\r\n /** @internal */\r\n private setController(controller: Nullable<BaseCameraController>) {\r\n if (this._controller !== controller) {\r\n if (controller && controller._getCamera() && controller._getCamera() !== this) {\r\n throw new Error(\r\n 'Camera.setController failed: one camera controller object cannot be assigned to multiple camera'\r\n );\r\n }\r\n this._controller?._setCamera(null);\r\n this._controller = controller;\r\n this._controller?._setCamera(this);\r\n }\r\n return this;\r\n }\r\n /** @internal */\r\n protected _invalidate(projectMatrixChanged: boolean) {\r\n this._dirty = true;\r\n if (projectMatrixChanged) {\r\n this._frustumV = null;\r\n }\r\n }\r\n /** @internal */\r\n protected _compute() {\r\n this._computeProj();\r\n Matrix4x4.invertAffine(this.worldMatrix, this._viewMatrix);\r\n Matrix4x4.multiply(this._projMatrix, this._viewMatrix, this._viewProjMatrix);\r\n Matrix4x4.invert(this._viewProjMatrix, this._invViewProjMatrix);\r\n if (!this._frustum) {\r\n this._frustum = new Frustum(this._viewProjMatrix);\r\n } else {\r\n this._frustum.initWithMatrix(this._viewProjMatrix);\r\n }\r\n }\r\n /** @internal */\r\n protected _computeProj() {}\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean) {\r\n super._onTransformChanged(invalidateLocal);\r\n this._invalidate(false);\r\n }\r\n /** {@inheritdoc SceneNode.onDispose} */\r\n protected onDispose() {\r\n super.onDispose();\r\n this.setController(null);\r\n this.clearHistoryData();\r\n this._postEffectBloom.dispose();\r\n this._postEffectFXAA.dispose();\r\n this._postEffectMotionBlur.dispose();\r\n this._postEffectSSAO.dispose();\r\n this._postEffectSSS.dispose();\r\n this._postEffectSkinSSS.dispose();\r\n this._postEffectSSGI.dispose();\r\n this._postEffectSSR.dispose();\r\n this._postEffectTAA.dispose();\r\n this._postEffectTonemap.dispose();\r\n this._postEffectColorAdjust.dispose();\r\n this._oit.dispose();\r\n }\r\n /** @internal */\r\n private createOITForMode(mode: CameraOITMode): OIT | null {\r\n if (mode === 'abuffer') {\r\n return new ABufferOIT(this._oitABufferLayers);\r\n }\r\n if (mode === 'weighted') {\r\n return new WeightedBlendedOIT();\r\n }\r\n if (mode === 'dual-depth') {\r\n return new DualDepthPeelingOIT(this._oitDualDepthPeels);\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private inferOITMode(oit: Nullable<OIT>): Nullable<CameraOITMode> {\r\n if (!oit) {\r\n return 'none';\r\n }\r\n const type = oit.getType();\r\n if (type === ABufferOIT.type) {\r\n return 'abuffer';\r\n }\r\n if (type === WeightedBlendedOIT.type) {\r\n return 'weighted';\r\n }\r\n if (type === DualDepthPeelingOIT.type) {\r\n return 'dual-depth';\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private posInViewport(x: number, y: number) {\r\n let rect = this._interactionRect;\r\n if (!rect && this.viewport) {\r\n const cvs = getDevice().canvas;\r\n const vp = this.viewport;\r\n const vp_x = vp[0];\r\n const vp_y = cvs.clientHeight - vp[1] - vp[3];\r\n const vp_w = vp[2];\r\n const vp_h = vp[3];\r\n rect = [vp_x, vp_y, vp_w, vp_h];\r\n }\r\n if (!rect) {\r\n return true;\r\n }\r\n x -= rect[0];\r\n y -= rect[1];\r\n return x >= 0 && x < rect[2] && y >= 0 && y < rect[3];\r\n }\r\n /** @internal */\r\n private dirtyCheck() {\r\n if (this._adapted) {\r\n const version = this._screenAdapter.version;\r\n if (this._adaptedVersion !== version) {\r\n this._dirty = true;\r\n this._adaptedViewport = null;\r\n this._adaptedRelativeViewport = null;\r\n this._adaptedVersion = version;\r\n }\r\n }\r\n if (this._dirty) {\r\n this._dirty = false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n private calcAdaptedViewport(outViewport?: Nullable<number[]>): number[] {\r\n outViewport = outViewport ?? [];\r\n const transform = this._screenAdapter.transform;\r\n outViewport[0] = transform.croppedViewport.x;\r\n outViewport[1] = transform.croppedViewport.y;\r\n outViewport[2] = transform.croppedViewport.width;\r\n outViewport[3] = transform.croppedViewport.height;\r\n return outViewport;\r\n }\r\n /** @internal */\r\n private calcRelativeAdaptedViewport(outViewport?: Nullable<number[]>): number[] {\r\n outViewport = outViewport ?? [];\r\n const transform = this._screenAdapter.transform;\r\n outViewport[0] = transform.croppedViewport.x - transform.viewportX;\r\n outViewport[1] = transform.croppedViewport.y - transform.viewportY;\r\n outViewport[2] = transform.croppedViewport.width;\r\n outViewport[3] = transform.croppedViewport.height;\r\n return outViewport;\r\n }\r\n /** @internal */\r\n protected calcAdaptedOrthographicProjection(\r\n nearClip: number,\r\n farClip: number,\r\n outMatrix?: Matrix4x4\r\n ): Matrix4x4 {\r\n const matrix = outMatrix ?? new Matrix4x4();\r\n const transform = this._screenAdapter.transform;\r\n const scaleX = this._screenAdapter.config.designWidth / transform.viewportWidth;\r\n const scaleY = this._screenAdapter.config.designHeight / transform.viewportHeight;\r\n const left = -transform.croppedViewport.width * scaleX * 0.5;\r\n const right = -left;\r\n const bottom = transform.croppedViewport.height * scaleY * 0.5;\r\n const top = -bottom;\r\n return matrix.ortho(left, right, bottom, top, nearClip, farClip);\r\n }\r\n /** @internal */\r\n protected calcAdaptedPerspectiveProjection(\r\n fov: number,\r\n nearClip: number,\r\n farClip: number,\r\n outMatrix?: Matrix4x4\r\n ): Matrix4x4 {\r\n const matrix = outMatrix ?? new Matrix4x4();\r\n const transform = this._screenAdapter.transform;\r\n const aspect = transform.viewportHeight !== 0 ? transform.viewportWidth / transform.viewportHeight : 1;\r\n const h = nearClip * Math.tan(fov * 0.5);\r\n const w = h * aspect;\r\n let left = -w + (2 * w * (transform.croppedViewport.x - transform.viewportX)) / transform.viewportWidth;\r\n let right =\r\n w -\r\n (2 *\r\n w *\r\n (transform.viewportX +\r\n transform.viewportWidth -\r\n transform.croppedViewport.x -\r\n transform.croppedViewport.width)) /\r\n transform.viewportWidth;\r\n let bottom =\r\n -h + (2 * w * (transform.croppedViewport.y - transform.viewportY)) / transform.viewportHeight;\r\n let top =\r\n h -\r\n (2 *\r\n h *\r\n (transform.viewportY +\r\n transform.viewportHeight -\r\n transform.croppedViewport.y -\r\n transform.croppedViewport.height)) /\r\n transform.viewportHeight;\r\n return matrix.frustum(left, right, bottom, top, nearClip, farClip);\r\n }\r\n}\r\n"],"names":["SSGI_QUALITY_PRESET_SETTINGS","quality","halfRes","raysPerPixel","maxSteps","denoisePasses","balanced","performance","SSS_DEFAULT_SETTINGS","blurScale","strength","transmissionStrength","transmissionPower","multiScatter","SSS_QUALITY_PRESET_SETTINGS","blurKernelSize","blurStdDev","blurDepthCutoff","normalCutoff","Camera","SceneNode","_halton23","halton23","_historyData","WeakMap","_historyResourceManager","scene","projectionMatrix","_projMatrix","Matrix4x4","identity","_invProjMatrix","invert","_viewMatrix","_viewProjMatrix","_invViewProjMatrix","_clipPlane","_clearColor","Vector4","_clearDepth","DEPTH_CLEAR_VALUE","_clearStencil","_dirty","_controller","_viewport","_adaptedViewport","_adaptedRelativeViewport","_adaptedVersion","_scissor","_clipMask","_frustum","_frustumV","_oit","DRef","_oitMode","_oitABufferLayers","_oitDualDepthPeels","_depthPrePass","_renderPath","_screenAdapter","ScreenAdapter","_adapted","_HiZ","_screenSpaceShadowMask","_HDR","_toneMap","_postEffectTonemap","_tonemapExposure","_aperture","_shutterSpeed","_ISO","_exposureCompensation","_postProcessingLightingMode","_motionBlur","_postEffectMotionBlur","_motionBlurStrength","_bloom","_postEffectBloom","_bloomMaxDownsampleLevels","_bloomDownsampleLimit","_bloomThreshold","_bloomThresholdKnee","_bloomIntensity","_colorAdjustEnabled","_postEffectColorAdjust","_colorAdjustSaturation","_colorAdjustContrast","_colorAdjustHue","_colorAdjustSharpen","_FXAA","_postEffectFXAA","_TAA","_postEffectTAA","_TAADebug","_shadowDebugCascades","_SSR","_postEffectSSR","_ssrParams","_ssrMaxRoughness","_ssrRoughnessFactor","_ssrStride","_ssrCalcThickness","_ssrBlurriness","_ssrBlurDepthCutoff","_ssrBlurKernelSize","_ssrBlurStdDev","_ssrTemporal","_ssrTemporalWeight","_SSGI","_postEffectSSGI","_ssgiQualityPreset","defaultSSGIQualityPreset","_ssgiResolvedSettings","_ssgiIntensity","_ssgiAOIntensity","_ssgiAOPower","_ssgiSkyOcclusion","_ssgiMaxDistance","_ssgiThickness","_ssgiStride","_ssgiMaxRayIntensity","_ssgiTemporal","_ssgiTemporalWeight","_ssgiDepthReject","_ssgiNormalReject","_SSS","_postEffectSSS","_sssBlurScale","_sssQualityPreset","_sssStrength","_sssTransmissionStrength","_sssTransmissionPower","_sssMultiScatter","defaultSSSQualityPreset","_sssResolvedSettings","updateSSSResolvedSettings","_sssDebugView","_skinSSS","_postEffectSkinSSS","_skinSSSStrength","_skinSSSOpacity","_skinSSSSampleStep","_skinSSSDepthScale","_skinSSSColorBoost","_SSAO","_postEffectSSAO","_SSAOScale","_SSAOBias","_SSAOIntensity","_SSAORadius","_SSAOBlurDepthCutoff","_pickResult","_commandBufferReuse","_jitteredVPMatrix","_jitteredInvVPMatrix","_jitterValue","Vector2","_prevVPMatrix","_prevPosition","_prevJitteredVPMatrix","_prevJitterValue","_pickResultPromise","_pickResultResolve","_pickPosX","_pickPosY","_compositor","Compositor","_capturedButton","_interactionRect","updatePostProcessing","mainCamera","compositor","interactionRect","rect","clearColor","v","clone","clearDepth","clearStencil","HiZ","val","screenSpaceShadowMask","renderPath","_val","HDR","toneMap","get","enabled","motionBlur","motionBlurStrength","bloom","bloomMaxDownsampleLevels","maxDownsampleLevel","bloomDownsampleLimit","downsampleLimit","bloomThreshold","threshold","bloomThresholdKnee","thresholdKnee","bloomIntensity","intensity","colorAdjust","colorAdjustSaturation","saturation","colorAdjustContrast","contrast","colorAdjustHue","hue","colorAdjustSharpen","sharpen","FXAA","toneMapExposure","aperture","Math","max","shutterSpeed","ISO","exposureCompensation","EV100","calculateEV100","exposure","calculatePhysicalExposure","TAA","TAADebug","shadowDebugCascades","SSR","SSGI","next","invalidateSSGIHistory","ssgiQualityPreset","resolveSSGIQualityPreset","ssgiResolvedSettings","ssgiHalfResolution","updateSSGICustomSettings","ssgiRaysPerPixel","min","round","ssgiMaxSteps","ssgiDenoisePasses","ssgiIntensity","ssgiSkyOcclusion","ssgiAOIntensity","ssgiAOPower","ssgiMaxDistance","ssgiThickness","ssgiStride","ssgiMaxRayIntensity","ssgiTemporal","ssgiTemporalWeight","ssgiDepthReject","ssgiNormalReject","ssrMaxRoughness","ssrRoughnessFactor","ssrStride","ssrMaxDistance","x","ssrIterations","y","ssrThickness","z","ssrCalcThickness","ssrBlurScale","ssrBlurDepthCutoff","ssrBlurKernelSize","ssrBlurStdDev","ssrTemporal","ssrTemporalWeight","SSS","sssBlurScale","sssQualityPreset","resolveSSSQualityPreset","sssStrength","sssTransmissionStrength","sssTransmissionPower","sssMultiScatter","sssResolvedSettings","sssDebugView","skinSSS","skinSSSStrength","skinSSSOpacity","opacity","skinSSSSampleStep","sampleStep","skinSSSDepthScale","depthScale","skinSSSColorBoost","colorBoost","ssrParams","SSAO","SSAOScale","scale","SSAOBias","bias","SSAORadius","radius","SSAOIntensity","SSAOBlurDepthCutoff","depthPrePass","commandBufferReuse","adapted","_invalidate","oit","set","inferredMode","inferOITMode","oitMode","mode","createOITForMode","oitABufferLayers","layers","floor","oitDualDepthPeels","peels","DualDepthPeelingOIT","numPeels","clipMask","viewport","calcAdaptedViewport","slice","scissor","relativeViewport","calcRelativeAdaptedViewport","screenConfig","config","screenViewport","handleEvent","ev","type","handled","PointerEvent","WheelEvent","posInViewport","offsetX","offsetY","button","onMouseDown","onMouseUp","onMouseMove","onMouseWheel","onKeyDown","onKeyUp","preventDefault","constructRay","width","getDevice","getViewport","height","ndcX","ndcY","nearClip","REVERSE_Z","farClip","nearWorld","invViewProjectionMatrix","transform","farWorld","isPerspective","scaleBy","w","vEye","getWorldPosition","xyz","vDir","Vector3","sub","inplaceNormalize","Ray","lookAt","eye","target","up","setLocalTransform","lookAtCubeFace","face","position","setPerspective","fovY","aspect","zNear","zFar","perspective","setOrtho","left","right","bottom","top","near","far","ortho","setProjectionMatrix","matrix","getProjectionMatrix","dirtyCheck","_compute","getInvProjectionMatrix","getRotationMatrix","rotationMatrix","worldMatrix","decompose","xAxis","getRow","yAxis","zAxis","setRow","viewMatrix","viewProjectionMatrix","frustum","frustumViewSpace","Frustum","controller","setController","isCamera","getNearPlane","getFarPlane","getFOV","getFov","getTanHalfFovy","getTanHalfFov","getAspect","isOrtho","getHistoryData","data","prevColorTex","prevMotionVectorTex","prevSSRReflectTex","prevSSRMotionVectorTex","clearHistoryData","pool","releaseTexture","delete","historyResourceManager","dispose","clear","ssgi","appendPostEffect","ssr","sss","SkinSSS","ssao","SAO","taa","MotionBlur","tonemap","Tonemap","ColorAdjust","fxaa","Bloom","syncPostProcessingMode","usePhysicalExposure","lightingMode","movePostEffectBefore","movePostEffectAfter","settings","history","invalidate","RGHistoryResources","SSGI_SCENE_COLOR","SSGI_IRRADIANCE","SSGI_SURFACE","SSGI_MOMENTS","SSGI_AO","source","render","device","dispatchEvent","pushDeviceStates","reverseVertexWindingOrder","getRenderer","renderScene","popDeviceStates","prepareMotionVectorFrame","useTAA","halton","frameInfo","frameCounter","length","setXY","multiplyRight","commitMotionVectorFrame","clearMotionVectorFrame","pickAsync","posX","posY","Promise","resolve","result","getPickResultResolveFunc","getPickPosX","getPickPosY","updateController","update","resetController","reset","jitteredVPMatrix","jitteredInvVPMatrix","jitterValue","prevJitteredVPMatrix","prevJitterValue","prevVPMatrix","prevPosition","getHistoryResourceManager","setHistoryResourceManager","manager","current","_renderPipeline","renderPipeline","pipeline","_getCamera","Error","_setCamera","projectMatrixChanged","_computeProj","invertAffine","multiply","initWithMatrix","_onTransformChanged","invalidateLocal","onDispose","ABufferOIT","WeightedBlendedOIT","getType","cvs","canvas","vp","vp_x","vp_y","clientHeight","vp_w","vp_h","version","outViewport","croppedViewport","viewportX","viewportY","outMatrix","scaleX","designWidth","viewportWidth","scaleY","designHeight","viewportHeight","calcAdaptedPerspectiveProjection","fov","h","tan"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"camera.js","sources":["../../src/camera/camera.ts"],"sourcesContent":["import type { CubeFace, Immutable, Nullable, Plane } from '@zephyr3d/base';\r\nimport {\r\n DEPTH_CLEAR_VALUE,\r\n REVERSE_Z,\r\n DRef,\r\n Vector2,\r\n Matrix4x4,\r\n Frustum,\r\n Vector4,\r\n Vector3,\r\n Ray,\r\n halton23\r\n} from '@zephyr3d/base';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport type { Drawable, PickTarget } from '../render/drawable';\r\nimport type { BaseTexture } from '@zephyr3d/device';\r\nimport { Compositor } from '../posteffect/compositor';\r\nimport type { Scene } from '../scene/scene';\r\nimport type {\r\n BaseCameraController,\r\n IBaseEvent,\r\n IControllerKeydownEvent,\r\n IControllerKeyupEvent,\r\n IControllerPointerDownEvent,\r\n IControllerPointerMoveEvent,\r\n IControllerPointerUpEvent,\r\n IControllerWheelEvent\r\n} from './base';\r\nimport type { OIT } from '../render/oit';\r\nimport { TAA } from '../posteffect/taa';\r\nimport { SSGI } from '../posteffect/ssgi';\r\nimport { SSR } from '../posteffect/ssr';\r\nimport { SSS } from '../posteffect/sss';\r\nimport { SkinSSS } from '../posteffect/skinsss';\r\nimport { SubsurfaceProfile } from '../material/subsurfaceprofile';\r\nimport type { SubsurfaceProfilePreset } from '../material/subsurfaceprofile';\r\nimport { Tonemap } from '../posteffect/tonemap';\r\nimport { FXAA } from '../posteffect/fxaa';\r\nimport { Bloom } from '../posteffect/bloom';\r\nimport { SAO } from '../posteffect/sao';\r\nimport { MotionBlur } from '../posteffect/motionblur';\r\nimport { ColorAdjust } from '../posteffect/coloradjust';\r\nimport { getDevice } from '../app/api';\r\nimport type { ScreenConfig } from '../app/screen';\r\nimport { ScreenAdapter } from '../app/screen';\r\nimport { ABufferOIT } from '../render/abuffer_oit';\r\nimport { WeightedBlendedOIT } from '../render/weightedblended_oit';\r\nimport { DualDepthPeelingOIT } from '../render/dualdepthpeeling_oit';\r\nimport type { HistoryResourceManager } from '../render';\r\nimport type { FrameGraphContext, RenderPipeline } from '../render';\r\nimport { RGHistoryResources } from '../render/rendergraph/history_resources';\r\nimport { calculateEV100, calculatePhysicalExposure } from '../utility/physical';\r\nimport type { LightingMode } from '../utility/physical';\r\n\r\n/**\r\n * Result of a camera picking operation.\r\n *\r\n * Used by GPU/CPU picking flows to report what was intersected.\r\n *\r\n * @public\r\n */\r\nexport type PickResult = {\r\n /** Distance from ray origin to intersection point (world units). */\r\n distance: number;\r\n /** Intersection point in world space. */\r\n intersectedPoint: Vector3;\r\n /** The intersected drawable, if known. */\r\n drawable: Drawable;\r\n /** Logical pick target information. */\r\n target: PickTarget;\r\n};\r\n\r\n/**\r\n * Temporal history resources used by reprojection (TAA, motion blur).\r\n *\r\n * @public\r\n */\r\nexport type CameraHistoryData = {\r\n prevColorTex: Nullable<BaseTexture>;\r\n prevMotionVectorTex: Nullable<BaseTexture>;\r\n prevSSRReflectTex: Nullable<BaseTexture>;\r\n prevSSRMotionVectorTex: Nullable<BaseTexture>;\r\n};\r\n\r\n/**\r\n * Camera render path mode.\r\n * @public\r\n */\r\nexport type RenderPath = 'forward';\r\n/**\r\n * Camera Order-Independent Transparency mode.\r\n * @public\r\n */\r\nexport type CameraOITMode = 'none' | 'weighted' | 'abuffer' | 'dual-depth';\r\n/**\r\n * Subsurface Scattering debug visualization modes (implementation-defined).\r\n * @public\r\n */\r\nexport type SSSDebugView =\r\n | 'none'\r\n | 'scatter_mask'\r\n | 'scatter_softness'\r\n | 'scatter_radius'\r\n | 'scatter_falloff'\r\n | 'profile_energy'\r\n | 'profile_transmission'\r\n | 'profile_boundary'\r\n | 'diffuse'\r\n | 'blur'\r\n | 'screen_thinness'\r\n | 'thin_transmission_mask'\r\n | 'thin_lighting'\r\n | 'transmission_shadow';\r\n/**\r\n * Subsurface Scattering quality presets that resolve multiple internal settings for convenience.\r\n * @public\r\n */\r\nexport type SSSQualityPreset = 'quality' | 'balanced' | 'performance';\r\n/**\r\n * Resolved Subsurface Scattering settings after applying the quality preset. These are the actual settings used by the SSS post effect.\r\n * @public\r\n */\r\nexport type SSSResolvedSettings = {\r\n halfRes: boolean;\r\n blurKernelSize: number;\r\n blurStdDev: number;\r\n blurDepthCutoff: number;\r\n normalCutoff: number;\r\n};\r\n\r\n/** Screen Space Global Illumination quality preset. @public */\r\nexport type SSGIQualityPreset = 'quality' | 'balanced' | 'performance' | 'custom';\r\n\r\n/** Resolved trace and denoise settings used by the SSGI post effect. @public */\r\nexport type SSGIResolvedSettings = {\r\n halfRes: boolean;\r\n raysPerPixel: number;\r\n maxSteps: number;\r\n denoisePasses: number;\r\n};\r\n\r\nconst SSGI_QUALITY_PRESET_SETTINGS: Record<Exclude<SSGIQualityPreset, 'custom'>, SSGIResolvedSettings> = {\r\n quality: { halfRes: false, raysPerPixel: 2, maxSteps: 64, denoisePasses: 4 },\r\n balanced: { halfRes: true, raysPerPixel: 1, maxSteps: 48, denoisePasses: 4 },\r\n performance: { halfRes: true, raysPerPixel: 1, maxSteps: 24, denoisePasses: 4 }\r\n};\r\n\r\ntype SSSDefaultSettings = {\r\n blurScale: number;\r\n strength: number;\r\n transmissionStrength: number;\r\n transmissionPower: number;\r\n multiScatter: number;\r\n};\r\n\r\nconst SSS_DEFAULT_SETTINGS: SSSDefaultSettings = {\r\n blurScale: 11,\r\n strength: 0.65,\r\n transmissionStrength: 0.18,\r\n transmissionPower: 2.1,\r\n multiScatter: 0.08\r\n};\r\n\r\nconst SSS_QUALITY_PRESET_SETTINGS: Record<SSSQualityPreset, SSSResolvedSettings> = {\r\n quality: {\r\n halfRes: false,\r\n blurKernelSize: 11,\r\n blurStdDev: 3.5,\r\n blurDepthCutoff: 0.24,\r\n normalCutoff: 0.82\r\n },\r\n balanced: {\r\n halfRes: false,\r\n blurKernelSize: 9,\r\n blurStdDev: 3,\r\n blurDepthCutoff: 0.26,\r\n normalCutoff: 0.78\r\n },\r\n performance: {\r\n halfRes: true,\r\n blurKernelSize: 7,\r\n blurStdDev: 2.4,\r\n blurDepthCutoff: 0.32,\r\n normalCutoff: 0.72\r\n }\r\n};\r\n\r\n/**\r\n * A renderable camera node that manages view/projection math, frusta,\r\n * input control, picking, and a post-processing chain via a compositor.\r\n *\r\n * Key features:\r\n * - Maintains projection, view, VP, and inverse VP matrices and lazily recomputes them when invalidated.\r\n * - Provides world- and view-space frusta for culling and clipping.\r\n * - Supports perspective and orthographic projections.\r\n * - Integrates with post effects (Tonemap, FXAA, TAA, Bloom, SSR, SSS, SSAO, Motion Blur) through an internal `Compositor`.\r\n * - Handles temporal jitter and history state when TAA or motion blur are enabled.\r\n * - Emits picking rays from screen coordinates and supports async GPU picking.\r\n * - Optional controller integration for user input handling.\r\n *\r\n * Performance notes:\r\n * - Matrices/frusta are computed on demand and cached until invalidation.\r\n * - Temporal jitter and history are set up only when required by enabled features and device support.\r\n *\r\n * @public\r\n */\r\nexport class Camera extends SceneNode {\r\n /** @internal Halton 2-3 sequence used for TAA jittering. An 8-phase cycle\r\n * repeats faster than the history accumulation window, so residual jitter\r\n * ripple is attenuated further than with a 16-phase cycle. */\r\n private static readonly _halton23 = halton23(8);\r\n /** @internal Per-camera history resources. */\r\n private static readonly _historyData: WeakMap<Camera, CameraHistoryData> = new WeakMap();\r\n /** @internal Per-camera history resource manager. */\r\n private static readonly _historyResourceManager: WeakMap<Camera, HistoryResourceManager> = new WeakMap();\r\n /** @internal Screen adapter for this camera */\r\n protected _screenAdapter: ScreenAdapter;\r\n /** @internal Whether the camera is adapted */\r\n protected _adapted: boolean;\r\n /** @internal Adapted viewport */\r\n protected _adaptedViewport: Nullable<number[]>;\r\n /** @internal Adapted relative viewport */\r\n protected _adaptedRelativeViewport: Nullable<number[]>;\r\n /** @internal RenderTarget version */\r\n protected _adaptedVersion: number;\r\n /** @internal Projection matrix. */\r\n protected _projMatrix: Matrix4x4;\r\n /** @internal Inverse projection matrix. */\r\n protected _invProjMatrix: Matrix4x4;\r\n /** @internal View matrix (world -\\> camera). */\r\n protected _viewMatrix: Matrix4x4;\r\n /** @internal View-projection matrix. */\r\n protected _viewProjMatrix: Matrix4x4;\r\n /** @internal Inverse view-projection matrix. */\r\n protected _invViewProjMatrix: Matrix4x4;\r\n /** @internal Framebuffer clear color, disabled when null. Default is null */\r\n protected _clearColor: Vector4;\r\n /** @internal Framebuffer depth clear value, disabled when null. Default is 1 */\r\n protected _clearDepth: number;\r\n /** @internal Framebuffer stencil clear value, disabled when null. Default is 0 */\r\n protected _clearStencil: number;\r\n /** @internal Optional clip plane in camera space. */\r\n protected _clipPlane: Nullable<Plane>;\r\n /** @internal Camera controller (input). */\r\n protected _controller: Nullable<BaseCameraController>;\r\n /** @internal World-space frustum (from VP). */\r\n protected _frustum: Nullable<Frustum>;\r\n /** @internal View-space frustum (from P). */\r\n protected _frustumV: Nullable<Frustum>;\r\n /** @internal Dirty flag indicating derived matrices/frusta need recompute. */\r\n protected _dirty: boolean;\r\n /** @internal Viewport [x, y, w, h]; null uses full framebuffer. */\r\n protected _viewport: Nullable<number[]>;\r\n /** @internal Scissor rectangle [x, y, w, h]; null uses viewport. */\r\n protected _scissor: Nullable<number[]>;\r\n /** @internal Clip plane mask for custom clipping schemes. */\r\n protected _clipMask: number;\r\n /** @internal Order-Independent Transparency reference. */\r\n protected _oit: DRef<OIT>;\r\n /** @internal OIT algorithm selection mode. */\r\n protected _oitMode: CameraOITMode;\r\n /** @internal ABuffer OIT layer budget. */\r\n protected _oitABufferLayers: number;\r\n /** @internal Dual depth peeling OIT peel iteration count. */\r\n protected _oitDualDepthPeels: number;\r\n /** @internal Whether to perform a depth pre-pass. */\r\n protected _depthPrePass: boolean;\r\n /** @internal Render path selection for scene renderer. */\r\n protected _renderPath: RenderPath;\r\n /** @internal Whether command buffers may be reused for optimization. */\r\n protected _commandBufferReuse: boolean;\r\n /** @internal Hi-Z acceleration enable (primarily for SSR). */\r\n protected _HiZ: boolean;\r\n protected _HiZNearest: boolean;\r\n /** @internal Screen-space shadow mask enable (Forward+ deferred shadows). */\r\n protected _screenSpaceShadowMask: boolean;\r\n /** @internal If true, a float point backbuffer will be used. The default value is true */\r\n protected _HDR: boolean;\r\n /** @internal Tonemap enable flag (via post effect). */\r\n protected _toneMap: boolean;\r\n /** @internal Tonemap post effect reference. */\r\n protected _postEffectTonemap: DRef<Tonemap>;\r\n /** @internal Tonemap exposure. */\r\n protected _tonemapExposure: number;\r\n /** @internal Lens aperture expressed as an f-number. */\r\n protected _aperture: number;\r\n /** @internal Shutter-open time in seconds. */\r\n protected _shutterSpeed: number;\r\n /** @internal Sensor sensitivity. */\r\n protected _ISO: number;\r\n /** @internal Exposure compensation in stops. */\r\n protected _exposureCompensation: number;\r\n /** @internal Lighting mode currently reflected by the post effect ordering. */\r\n protected _postProcessingLightingMode: Nullable<LightingMode>;\r\n /** @internal Motion blur enable flag (via post effect). */\r\n protected _motionBlur: boolean;\r\n /** @internal Motion blur post effect reference. */\r\n protected _postEffectMotionBlur: DRef<MotionBlur>;\r\n /** @internal Motion blur strength. */\r\n protected _motionBlurStrength: number;\r\n /** @internal Motion blur shutter bias. */\r\n protected _motionBlurShutterBias: number;\r\n /** @internal Motion blur maximum streak length in pixels. */\r\n protected _motionBlurMaxLength: number;\r\n /** @internal Bloom enable flag (via post effect). */\r\n protected _bloom: boolean;\r\n /** @internal Bloom post effect reference. */\r\n protected _postEffectBloom: DRef<Bloom>;\r\n /** @internal Bloom downsample level cap. */\r\n protected _bloomMaxDownsampleLevels: number;\r\n /** @internal Bloom downsample resolution limit. */\r\n protected _bloomDownsampleLimit: number;\r\n /** @internal Bloom threshold. */\r\n protected _bloomThreshold: number;\r\n /** @internal Bloom threshold knee (soft thresholding). */\r\n protected _bloomThresholdKnee: number;\r\n /** @internal Bloom intensity. */\r\n protected _bloomIntensity: number;\r\n /** @internal */\r\n protected _bloomFilterRadius: number;\r\n /** @internal */\r\n protected _bloomKarisAverage: boolean;\r\n /** @internal Color adjustment enable flag (via post effect). */\r\n protected _colorAdjustEnabled: boolean;\r\n /** @internal Color adjustment post effect reference. */\r\n protected _postEffectColorAdjust: DRef<ColorAdjust>;\r\n /** @internal Color adjustment saturation. */\r\n protected _colorAdjustSaturation: number;\r\n /** @internal Color adjustment contrast. */\r\n protected _colorAdjustContrast: number;\r\n /** @internal Color adjustment hue (degrees). */\r\n protected _colorAdjustHue: number;\r\n /** @internal Color adjustment sharpen amount. */\r\n protected _colorAdjustSharpen: number;\r\n\r\n /** @internal FXAA enable flag (via post effect). */\r\n protected _FXAA: boolean;\r\n /** @internal FXAA post effect reference. */\r\n protected _postEffectFXAA: DRef<FXAA>;\r\n\r\n /** @internal TAA enable flag (via post effect). */\r\n protected _TAA: boolean;\r\n /** @internal TAA post effect reference. */\r\n protected _postEffectTAA: DRef<TAA>;\r\n /** @internal TAA debug mode (implementation-defined). */\r\n protected _TAADebug: number;\r\n /** @internal Cascaded shadow debug visualization flag. */\r\n protected _shadowDebugCascades: boolean;\r\n\r\n /** @internal SSR enable flag (via post effect). */\r\n protected _SSR: boolean;\r\n /** @internal SSR post effect reference. */\r\n protected _postEffectSSR: DRef<SSR>;\r\n /** @internal SSR parameter vector: (maxDistance, iterations, thickness, reserved). */\r\n protected _ssrParams: Vector4;\r\n /** @internal SSR roughness cutoff; above this SSR is suppressed. */\r\n protected _ssrMaxRoughness: number;\r\n /** @internal SSR roughness factor scaling. */\r\n protected _ssrRoughnessFactor: number;\r\n /** @internal SSR stride for ray marching. */\r\n protected _ssrStride: number;\r\n /** @internal Whether SSR thickness is computed automatically. */\r\n protected _ssrCalcThickness: boolean;\r\n /** @internal SSR blur scale. */\r\n protected _ssrBlurriness: number;\r\n /** @internal SSR blur depth cutoff. */\r\n protected _ssrBlurDepthCutoff: number;\r\n /** @internal SSR blur kernel size. */\r\n protected _ssrBlurKernelSize: number;\r\n /** @internal SSR Gaussian blur standard deviation. */\r\n protected _ssrBlurStdDev: number;\r\n /** @internal Whether SSR temporal accumulation is enabled. */\r\n protected _ssrTemporal: boolean;\r\n /** @internal SSR temporal blending weight in [0, 1]. */\r\n protected _ssrTemporalWeight: number;\r\n /** @internal SSGI enable flag (via post effect). */\r\n protected _SSGI: boolean;\r\n /** @internal SSGI post effect reference. */\r\n protected _postEffectSSGI: DRef<SSGI>;\r\n /** @internal SSGI quality preset. */\r\n protected _ssgiQualityPreset: SSGIQualityPreset;\r\n /** @internal Resolved SSGI trace/denoise settings. */\r\n protected _ssgiResolvedSettings: SSGIResolvedSettings;\r\n /** @internal SSGI irradiance composite strength. */\r\n protected _ssgiIntensity: number;\r\n /** @internal Strength of the ambient occlusion traced alongside SSGI. */\r\n protected _ssgiAOIntensity: number;\r\n /** @internal Contrast curve of the SSGI ambient occlusion. */\r\n protected _ssgiAOPower: number;\r\n /** @internal Fraction of environment irradiance removed by an occluding hit. */\r\n protected _ssgiSkyOcclusion: number;\r\n /** @internal Maximum view-space ray distance. */\r\n protected _ssgiMaxDistance: number;\r\n /** @internal Ray hit thickness. */\r\n protected _ssgiThickness: number;\r\n /** @internal Linear trace stride. */\r\n protected _ssgiStride: number;\r\n /** @internal Firefly clamp applied to sampled radiance. */\r\n protected _ssgiMaxRayIntensity: number;\r\n /** @internal Whether SSGI temporal accumulation is enabled. */\r\n protected _ssgiTemporal: boolean;\r\n /** @internal Weight of valid reprojected irradiance. */\r\n protected _ssgiTemporalWeight: number;\r\n /** @internal Maximum linear-depth delta in scene units accepted by reprojection. */\r\n protected _ssgiDepthReject: number;\r\n /** @internal Minimum normal dot product accepted by reprojection. */\r\n protected _ssgiNormalReject: number;\r\n /** @internal SSS enable flag (via post effect). */\r\n protected _SSS: boolean;\r\n /** @internal SSS post effect reference. */\r\n protected _postEffectSSS: DRef<SSS>;\r\n /** @internal SSS blur scale in pixels per authored width unit. */\r\n protected _sssBlurScale: number;\r\n /** @internal High-level preset that resolves SSS blur quality controls. */\r\n protected _sssQualityPreset: SSSQualityPreset;\r\n /** @internal SSS composite strength. */\r\n protected _sssStrength: number;\r\n /** @internal SSS thin-shell transmission strength. */\r\n protected _sssTransmissionStrength: number;\r\n /** @internal SSS thin-shell transmission exponent. */\r\n protected _sssTransmissionPower: number;\r\n /** @internal SSS multi-scatter energy compensation. */\r\n protected _sssMultiScatter: number;\r\n /** @internal Cached runtime SSS settings after applying the quality preset. */\r\n protected _sssResolvedSettings: SSSResolvedSettings;\r\n /** @internal SSS debug visualization mode. */\r\n protected _sssDebugView: SSSDebugView;\r\n /** @internal Skin SSS enable flag (via post effect). */\r\n protected _skinSSS: boolean;\r\n /** @internal Skin SSS post effect reference. */\r\n protected _postEffectSkinSSS: DRef<SkinSSS>;\r\n /** @internal Skin SSS final blend strength. */\r\n protected _skinSSSStrength: number;\r\n /** @internal Skin SSS mask opacity bias. */\r\n protected _skinSSSOpacity: number;\r\n /** @internal Skin SSS maximum blur tap spacing in pixels. */\r\n protected _skinSSSSampleStep: number;\r\n /** @internal Skin SSS world-space scatter radius. */\r\n protected _skinSSSScatterRadius: number;\r\n /** @internal Skin SSS smoothing (\"beauty filter\") amount. */\r\n protected _skinSSSSmoothness: number;\r\n /** @internal Skin SSS depth rejection scale. */\r\n protected _skinSSSDepthScale: number;\r\n /** @internal Skin SSS blurred multiplier boost. */\r\n protected _skinSSSColorBoost: number;\r\n protected _skinSSSGlow: number;\r\n protected _skinSSSProfilePreset: SubsurfaceProfilePreset;\r\n protected _skinSSSProfile: SubsurfaceProfile | null;\r\n protected readonly _skinSSSScatterTint: Vector4;\r\n /** @internal SSAO enable flag (via post effect). */\r\n protected _SSAO: boolean;\r\n /** @internal SSAO post effect reference. */\r\n protected _postEffectSSAO: DRef<SAO>;\r\n /** @internal SSAO scale (sampling radius multiplier). */\r\n protected _SSAOOcclusionRadius: number;\r\n /** @internal SSAO bias (self-shadowing reduction). */\r\n protected _SSAOBias: number;\r\n /** @internal SSAO sample radius. */\r\n /** @internal SSAO intensity. */\r\n protected _SSAOIntensity: number;\r\n /** @internal SSAO blur depth cutoff. */\r\n protected _SSAOBlurDepthCutoff: number;\r\n\r\n /** @internal Pending GPU-pick promise (one-shot). */\r\n protected _pickResultPromise: Nullable<Promise<Nullable<PickResult>>>;\r\n /** @internal Resolver for the pending pick promise. */\r\n protected _pickResultResolve: Nullable<(result: Nullable<PickResult>) => void>;\r\n /** @internal Last pick X position (viewport-relative). */\r\n protected _pickPosX: number;\r\n /** @internal Last pick Y position (viewport-relative). */\r\n protected _pickPosY: number;\r\n /** @internal Last resolved pick result (optional cache). */\r\n protected _pickResult: Nullable<PickResult>;\r\n\r\n /** @internal Current jitter value in clip space (x, y). */\r\n protected _jitterValue: Vector2;\r\n /** @internal Previous frame’s jitter value. */\r\n protected _prevJitterValue: Nullable<Vector2>;\r\n /** @internal Current jittered VP matrix. */\r\n protected _jitteredVPMatrix: Matrix4x4;\r\n /** @internal Inverse of the current jittered VP matrix. */\r\n protected _jitteredInvVPMatrix: Matrix4x4;\r\n /** @internal Previous frame’s non-jittered VP matrix. */\r\n protected _prevVPMatrix: Nullable<Matrix4x4>;\r\n /** @internal Previous frame’s camera world position. */\r\n protected _prevPosition: Nullable<Vector3>;\r\n /** @internal Previous frame’s jittered VP matrix. */\r\n protected _prevJitteredVPMatrix: Nullable<Matrix4x4>;\r\n /** @internal Post-processing compositor attached to this camera. */\r\n protected _compositor: Compositor;\r\n /** @internal Pointer interaction rectangle in css pixels (relative to canvas) */\r\n protected _interactionRect: Nullable<[left: number, top: number, width: number, height: number]>;\r\n /** @internal captured by which mouse button (-1 if not captured) */\r\n protected _capturedButton: number;\r\n /**\r\n * Creates a new camera node.\r\n *\r\n * Initializes projection/view matrices, temporal fields, controller linkage, and\r\n * builds the default post-processing pipeline on the internal compositor.\r\n *\r\n * @param scene - The scene that owns this camera.\r\n * @param projectionMatrix - Optional projection matrix to initialize with.\r\n */\r\n constructor(scene: Nullable<Scene>, projectionMatrix?: Matrix4x4) {\r\n super(scene);\r\n this._projMatrix = projectionMatrix || Matrix4x4.identity();\r\n this._invProjMatrix = Matrix4x4.invert(this._projMatrix);\r\n this._viewMatrix = Matrix4x4.identity();\r\n this._viewProjMatrix = Matrix4x4.identity();\r\n this._invViewProjMatrix = Matrix4x4.identity();\r\n this._clipPlane = null;\r\n this._clearColor = new Vector4(0, 0, 0, 1);\r\n this._clearDepth = DEPTH_CLEAR_VALUE;\r\n this._clearStencil = 0;\r\n this._dirty = true;\r\n this._controller = null;\r\n this._viewport = null;\r\n this._adaptedViewport = null;\r\n this._adaptedRelativeViewport = null;\r\n this._adaptedVersion = 0;\r\n this._scissor = null;\r\n this._clipMask = 0;\r\n this._frustum = null;\r\n this._frustumV = null;\r\n this._oit = new DRef();\r\n this._oitMode = 'none';\r\n this._oitABufferLayers = 20;\r\n this._oitDualDepthPeels = 8;\r\n this._depthPrePass = false;\r\n this._renderPath = 'forward';\r\n this._screenAdapter = new ScreenAdapter();\r\n this._adapted = false;\r\n this._HiZ = false;\r\n this._HiZNearest = false;\r\n this._screenSpaceShadowMask = true;\r\n this._HDR = true;\r\n this._toneMap = true;\r\n this._postEffectTonemap = new DRef();\r\n this._tonemapExposure = 1;\r\n this._aperture = 16;\r\n this._shutterSpeed = 1 / 125;\r\n this._ISO = 100;\r\n this._exposureCompensation = 0;\r\n this._postProcessingLightingMode = null;\r\n this._motionBlur = false;\r\n this._postEffectMotionBlur = new DRef();\r\n this._motionBlurStrength = 1;\r\n this._motionBlurShutterBias = 0.5;\r\n this._motionBlurMaxLength = 40;\r\n this._bloom = false;\r\n this._postEffectBloom = new DRef();\r\n this._bloomMaxDownsampleLevels = 4;\r\n this._bloomDownsampleLimit = 32;\r\n this._bloomThreshold = 0.8;\r\n this._bloomThresholdKnee = 0;\r\n this._bloomIntensity = 1;\r\n this._bloomFilterRadius = 1;\r\n this._bloomKarisAverage = true;\r\n this._colorAdjustEnabled = false;\r\n this._postEffectColorAdjust = new DRef();\r\n this._colorAdjustSaturation = 1;\r\n this._colorAdjustContrast = 1;\r\n this._colorAdjustHue = 0;\r\n this._colorAdjustSharpen = 0;\r\n this._FXAA = false;\r\n this._postEffectFXAA = new DRef();\r\n this._TAA = false;\r\n this._postEffectTAA = new DRef();\r\n this._TAADebug = 0;\r\n this._shadowDebugCascades = false;\r\n this._SSR = false;\r\n this._postEffectSSR = new DRef();\r\n this._ssrParams = new Vector4(64, 96, 0.9, 0);\r\n this._ssrMaxRoughness = 0.55;\r\n this._ssrRoughnessFactor = 1;\r\n this._ssrStride = 1;\r\n this._ssrCalcThickness = false;\r\n this._ssrBlurriness = 0.008;\r\n this._ssrBlurDepthCutoff = 2;\r\n this._ssrBlurKernelSize = 5;\r\n this._ssrBlurStdDev = 4;\r\n this._ssrTemporal = true;\r\n this._ssrTemporalWeight = 0.85;\r\n this._SSGI = false;\r\n this._postEffectSSGI = new DRef();\r\n this._ssgiQualityPreset = 'quality';\r\n const defaultSSGIQualityPreset = SSGI_QUALITY_PRESET_SETTINGS.quality;\r\n this._ssgiResolvedSettings = { ...defaultSSGIQualityPreset };\r\n this._ssgiIntensity = 0.7;\r\n this._ssgiAOIntensity = 0.8;\r\n this._ssgiAOPower = 1;\r\n this._ssgiSkyOcclusion = 1;\r\n this._ssgiMaxDistance = 32;\r\n this._ssgiThickness = 0.5;\r\n this._ssgiStride = 1;\r\n this._ssgiMaxRayIntensity = 10;\r\n this._ssgiTemporal = true;\r\n this._ssgiTemporalWeight = 0.94;\r\n this._ssgiDepthReject = 0.5;\r\n this._ssgiNormalReject = 0.75;\r\n this._SSS = false;\r\n this._postEffectSSS = new DRef();\r\n this._sssBlurScale = SSS_DEFAULT_SETTINGS.blurScale;\r\n this._sssQualityPreset = 'balanced';\r\n this._sssStrength = SSS_DEFAULT_SETTINGS.strength;\r\n this._sssTransmissionStrength = SSS_DEFAULT_SETTINGS.transmissionStrength;\r\n this._sssTransmissionPower = SSS_DEFAULT_SETTINGS.transmissionPower;\r\n this._sssMultiScatter = SSS_DEFAULT_SETTINGS.multiScatter;\r\n const defaultSSSQualityPreset = SSS_QUALITY_PRESET_SETTINGS.balanced;\r\n this._sssResolvedSettings = {\r\n halfRes: defaultSSSQualityPreset.halfRes,\r\n blurKernelSize: defaultSSSQualityPreset.blurKernelSize,\r\n blurStdDev: defaultSSSQualityPreset.blurStdDev,\r\n blurDepthCutoff: defaultSSSQualityPreset.blurDepthCutoff,\r\n normalCutoff: defaultSSSQualityPreset.normalCutoff\r\n };\r\n this.updateSSSResolvedSettings();\r\n this._sssDebugView = 'none';\r\n this._skinSSS = false;\r\n this._postEffectSkinSSS = new DRef();\r\n this._skinSSSStrength = 1;\r\n this._skinSSSOpacity = 0.18;\r\n this._skinSSSSampleStep = 2;\r\n this._skinSSSScatterRadius = 0.02;\r\n this._skinSSSSmoothness = 0;\r\n this._skinSSSDepthScale = 80;\r\n this._skinSSSColorBoost = 1;\r\n this._skinSSSGlow = 0;\r\n this._skinSSSProfilePreset = 'skin_default';\r\n this._skinSSSProfile = null;\r\n this._skinSSSScatterTint = new Vector4(1, 1, 1, 1);\r\n this._SSAO = false;\r\n this._postEffectSSAO = new DRef();\r\n this._SSAOOcclusionRadius = 0.25;\r\n this._SSAOBias = 0.05;\r\n this._SSAOIntensity = 1;\r\n this._SSAOBlurDepthCutoff = 2;\r\n this._pickResult = null;\r\n this._commandBufferReuse = true;\r\n this._jitteredVPMatrix = new Matrix4x4();\r\n this._jitteredInvVPMatrix = new Matrix4x4();\r\n this._jitterValue = new Vector2(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n this._pickPosX = 0;\r\n this._pickPosY = 0;\r\n this._compositor = new Compositor();\r\n this._capturedButton = -1;\r\n this._interactionRect = null;\r\n this.updatePostProcessing();\r\n if (scene && !scene.mainCamera) {\r\n scene.mainCamera = this;\r\n }\r\n }\r\n /**\r\n * The compositor that owns and runs the camera's post-processing chain.\r\n */\r\n get compositor() {\r\n return this._compositor;\r\n }\r\n /**\r\n * Pointer interaction rectangle in css pixels (relative to canvas)\r\n */\r\n get interactionRect() {\r\n return this._interactionRect;\r\n }\r\n set interactionRect(rect) {\r\n this._interactionRect = rect;\r\n }\r\n /**\r\n * Framebuffer clear color, or `null` to disable.\r\n */\r\n get clearColor() {\r\n return this._clearColor;\r\n }\r\n set clearColor(v) {\r\n this._clearColor = v?.clone() ?? null;\r\n }\r\n /**\r\n * Framebuffer stencil clear value, disabled when null. Default is 0.\r\n */\r\n get clearDepth() {\r\n return this._clearDepth;\r\n }\r\n set clearDepth(v) {\r\n this._clearDepth = v;\r\n }\r\n /**\r\n * Framebuffer stencil clear value, disabled when null. Default is 0.\r\n */\r\n get clearStencil() {\r\n return this._clearStencil;\r\n }\r\n set clearStencil(v) {\r\n this._clearStencil = v;\r\n }\r\n /**\r\n * Whether Hi-Z acceleration is enabled.\r\n *\r\n * Often improves SSR performance with little quality impact when supported.\r\n */\r\n get HiZ() {\r\n return this._HiZ;\r\n }\r\n set HiZ(val) {\r\n this._HiZ = !!val;\r\n }\r\n /**\r\n * Whether the Hi-Z pyramid carries its nearest-depth channel.\r\n *\r\n * The pyramid's own channel answers \"what is the farthest thing in this screen\r\n * region\", which is what occlusion and ray marching want; this one answers\r\n * \"what is the nearest\", which is what a proximity query wants. It doubles the\r\n * pyramid's bandwidth, so it is off unless something asks for it.\r\n *\r\n * Materials that query it - water's shoreline foam - turn it on by themselves,\r\n * the way a transmissive material turns on the scene colour copy, so this only\r\n * has to be set to force the channel on for something the renderer cannot see\r\n * coming. Ignored on WebGL1, which has no pyramid at all.\r\n */\r\n get HiZNearest() {\r\n return this._HiZNearest;\r\n }\r\n set HiZNearest(val) {\r\n this._HiZNearest = !!val;\r\n }\r\n /**\r\n * Whether the screen-space shadow mask is enabled.\r\n *\r\n * When enabled, shadow-casting lights are lit through the clustered pass and\r\n * sample a pre-rendered screen-space shadow mask instead of each casting an\r\n * additional full-scene additive light pass. Requires the depth prepass\r\n * (always on in Forward+).\r\n */\r\n get screenSpaceShadowMask() {\r\n return this._screenSpaceShadowMask;\r\n }\r\n set screenSpaceShadowMask(val) {\r\n this._screenSpaceShadowMask = !!val;\r\n }\r\n /**\r\n * Render path used by the scene renderer.\r\n */\r\n get renderPath() {\r\n return this._renderPath;\r\n }\r\n set renderPath(_val: RenderPath) {\r\n this._renderPath = 'forward';\r\n }\r\n /**\r\n * Whether HDR backbuffer is enabled.\r\n *\r\n * Tonemap should be disabled when not using HDR backbuffer.\r\n */\r\n get HDR() {\r\n return this._HDR;\r\n }\r\n set HDR(val) {\r\n this._HDR = !!val;\r\n }\r\n /**\r\n * Whether tonemapping is enabled via the post effect.\r\n */\r\n get toneMap() {\r\n return this._postEffectTonemap.get()!.enabled;\r\n }\r\n set toneMap(val) {\r\n this._postEffectTonemap.get()!.enabled = !!val;\r\n }\r\n /**\r\n * Whether motion blur is enabled via the post effect.\r\n */\r\n get motionBlur() {\r\n return this._postEffectMotionBlur.get()!.enabled;\r\n }\r\n set motionBlur(val) {\r\n this._postEffectMotionBlur.get()!.enabled = !!val;\r\n }\r\n /** Motion blur strength */\r\n get motionBlurStrength() {\r\n return this._motionBlurStrength;\r\n }\r\n set motionBlurStrength(val) {\r\n this._motionBlurStrength = val;\r\n if (this._postEffectMotionBlur.get()) {\r\n this._postEffectMotionBlur.get()!.strength = this._motionBlurStrength;\r\n }\r\n }\r\n /**\r\n * How much of the motion blur streak lies ahead of where an object is now,\r\n * as a fraction of its length. 0 trails the streak fully behind the object,\r\n * 0.5 (the default) centres it. See {@link MotionBlur.shutterBias}.\r\n */\r\n get motionBlurShutterBias() {\r\n return this._motionBlurShutterBias;\r\n }\r\n set motionBlurShutterBias(val) {\r\n this._motionBlurShutterBias = val;\r\n if (this._postEffectMotionBlur.get()) {\r\n this._postEffectMotionBlur.get()!.shutterBias = val;\r\n // The effect clamps; read it back so the camera and the effect cannot\r\n // disagree about what was actually applied.\r\n this._motionBlurShutterBias = this._postEffectMotionBlur.get()!.shutterBias;\r\n }\r\n }\r\n /**\r\n * Longest motion blur streak, in pixels at render resolution. This is the\r\n * ceiling {@link Camera.motionBlurStrength} runs into; raising it costs\r\n * samples in proportion. See {@link MotionBlur.maxBlurLength}.\r\n */\r\n get motionBlurMaxLength() {\r\n return this._motionBlurMaxLength;\r\n }\r\n set motionBlurMaxLength(val) {\r\n this._motionBlurMaxLength = val;\r\n if (this._postEffectMotionBlur.get()) {\r\n this._postEffectMotionBlur.get()!.maxBlurLength = val;\r\n // The effect clamps; read it back so the camera and the effect cannot\r\n // disagree about what was actually applied.\r\n this._motionBlurMaxLength = this._postEffectMotionBlur.get()!.maxBlurLength;\r\n }\r\n }\r\n /**\r\n * Gets whether Bloom is enabled.\r\n */\r\n get bloom() {\r\n return this._postEffectBloom.get()!.enabled;\r\n }\r\n set bloom(val) {\r\n this._postEffectBloom.get()!.enabled = !!val;\r\n }\r\n /**\r\n * Maximum bloom downsample levels\r\n */\r\n get bloomMaxDownsampleLevels() {\r\n return this._bloomMaxDownsampleLevels;\r\n }\r\n set bloomMaxDownsampleLevels(val) {\r\n this._bloomMaxDownsampleLevels = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.maxDownsampleLevel = val;\r\n }\r\n }\r\n /**\r\n * Bloom downsample limit\r\n */\r\n get bloomDownsampleLimit() {\r\n return this._bloomDownsampleLimit;\r\n }\r\n set bloomDownsampleLimit(val) {\r\n this._bloomDownsampleLimit = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.downsampleLimit = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold\r\n */\r\n get bloomThreshold() {\r\n return this._bloomThreshold;\r\n }\r\n set bloomThreshold(val) {\r\n this._bloomThreshold = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.threshold = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold knee\r\n */\r\n get bloomThresholdKnee() {\r\n return this._bloomThresholdKnee;\r\n }\r\n set bloomThresholdKnee(val) {\r\n this._bloomThresholdKnee = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.thresholdKnee = val;\r\n }\r\n }\r\n /**\r\n * Bloom intensity\r\n */\r\n get bloomIntensity() {\r\n return this._bloomIntensity;\r\n }\r\n set bloomIntensity(val) {\r\n this._bloomIntensity = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.intensity = val;\r\n }\r\n }\r\n /**\r\n * Radius of the tent filter used to upsample the bloom pyramid, in source texels.\r\n *\r\n * @remarks\r\n * See {@link Bloom.filterRadius}. 1 is the natural width; raising it softens the halo but past\r\n * ~2 the tent's taps stop overlapping and a grid pattern reappears.\r\n */\r\n get bloomFilterRadius() {\r\n return this._bloomFilterRadius;\r\n }\r\n set bloomFilterRadius(val) {\r\n this._bloomFilterRadius = Math.max(0, val);\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.filterRadius = this._bloomFilterRadius;\r\n }\r\n }\r\n /**\r\n * Whether the first bloom downsample uses the Karis average to suppress fireflies.\r\n *\r\n * @remarks\r\n * See {@link Bloom.karisAverage}. On by default; costs a little halo reach in exchange for\r\n * stability on high-frequency speculars.\r\n */\r\n get bloomKarisAverage() {\r\n return this._bloomKarisAverage;\r\n }\r\n set bloomKarisAverage(val) {\r\n this._bloomKarisAverage = !!val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get()!.karisAverage = this._bloomKarisAverage;\r\n }\r\n }\r\n /**\r\n * Whether tone mapping dithers its result before the 8-bit write.\r\n *\r\n * @remarks\r\n * See {@link Tonemap.dither}. On by default; removes the banding shallow gradients such as bloom\r\n * halos otherwise show once quantized. Turn it off for reproducible pixel captures.\r\n */\r\n get toneMapDither() {\r\n return this._postEffectTonemap.get()!.dither;\r\n }\r\n set toneMapDither(val) {\r\n this._postEffectTonemap.get()!.dither = !!val;\r\n }\r\n /** Whether color adjustment is enabled. */\r\n get colorAdjust() {\r\n return this._postEffectColorAdjust.get()!.enabled;\r\n }\r\n set colorAdjust(val) {\r\n this._postEffectColorAdjust.get()!.enabled = !!val;\r\n }\r\n /** Color adjustment saturation, 1 means unchanged. */\r\n get colorAdjustSaturation() {\r\n return this._colorAdjustSaturation;\r\n }\r\n set colorAdjustSaturation(val) {\r\n this._colorAdjustSaturation = val;\r\n if (this._postEffectColorAdjust.get()) {\r\n this._postEffectColorAdjust.get()!.saturation = val;\r\n }\r\n }\r\n /** Color adjustment contrast, 1 means unchanged. */\r\n get colorAdjustContrast() {\r\n return this._colorAdjustContrast;\r\n }\r\n set colorAdjustContrast(val) {\r\n this._colorAdjustContrast = val;\r\n if (this._postEffectColorAdjust.get()) {\r\n this._postEffectColorAdjust.get()!.contrast = val;\r\n }\r\n }\r\n /** Color adjustment hue in degrees. */\r\n get colorAdjustHue() {\r\n return this._colorAdjustHue;\r\n }\r\n set colorAdjustHue(val) {\r\n this._colorAdjustHue = val;\r\n if (this._postEffectColorAdjust.get()) {\r\n this._postEffectColorAdjust.get()!.hue = val;\r\n }\r\n }\r\n /** Color adjustment sharpen amount, 0 means disabled. */\r\n get colorAdjustSharpen() {\r\n return this._colorAdjustSharpen;\r\n }\r\n set colorAdjustSharpen(val) {\r\n this._colorAdjustSharpen = val;\r\n if (this._postEffectColorAdjust.get()) {\r\n this._postEffectColorAdjust.get()!.sharpen = val;\r\n }\r\n }\r\n /**\r\n * Gets whether FXAA is enabled.\r\n */\r\n get FXAA() {\r\n return this._postEffectFXAA.get()!.enabled;\r\n }\r\n set FXAA(val) {\r\n this._postEffectFXAA.get()!.enabled = !!val;\r\n }\r\n /**\r\n * Tonemap exposure\r\n */\r\n get toneMapExposure() {\r\n return this._tonemapExposure;\r\n }\r\n set toneMapExposure(val) {\r\n // syncPostProcessingMode() re-uploads the resolved exposure every frame, so this only needs to\r\n // record the authored value. Legacy scenes read it back verbatim; physical scenes ignore it.\r\n this._tonemapExposure = val;\r\n }\r\n /** Lens aperture as an f-number. */\r\n get aperture() {\r\n return this._aperture;\r\n }\r\n set aperture(val: number) {\r\n this._aperture = Math.max(0.0001, val);\r\n }\r\n /** Shutter-open time in seconds. */\r\n get shutterSpeed() {\r\n return this._shutterSpeed;\r\n }\r\n set shutterSpeed(val: number) {\r\n this._shutterSpeed = Math.max(0.000001, val);\r\n }\r\n /** Sensor sensitivity in ISO units. */\r\n get ISO() {\r\n return this._ISO;\r\n }\r\n set ISO(val: number) {\r\n this._ISO = Math.max(0.0001, val);\r\n }\r\n /** Exposure compensation in stops (EV). */\r\n get exposureCompensation() {\r\n return this._exposureCompensation;\r\n }\r\n set exposureCompensation(val: number) {\r\n this._exposureCompensation = val;\r\n }\r\n /** Photographic EV100 calculated from aperture, shutter time and ISO. */\r\n get EV100() {\r\n return calculateEV100(this._aperture, this._shutterSpeed, this._ISO);\r\n }\r\n /** Scene-linear physical exposure multiplier, including exposure compensation. */\r\n get exposure() {\r\n return calculatePhysicalExposure(\r\n this._aperture,\r\n this._shutterSpeed,\r\n this._ISO,\r\n this._exposureCompensation\r\n );\r\n }\r\n /**\r\n * Gets whether TAA is enabled.\r\n */\r\n get TAA() {\r\n return this._postEffectTAA.get()!.enabled;\r\n }\r\n set TAA(val) {\r\n this._postEffectTAA.get()!.enabled = !!val;\r\n }\r\n /**\r\n * Gets the debug flag for TAA\r\n */\r\n get TAADebug() {\r\n return this._TAADebug;\r\n }\r\n set TAADebug(val) {\r\n this._TAADebug = val;\r\n }\r\n /**\r\n * Enables cascade debug visualization for directional shadows.\r\n */\r\n get shadowDebugCascades() {\r\n return this._shadowDebugCascades;\r\n }\r\n set shadowDebugCascades(val) {\r\n this._shadowDebugCascades = !!val;\r\n }\r\n /**\r\n * Gets whether Screen Space Reflections (SSR) is enabled.\r\n */\r\n get SSR() {\r\n return this._postEffectSSR.get()!.enabled;\r\n }\r\n set SSR(val) {\r\n this._postEffectSSR.get()!.enabled = !!val;\r\n }\r\n /** Gets whether Screen Space Global Illumination is enabled for this camera. */\r\n get SSGI() {\r\n return this._postEffectSSGI.get()!.enabled;\r\n }\r\n set SSGI(val) {\r\n const next = !!val;\r\n if (next !== this._postEffectSSGI.get()!.enabled) {\r\n this._postEffectSSGI.get()!.enabled = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** High-level SSGI trace and denoise quality preset. */\r\n get ssgiQualityPreset() {\r\n return this._ssgiQualityPreset;\r\n }\r\n set ssgiQualityPreset(val: SSGIQualityPreset) {\r\n const next = Camera.resolveSSGIQualityPreset(val);\r\n if (next !== this._ssgiQualityPreset) {\r\n this._ssgiQualityPreset = next;\r\n if (next !== 'custom') {\r\n this._ssgiResolvedSettings = { ...SSGI_QUALITY_PRESET_SETTINGS[next] };\r\n }\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Resolved trace and denoise settings for the current SSGI preset. */\r\n get ssgiResolvedSettings(): Readonly<SSGIResolvedSettings> {\r\n return this._ssgiResolvedSettings;\r\n }\r\n /** Whether the custom SSGI trace runs at half resolution. */\r\n get ssgiHalfResolution() {\r\n return this._ssgiResolvedSettings.halfRes;\r\n }\r\n set ssgiHalfResolution(val) {\r\n this.updateSSGICustomSettings({ halfRes: !!val });\r\n }\r\n /** Number of diffuse rays traced per pixel by the custom SSGI preset. */\r\n get ssgiRaysPerPixel() {\r\n return this._ssgiResolvedSettings.raysPerPixel;\r\n }\r\n set ssgiRaysPerPixel(val) {\r\n this.updateSSGICustomSettings({\r\n raysPerPixel: Math.max(1, Math.min(4, Math.round(val ?? 1)))\r\n });\r\n }\r\n /** Maximum screen-space ray-march iterations used by the custom SSGI preset. */\r\n get ssgiMaxSteps() {\r\n return this._ssgiResolvedSettings.maxSteps;\r\n }\r\n set ssgiMaxSteps(val) {\r\n this.updateSSGICustomSettings({\r\n maxSteps: Math.max(1, Math.min(256, Math.round(val ?? 1)))\r\n });\r\n }\r\n /** Number of cross-bilateral a-trous passes used by the custom SSGI preset. */\r\n get ssgiDenoisePasses() {\r\n return this._ssgiResolvedSettings.denoisePasses;\r\n }\r\n set ssgiDenoisePasses(val) {\r\n this.updateSSGICustomSettings({\r\n denoisePasses: Math.max(0, Math.min(5, Math.round(val ?? 0)))\r\n });\r\n }\r\n /** SSGI diffuse irradiance multiplier. */\r\n get ssgiIntensity() {\r\n return this._ssgiIntensity;\r\n }\r\n set ssgiIntensity(val) {\r\n const next = Math.max(0, val ?? 0);\r\n if (next !== this._ssgiIntensity) {\r\n this._ssgiIntensity = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /**\r\n * How much environment irradiance an occluding hit removes, in [0, 1].\r\n *\r\n * A screen-space ray that hits geometry blocks the sky for that direction. At 1\r\n * the environment contribution is removed in full, which is what produces sky\r\n * occlusion in interiors and corners; lower values dim the sky less than the\r\n * geometry implies, for art direction or to compensate for the hemisphere a\r\n * screen-space trace cannot see. Only the removal is scaled — bounce light\r\n * measured at the hit is always kept, so lowering this brightens without ever\r\n * discarding indirect light. {@link Camera.ssgiIntensity} still bounds how dark\r\n * the result can get, so full occlusion also needs an intensity of 1.\r\n */\r\n get ssgiSkyOcclusion() {\r\n return this._ssgiSkyOcclusion;\r\n }\r\n set ssgiSkyOcclusion(val) {\r\n const next = Math.max(0, Math.min(1, val ?? 0));\r\n if (next !== this._ssgiSkyOcclusion) {\r\n this._ssgiSkyOcclusion = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /**\r\n * How strongly the ambient occlusion traced alongside SSGI darkens the scene,\r\n * in [0, 1]. 0 disables the composite entirely.\r\n *\r\n * The occlusion comes from the same rays that produce the irradiance, at no\r\n * extra trace cost, and is multiplied into the final opaque color — the same\r\n * semantics the standalone {@link SAO} post effect applies. **Enabling both at\r\n * once therefore darkens twice.** Its range is the SSGI trace range\r\n * ({@link Camera.ssgiMaxDistance}), so this is long-range occlusion rather than\r\n * the small-radius contact darkening a dedicated AO pass produces.\r\n *\r\n * Defaults to 0.8 rather than 1: SSGI irradiance already has sky occlusion\r\n * subtracted, so diffuse is partly occluded before this multiply is applied.\r\n */\r\n get ssgiAOIntensity() {\r\n return this._ssgiAOIntensity;\r\n }\r\n set ssgiAOIntensity(val) {\r\n this._ssgiAOIntensity = Math.max(0, Math.min(1, val ?? 0));\r\n }\r\n /**\r\n * Contrast curve applied to the SSGI ambient occlusion before it is composited.\r\n *\r\n * Values above 1 deepen the occluded regions, below 1 lift them. Purely an art\r\n * direction control on an already-traced quantity.\r\n */\r\n get ssgiAOPower() {\r\n return this._ssgiAOPower;\r\n }\r\n set ssgiAOPower(val) {\r\n this._ssgiAOPower = Math.max(0.01, val ?? 1);\r\n }\r\n /** Maximum SSGI ray length in view-space units. */\r\n get ssgiMaxDistance() {\r\n return this._ssgiMaxDistance;\r\n }\r\n set ssgiMaxDistance(val) {\r\n const next = Math.max(0, val ?? 0);\r\n if (next !== this._ssgiMaxDistance) {\r\n this._ssgiMaxDistance = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Depth thickness used by screen-space ray intersection tests. */\r\n get ssgiThickness() {\r\n return this._ssgiThickness;\r\n }\r\n set ssgiThickness(val) {\r\n const next = Math.max(0.0001, val ?? 0.0001);\r\n if (next !== this._ssgiThickness) {\r\n this._ssgiThickness = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Pixel stride used by the WebGL linear ray marcher. */\r\n get ssgiStride() {\r\n return this._ssgiStride;\r\n }\r\n set ssgiStride(val) {\r\n const next = Math.max(1, Math.round(val ?? 1));\r\n if (next !== this._ssgiStride) {\r\n this._ssgiStride = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Maximum per-ray radiance before temporal accumulation (firefly clamp). */\r\n get ssgiMaxRayIntensity() {\r\n return this._ssgiMaxRayIntensity;\r\n }\r\n set ssgiMaxRayIntensity(val) {\r\n const next = Math.max(0, val ?? 0);\r\n if (next !== this._ssgiMaxRayIntensity) {\r\n this._ssgiMaxRayIntensity = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Whether SSGI temporal accumulation is enabled. Has no effect on WebGL1, which has no motion vectors. */\r\n get ssgiTemporal() {\r\n return this._ssgiTemporal;\r\n }\r\n set ssgiTemporal(val) {\r\n const next = !!val;\r\n if (next !== this._ssgiTemporal) {\r\n this._ssgiTemporal = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n /** Weight assigned to valid reprojected SSGI history. */\r\n get ssgiTemporalWeight() {\r\n return this._ssgiTemporalWeight;\r\n }\r\n set ssgiTemporalWeight(val) {\r\n this._ssgiTemporalWeight = Math.max(0, Math.min(1, val ?? 0));\r\n }\r\n /** Relative linear-depth rejection threshold for SSGI reprojection. */\r\n get ssgiDepthReject() {\r\n return this._ssgiDepthReject;\r\n }\r\n set ssgiDepthReject(val) {\r\n this._ssgiDepthReject = Math.max(0, val ?? 0);\r\n }\r\n /** Minimum world-normal dot product accepted by SSGI reprojection. */\r\n get ssgiNormalReject() {\r\n return this._ssgiNormalReject;\r\n }\r\n set ssgiNormalReject(val) {\r\n this._ssgiNormalReject = Math.max(-1, Math.min(1, val ?? 0));\r\n }\r\n /**\r\n * Gets the maximum roughness value for screen space reflections.\r\n * Controls the cutoff point where surfaces are considered too rough for SSR.\r\n */\r\n get ssrMaxRoughness() {\r\n return this._ssrMaxRoughness;\r\n }\r\n set ssrMaxRoughness(val) {\r\n this._ssrMaxRoughness = val;\r\n }\r\n /**\r\n * Gets the roughness factor for SSR calculations.\r\n * Affects how surface roughness influences reflection clarity.\r\n */\r\n get ssrRoughnessFactor() {\r\n return this._ssrRoughnessFactor;\r\n }\r\n set ssrRoughnessFactor(val) {\r\n this._ssrRoughnessFactor = val;\r\n }\r\n /**\r\n * Gets the stride value for SSR ray marching.\r\n * Controls the step size during ray marching. Larger values improve performance but may miss details.\r\n */\r\n get ssrStride() {\r\n return this._ssrStride;\r\n }\r\n set ssrStride(val) {\r\n this._ssrStride = val;\r\n }\r\n /**\r\n * Gets the maximum distance for SSR ray marching.\r\n * Defines how far rays will travel when searching for reflection intersections.\r\n */\r\n get ssrMaxDistance() {\r\n return this._ssrParams.x;\r\n }\r\n set ssrMaxDistance(val) {\r\n this._ssrParams.x = val;\r\n }\r\n /**\r\n * Gets the number of iterations for SSR ray marching.\r\n * Higher values provide more accurate reflections but impact performance.\r\n */\r\n get ssrIterations() {\r\n return this._ssrParams.y;\r\n }\r\n set ssrIterations(val) {\r\n this._ssrParams.y = val;\r\n }\r\n /**\r\n * Gets the thickness value for SSR calculations.\r\n * Determines the thickness threshold for surfaces when calculating reflections.\r\n */\r\n get ssrThickness() {\r\n return this._ssrParams.z;\r\n }\r\n set ssrThickness(val) {\r\n this._ssrParams.z = val;\r\n }\r\n /**\r\n * Gets whether SSR should calculate thickness automatically.\r\n * When enabled, the system will dynamically compute surface thickness for reflections.\r\n */\r\n get ssrCalcThickness() {\r\n return this._ssrCalcThickness;\r\n }\r\n set ssrCalcThickness(val) {\r\n this._ssrCalcThickness = !!val;\r\n }\r\n /**\r\n * Gets the blur scale factor for SSR.\r\n * Controls the overall intensity of the blur effect applied to reflections.\r\n */\r\n get ssrBlurScale() {\r\n return this._ssrBlurriness;\r\n }\r\n set ssrBlurScale(val) {\r\n this._ssrBlurriness = val;\r\n }\r\n /**\r\n * Gets the depth cutoff value for SSR blur.\r\n * Determines at what depth difference the blur effect should be reduced or eliminated.\r\n */\r\n get ssrBlurDepthCutoff() {\r\n return this._ssrBlurDepthCutoff;\r\n }\r\n set ssrBlurDepthCutoff(val) {\r\n this._ssrBlurDepthCutoff = val;\r\n }\r\n /**\r\n * Gets the kernel size for the SSR blur effect.\r\n * Defines the size of the blur kernel. Larger values create softer, more spread-out blur.\r\n */\r\n get ssrBlurKernelSize() {\r\n return this._ssrBlurKernelSize;\r\n }\r\n set ssrBlurKernelSize(val) {\r\n this._ssrBlurKernelSize = val;\r\n }\r\n /**\r\n * Gets the standard deviation for the SSR Gaussian blur.\r\n * Controls the distribution of the blur effect. Higher values create more pronounced blur.\r\n */\r\n get ssrBlurStdDev() {\r\n return this._ssrBlurStdDev;\r\n }\r\n set ssrBlurStdDev(val) {\r\n this._ssrBlurStdDev = val;\r\n }\r\n /**\r\n * Gets whether SSR temporal accumulation is enabled.\r\n */\r\n get ssrTemporal() {\r\n return this._ssrTemporal;\r\n }\r\n set ssrTemporal(val) {\r\n this._ssrTemporal = !!val;\r\n }\r\n /**\r\n * Gets SSR temporal blending weight in [0, 1].\r\n * Higher values rely more on reprojected history.\r\n */\r\n get ssrTemporalWeight() {\r\n return this._ssrTemporalWeight;\r\n }\r\n set ssrTemporalWeight(val) {\r\n this._ssrTemporalWeight = Math.max(0, Math.min(1, val ?? 0));\r\n }\r\n /**\r\n * Gets whether Screen Space Subsurface Scattering (SSS) is enabled.\r\n */\r\n get SSS() {\r\n return this._postEffectSSS.get()!.enabled;\r\n }\r\n set SSS(val) {\r\n this._postEffectSSS.get()!.enabled = !!val;\r\n }\r\n /** Global blur scale for screen-space SSS. */\r\n get sssBlurScale() {\r\n return this._sssBlurScale;\r\n }\r\n set sssBlurScale(val) {\r\n this._sssBlurScale = Math.max(0, val ?? 0);\r\n }\r\n /**\r\n * High-level quality preset for SSS blur controls.\r\n *\r\n * This is the primary user-facing SSS quality control and only affects\r\n * the blur sampling quality/performance tradeoff, not the authored look.\r\n */\r\n get sssQualityPreset() {\r\n return this._sssQualityPreset;\r\n }\r\n set sssQualityPreset(val: SSSQualityPreset) {\r\n const next = Camera.resolveSSSQualityPreset(val);\r\n if (next !== this._sssQualityPreset) {\r\n this._sssQualityPreset = next;\r\n this.updateSSSResolvedSettings();\r\n }\r\n }\r\n /** Final SSS composite strength. */\r\n get sssStrength() {\r\n return this._sssStrength;\r\n }\r\n set sssStrength(val) {\r\n this._sssStrength = Math.max(0, val ?? 0);\r\n }\r\n /** Thin-shell transmission strength. */\r\n get sssTransmissionStrength() {\r\n return this._sssTransmissionStrength;\r\n }\r\n set sssTransmissionStrength(val) {\r\n this._sssTransmissionStrength = Math.max(0, val ?? 0);\r\n }\r\n /** Thin-shell transmission exponent. */\r\n get sssTransmissionPower() {\r\n return this._sssTransmissionPower;\r\n }\r\n set sssTransmissionPower(val) {\r\n this._sssTransmissionPower = Math.max(0.1, val ?? 0.1);\r\n }\r\n /** Multi-scatter energy compensation factor. */\r\n get sssMultiScatter() {\r\n return this._sssMultiScatter;\r\n }\r\n set sssMultiScatter(val) {\r\n this._sssMultiScatter = Math.max(0, val ?? 0);\r\n }\r\n /** Resolved SSS blur settings after applying the quality preset. */\r\n get sssResolvedSettings(): Readonly<SSSResolvedSettings> {\r\n return this._sssResolvedSettings;\r\n }\r\n /** Debug visualization for screen-space SSS buffers. */\r\n get sssDebugView() {\r\n return this._sssDebugView;\r\n }\r\n set sssDebugView(val: SSSDebugView) {\r\n this._sssDebugView = val ?? 'none';\r\n }\r\n /** Gets whether the dedicated Skin SSS post effect is enabled. */\r\n get skinSSS() {\r\n return this._postEffectSkinSSS.get()!.enabled;\r\n }\r\n set skinSSS(val) {\r\n this._postEffectSkinSSS.get()!.enabled = !!val;\r\n }\r\n /** Final blend strength for the dedicated Skin SSS post effect. */\r\n get skinSSSStrength() {\r\n return this._skinSSSStrength;\r\n }\r\n set skinSSSStrength(val) {\r\n this._skinSSSStrength = Math.max(0, val ?? 0);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.strength = this._skinSSSStrength;\r\n }\r\n }\r\n /** Bias subtracted from the blurred skin mask before compositing. */\r\n get skinSSSOpacity() {\r\n return this._skinSSSOpacity;\r\n }\r\n set skinSSSOpacity(val) {\r\n this._skinSSSOpacity = Math.max(0, Math.min(1, val ?? 0));\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.opacity = this._skinSSSOpacity;\r\n }\r\n }\r\n /** Maximum pixel spacing between blur taps. Caps the projected scatter radius for close-ups. */\r\n get skinSSSSampleStep() {\r\n return this._skinSSSSampleStep;\r\n }\r\n set skinSSSSampleStep(val) {\r\n this._skinSSSSampleStep = Math.max(0.25, val ?? 0.25);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.sampleStep = this._skinSSSSampleStep;\r\n }\r\n }\r\n /** World-space scatter radius. The blur width shrinks with distance to keep this constant. */\r\n get skinSSSScatterRadius() {\r\n return this._skinSSSScatterRadius;\r\n }\r\n set skinSSSScatterRadius(val) {\r\n this._skinSSSScatterRadius = Math.max(0, val ?? 0);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.scatterRadius = this._skinSSSScatterRadius;\r\n }\r\n }\r\n /** Skin smoothing (\"beauty filter\") amount for the dedicated Skin SSS post effect. */\r\n get skinSSSSmoothness() {\r\n return this._skinSSSSmoothness;\r\n }\r\n set skinSSSSmoothness(val) {\r\n this._skinSSSSmoothness = Math.max(0, Math.min(1, val ?? 0));\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.smoothness = this._skinSSSSmoothness;\r\n }\r\n }\r\n /** Depth rejection scale. The reference shader uses 80. */\r\n get skinSSSDepthScale() {\r\n return this._skinSSSDepthScale;\r\n }\r\n set skinSSSDepthScale(val) {\r\n this._skinSSSDepthScale = Math.max(0, val ?? 0);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.depthScale = this._skinSSSDepthScale;\r\n }\r\n }\r\n /** Multiplier applied to the blurred skin lighting multiplier before compositing. */\r\n get skinSSSColorBoost() {\r\n return this._skinSSSColorBoost;\r\n }\r\n set skinSSSColorBoost(val) {\r\n this._skinSSSColorBoost = Math.max(0, val ?? 0);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.colorBoost = this._skinSSSColorBoost;\r\n }\r\n }\r\n /**\r\n * Additive, deliberately non-conserving bleed for the Skin SSS post effect.\r\n *\r\n * @remarks\r\n * 0 (the default) keeps the effect energy conserving: light added to the dark\r\n * side of the terminator is light removed from the lit side. Raising it adds\r\n * the diffused term again without subtracting anything, for skin that reads as\r\n * lit from within; around 1 approximates the look the effect had before it\r\n * conserved energy.\r\n */\r\n get skinSSSGlow() {\r\n return this._skinSSSGlow;\r\n }\r\n set skinSSSGlow(val) {\r\n this._skinSSSGlow = Math.max(0, val ?? 0);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.glow = this._skinSSSGlow;\r\n }\r\n }\r\n /**\r\n * Subsurface profile preset driving the Skin SSS per-channel scatter radii.\r\n *\r\n * @remarks\r\n * The ratio between the red, green and blue radii is what gives a scattering\r\n * surface its character - red travels furthest in skin, which is the\r\n * red-to-yellow gradient at the terminator. Switching presets changes that\r\n * ratio, so `wax` and `jade` are the same code path rather than special cases;\r\n * {@link Camera.skinSSSScatterRadius} still sets how far the light reaches.\r\n *\r\n * Applies to the whole pass. Per-material profiles need the profile-slot path\r\n * used by {@link SSS} instead.\r\n */\r\n get skinSSSProfilePreset(): SubsurfaceProfilePreset {\r\n return this._skinSSSProfilePreset;\r\n }\r\n set skinSSSProfilePreset(val: SubsurfaceProfilePreset) {\r\n this._skinSSSProfilePreset = val ?? 'skin_default';\r\n if (this._skinSSSProfile) {\r\n this._skinSSSProfile.preset = this._skinSSSProfilePreset;\r\n }\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.profile = this.getSkinSSSProfile();\r\n }\r\n }\r\n /**\r\n * The profile object backing {@link Camera.skinSSSProfilePreset}, created on\r\n * first use so that cameras which never enable Skin SSS do not consume one of\r\n * the 255 global profile slots.\r\n * @internal\r\n */\r\n protected getSkinSSSProfile() {\r\n if (!this._skinSSSProfile) {\r\n this._skinSSSProfile = new SubsurfaceProfile();\r\n this._skinSSSProfile.preset = this._skinSSSProfilePreset;\r\n }\r\n return this._skinSSSProfile;\r\n }\r\n /**\r\n * Tint applied to the light the Skin SSS post effect redistributes.\r\n *\r\n * @remarks\r\n * White (the default) leaves the effect energy conserving. Because it\r\n * multiplies only the difference between the diffused and original diffuse, a\r\n * warm tint colors the terminator without washing the whole surface.\r\n */\r\n get skinSSSScatterTint(): Vector4 {\r\n return this._skinSSSScatterTint;\r\n }\r\n set skinSSSScatterTint(val: Vector4) {\r\n this._skinSSSScatterTint.set(val);\r\n if (this._postEffectSkinSSS.get()) {\r\n this._postEffectSkinSSS.get()!.scatterTint = this._skinSSSScatterTint;\r\n }\r\n }\r\n /** @internal */\r\n get ssrParams(): Immutable<Vector4> {\r\n return this._ssrParams;\r\n }\r\n /**\r\n * Gets whether SSAO is enabled.\r\n */\r\n get SSAO() {\r\n return this._postEffectSSAO.get()!.enabled;\r\n }\r\n set SSAO(val) {\r\n this._postEffectSSAO.get()!.enabled = !!val;\r\n }\r\n /**\r\n * SSAO occlusion radius, in world units (metres).\r\n *\r\n * @remarks\r\n * Replaces the old `SSAOScale`, which was a far-plane-relative multiplier and\r\n * carried no physical meaning.\r\n */\r\n get SSAOOcclusionRadius() {\r\n return this._SSAOOcclusionRadius;\r\n }\r\n set SSAOOcclusionRadius(val) {\r\n this._SSAOOcclusionRadius = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get()!.occlusionRadius = val;\r\n }\r\n }\r\n /** SSAO bias */\r\n get SSAOBias() {\r\n return this._SSAOBias;\r\n }\r\n set SSAOBias(val) {\r\n this._SSAOBias = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get()!.bias = val;\r\n }\r\n }\r\n /** SSAO intensity */\r\n get SSAOIntensity() {\r\n return this._SSAOIntensity;\r\n }\r\n set SSAOIntensity(val) {\r\n this._SSAOIntensity = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get()!.intensity = val;\r\n }\r\n }\r\n /** SSAO depth cutoff */\r\n get SSAOBlurDepthCutoff() {\r\n return this._SSAOBlurDepthCutoff;\r\n }\r\n set SSAOBlurDepthCutoff(val) {\r\n this._SSAOBlurDepthCutoff = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get()!.blurDepthCutoff = val;\r\n }\r\n }\r\n /** Whether to perform a depth pass */\r\n get depthPrePass() {\r\n return this._depthPrePass;\r\n }\r\n set depthPrePass(val) {\r\n this._depthPrePass = !!val;\r\n }\r\n /** Whether to allow command buffer reuse optimization */\r\n get commandBufferReuse() {\r\n return this._commandBufferReuse;\r\n }\r\n set commandBufferReuse(val) {\r\n this._commandBufferReuse = !!val;\r\n }\r\n /** Whether this camera is adapted to screen settins */\r\n get adapted() {\r\n return this._adapted;\r\n }\r\n set adapted(val) {\r\n if (val !== this._adapted) {\r\n this._adapted = !!val;\r\n this._adaptedViewport = null;\r\n this._adaptedRelativeViewport = null;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** OIT */\r\n get oit() {\r\n return this._oit.get();\r\n }\r\n set oit(val) {\r\n this._oit.set(val);\r\n const inferredMode = this.inferOITMode(val);\r\n if (inferredMode) {\r\n this._oitMode = inferredMode;\r\n }\r\n }\r\n /** OIT mode */\r\n get oitMode() {\r\n return this._oitMode;\r\n }\r\n set oitMode(val: CameraOITMode) {\r\n const mode = val ?? 'none';\r\n if (mode !== this._oitMode) {\r\n this._oitMode = mode;\r\n this._oit.set(this.createOITForMode(mode));\r\n }\r\n }\r\n /** ABuffer OIT layer budget. */\r\n get oitABufferLayers() {\r\n return this._oitABufferLayers;\r\n }\r\n set oitABufferLayers(val: number) {\r\n const layers = Math.max(1, Math.floor(val || 0));\r\n if (layers !== this._oitABufferLayers) {\r\n this._oitABufferLayers = layers;\r\n if (this._oitMode === 'abuffer') {\r\n this._oit.set(this.createOITForMode('abuffer'));\r\n }\r\n }\r\n }\r\n /** Dual depth peeling OIT peel iteration count. */\r\n get oitDualDepthPeels() {\r\n return this._oitDualDepthPeels;\r\n }\r\n set oitDualDepthPeels(val: number) {\r\n const peels = Math.max(1, Math.floor(val || 0));\r\n if (peels !== this._oitDualDepthPeels) {\r\n this._oitDualDepthPeels = peels;\r\n // Peel count only drives the per-frame pass loop, so update the live\r\n // instance in place instead of rebuilding it.\r\n const oit = this._oit.get();\r\n if (oit instanceof DualDepthPeelingOIT) {\r\n oit.numPeels = peels;\r\n }\r\n }\r\n }\r\n /** Clip plane mask */\r\n get clipMask() {\r\n return this._clipMask;\r\n }\r\n set clipMask(val) {\r\n this._clipMask = val;\r\n }\r\n /** Viewport used for rendering, if null, use full framebuffer size */\r\n get viewport(): Nullable<Immutable<number[]>> {\r\n if (this._adapted) {\r\n if (!this._adaptedViewport) {\r\n this._adaptedViewport = this.calcAdaptedViewport(this._adaptedViewport);\r\n }\r\n return this._adaptedViewport;\r\n }\r\n return this._viewport;\r\n }\r\n set viewport(rect: Nullable<Immutable<number[]>>) {\r\n this._viewport = rect?.slice() ?? null;\r\n }\r\n /** Scissor rectangle used for rendering, if null, use viewport value */\r\n get scissor(): Nullable<Immutable<number[]>> {\r\n return this._adapted ? this.viewport : this._scissor;\r\n }\r\n set scissor(rect: Nullable<Immutable<number[]>>) {\r\n this._scissor = rect?.slice() ?? null;\r\n }\r\n get relativeViewport(): Nullable<Immutable<number[]>> {\r\n if (this._adapted) {\r\n if (!this._adaptedRelativeViewport) {\r\n this._adaptedRelativeViewport = this.calcRelativeAdaptedViewport(this._adaptedRelativeViewport);\r\n }\r\n return this._adaptedRelativeViewport;\r\n }\r\n return this._viewport;\r\n }\r\n /**\r\n * Screen configuration used for adapting the camera viewport\r\n */\r\n get screenConfig(): Immutable<ScreenConfig> {\r\n return this._screenAdapter.config;\r\n }\r\n set screenConfig(config: Immutable<ScreenConfig>) {\r\n this._screenAdapter.config = config;\r\n }\r\n /**\r\n * Screen viewport used for adapting the camera viewport\r\n */\r\n get screenViewport(): Nullable<Immutable<number[]>> {\r\n return this._screenAdapter.viewport;\r\n }\r\n set screenViewport(viewport: Nullable<Immutable<number[]>>) {\r\n this._screenAdapter.viewport = viewport;\r\n }\r\n /**\r\n * Handle input events\r\n * @param ev - input event object\r\n * @param type - event type, default to ev.type\r\n * @returns Boolean value indicates whether the event was handled.\r\n */\r\n handleEvent<T extends IBaseEvent<any>>(ev: T, type?: string) {\r\n let handled = false;\r\n if (this._controller) {\r\n if (\r\n this._capturedButton < 0 &&\r\n (ev instanceof PointerEvent || ev instanceof WheelEvent) &&\r\n !this.posInViewport(ev.offsetX, ev.offsetY)\r\n ) {\r\n return false;\r\n }\r\n type = type ?? ev.type;\r\n if (type === 'pointerdown') {\r\n if (this._capturedButton < 0) {\r\n this._capturedButton = (ev as unknown as IControllerPointerDownEvent).button;\r\n }\r\n handled = this._controller.onMouseDown(ev as unknown as IControllerPointerDownEvent);\r\n } else if (type === 'pointerup') {\r\n handled = this._controller.onMouseUp(ev as unknown as IControllerPointerUpEvent);\r\n if (this._capturedButton === (ev as unknown as IControllerPointerUpEvent).button) {\r\n this._capturedButton = -1;\r\n }\r\n } else if (type === 'pointermove') {\r\n handled = this._controller.onMouseMove(ev as unknown as IControllerPointerMoveEvent);\r\n } else if (type === 'wheel') {\r\n handled = this._controller.onMouseWheel(ev as unknown as IControllerWheelEvent);\r\n } else if (type === 'keydown') {\r\n handled = this._controller.onKeyDown(ev as unknown as IControllerKeydownEvent);\r\n } else if (type === 'keyup') {\r\n handled = this._controller.onKeyUp(ev as unknown as IControllerKeyupEvent);\r\n }\r\n if (handled && ev.preventDefault) {\r\n ev.preventDefault();\r\n }\r\n }\r\n return handled;\r\n }\r\n /**\r\n * Constructs a ray based on the given screen coordinates.\r\n *\r\n * @param x - The x-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @param y - The y-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @returns The ray originating from the camera position and passing through the given screen coordinates.\r\n */\r\n constructRay(x: number, y: number) {\r\n const width = this.viewport ? this.viewport[2] : getDevice().getViewport().width;\r\n const height = this.viewport ? this.viewport[3] : getDevice().getViewport().height;\r\n const ndcX = (2 * x) / width - 1;\r\n const ndcY = 1 - (2 * y) / height;\r\n const nearClip = new Vector4(ndcX, ndcY, REVERSE_Z ? 1 : -1, 1);\r\n const farClip = new Vector4(ndcX, ndcY, REVERSE_Z ? 0 : 1, 1);\r\n const nearWorld = this.invViewProjectionMatrix.transform(nearClip);\r\n const farWorld = this.invViewProjectionMatrix.transform(farClip);\r\n if (this.isPerspective()) {\r\n nearWorld.scaleBy(1 / nearWorld.w);\r\n farWorld.scaleBy(1 / farWorld.w);\r\n }\r\n const vEye = this.isPerspective() ? this.getWorldPosition() : nearWorld.xyz();\r\n const vDir = Vector3.sub(farWorld.xyz(), vEye).inplaceNormalize();\r\n return new Ray(vEye, vDir);\r\n }\r\n /**\r\n * Place the camera by specifying the camera position and the target point\r\n * @param eye - The camera position\r\n * @param target - The target point to look at\r\n * @param up - The up vector\r\n * @returns self\r\n */\r\n lookAt(eye: Vector3, target: Vector3, up: Vector3) {\r\n return this.setLocalTransform(Matrix4x4.lookAt(eye, target, up));\r\n }\r\n /**\r\n * Place the camera to look at a given cube face at a given camera position\r\n * @param face - The cube face to look at\r\n * @param position - The camera position\r\n * @returns self\r\n */\r\n lookAtCubeFace(face: CubeFace, position?: Vector3) {\r\n return this.setLocalTransform(Matrix4x4.lookAtCubeFace(face, position ?? this.position));\r\n }\r\n /**\r\n * Setup a perspective projection matrix for the camera\r\n * @param fovY - The vertical field of view in radians.\r\n * @param aspect - The aspect ratio\r\n * @param zNear - The near clip plane\r\n * @param zFar - The far clip plane\r\n * @returns self\r\n */\r\n setPerspective(fovY: number, aspect: number, zNear: number, zFar: number) {\r\n this._projMatrix.perspective(fovY, aspect, zNear, zFar);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a orthogonal projection matrix for the camera\r\n * @param left - Left bound of the frustum\r\n * @param right - Right bound of the frustum\r\n * @param bottom - Bottom bound of the frustum\r\n * @param top - Top bound of the frustum\r\n * @param near - Near bound of the frustum.\r\n * @param far - Far bound of the frustum.\r\n * @returns self\r\n */\r\n setOrtho(left: number, right: number, bottom: number, top: number, near: number, far: number) {\r\n this._projMatrix.ortho(left, right, bottom, top, near, far);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a projection matrix for the camera\r\n * @param matrix - The projection matrix\r\n */\r\n setProjectionMatrix(matrix: Matrix4x4) {\r\n if (matrix && matrix !== this._projMatrix) {\r\n this._projMatrix = matrix;\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n }\r\n }\r\n /**\r\n * Gets the projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getProjectionMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._projMatrix;\r\n }\r\n /**\r\n * Gets the inverse projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getInvProjectionMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._invProjMatrix;\r\n }\r\n getRotationMatrix() {\r\n const rotationMatrix = new Matrix4x4();\r\n this.worldMatrix.decompose(null, rotationMatrix, null);\r\n const xAxis = rotationMatrix.getRow(0).xyz().scaleBy(-1);\r\n const yAxis = rotationMatrix.getRow(1).xyz();\r\n const zAxis = rotationMatrix.getRow(2).xyz().scaleBy(-1);\r\n rotationMatrix.setRow(0, new Vector4(xAxis.x, xAxis.y, xAxis.z, 0));\r\n rotationMatrix.setRow(1, new Vector4(yAxis.x, yAxis.y, yAxis.z, 0));\r\n rotationMatrix.setRow(2, new Vector4(zAxis.x, zAxis.y, zAxis.z, 0));\r\n return rotationMatrix;\r\n }\r\n /**\r\n * View matrix of the camera\r\n *\r\n * @remarks\r\n * Camera's view matrix will transform a point from the world space to the camera space\r\n */\r\n get viewMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._viewMatrix;\r\n }\r\n get viewProjectionMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._viewProjMatrix;\r\n }\r\n /**\r\n * The inverse-view-projection matrix of the camera\r\n *\r\n * @remarks\r\n * The inverse-view-projection matrix transforms a point from the clip space to the camera space\r\n */\r\n get invViewProjectionMatrix(): Immutable<Matrix4x4> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._invViewProjMatrix;\r\n }\r\n /** Gets the frustum of the camera */\r\n get frustum(): Immutable<Frustum> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n return this._frustum!;\r\n }\r\n get frustumViewSpace(): Immutable<Frustum> {\r\n if (this.dirtyCheck()) {\r\n this._compute();\r\n }\r\n if (!this._frustumV) {\r\n this._frustumV = new Frustum(this._projMatrix);\r\n }\r\n return this._frustumV!;\r\n }\r\n /** The camera controller */\r\n get controller() {\r\n return this._controller;\r\n }\r\n set controller(controller) {\r\n this.setController(controller);\r\n }\r\n /** {@inheritDoc SceneNode.isCamera} */\r\n isCamera(): this is Camera {\r\n return true;\r\n }\r\n /** Gets the near clip plane of the camera */\r\n getNearPlane() {\r\n return this.getProjectionMatrix().getNearPlane();\r\n }\r\n /** Gets the far clip plane of the camera */\r\n getFarPlane() {\r\n return this.getProjectionMatrix().getFarPlane();\r\n }\r\n /** Gets the vertical field of view of the camera */\r\n getFOV() {\r\n return this.getProjectionMatrix().getFov();\r\n }\r\n /** Gets the tangent of half of the vertical field of view */\r\n getTanHalfFovy() {\r\n return this.getProjectionMatrix().getTanHalfFov();\r\n }\r\n /** Gets the aspect ratio */\r\n getAspect() {\r\n return this.getProjectionMatrix().getAspect();\r\n }\r\n /** Returns true if the camera is perspective */\r\n isPerspective() {\r\n return this.getProjectionMatrix().isPerspective();\r\n }\r\n /** Returns true if the camera is orthographic */\r\n isOrtho() {\r\n return this.getProjectionMatrix().isOrtho();\r\n }\r\n /**\r\n * Gets the camera history data which is used in temporal reprojection\r\n * @returns Camera history data\r\n */\r\n getHistoryData() {\r\n let data = Camera._historyData.get(this);\r\n if (!data) {\r\n data = {\r\n prevColorTex: null,\r\n prevMotionVectorTex: null,\r\n prevSSRReflectTex: null,\r\n prevSSRMotionVectorTex: null\r\n };\r\n Camera._historyData.set(this, data);\r\n }\r\n return data;\r\n }\r\n /**\r\n * Clears the camera history data which is used in temporal reprojection\r\n */\r\n clearHistoryData() {\r\n const data = Camera._historyData.get(this);\r\n if (data) {\r\n if (data.prevColorTex) {\r\n getDevice().pool.releaseTexture(data.prevColorTex);\r\n }\r\n if (data.prevMotionVectorTex) {\r\n getDevice().pool.releaseTexture(data.prevMotionVectorTex);\r\n }\r\n if (data.prevSSRReflectTex) {\r\n getDevice().pool.releaseTexture(data.prevSSRReflectTex);\r\n }\r\n if (data.prevSSRMotionVectorTex) {\r\n getDevice().pool.releaseTexture(data.prevSSRMotionVectorTex);\r\n }\r\n Camera._historyData.delete(this);\r\n }\r\n const historyResourceManager = Camera._historyResourceManager.get(this);\r\n if (historyResourceManager) {\r\n historyResourceManager.dispose();\r\n Camera._historyResourceManager.delete(this);\r\n }\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n }\r\n /** @internal */\r\n private updatePostProcessing() {\r\n this._compositor.clear();\r\n if (!this._postEffectSSGI.get()) {\r\n const ssgi = new SSGI();\r\n ssgi.enabled = false;\r\n this._postEffectSSGI.set(ssgi);\r\n // SSGI resolves opaque linear HDR before SSR, transparency and AA.\r\n this._compositor.appendPostEffect(ssgi);\r\n }\r\n if (!this._postEffectSSR.get()) {\r\n const ssr = new SSR();\r\n ssr.enabled = false;\r\n this._postEffectSSR.set(ssr);\r\n this._compositor.appendPostEffect(ssr);\r\n }\r\n if (!this._postEffectSSS.get()) {\r\n const sss = new SSS();\r\n sss.enabled = false;\r\n this._postEffectSSS.set(sss);\r\n this._compositor.appendPostEffect(sss);\r\n }\r\n if (!this._postEffectSkinSSS.get()) {\r\n const skinSSS = new SkinSSS();\r\n skinSSS.enabled = false;\r\n skinSSS.strength = this._skinSSSStrength;\r\n skinSSS.opacity = this._skinSSSOpacity;\r\n skinSSS.sampleStep = this._skinSSSSampleStep;\r\n skinSSS.scatterRadius = this._skinSSSScatterRadius;\r\n skinSSS.smoothness = this._skinSSSSmoothness;\r\n skinSSS.depthScale = this._skinSSSDepthScale;\r\n skinSSS.colorBoost = this._skinSSSColorBoost;\r\n skinSSS.glow = this._skinSSSGlow;\r\n skinSSS.profile = this.getSkinSSSProfile();\r\n skinSSS.scatterTint = this._skinSSSScatterTint;\r\n this._postEffectSkinSSS.set(skinSSS);\r\n this._compositor.appendPostEffect(skinSSS);\r\n }\r\n if (!this._postEffectSSAO.get()) {\r\n const ssao = new SAO();\r\n ssao.enabled = false;\r\n ssao.occlusionRadius = this._SSAOOcclusionRadius;\r\n ssao.bias = this._SSAOBias;\r\n ssao.intensity = this._SSAOIntensity;\r\n ssao.blurDepthCutoff = this._SSAOBlurDepthCutoff;\r\n this._postEffectSSAO.set(ssao);\r\n this._compositor.appendPostEffect(ssao);\r\n }\r\n // Every effect from here down shares the `end` layer, and appendPostEffect keeps insertion\r\n // order within a layer, so the chain is TAA -> MotionBlur -> Bloom -> Tonemap -> ColorAdjust\r\n // -> FXAA.\r\n //\r\n // The resolve leads because everything after it spreads energy -- Bloom spatially, MotionBlur\r\n // along the velocity field -- and doing that to an unconverged frame turns the per-frame\r\n // brightness swing of a sub-pixel specular highlight into a pulsing halo that no later pass can\r\n // take back: the halo is low frequency, so the 3x3 neighbourhood TAA's history clip is built\r\n // from pulses in step with it and admits the pulsing value as valid.\r\n //\r\n // The display chain sits in `end` rather than `transparent` specifically so that TAA does not\r\n // have to move. Effects in the transparent layer read the linear depth from before the\r\n // TransmissionDepth pass rewrites it with the full scene depth, and TAA dilates its velocities\r\n // by that depth; run there, it reads opaque-only depth and picks up its neighbours' motion on\r\n // any geometry the prepass never saw (alpha-blended hair, most visibly). None of the display\r\n // effects read depth at all, so moving them instead is free.\r\n if (!this._postEffectTAA.get()) {\r\n const taa = new TAA();\r\n taa.enabled = false;\r\n this._postEffectTAA.set(taa);\r\n this._compositor.appendPostEffect(taa);\r\n }\r\n if (!this._postEffectMotionBlur.get()) {\r\n const motionBlur = new MotionBlur();\r\n motionBlur.enabled = false;\r\n motionBlur.strength = this._motionBlurStrength;\r\n motionBlur.shutterBias = this._motionBlurShutterBias;\r\n motionBlur.maxBlurLength = this._motionBlurMaxLength;\r\n this._postEffectMotionBlur.set(motionBlur);\r\n this._compositor.appendPostEffect(motionBlur);\r\n }\r\n // Bloom is created before Tonemap because it must see scene-linear radiance:\r\n // its threshold, its blur and its additive compose are all only meaningful in linear light.\r\n // Running it after the ACES curve compressed everything into [0, 1] flattened the emitter range\r\n // (a 100x brighter emitter produced the same halo) and made the compose hard-clip.\r\n if (!this._postEffectBloom.get()) {\r\n const bloom = new Bloom();\r\n bloom.enabled = false;\r\n bloom.maxDownsampleLevel = this._bloomMaxDownsampleLevels;\r\n bloom.downsampleLimit = this._bloomDownsampleLimit;\r\n bloom.threshold = this._bloomThreshold;\r\n bloom.thresholdKnee = this._bloomThresholdKnee;\r\n bloom.intensity = this._bloomIntensity;\r\n bloom.filterRadius = this._bloomFilterRadius;\r\n bloom.karisAverage = this._bloomKarisAverage;\r\n this._postEffectBloom.set(bloom);\r\n this._compositor.appendPostEffect(bloom);\r\n }\r\n if (!this._postEffectTonemap.get()) {\r\n const tonemap = new Tonemap();\r\n tonemap.enabled = true;\r\n tonemap.exposure = this._tonemapExposure;\r\n this._postEffectTonemap.set(tonemap);\r\n this._compositor.appendPostEffect(tonemap);\r\n }\r\n if (!this._postEffectColorAdjust.get()) {\r\n const colorAdjust = new ColorAdjust();\r\n colorAdjust.enabled = false;\r\n colorAdjust.saturation = this._colorAdjustSaturation;\r\n colorAdjust.contrast = this._colorAdjustContrast;\r\n colorAdjust.hue = this._colorAdjustHue;\r\n colorAdjust.sharpen = this._colorAdjustSharpen;\r\n this._postEffectColorAdjust.set(colorAdjust);\r\n this._compositor.appendPostEffect(colorAdjust);\r\n }\r\n if (!this._postEffectFXAA.get()) {\r\n const fxaa = new FXAA();\r\n fxaa.enabled = false;\r\n this._postEffectFXAA.set(fxaa);\r\n this._compositor.appendPostEffect(fxaa);\r\n }\r\n }\r\n\r\n /** @internal */\r\n private syncPostProcessingMode(scene: Scene) {\r\n const tonemap = this._postEffectTonemap.get()!;\r\n // Physical lighting pre-exposes every light quantity on the CPU (see ShaderHelper.getPreExposure),\r\n // so the HDR buffer already sits near 1.0 and tonemapping only applies the ACES curve. Legacy\r\n // keeps its plain exposure multiplier.\r\n const usePhysicalExposure = scene.lightingMode === 'physical';\r\n tonemap.exposure = usePhysicalExposure ? 1 : this._tonemapExposure;\r\n // The chain order no longer depends on the lighting mode: Bloom always precedes Tonemap, so it\r\n // always works on scene-linear radiance. Only the SSGI histories still care about the switch.\r\n if (this._postProcessingLightingMode !== scene.lightingMode) {\r\n // SSGI histories contain scene-linear radiance. Never reuse them across lighting unit models.\r\n this.invalidateSSGIHistory();\r\n this._postProcessingLightingMode = scene.lightingMode;\r\n }\r\n }\r\n\r\n private static resolveSSSQualityPreset(val: SSSQualityPreset) {\r\n switch (val) {\r\n case 'quality':\r\n case 'balanced':\r\n case 'performance':\r\n return val;\r\n default:\r\n return 'balanced';\r\n }\r\n }\r\n\r\n private static resolveSSGIQualityPreset(val: SSGIQualityPreset) {\r\n switch (val) {\r\n case 'quality':\r\n case 'balanced':\r\n case 'performance':\r\n case 'custom':\r\n return val;\r\n default:\r\n return 'quality';\r\n }\r\n }\r\n\r\n private updateSSGICustomSettings(settings: Partial<SSGIResolvedSettings>) {\r\n const next = { ...this._ssgiResolvedSettings, ...settings };\r\n if (\r\n this._ssgiQualityPreset !== 'custom' ||\r\n next.halfRes !== this._ssgiResolvedSettings.halfRes ||\r\n next.raysPerPixel !== this._ssgiResolvedSettings.raysPerPixel ||\r\n next.maxSteps !== this._ssgiResolvedSettings.maxSteps ||\r\n next.denoisePasses !== this._ssgiResolvedSettings.denoisePasses\r\n ) {\r\n this._ssgiQualityPreset = 'custom';\r\n this._ssgiResolvedSettings = next;\r\n this.invalidateSSGIHistory();\r\n }\r\n }\r\n\r\n /** @internal Invalidate only the histories owned by SSGI. */\r\n private invalidateSSGIHistory() {\r\n const history = Camera._historyResourceManager.get(this);\r\n history?.invalidate(RGHistoryResources.SSGI_SCENE_COLOR);\r\n history?.invalidate(RGHistoryResources.SSGI_IRRADIANCE);\r\n history?.invalidate(RGHistoryResources.SSGI_SURFACE);\r\n history?.invalidate(RGHistoryResources.SSGI_MOMENTS);\r\n history?.invalidate(RGHistoryResources.SSGI_AO);\r\n }\r\n\r\n private updateSSSResolvedSettings() {\r\n const source = SSS_QUALITY_PRESET_SETTINGS[this._sssQualityPreset];\r\n this._sssResolvedSettings.halfRes = source.halfRes;\r\n this._sssResolvedSettings.blurKernelSize = source.blurKernelSize;\r\n this._sssResolvedSettings.blurStdDev = source.blurStdDev;\r\n this._sssResolvedSettings.blurDepthCutoff = source.blurDepthCutoff;\r\n this._sssResolvedSettings.normalCutoff = source.normalCutoff;\r\n }\r\n /**\r\n * Renders a scene\r\n * @param scene - The scene to be rendered\r\n * @param compositor - Compositor instance that will be used to apply postprocess effects\r\n */\r\n render(scene: Scene) {\r\n const device = getDevice();\r\n this.syncPostProcessingMode(scene);\r\n scene.dispatchEvent('startrender', scene, this, this._compositor);\r\n device.pushDeviceStates();\r\n device.reverseVertexWindingOrder(false);\r\n scene.getRenderer().renderScene(scene, this);\r\n device.popDeviceStates();\r\n scene.dispatchEvent('endrender', scene, this, this._compositor);\r\n }\r\n /** Prepare current/previous camera transforms used by a motion-vector pass. @internal */\r\n prepareMotionVectorFrame(useTAA: boolean, width: number, height: number): void {\r\n const device = getDevice();\r\n if (useTAA) {\r\n const halton = Camera._halton23[device.frameInfo.frameCounter % Camera._halton23.length];\r\n this._jitterValue.setXY((halton[0] * 2) / width, (halton[1] * 2) / height);\r\n } else {\r\n this._jitterValue.setXY(0, 0);\r\n }\r\n this._jitteredVPMatrix.set(this.getProjectionMatrix());\r\n this._jitteredVPMatrix[8] += this._jitterValue.x;\r\n this._jitteredVPMatrix[9] += this._jitterValue.y;\r\n this._jitteredVPMatrix.multiplyRight(this.viewMatrix);\r\n Matrix4x4.invert(this._jitteredVPMatrix, this._jitteredInvVPMatrix);\r\n if (!this._prevJitteredVPMatrix) {\r\n this._prevJitteredVPMatrix = new Matrix4x4();\r\n this._prevJitteredVPMatrix.set(this._jitteredVPMatrix);\r\n this._prevJitterValue = new Vector2(this._jitterValue);\r\n }\r\n if (!this._prevVPMatrix) {\r\n this._prevVPMatrix = new Matrix4x4();\r\n this._prevVPMatrix.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n }\r\n /** Commit camera transforms after a motion-vector frame completes. @internal */\r\n commitMotionVectorFrame(): void {\r\n this._prevJitteredVPMatrix!.set(this._jitteredVPMatrix);\r\n this._prevJitterValue!.set(this._jitterValue);\r\n this._prevVPMatrix!.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n /** Clear temporal camera transforms when motion vectors are not in use. @internal */\r\n clearMotionVectorFrame(): void {\r\n this._jitterValue.setXY(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._jitteredInvVPMatrix.set(this.invViewProjectionMatrix);\r\n }\r\n async pickAsync(posX: number, posY: number) {\r\n this._pickPosX = posX;\r\n this._pickPosY = posY;\r\n if (!this._pickResultPromise) {\r\n this._pickResultPromise = new Promise<Nullable<PickResult>>((resolve) => {\r\n this._pickResultResolve = (result: Nullable<PickResult>) => {\r\n resolve(result);\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n };\r\n });\r\n }\r\n return this._pickResultPromise;\r\n }\r\n /** @internal */\r\n getPickResultResolveFunc() {\r\n return this._pickResultResolve;\r\n }\r\n /** @internal */\r\n getPickPosX() {\r\n return this._pickPosX;\r\n }\r\n /** @internal */\r\n getPickPosY() {\r\n return this._pickPosY;\r\n }\r\n /**\r\n * Updates the controller state\r\n */\r\n updateController() {\r\n this._controller?.update();\r\n }\r\n /**\r\n * Reset the controller\r\n */\r\n resetController() {\r\n this._controller?.reset();\r\n }\r\n /** @internal */\r\n get jitteredVPMatrix(): Immutable<Matrix4x4> {\r\n return this._jitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get jitteredInvVPMatrix(): Immutable<Matrix4x4> {\r\n return this._jitteredInvVPMatrix;\r\n }\r\n /** @internal */\r\n get jitterValue(): Immutable<Vector2> {\r\n return this._jitterValue;\r\n }\r\n /** @internal */\r\n get prevJitteredVPMatrix(): Nullable<Immutable<Matrix4x4>> {\r\n return this._prevJitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get prevJitterValue(): Nullable<Immutable<Vector2>> {\r\n return this._prevJitterValue;\r\n }\r\n /** @internal */\r\n get prevVPMatrix(): Nullable<Immutable<Matrix4x4>> {\r\n return this._prevVPMatrix;\r\n }\r\n /** @internal */\r\n get prevPosition(): Nullable<Immutable<Vector3>> {\r\n return this._prevPosition;\r\n }\r\n /**\r\n * Gets the camera history resource manager for temporal effects.\r\n */\r\n getHistoryResourceManager(): Nullable<HistoryResourceManager> {\r\n return Camera._historyResourceManager.get(this) ?? null;\r\n }\r\n /**\r\n * Sets the camera history resource manager for temporal effects.\r\n *\r\n * @internal\r\n */\r\n setHistoryResourceManager(manager: HistoryResourceManager): void {\r\n const current = Camera._historyResourceManager.get(this);\r\n if (current && current !== manager) {\r\n current.dispose();\r\n }\r\n Camera._historyResourceManager.set(this, manager);\r\n }\r\n /** @internal */\r\n private _renderPipeline: Nullable<RenderPipeline<FrameGraphContext>> = null;\r\n /**\r\n * The render pipeline that assembles this camera's frame graph. When null\r\n * (the default), the shared default Forward+ pipeline is used. Assign a\r\n * customized pipeline to override rendering for this camera only, e.g.\r\n * `camera.renderPipeline = createForwardPlusPipeline().insertAfter('SkyPass', myModule)`.\r\n */\r\n get renderPipeline(): Nullable<RenderPipeline<FrameGraphContext>> {\r\n return this._renderPipeline;\r\n }\r\n set renderPipeline(pipeline: Nullable<RenderPipeline<FrameGraphContext>>) {\r\n this._renderPipeline = pipeline;\r\n }\r\n /** @internal */\r\n private setController(controller: Nullable<BaseCameraController>) {\r\n if (this._controller !== controller) {\r\n if (controller && controller._getCamera() && controller._getCamera() !== this) {\r\n throw new Error(\r\n 'Camera.setController failed: one camera controller object cannot be assigned to multiple camera'\r\n );\r\n }\r\n this._controller?._setCamera(null);\r\n this._controller = controller;\r\n this._controller?._setCamera(this);\r\n }\r\n return this;\r\n }\r\n /** @internal */\r\n protected _invalidate(projectMatrixChanged: boolean) {\r\n this._dirty = true;\r\n if (projectMatrixChanged) {\r\n this._frustumV = null;\r\n }\r\n }\r\n /** @internal */\r\n protected _compute() {\r\n this._computeProj();\r\n Matrix4x4.invertAffine(this.worldMatrix, this._viewMatrix);\r\n Matrix4x4.multiply(this._projMatrix, this._viewMatrix, this._viewProjMatrix);\r\n Matrix4x4.invert(this._viewProjMatrix, this._invViewProjMatrix);\r\n if (!this._frustum) {\r\n this._frustum = new Frustum(this._viewProjMatrix);\r\n } else {\r\n this._frustum.initWithMatrix(this._viewProjMatrix);\r\n }\r\n }\r\n /** @internal */\r\n protected _computeProj() {}\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean) {\r\n super._onTransformChanged(invalidateLocal);\r\n this._invalidate(false);\r\n }\r\n /** {@inheritdoc SceneNode.onDispose} */\r\n protected onDispose() {\r\n super.onDispose();\r\n this.setController(null);\r\n this.clearHistoryData();\r\n this._postEffectBloom.dispose();\r\n this._postEffectFXAA.dispose();\r\n this._postEffectMotionBlur.dispose();\r\n this._postEffectSSAO.dispose();\r\n this._postEffectSSS.dispose();\r\n this._postEffectSkinSSS.dispose();\r\n this._postEffectSSGI.dispose();\r\n this._postEffectSSR.dispose();\r\n this._postEffectTAA.dispose();\r\n this._postEffectTonemap.dispose();\r\n this._postEffectColorAdjust.dispose();\r\n this._oit.dispose();\r\n }\r\n /** @internal */\r\n private createOITForMode(mode: CameraOITMode): OIT | null {\r\n if (mode === 'abuffer') {\r\n return new ABufferOIT(this._oitABufferLayers);\r\n }\r\n if (mode === 'weighted') {\r\n return new WeightedBlendedOIT();\r\n }\r\n if (mode === 'dual-depth') {\r\n return new DualDepthPeelingOIT(this._oitDualDepthPeels);\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private inferOITMode(oit: Nullable<OIT>): Nullable<CameraOITMode> {\r\n if (!oit) {\r\n return 'none';\r\n }\r\n const type = oit.getType();\r\n if (type === ABufferOIT.type) {\r\n return 'abuffer';\r\n }\r\n if (type === WeightedBlendedOIT.type) {\r\n return 'weighted';\r\n }\r\n if (type === DualDepthPeelingOIT.type) {\r\n return 'dual-depth';\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private posInViewport(x: number, y: number) {\r\n let rect = this._interactionRect;\r\n if (!rect && this.viewport) {\r\n const cvs = getDevice().canvas;\r\n const vp = this.viewport;\r\n const vp_x = vp[0];\r\n const vp_y = cvs.clientHeight - vp[1] - vp[3];\r\n const vp_w = vp[2];\r\n const vp_h = vp[3];\r\n rect = [vp_x, vp_y, vp_w, vp_h];\r\n }\r\n if (!rect) {\r\n return true;\r\n }\r\n x -= rect[0];\r\n y -= rect[1];\r\n return x >= 0 && x < rect[2] && y >= 0 && y < rect[3];\r\n }\r\n /** @internal */\r\n private dirtyCheck() {\r\n if (this._adapted) {\r\n const version = this._screenAdapter.version;\r\n if (this._adaptedVersion !== version) {\r\n this._dirty = true;\r\n this._adaptedViewport = null;\r\n this._adaptedRelativeViewport = null;\r\n this._adaptedVersion = version;\r\n }\r\n }\r\n if (this._dirty) {\r\n this._dirty = false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n private calcAdaptedViewport(outViewport?: Nullable<number[]>): number[] {\r\n outViewport = outViewport ?? [];\r\n const transform = this._screenAdapter.transform;\r\n outViewport[0] = transform.croppedViewport.x;\r\n outViewport[1] = transform.croppedViewport.y;\r\n outViewport[2] = transform.croppedViewport.width;\r\n outViewport[3] = transform.croppedViewport.height;\r\n return outViewport;\r\n }\r\n /** @internal */\r\n private calcRelativeAdaptedViewport(outViewport?: Nullable<number[]>): number[] {\r\n outViewport = outViewport ?? [];\r\n const transform = this._screenAdapter.transform;\r\n outViewport[0] = transform.croppedViewport.x - transform.viewportX;\r\n outViewport[1] = transform.croppedViewport.y - transform.viewportY;\r\n outViewport[2] = transform.croppedViewport.width;\r\n outViewport[3] = transform.croppedViewport.height;\r\n return outViewport;\r\n }\r\n /** @internal */\r\n protected calcAdaptedOrthographicProjection(\r\n nearClip: number,\r\n farClip: number,\r\n outMatrix?: Matrix4x4\r\n ): Matrix4x4 {\r\n const matrix = outMatrix ?? new Matrix4x4();\r\n const transform = this._screenAdapter.transform;\r\n const scaleX = this._screenAdapter.config.designWidth / transform.viewportWidth;\r\n const scaleY = this._screenAdapter.config.designHeight / transform.viewportHeight;\r\n const left = -transform.croppedViewport.width * scaleX * 0.5;\r\n const right = -left;\r\n const bottom = transform.croppedViewport.height * scaleY * 0.5;\r\n const top = -bottom;\r\n return matrix.ortho(left, right, bottom, top, nearClip, farClip);\r\n }\r\n /** @internal */\r\n protected calcAdaptedPerspectiveProjection(\r\n fov: number,\r\n nearClip: number,\r\n farClip: number,\r\n outMatrix?: Matrix4x4\r\n ): Matrix4x4 {\r\n const matrix = outMatrix ?? new Matrix4x4();\r\n const transform = this._screenAdapter.transform;\r\n const aspect = transform.viewportHeight !== 0 ? transform.viewportWidth / transform.viewportHeight : 1;\r\n const h = nearClip * Math.tan(fov * 0.5);\r\n const w = h * aspect;\r\n let left = -w + (2 * w * (transform.croppedViewport.x - transform.viewportX)) / transform.viewportWidth;\r\n let right =\r\n w -\r\n (2 *\r\n w *\r\n (transform.viewportX +\r\n transform.viewportWidth -\r\n transform.croppedViewport.x -\r\n transform.croppedViewport.width)) /\r\n transform.viewportWidth;\r\n let bottom =\r\n -h + (2 * w * (transform.croppedViewport.y - transform.viewportY)) / transform.viewportHeight;\r\n let top =\r\n h -\r\n (2 *\r\n h *\r\n (transform.viewportY +\r\n transform.viewportHeight -\r\n transform.croppedViewport.y -\r\n transform.croppedViewport.height)) /\r\n transform.viewportHeight;\r\n return matrix.frustum(left, right, bottom, top, nearClip, farClip);\r\n }\r\n}\r\n"],"names":["SSGI_QUALITY_PRESET_SETTINGS","quality","halfRes","raysPerPixel","maxSteps","denoisePasses","balanced","performance","SSS_DEFAULT_SETTINGS","blurScale","strength","transmissionStrength","transmissionPower","multiScatter","SSS_QUALITY_PRESET_SETTINGS","blurKernelSize","blurStdDev","blurDepthCutoff","normalCutoff","Camera","SceneNode","_halton23","halton23","_historyData","WeakMap","_historyResourceManager","_HiZNearest","_skinSSSGlow","_skinSSSProfilePreset","_skinSSSProfile","_skinSSSScatterTint","_SSAOIntensity","scene","projectionMatrix","_projMatrix","Matrix4x4","identity","_invProjMatrix","invert","_viewMatrix","_viewProjMatrix","_invViewProjMatrix","_clipPlane","_clearColor","Vector4","_clearDepth","DEPTH_CLEAR_VALUE","_clearStencil","_dirty","_controller","_viewport","_adaptedViewport","_adaptedRelativeViewport","_adaptedVersion","_scissor","_clipMask","_frustum","_frustumV","_oit","DRef","_oitMode","_oitABufferLayers","_oitDualDepthPeels","_depthPrePass","_renderPath","_screenAdapter","ScreenAdapter","_adapted","_HiZ","_screenSpaceShadowMask","_HDR","_toneMap","_postEffectTonemap","_tonemapExposure","_aperture","_shutterSpeed","_ISO","_exposureCompensation","_postProcessingLightingMode","_motionBlur","_postEffectMotionBlur","_motionBlurStrength","_motionBlurShutterBias","_motionBlurMaxLength","_bloom","_postEffectBloom","_bloomMaxDownsampleLevels","_bloomDownsampleLimit","_bloomThreshold","_bloomThresholdKnee","_bloomIntensity","_bloomFilterRadius","_bloomKarisAverage","_colorAdjustEnabled","_postEffectColorAdjust","_colorAdjustSaturation","_colorAdjustContrast","_colorAdjustHue","_colorAdjustSharpen","_FXAA","_postEffectFXAA","_TAA","_postEffectTAA","_TAADebug","_shadowDebugCascades","_SSR","_postEffectSSR","_ssrParams","_ssrMaxRoughness","_ssrRoughnessFactor","_ssrStride","_ssrCalcThickness","_ssrBlurriness","_ssrBlurDepthCutoff","_ssrBlurKernelSize","_ssrBlurStdDev","_ssrTemporal","_ssrTemporalWeight","_SSGI","_postEffectSSGI","_ssgiQualityPreset","defaultSSGIQualityPreset","_ssgiResolvedSettings","_ssgiIntensity","_ssgiAOIntensity","_ssgiAOPower","_ssgiSkyOcclusion","_ssgiMaxDistance","_ssgiThickness","_ssgiStride","_ssgiMaxRayIntensity","_ssgiTemporal","_ssgiTemporalWeight","_ssgiDepthReject","_ssgiNormalReject","_SSS","_postEffectSSS","_sssBlurScale","_sssQualityPreset","_sssStrength","_sssTransmissionStrength","_sssTransmissionPower","_sssMultiScatter","defaultSSSQualityPreset","_sssResolvedSettings","updateSSSResolvedSettings","_sssDebugView","_skinSSS","_postEffectSkinSSS","_skinSSSStrength","_skinSSSOpacity","_skinSSSSampleStep","_skinSSSScatterRadius","_skinSSSSmoothness","_skinSSSDepthScale","_skinSSSColorBoost","_SSAO","_postEffectSSAO","_SSAOOcclusionRadius","_SSAOBias","_SSAOBlurDepthCutoff","_pickResult","_commandBufferReuse","_jitteredVPMatrix","_jitteredInvVPMatrix","_jitterValue","Vector2","_prevVPMatrix","_prevPosition","_prevJitteredVPMatrix","_prevJitterValue","_pickResultPromise","_pickResultResolve","_pickPosX","_pickPosY","_compositor","Compositor","_capturedButton","_interactionRect","updatePostProcessing","mainCamera","compositor","interactionRect","rect","clearColor","v","clone","clearDepth","clearStencil","HiZ","val","HiZNearest","screenSpaceShadowMask","renderPath","_val","HDR","toneMap","get","enabled","motionBlur","motionBlurStrength","motionBlurShutterBias","shutterBias","motionBlurMaxLength","maxBlurLength","bloom","bloomMaxDownsampleLevels","maxDownsampleLevel","bloomDownsampleLimit","downsampleLimit","bloomThreshold","threshold","bloomThresholdKnee","thresholdKnee","bloomIntensity","intensity","bloomFilterRadius","Math","max","filterRadius","bloomKarisAverage","karisAverage","toneMapDither","dither","colorAdjust","colorAdjustSaturation","saturation","colorAdjustContrast","contrast","colorAdjustHue","hue","colorAdjustSharpen","sharpen","FXAA","toneMapExposure","aperture","shutterSpeed","ISO","exposureCompensation","EV100","calculateEV100","exposure","calculatePhysicalExposure","TAA","TAADebug","shadowDebugCascades","SSR","SSGI","next","invalidateSSGIHistory","ssgiQualityPreset","resolveSSGIQualityPreset","ssgiResolvedSettings","ssgiHalfResolution","updateSSGICustomSettings","ssgiRaysPerPixel","min","round","ssgiMaxSteps","ssgiDenoisePasses","ssgiIntensity","ssgiSkyOcclusion","ssgiAOIntensity","ssgiAOPower","ssgiMaxDistance","ssgiThickness","ssgiStride","ssgiMaxRayIntensity","ssgiTemporal","ssgiTemporalWeight","ssgiDepthReject","ssgiNormalReject","ssrMaxRoughness","ssrRoughnessFactor","ssrStride","ssrMaxDistance","x","ssrIterations","y","ssrThickness","z","ssrCalcThickness","ssrBlurScale","ssrBlurDepthCutoff","ssrBlurKernelSize","ssrBlurStdDev","ssrTemporal","ssrTemporalWeight","SSS","sssBlurScale","sssQualityPreset","resolveSSSQualityPreset","sssStrength","sssTransmissionStrength","sssTransmissionPower","sssMultiScatter","sssResolvedSettings","sssDebugView","skinSSS","skinSSSStrength","skinSSSOpacity","opacity","skinSSSSampleStep","sampleStep","skinSSSScatterRadius","scatterRadius","skinSSSSmoothness","smoothness","skinSSSDepthScale","depthScale","skinSSSColorBoost","colorBoost","skinSSSGlow","glow","skinSSSProfilePreset","preset","profile","getSkinSSSProfile","SubsurfaceProfile","skinSSSScatterTint","set","scatterTint","ssrParams","SSAO","SSAOOcclusionRadius","occlusionRadius","SSAOBias","bias","SSAOIntensity","SSAOBlurDepthCutoff","depthPrePass","commandBufferReuse","adapted","_invalidate","oit","inferredMode","inferOITMode","oitMode","mode","createOITForMode","oitABufferLayers","layers","floor","oitDualDepthPeels","peels","DualDepthPeelingOIT","numPeels","clipMask","viewport","calcAdaptedViewport","slice","scissor","relativeViewport","calcRelativeAdaptedViewport","screenConfig","config","screenViewport","handleEvent","ev","type","handled","PointerEvent","WheelEvent","posInViewport","offsetX","offsetY","button","onMouseDown","onMouseUp","onMouseMove","onMouseWheel","onKeyDown","onKeyUp","preventDefault","constructRay","width","getDevice","getViewport","height","ndcX","ndcY","nearClip","REVERSE_Z","farClip","nearWorld","invViewProjectionMatrix","transform","farWorld","isPerspective","scaleBy","w","vEye","getWorldPosition","xyz","vDir","Vector3","sub","inplaceNormalize","Ray","lookAt","eye","target","up","setLocalTransform","lookAtCubeFace","face","position","setPerspective","fovY","aspect","zNear","zFar","perspective","setOrtho","left","right","bottom","top","near","far","ortho","setProjectionMatrix","matrix","getProjectionMatrix","dirtyCheck","_compute","getInvProjectionMatrix","getRotationMatrix","rotationMatrix","worldMatrix","decompose","xAxis","getRow","yAxis","zAxis","setRow","viewMatrix","viewProjectionMatrix","frustum","frustumViewSpace","Frustum","controller","setController","isCamera","getNearPlane","getFarPlane","getFOV","getFov","getTanHalfFovy","getTanHalfFov","getAspect","isOrtho","getHistoryData","data","prevColorTex","prevMotionVectorTex","prevSSRReflectTex","prevSSRMotionVectorTex","clearHistoryData","pool","releaseTexture","delete","historyResourceManager","dispose","clear","ssgi","appendPostEffect","ssr","sss","SkinSSS","ssao","SAO","taa","MotionBlur","Bloom","tonemap","Tonemap","ColorAdjust","fxaa","syncPostProcessingMode","usePhysicalExposure","lightingMode","settings","history","invalidate","RGHistoryResources","SSGI_SCENE_COLOR","SSGI_IRRADIANCE","SSGI_SURFACE","SSGI_MOMENTS","SSGI_AO","source","render","device","dispatchEvent","pushDeviceStates","reverseVertexWindingOrder","getRenderer","renderScene","popDeviceStates","prepareMotionVectorFrame","useTAA","halton","frameInfo","frameCounter","length","setXY","multiplyRight","commitMotionVectorFrame","clearMotionVectorFrame","pickAsync","posX","posY","Promise","resolve","result","getPickResultResolveFunc","getPickPosX","getPickPosY","updateController","update","resetController","reset","jitteredVPMatrix","jitteredInvVPMatrix","jitterValue","prevJitteredVPMatrix","prevJitterValue","prevVPMatrix","prevPosition","getHistoryResourceManager","setHistoryResourceManager","manager","current","_renderPipeline","renderPipeline","pipeline","_getCamera","Error","_setCamera","projectMatrixChanged","_computeProj","invertAffine","multiply","initWithMatrix","_onTransformChanged","invalidateLocal","onDispose","ABufferOIT","WeightedBlendedOIT","getType","cvs","canvas","vp","vp_x","vp_y","clientHeight","vp_w","vp_h","version","outViewport","croppedViewport","viewportX","viewportY","outMatrix","scaleX","designWidth","viewportWidth","scaleY","designHeight","viewportHeight","calcAdaptedPerspectiveProjection","fov","h","tan"],"mappings":"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"}
|