@zephyr3d/scene 0.9.1 → 0.9.3
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 +2 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +2 -7
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +94 -46
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/math.js +16 -0
- package/dist/animation/joint_dynamics/math.js.map +1 -0
- package/dist/animation/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +4 -4
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +13 -40
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/constraints.js.map +1 -1
- package/dist/animation/spring2/controller.js +64 -64
- package/dist/animation/spring2/controller.js.map +1 -1
- package/dist/animation/spring2/math.js.map +1 -1
- package/dist/animation/spring2/spring_system.js +8 -8
- package/dist/animation/spring2/spring_system.js.map +1 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +22 -1
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +60 -60
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +1 -1
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +795 -266
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +3 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/shader/helper.js +281 -278
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/posteffect/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +195 -115
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +25 -5
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +81 -97
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +228 -228
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +94 -66
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/src/app/app.js +129 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/inputmgr.js +267 -0
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/src/blitter/bilateralblur.js +221 -0
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/src/utility/textures/ggxlut.js +213 -0
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +4 -4
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/manager.js +299 -268
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +49 -53
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone.js +0 -240
- package/dist/animation/spring/spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone_collider.js +0 -198
- package/dist/animation/spring/spring_bone_collider.js.map +0 -1
- package/dist/animation/spring/spring_bone_constraint.js +0 -170
- package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
- package/dist/animation/spring/spring_bone_system.js +0 -328
- package/dist/animation/spring/spring_bone_system.js.map +0 -1
- package/dist/render/sky_motion_vector.js +0 -85
- package/dist/render/sky_motion_vector.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forward_plus_builder.js","sources":["../../../src/render/rendergraph/forward_plus_builder.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n ColorState,\r\n FrameBuffer,\r\n GPUProgram,\r\n Texture2D,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { DrawContext } from '../drawable';\r\nimport type { RenderQueue } from '../render_queue';\r\nimport type { PunctualLight, Scene } from '../../scene';\r\nimport type { Camera } from '../../camera';\r\nimport { LightPass } from '../lightpass';\r\nimport { ShadowMapPass } from '../shadowmap_pass';\r\nimport { DepthPass } from '../depthpass';\r\nimport { ClusteredLight } from '../cluster_light';\r\nimport { buildHiZ } from '../hzb';\r\nimport { CopyBlitter } from '../../blitter';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { MaterialVaryingFlags } from '../../values';\r\nimport { AbstractPostEffect, PostEffectLayer } from '../../posteffect/posteffect';\r\nimport { RenderGraph } from './rendergraph';\r\nimport { RenderGraphExecutor } from './executor';\r\nimport { DevicePoolAllocator } from './device_pool_allocator';\r\nimport { HistoryResourceManager } from './history_resource_manager';\r\nimport type { RGHandle } from './types';\r\nimport { renderObjectColors } from '../gpu_picking';\r\nimport type { Primitive } from '../primitive';\r\nimport { BoxShape } from '../../shapes';\r\n\r\n// ─── Shared Pass Instances ──────────────────────────────────────────\r\n\r\nconst _scenePass = new LightPass();\r\nconst _depthPass = new DepthPass();\r\nconst _shadowMapPass = new ShadowMapPass();\r\nconst _clusters: ClusteredLight[] = [];\r\nconst _devicePoolAllocator = new DevicePoolAllocator();\r\nlet _backDepthColorState: Nullable<ColorState> = null;\r\nlet _frontDepthColorState: Nullable<ColorState> = null;\r\n\r\nfunction getClusteredLight(): ClusteredLight {\r\n return _clusters.length > 0 ? _clusters.pop()! : new ClusteredLight();\r\n}\r\nfunction freeClusteredLight(cl: ClusteredLight): void {\r\n _clusters.push(cl);\r\n}\r\n\r\n// ─── Pipeline Options ───────────────────────────────────────────────\r\n\r\n/**\r\n * Options controlling which features are enabled in the forward+ pipeline.\r\n *\r\n * Derived from camera settings and device capabilities each frame.\r\n *\r\n * @public\r\n */\r\nexport interface ForwardPlusOptions {\r\n /** Enable depth prepass (always true for now). */\r\n depthPrepass: boolean;\r\n /** Enable motion vectors (requires TAA or motionBlur). */\r\n motionVectors: boolean;\r\n /** Enable Hi-Z pyramid (for SSR ray tracing). */\r\n hiZ: boolean;\r\n /** Enable screen-space reflections. */\r\n ssr: boolean;\r\n /** Whether to compute SSR thickness. */\r\n ssrCalcThickness: boolean;\r\n /** Whether GPU picking is requested this frame. */\r\n gpuPicking: boolean;\r\n /** Whether transmission/refraction materials are present. */\r\n needSceneColor: boolean;\r\n}\r\n\r\n/**\r\n * Derive pipeline options from the current scene/camera state.\r\n * @internal\r\n */\r\nexport function deriveForwardPlusOptions(\r\n scene: Scene,\r\n camera: Camera,\r\n deviceType: string,\r\n renderQueue: RenderQueue\r\n): ForwardPlusOptions {\r\n const ssr = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();\r\n return {\r\n depthPrepass: true,\r\n motionVectors: deviceType !== 'webgl' && (camera.TAA || camera.motionBlur),\r\n hiZ: camera.HiZ && deviceType !== 'webgl',\r\n ssr: !!ssr,\r\n ssrCalcThickness: !!ssr && camera.ssrCalcThickness,\r\n gpuPicking: !!camera.getPickResultResolveFunc(),\r\n needSceneColor: renderQueue.needSceneColor()\r\n };\r\n}\r\n\r\n// ─── Shared Frame State ─────────────────────────────────────────────\r\n\r\n/**\r\n * Mutable state shared between pass execute callbacks within a single frame.\r\n *\r\n * This replaces the monolithic DrawContext mutation pattern with an explicit\r\n * object that graph passes can read from and write to.\r\n *\r\n * @internal\r\n */\r\nexport interface FrameState {\r\n ctx: DrawContext;\r\n renderQueue: RenderQueue;\r\n depthFramebuffer: Nullable<FrameBuffer>;\r\n sunLightColor: Nullable<any>;\r\n options: ForwardPlusOptions;\r\n}\r\n\r\n// ─── Forward+ Graph Builder ─────────────────────────────────────────\r\n\r\n/**\r\n * Constructs a render graph representing the forward+ pipeline.\r\n *\r\n * Each step in the existing `SceneRenderer._renderScene` becomes a graph pass.\r\n * Execute callbacks delegate to the existing rendering code, sharing a mutable\r\n * {@link FrameState}.\r\n *\r\n * @param graph - The render graph to populate.\r\n * @param ctx - The draw context for this frame.\r\n * @param renderQueue - The culled render queue.\r\n * @param options - Pipeline feature toggles.\r\n * @returns The backbuffer handle (graph output).\r\n *\r\n * @public\r\n */\r\nexport function buildForwardPlusGraph(\r\n graph: RenderGraph,\r\n ctx: DrawContext,\r\n renderQueue: RenderQueue,\r\n options: ForwardPlusOptions\r\n): RGHandle {\r\n const backbuffer = graph.importTexture('backbuffer');\r\n\r\n // Shared mutable frame state\r\n const frame: FrameState = {\r\n ctx,\r\n renderQueue,\r\n depthFramebuffer: null,\r\n sunLightColor: null,\r\n options\r\n };\r\n\r\n // ── 1. Sky Update ─────────────────────────────────────────────────\r\n graph.addPass('SkyUpdate', (builder) => {\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n frame.sunLightColor = ctx.scene.env.sky.update(ctx);\r\n });\r\n });\r\n\r\n // ── 2. Clustered Light Setup ──────────────────────────────────────\r\n graph.addPass('ClusterLights', (builder) => {\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n ctx.clusteredLight = getClusteredLight();\r\n ctx.clusteredLight.calculateLightIndex(ctx.camera, renderQueue);\r\n });\r\n });\r\n\r\n // ── 3. GPU Picking (optional, sideEffect) ─────────────────────────\r\n if (options.gpuPicking) {\r\n graph.addPass('GPUPicking', (builder) => {\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n const pickResolveFunc = ctx.camera.getPickResultResolveFunc();\r\n if (pickResolveFunc) {\r\n renderObjectColors(ctx, pickResolveFunc, renderQueue);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // ── 4. Shadow Maps ────────────────────────────────────────────────\r\n // Shadow maps are managed internally by lights, mark as side effect\r\n if (renderQueue.shadowedLights.length > 0) {\r\n graph.addPass('ShadowMaps', (builder) => {\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n renderShadowMaps(ctx, renderQueue.shadowedLights);\r\n });\r\n });\r\n }\r\n\r\n // ── 5. Depth Prepass ──────────────────────────────────────────────\r\n // Declare transient depth and motion vector textures\r\n const depthPassResult = graph.addPass('DepthPrepass', (builder) => {\r\n const format: TextureFormat =\r\n ctx.device.type === 'webgl'\r\n ? ctx.SSRCalcThickness\r\n ? 'rgba16f'\r\n : 'rgba8unorm'\r\n : ctx.SSRCalcThickness\r\n ? 'rg32f'\r\n : 'r32f';\r\n const mvFormat: TextureFormat = 'rgba16f';\r\n\r\n const depthHandle = builder.createTexture({ format, label: 'linearDepth' });\r\n const motionVectorHandle = options.motionVectors\r\n ? builder.createTexture({ format: mvFormat, label: 'motionVector' })\r\n : undefined;\r\n\r\n builder.setExecute((rgCtx) => {\r\n const depthTex = rgCtx.getTexture<Texture2D>(depthHandle);\r\n const mvTex = motionVectorHandle ? rgCtx.getTexture<Texture2D>(motionVectorHandle) : null;\r\n frame.depthFramebuffer = renderSceneDepth(frame, null, depthTex, mvTex);\r\n });\r\n\r\n return { depthHandle, motionVectorHandle };\r\n });\r\n\r\n const depthHandle = depthPassResult.depthHandle;\r\n const motionVectorHandle = depthPassResult.motionVectorHandle;\r\n\r\n // ── 6. Hi-Z (optional) ───────────────────────────────────────────\r\n let hiZHandle: RGHandle | undefined;\r\n if (options.hiZ) {\r\n graph.addPass('HiZ', (builder) => {\r\n builder.read(depthHandle!);\r\n hiZHandle = builder.createTexture({ format: 'r32f', label: 'hiZ', mipLevels: 10 });\r\n builder.setExecute((rgCtx) => {\r\n const ctx = frame.ctx;\r\n // Use the depth texture from the framebuffer (which contains the RenderGraph texture)\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n if (depthTex) {\r\n // Get the HiZ texture allocated by the executor\r\n const hiZTex = rgCtx.getTexture<Texture2D>(hiZHandle!);\r\n const w = hiZTex.width;\r\n const h = hiZTex.height;\r\n const HiZFrameBuffer = ctx.device.pool.fetchTemporalFramebuffer(false, w, h, hiZTex, null, false);\r\n buildHiZ(depthTex, HiZFrameBuffer);\r\n ctx.HiZTexture = hiZTex;\r\n ctx.device.pool.releaseFrameBuffer(HiZFrameBuffer);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // ── 7. Main Light Pass ────────────────────────────────────────────\r\n const lightPassResult = graph.addPass('LightPass', (builder) => {\r\n builder.read(depthHandle);\r\n if (hiZHandle) {\r\n builder.read(hiZHandle);\r\n }\r\n\r\n // Create scene color texture (intermediate render target)\r\n const sceneColorHandle = builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColor'\r\n });\r\n\r\n // Create optional sceneColorCopy for transmission/refraction materials\r\n let sceneColorCopyHandle: RGHandle | undefined;\r\n if (options.needSceneColor) {\r\n sceneColorCopyHandle = builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColorCopy'\r\n });\r\n }\r\n\r\n builder.setExecute((rgCtx) => {\r\n const sceneColorTex = rgCtx.getTexture<Texture2D>(sceneColorHandle);\r\n const sceneColorCopyTex = sceneColorCopyHandle\r\n ? rgCtx.getTexture<Texture2D>(sceneColorCopyHandle)\r\n : null;\r\n renderMainLightPass(frame, sceneColorTex, sceneColorCopyTex);\r\n });\r\n\r\n return { sceneColorHandle, sceneColorCopyHandle };\r\n });\r\n\r\n const sceneColorHandle = lightPassResult.sceneColorHandle;\r\n\r\n // ── 8. Post Effects + Final Composite ─────────────────────────────\r\n graph.addPass('Composite', (builder) => {\r\n builder.read(sceneColorHandle);\r\n if (motionVectorHandle) {\r\n builder.read(motionVectorHandle);\r\n }\r\n builder.write(backbuffer);\r\n builder.setExecute(() => {\r\n renderComposite(frame);\r\n });\r\n });\r\n\r\n return backbuffer;\r\n}\r\n\r\n// ─── Pass Implementation Helpers ────────────────────────────────────\r\n// These wrap the existing SceneRenderer static methods, adapted to work\r\n// with the FrameState pattern. They contain the same logic as the\r\n// original methods but read/write through FrameState.\r\n\r\n/** @internal */\r\nfunction renderShadowMaps(ctx: DrawContext, lights: PunctualLight[]): void {\r\n ctx.renderPass = _shadowMapPass;\r\n ctx.device.pushDeviceStates();\r\n for (const light of lights) {\r\n light.shadow.render(ctx, _shadowMapPass);\r\n }\r\n ctx.device.popDeviceStates();\r\n}\r\n\r\n/** @internal */\r\nfunction renderSceneDepth(\r\n frame: FrameState,\r\n existingDepthFb: Nullable<FrameBuffer>,\r\n depthTex?: Texture2D,\r\n motionVectorTex?: Nullable<Texture2D>\r\n): FrameBuffer {\r\n const ctx = frame.ctx;\r\n const renderQueue = frame.renderQueue;\r\n const transmission = !!existingDepthFb;\r\n let depthFramebuffer = existingDepthFb;\r\n\r\n if (!depthFramebuffer) {\r\n // Use RenderGraph-allocated textures if provided\r\n if (depthTex) {\r\n const colorAttachments = motionVectorTex ? [depthTex, motionVectorTex] : depthTex;\r\n const depthAttachment = ctx.finalFramebuffer?.getDepthAttachment();\r\n const depthTexOrFormat = depthAttachment?.isTexture2D() ? depthAttachment : ctx.depthFormat;\r\n\r\n depthFramebuffer = ctx.device.pool.fetchTemporalFramebuffer(\r\n true,\r\n depthTex.width,\r\n depthTex.height,\r\n colorAttachments,\r\n depthTexOrFormat,\r\n false\r\n );\r\n } else {\r\n // Fallback: allocate from pool (legacy path)\r\n const format: TextureFormat =\r\n ctx.device.type === 'webgl'\r\n ? ctx.SSRCalcThickness\r\n ? 'rgba16f'\r\n : 'rgba8unorm'\r\n : ctx.SSRCalcThickness\r\n ? 'rg32f'\r\n : 'r32f';\r\n const mvFormat: TextureFormat = 'rgba16f';\r\n if (!ctx.finalFramebuffer) {\r\n depthFramebuffer = ctx.device.pool.fetchTemporalFramebuffer(\r\n true,\r\n ctx.renderWidth,\r\n ctx.renderHeight,\r\n ctx.motionVectors ? [format, mvFormat] : format,\r\n ctx.depthFormat,\r\n false\r\n );\r\n } else {\r\n const originDepth = ctx.finalFramebuffer?.getDepthAttachment();\r\n depthFramebuffer = originDepth?.isTexture2D()\r\n ? ctx.device.pool.fetchTemporalFramebuffer(\r\n true,\r\n originDepth.width,\r\n originDepth.height,\r\n ctx.motionVectors ? [format, mvFormat] : format,\r\n originDepth,\r\n false\r\n )\r\n : ctx.device.pool.fetchTemporalFramebuffer(\r\n true,\r\n ctx.renderWidth,\r\n ctx.renderHeight,\r\n ctx.motionVectors ? [format, mvFormat] : format,\r\n ctx.depthFormat,\r\n false\r\n );\r\n }\r\n }\r\n }\r\n\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(depthFramebuffer!);\r\n _depthPass.encodeDepth = depthFramebuffer!.getColorAttachments()[0].format === 'rgba8unorm';\r\n _depthPass.clearColor = transmission\r\n ? null\r\n : _depthPass.encodeDepth\r\n ? new Vector4(0, 0, 0, 1)\r\n : new Vector4(1, 1, 1, 1);\r\n _depthPass.clearDepth = transmission ? null : 1;\r\n _depthPass.clearStencil = null;\r\n _depthPass.transmission = transmission;\r\n\r\n if (ctx.SSRCalcThickness && !transmission) {\r\n if (!_backDepthColorState) {\r\n _backDepthColorState = ctx.device.createColorState().setColorMask(false, true, false, false);\r\n }\r\n if (!_frontDepthColorState) {\r\n _frontDepthColorState = ctx.device.createColorState().setColorMask(true, false, false, false);\r\n }\r\n ctx.forceColorState = _backDepthColorState;\r\n ctx.forceCullMode = 'front';\r\n _depthPass.renderBackface = true;\r\n _depthPass.transmission = false;\r\n _depthPass.render(ctx, null, null, renderQueue);\r\n _depthPass.clearColor = null;\r\n _depthPass.renderBackface = false;\r\n ctx.forceColorState = _frontDepthColorState;\r\n ctx.forceCullMode = null;\r\n }\r\n _depthPass.render(ctx, null, null, renderQueue);\r\n ctx.forceColorState = null;\r\n ctx.device.popDeviceStates();\r\n\r\n if (!transmission) {\r\n ctx.motionVectorTexture = ctx.motionVectors\r\n ? (depthFramebuffer!.getColorAttachments()[1] as Texture2D)\r\n : null;\r\n ctx.linearDepthTexture = depthFramebuffer!.getColorAttachments()[0] as Texture2D;\r\n ctx.depthTexture = depthFramebuffer!.getDepthAttachment() as Texture2D;\r\n if (ctx.motionVectorTexture) {\r\n // Sky motion vectors rendering is handled inline\r\n renderSkyMotionVectors(ctx);\r\n }\r\n // HiZ is now built in the dedicated HiZ pass\r\n }\r\n return depthFramebuffer!;\r\n}\r\n\r\n// ─── Sky Motion Vector State ────────────────────────────────────────\r\n\r\nlet _skyMVProgram: Nullable<GPUProgram> = null;\r\nlet _skyMVBindGroup: Nullable<BindGroup> = null;\r\nlet _skyMVBox: Nullable<Primitive> = null;\r\n\r\n/** @internal */\r\nfunction renderSkyMotionVectors(ctx: DrawContext): void {\r\n if (!ctx.motionVectorTexture) {\r\n return;\r\n }\r\n\r\n const device = ctx.device;\r\n const fb = device.pool.fetchTemporalFramebuffer(false, 0, 0, ctx.motionVectorTexture, ctx.depthTexture);\r\n\r\n if (!_skyMVProgram) {\r\n _skyMVProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.VPMatrix = pb.mat4().uniform(0);\r\n this.prevVPMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.prevCameraPos = pb.vec3().uniform(0);\r\n pb.main(function () {\r\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\r\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\r\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\r\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\r\n this.clipPos.z = this.clipPos.w;\r\n this.$builtins.position = this.clipPos;\r\n this.$outputs.currentPos = this.clipPos;\r\n this.$outputs.prevPos = this.prevClipPos;\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.motionVector = pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\r\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\r\n ),\r\n 0.5\r\n );\r\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\r\n });\r\n }\r\n })!;\r\n _skyMVProgram.name = '@TAA_SkyMotionVector';\r\n }\r\n\r\n if (!_skyMVBindGroup) {\r\n _skyMVBindGroup = device.createBindGroup(_skyMVProgram.bindGroupLayouts[0]);\r\n }\r\n\r\n if (!_skyMVBox) {\r\n _skyMVBox = new BoxShape({ size: 2, needNormal: false, needUV: false });\r\n }\r\n\r\n _skyMVBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\r\n _skyMVBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix!);\r\n _skyMVBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n _skyMVBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition!);\r\n\r\n device.pushDeviceStates();\r\n device.setProgram(_skyMVProgram);\r\n device.setBindGroup(0, _skyMVBindGroup);\r\n device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));\r\n device.setFramebuffer(fb);\r\n _skyMVBox.draw();\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(fb);\r\n}\r\n\r\n/** @internal */\r\nfunction renderMainLightPass(\r\n frame: FrameState,\r\n sceneColorTex: Texture2D,\r\n sceneColorCopyTex: Nullable<Texture2D>\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n const device = ctx.device;\r\n\r\n // Use RenderGraph-allocated scene color texture\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n\r\n if (depthTex === ctx.finalFramebuffer?.getDepthAttachment()) {\r\n ctx.intermediateFramebuffer = ctx.finalFramebuffer;\r\n } else {\r\n ctx.intermediateFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n false,\r\n sceneColorTex.width,\r\n sceneColorTex.height,\r\n sceneColorTex,\r\n depthTex\r\n );\r\n }\r\n\r\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\r\n device.pushDeviceStates();\r\n device.setFramebuffer(ctx.intermediateFramebuffer);\r\n } else {\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n }\r\n\r\n _scenePass.transmission = false;\r\n _scenePass.clearDepth = depthTex ? null : 1;\r\n _scenePass.clearStencil = depthTex ? null : 0;\r\n\r\n if (ctx.SSR && !renderQueue.needSceneColor()) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n }\r\n\r\n ctx.compositor?.begin(ctx);\r\n\r\n if (renderQueue.needSceneColor() && sceneColorCopyTex) {\r\n const compositor = ctx.compositor;\r\n ctx.compositor = null;\r\n\r\n // Use RenderGraph-allocated sceneColorCopy texture\r\n const sceneColorFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n true,\r\n sceneColorCopyTex.width,\r\n sceneColorCopyTex.height,\r\n ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS\r\n ? [\r\n sceneColorCopyTex,\r\n device.getFramebuffer()!.getColorAttachments()[1]!,\r\n device.getFramebuffer()!.getColorAttachments()[2]!\r\n ]\r\n : sceneColorCopyTex,\r\n depthTex,\r\n false\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(sceneColorFramebuffer);\r\n _scenePass.transmission = false;\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n device.popDeviceStates();\r\n ctx.sceneColorTexture = sceneColorCopyTex;\r\n new CopyBlitter().blit(\r\n ctx.sceneColorTexture,\r\n device.getFramebuffer() ?? null,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n _scenePass.transmission = true;\r\n _scenePass.clearColor = null;\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n ctx.compositor = compositor;\r\n }\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n\r\n if (renderQueue.needSceneColor()) {\r\n renderSceneDepth(frame, frame.depthFramebuffer);\r\n }\r\n}\r\n\r\n/** @internal */\r\nfunction renderComposite(frame: FrameState): void {\r\n const { ctx, renderQueue } = frame;\r\n const device = ctx.device;\r\n\r\n ctx.compositor?.drawPostEffects(ctx, PostEffectLayer.end, ctx.linearDepthTexture!);\r\n ctx.compositor?.end(ctx);\r\n renderQueue.dispose();\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n\r\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\r\n const blitter = new CopyBlitter();\r\n blitter.srgbOut = !ctx.finalFramebuffer;\r\n const srcTex = ctx.intermediateFramebuffer.getColorAttachments()[0] as Texture2D;\r\n blitter.blit(srcTex, ctx.finalFramebuffer ?? null, fetchSampler('clamp_nearest_nomip'));\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(ctx.intermediateFramebuffer);\r\n }\r\n\r\n freeClusteredLight(ctx.clusteredLight!);\r\n\r\n if (frame.sunLightColor) {\r\n ctx.sunLight!.color = frame.sunLightColor;\r\n }\r\n}\r\n\r\n// ─── Convenience: Execute Full Pipeline ─────────────────────────────\r\n\r\n/**\r\n * Build, compile, and execute the forward+ pipeline as a render graph.\r\n *\r\n * This is the drop-in replacement for `SceneRenderer._renderScene`.\r\n *\r\n * @param ctx - The draw context for this frame.\r\n * @public\r\n */\r\nexport function executeForwardPlusGraph(ctx: DrawContext): void {\r\n const device = ctx.device;\r\n const graph = new RenderGraph();\r\n\r\n // Cull scene first (needed to derive options)\r\n const renderQueue = _scenePass.cullScene(ctx, ctx.camera);\r\n\r\n const options = deriveForwardPlusOptions(ctx.scene, ctx.camera, device.type, renderQueue);\r\n\r\n // Ensure the camera has a history resource manager for temporal effects (TAA, motion blur)\r\n let historyManager = ctx.camera.getHistoryResourceManager();\r\n if (!historyManager) {\r\n historyManager = new HistoryResourceManager<Texture2D>(_devicePoolAllocator);\r\n ctx.camera.setHistoryResourceManager(historyManager);\r\n }\r\n\r\n const backbuffer = buildForwardPlusGraph(graph, ctx, renderQueue, options);\r\n\r\n const compiled = graph.compile([backbuffer]);\r\n\r\n // Use RenderGraphExecutor for automatic resource management\r\n const executor = new RenderGraphExecutor(_devicePoolAllocator, ctx.renderWidth, ctx.renderHeight);\r\n\r\n // Register imported backbuffer (if using finalFramebuffer)\r\n if (ctx.finalFramebuffer) {\r\n const backbufferTex = ctx.finalFramebuffer.getColorAttachments()[0] as Texture2D;\r\n executor.setImportedTexture(backbuffer, backbufferTex);\r\n }\r\n\r\n executor.execute(compiled);\r\n executor.reset();\r\n\r\n // Swap history buffers at frame end (ping-pong)\r\n historyManager.swap();\r\n}\r\n"],"names":["_scenePass","LightPass","_depthPass","DepthPass","_shadowMapPass","ShadowMapPass","_clusters","_devicePoolAllocator","DevicePoolAllocator","_backDepthColorState","_frontDepthColorState","getClusteredLight","length","pop","ClusteredLight","freeClusteredLight","cl","push","deriveForwardPlusOptions","scene","camera","deviceType","renderQueue","ssr","SSR","env","light","envLight","hasRadiance","depthPrepass","motionVectors","TAA","motionBlur","hiZ","HiZ","ssrCalcThickness","gpuPicking","getPickResultResolveFunc","needSceneColor","buildForwardPlusGraph","graph","ctx","options","backbuffer","importTexture","frame","depthFramebuffer","sunLightColor","addPass","builder","sideEffect","setExecute","sky","update","clusteredLight","calculateLightIndex","pickResolveFunc","renderObjectColors","shadowedLights","renderShadowMaps","depthPassResult","format","device","type","SSRCalcThickness","mvFormat","depthHandle","createTexture","label","motionVectorHandle","undefined","rgCtx","depthTex","getTexture","mvTex","renderSceneDepth","hiZHandle","read","mipLevels","getDepthAttachment","hiZTex","w","width","h","height","HiZFrameBuffer","pool","fetchTemporalFramebuffer","buildHiZ","HiZTexture","releaseFrameBuffer","lightPassResult","sceneColorHandle","colorFormat","sceneColorCopyHandle","sceneColorTex","sceneColorCopyTex","renderMainLightPass","write","renderComposite","lights","renderPass","pushDeviceStates","shadow","render","popDeviceStates","existingDepthFb","motionVectorTex","transmission","colorAttachments","depthAttachment","finalFramebuffer","depthTexOrFormat","isTexture2D","depthFormat","renderWidth","renderHeight","originDepth","setFramebuffer","encodeDepth","getColorAttachments","clearColor","Vector4","clearDepth","clearStencil","createColorState","setColorMask","forceColorState","forceCullMode","renderBackface","motionVectorTexture","linearDepthTexture","depthTexture","renderSkyMotionVectors","_skyMVProgram","_skyMVBindGroup","_skyMVBox","fb","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","prevVPMatrix","cameraPos","prevCameraPos","main","$l","worldPos","add","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","$builtins","position","$outputs","currentPos","prevPos","fragment","color","motionVector","sub","div","xy","name","createBindGroup","bindGroupLayouts","BoxShape","size","needNormal","needUV","setValue","viewProjectionMatrix","getWorldPosition","prevPosition","setProgram","setBindGroup","setRenderStates","AbstractPostEffect","getDefaultRenderState","draw","intermediateFramebuffer","setViewport","setScissor","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","compositor","begin","sceneColorFramebuffer","getFramebuffer","sceneColorTexture","CopyBlitter","blit","fetchSampler","drawPostEffects","PostEffectLayer","end","dispose","blitter","srgbOut","srcTex","sunLight","executeForwardPlusGraph","RenderGraph","cullScene","historyManager","getHistoryResourceManager","HistoryResourceManager","setHistoryResourceManager","compiled","compile","executor","RenderGraphExecutor","backbufferTex","setImportedTexture","execute","reset","swap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"forward_plus_builder.js","sources":["../../../src/render/rendergraph/forward_plus_builder.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n ColorState,\r\n FrameBuffer,\r\n GPUProgram,\r\n Texture2D,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { DrawContext } from '../drawable';\r\nimport type { RenderQueue } from '../render_queue';\r\nimport type { PunctualLight, Scene } from '../../scene';\r\nimport type { Camera } from '../../camera';\r\nimport { LightPass } from '../lightpass';\r\nimport { ShadowMapPass } from '../shadowmap_pass';\r\nimport { DepthPass } from '../depthpass';\r\nimport { ClusteredLight } from '../cluster_light';\r\nimport { buildHiZ } from '../hzb';\r\nimport { CopyBlitter } from '../../blitter';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { MaterialVaryingFlags } from '../../values';\r\nimport { AbstractPostEffect, PostEffectLayer } from '../../posteffect/posteffect';\r\nimport { RenderGraph } from './rendergraph';\r\nimport { RenderGraphExecutor } from './executor';\r\nimport { DevicePoolAllocator } from './device_pool_allocator';\r\nimport { HistoryResourceManager } from './history_resource_manager';\r\nimport { RGHistoryResources } from './history_resources';\r\nimport type { RGExecuteContext, RGHandle } from './types';\r\nimport { renderObjectColors } from '../gpu_picking';\r\nimport type { Primitive } from '../primitive';\r\nimport { BoxShape } from '../../shapes';\r\n\r\n// ─── Shared Pass Instances ──────────────────────────────────────────\r\n\r\nconst _scenePass = new LightPass();\r\nconst _depthPass = new DepthPass();\r\nconst _shadowMapPass = new ShadowMapPass();\r\nconst _clusters: ClusteredLight[] = [];\r\nconst _devicePoolAllocator = new DevicePoolAllocator();\r\nlet _backDepthColorState: Nullable<ColorState> = null;\r\nlet _frontDepthColorState: Nullable<ColorState> = null;\r\n\r\nfunction getClusteredLight(): ClusteredLight {\r\n return _clusters.length > 0 ? _clusters.pop()! : new ClusteredLight();\r\n}\r\nfunction freeClusteredLight(cl: ClusteredLight): void {\r\n _clusters.push(cl);\r\n}\r\n\r\n// ─── Pipeline Options ───────────────────────────────────────────────\r\n\r\n/**\r\n * Options controlling which features are enabled in the forward+ pipeline.\r\n *\r\n * Derived from camera settings and device capabilities each frame.\r\n *\r\n * @public\r\n */\r\nexport interface ForwardPlusOptions {\r\n /** Enable depth prepass (always true for now). */\r\n depthPrepass: boolean;\r\n /** Enable motion vectors (requires TAA or motionBlur). */\r\n motionVectors: boolean;\r\n /** Enable Hi-Z pyramid (for SSR ray tracing). */\r\n hiZ: boolean;\r\n /** Enable screen-space reflections. */\r\n ssr: boolean;\r\n /** Whether to compute SSR thickness. */\r\n ssrCalcThickness: boolean;\r\n /** Whether GPU picking is requested this frame. */\r\n gpuPicking: boolean;\r\n /** Whether transmission/refraction materials are present. */\r\n needSceneColor: boolean;\r\n}\r\n\r\n/**\r\n * Derive pipeline options from the current scene/camera state.\r\n * @internal\r\n */\r\nexport function deriveForwardPlusOptions(\r\n scene: Scene,\r\n camera: Camera,\r\n deviceType: string,\r\n renderQueue: RenderQueue\r\n): ForwardPlusOptions {\r\n const ssr = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();\r\n return {\r\n depthPrepass: true,\r\n motionVectors: deviceType !== 'webgl' && (camera.TAA || camera.motionBlur),\r\n hiZ: camera.HiZ && deviceType !== 'webgl',\r\n ssr: !!ssr,\r\n ssrCalcThickness: !!ssr && camera.ssrCalcThickness,\r\n gpuPicking: !!camera.getPickResultResolveFunc(),\r\n needSceneColor: renderQueue.needSceneColor()\r\n };\r\n}\r\n\r\n// ─── Shared Frame State ─────────────────────────────────────────────\r\n\r\n/**\r\n * Mutable state shared between pass execute callbacks within a single frame.\r\n *\r\n * This replaces the monolithic DrawContext mutation pattern with an explicit\r\n * object that graph passes can read from and write to.\r\n *\r\n * @internal\r\n */\r\nexport interface FrameState {\r\n ctx: DrawContext;\r\n renderQueue: RenderQueue;\r\n depthFramebuffer: Nullable<FrameBuffer>;\r\n sunLightColor: Nullable<any>;\r\n options: ForwardPlusOptions;\r\n intermediateDeviceStatePushed: boolean;\r\n renderQueueDisposed: boolean;\r\n clusteredLightReleased: boolean;\r\n sunLightRestored: boolean;\r\n}\r\n\r\ninterface ForwardPlusGraphBuildResult {\r\n backbuffer: RGHandle;\r\n frame: FrameState;\r\n}\r\n\r\ninterface HistoryReadBinding {\r\n name: string;\r\n handle: RGHandle;\r\n}\r\n\r\n// ─── Forward+ Graph Builder ─────────────────────────────────────────\r\n\r\n/**\r\n * Constructs a render graph representing the forward+ pipeline.\r\n *\r\n * Each step in the existing `SceneRenderer._renderScene` becomes a graph pass.\r\n * Execute callbacks delegate to the existing rendering code, sharing a mutable\r\n * `FrameState`.\r\n *\r\n * @param graph - The render graph to populate.\r\n * @param ctx - The draw context for this frame.\r\n * @param renderQueue - The culled render queue.\r\n * @param options - Pipeline feature toggles.\r\n * @returns The backbuffer handle (graph output).\r\n *\r\n * @public\r\n */\r\nexport function buildForwardPlusGraph(\r\n graph: RenderGraph,\r\n ctx: DrawContext,\r\n renderQueue: RenderQueue,\r\n options: ForwardPlusOptions\r\n): RGHandle {\r\n return buildForwardPlusGraphInternal(graph, ctx, renderQueue, options).backbuffer;\r\n}\r\n\r\nfunction buildForwardPlusGraphInternal(\r\n graph: RenderGraph,\r\n ctx: DrawContext,\r\n renderQueue: RenderQueue,\r\n options: ForwardPlusOptions\r\n): ForwardPlusGraphBuildResult {\r\n const backbuffer = graph.importTexture('backbuffer');\r\n\r\n // Shared mutable frame state\r\n const frame: FrameState = {\r\n ctx,\r\n renderQueue,\r\n depthFramebuffer: null,\r\n sunLightColor: null,\r\n options,\r\n intermediateDeviceStatePushed: false,\r\n renderQueueDisposed: false,\r\n clusteredLightReleased: false,\r\n sunLightRestored: false\r\n };\r\n\r\n // ── 1. Sky Update ─────────────────────────────────────────────────\r\n let orderToken = graph.addPass('SkyUpdate', (builder) => {\r\n const done = builder.createToken('SkyUpdateDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n frame.sunLightColor = ctx.scene.env.sky.update(ctx);\r\n });\r\n return done;\r\n });\r\n\r\n // ── 2. Clustered Light Setup ──────────────────────────────────────\r\n orderToken = graph.addPass('ClusterLights', (builder) => {\r\n builder.read(orderToken);\r\n const done = builder.createToken('ClusterLightsDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n ctx.clusteredLight = getClusteredLight();\r\n ctx.clusteredLight.calculateLightIndex(ctx.camera, renderQueue);\r\n });\r\n return done;\r\n });\r\n\r\n // ── 3. GPU Picking (optional, sideEffect) ─────────────────────────\r\n if (options.gpuPicking) {\r\n orderToken = graph.addPass('GPUPicking', (builder) => {\r\n builder.read(orderToken);\r\n const done = builder.createToken('GPUPickingDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n const pickResolveFunc = ctx.camera.getPickResultResolveFunc();\r\n if (pickResolveFunc) {\r\n renderObjectColors(ctx, pickResolveFunc, renderQueue);\r\n }\r\n });\r\n return done;\r\n });\r\n }\r\n\r\n // ── 4. Shadow Maps ────────────────────────────────────────────────\r\n // Shadow maps are managed internally by lights, mark as side effect\r\n if (renderQueue.shadowedLights.length > 0) {\r\n orderToken = graph.addPass('ShadowMaps', (builder) => {\r\n builder.read(orderToken);\r\n const done = builder.createToken('ShadowMapsDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n renderShadowMaps(ctx, renderQueue.shadowedLights);\r\n });\r\n return done;\r\n });\r\n }\r\n\r\n // ── 5. Depth Prepass ──────────────────────────────────────────────\r\n // Declare transient depth and motion vector textures\r\n const depthPassResult = graph.addPass('DepthPrepass', (builder) => {\r\n builder.read(orderToken);\r\n const format: TextureFormat =\r\n ctx.device.type === 'webgl'\r\n ? ctx.SSRCalcThickness\r\n ? 'rgba16f'\r\n : 'rgba8unorm'\r\n : ctx.SSRCalcThickness\r\n ? 'rg32f'\r\n : 'r32f';\r\n const mvFormat: TextureFormat = 'rgba16f';\r\n\r\n const depthHandle = builder.createTexture({ format, label: 'linearDepth' });\r\n const motionVectorHandle = options.motionVectors\r\n ? builder.createTexture({ format: mvFormat, label: 'motionVector' })\r\n : undefined;\r\n const finalDepthAttachment = ctx.finalFramebuffer?.getDepthAttachment();\r\n const externalDepthAttachment = finalDepthAttachment?.isTexture2D()\r\n ? (finalDepthAttachment as Texture2D)\r\n : null;\r\n const graphDepthAttachmentHandle = externalDepthAttachment\r\n ? undefined\r\n : builder.createTexture({ format: ctx.depthFormat, label: 'sceneDepth' });\r\n const depthAttachmentOrFormat = externalDepthAttachment ?? graphDepthAttachmentHandle ?? ctx.depthFormat;\r\n const depthFramebufferHandle = builder.createFramebuffer({\r\n label: 'DepthPrepassFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: motionVectorHandle ? [depthHandle, motionVectorHandle] : depthHandle,\r\n depthAttachment: depthAttachmentOrFormat,\r\n ignoreDepthStencil: false\r\n });\r\n const skyMotionVectorFramebufferHandle = motionVectorHandle\r\n ? builder.createFramebuffer({\r\n label: 'SkyMotionVectorFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: motionVectorHandle,\r\n depthAttachment: depthAttachmentOrFormat\r\n })\r\n : undefined;\r\n\r\n builder.addSubpass('SceneDepth', (rgCtx) => {\r\n const depthFramebuffer = rgCtx.getFramebuffer<FrameBuffer>(depthFramebufferHandle);\r\n frame.depthFramebuffer = renderSceneDepth(frame, depthFramebuffer, rgCtx, undefined, undefined, false);\r\n });\r\n if (skyMotionVectorFramebufferHandle) {\r\n builder.addSubpass('SkyMotionVectors', (rgCtx) => {\r\n renderSkyMotionVectors(ctx, rgCtx, skyMotionVectorFramebufferHandle);\r\n });\r\n }\r\n\r\n return {\r\n depthHandle,\r\n motionVectorHandle,\r\n graphDepthAttachmentHandle,\r\n externalDepthAttachment,\r\n depthFramebufferHandle\r\n };\r\n });\r\n\r\n const depthHandle = depthPassResult.depthHandle;\r\n const motionVectorHandle = depthPassResult.motionVectorHandle;\r\n const renderDepthAttachment =\r\n depthPassResult.graphDepthAttachmentHandle ?? depthPassResult.externalDepthAttachment ?? null;\r\n\r\n // ── 6. Hi-Z (optional) ───────────────────────────────────────────\r\n let hiZHandle: RGHandle | undefined;\r\n if (options.hiZ) {\r\n graph.addPass('HiZ', (builder) => {\r\n builder.read(depthHandle!);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n hiZHandle = builder.createTexture({ format: 'r32f', label: 'hiZ', mipLevels: 10 });\r\n const hiZFramebufferHandle = builder.createFramebuffer({\r\n label: 'HiZFramebuffer',\r\n colorAttachments: hiZHandle,\r\n depthAttachment: null\r\n });\r\n builder.setExecute((rgCtx) => {\r\n const ctx = frame.ctx;\r\n // Use the depth texture from the framebuffer (which contains the RenderGraph texture)\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n if (depthTex) {\r\n // Get the HiZ texture allocated by the executor\r\n const hiZTex = rgCtx.getTexture<Texture2D>(hiZHandle!);\r\n const HiZFrameBuffer = rgCtx.getFramebuffer<FrameBuffer>(hiZFramebufferHandle);\r\n buildHiZ(depthTex, HiZFrameBuffer);\r\n ctx.HiZTexture = hiZTex;\r\n }\r\n });\r\n });\r\n }\r\n\r\n // ── 7. Main Light Pass ────────────────────────────────────────────\r\n const lightPassResult = graph.addPass('LightPass', (builder) => {\r\n builder.read(depthHandle);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (hiZHandle) {\r\n builder.read(hiZHandle);\r\n }\r\n\r\n // Create scene color texture (intermediate render target)\r\n const sceneColorHandle = builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColor'\r\n });\r\n\r\n // Create optional sceneColorCopy for transmission/refraction materials\r\n let sceneColorCopyHandle: RGHandle | undefined;\r\n if (options.needSceneColor) {\r\n sceneColorCopyHandle = builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColorCopy'\r\n });\r\n }\r\n const useFinalFramebufferAsIntermediate =\r\n !!depthPassResult.externalDepthAttachment &&\r\n depthPassResult.externalDepthAttachment === ctx.finalFramebuffer?.getDepthAttachment();\r\n const sceneColorFramebufferHandle = useFinalFramebufferAsIntermediate\r\n ? undefined\r\n : builder.createFramebuffer({\r\n label: 'SceneColorFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: sceneColorHandle,\r\n depthAttachment: renderDepthAttachment\r\n });\r\n const sceneColorCopyFramebufferHandle = sceneColorCopyHandle\r\n ? builder.createFramebuffer({\r\n label: 'SceneColorCopyFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: sceneColorCopyHandle,\r\n depthAttachment: renderDepthAttachment,\r\n ignoreDepthStencil: false\r\n })\r\n : undefined;\r\n\r\n builder.setExecute((rgCtx) => {\r\n const sceneColorTex = rgCtx.getTexture<Texture2D>(sceneColorHandle);\r\n const sceneColorCopyTex = sceneColorCopyHandle\r\n ? rgCtx.getTexture<Texture2D>(sceneColorCopyHandle)\r\n : null;\r\n renderMainLightPass(\r\n frame,\r\n sceneColorTex,\r\n sceneColorCopyTex,\r\n rgCtx,\r\n sceneColorFramebufferHandle,\r\n sceneColorCopyFramebufferHandle\r\n );\r\n });\r\n\r\n return { sceneColorHandle, sceneColorCopyHandle, sceneColorFramebufferHandle };\r\n });\r\n\r\n const sceneColorHandle = lightPassResult.sceneColorHandle;\r\n const historyManager = ctx.camera?.getHistoryResourceManager?.() ?? null;\r\n const historyReadBindings: HistoryReadBinding[] = [];\r\n if (historyManager && ctx.camera?.TAA && options.motionVectors) {\r\n const historySize = { width: ctx.renderWidth, height: ctx.renderHeight };\r\n const colorHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.TAA_COLOR,\r\n {\r\n format: ctx.colorFormat!,\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n historySize\r\n );\r\n const motionVectorHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.TAA_MOTION_VECTOR,\r\n {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n historySize\r\n );\r\n if (colorHistoryHandle && motionVectorHistoryHandle) {\r\n historyReadBindings.push(\r\n { name: RGHistoryResources.TAA_COLOR, handle: colorHistoryHandle },\r\n { name: RGHistoryResources.TAA_MOTION_VECTOR, handle: motionVectorHistoryHandle }\r\n );\r\n }\r\n }\r\n\r\n // 8. Transmission depth pass (optional)\r\n let transmissionDepthToken: RGHandle | undefined;\r\n if (options.needSceneColor) {\r\n transmissionDepthToken = graph.addPass('TransmissionDepth', (builder) => {\r\n builder.read(sceneColorHandle);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n const done = builder.createToken('TransmissionDepthDone');\r\n builder.sideEffect();\r\n builder.setExecute((rgCtx) => {\r\n renderTransmissionDepthPass(frame, rgCtx);\r\n });\r\n return done;\r\n });\r\n }\r\n\r\n // 9. Post effects + final composite\r\n const presentedBackbuffer = graph.addPass('Composite', (builder) => {\r\n builder.read(sceneColorHandle);\r\n builder.read(depthHandle);\r\n if (hiZHandle) {\r\n builder.read(hiZHandle);\r\n }\r\n if (motionVectorHandle) {\r\n builder.read(motionVectorHandle);\r\n }\r\n if (lightPassResult.sceneColorFramebufferHandle) {\r\n builder.read(lightPassResult.sceneColorFramebufferHandle);\r\n }\r\n if (transmissionDepthToken) {\r\n builder.read(transmissionDepthToken);\r\n }\r\n for (const binding of historyReadBindings) {\r\n builder.read(binding.handle);\r\n }\r\n const outputBackbuffer = builder.write(backbuffer);\r\n builder.setExecute((rgCtx) => {\r\n if (historyManager && historyReadBindings.length > 0) {\r\n historyManager.beginReadScope(\r\n historyReadBindings.map((binding) => ({\r\n name: binding.name,\r\n texture: rgCtx.getTexture<Texture2D>(binding.handle)\r\n }))\r\n );\r\n try {\r\n renderComposite(frame);\r\n } finally {\r\n historyManager.endReadScope();\r\n }\r\n } else {\r\n renderComposite(frame);\r\n }\r\n });\r\n return outputBackbuffer;\r\n });\r\n\r\n return { backbuffer: presentedBackbuffer, frame };\r\n}\r\n\r\n// ─── Pass Implementation Helpers ────────────────────────────────────\r\n// These wrap the existing SceneRenderer static methods, adapted to work\r\n// with the FrameState pattern. They contain the same logic as the\r\n// original methods but read/write through FrameState.\r\n\r\n/** @internal */\r\nfunction renderShadowMaps(ctx: DrawContext, lights: PunctualLight[]): void {\r\n ctx.renderPass = _shadowMapPass;\r\n ctx.device.pushDeviceStates();\r\n try {\r\n for (const light of lights) {\r\n light.shadow.render(ctx, _shadowMapPass);\r\n }\r\n } finally {\r\n ctx.device.popDeviceStates();\r\n }\r\n}\r\n\r\nfunction releaseIntermediateFramebuffer(frame: FrameState): void {\r\n const { ctx } = frame;\r\n if (frame.intermediateDeviceStatePushed) {\r\n ctx.device.popDeviceStates();\r\n frame.intermediateDeviceStatePushed = false;\r\n }\r\n ctx.intermediateFramebuffer = null;\r\n}\r\n\r\nfunction releaseDepthFramebuffer(frame: FrameState): void {\r\n frame.depthFramebuffer = null;\r\n}\r\n\r\nfunction disposeRenderQueue(frame: FrameState): void {\r\n if (!frame.renderQueueDisposed) {\r\n frame.renderQueue.dispose();\r\n frame.renderQueueDisposed = true;\r\n }\r\n}\r\n\r\nfunction releaseClusteredLight(frame: FrameState): void {\r\n if (!frame.clusteredLightReleased && frame.ctx.clusteredLight) {\r\n freeClusteredLight(frame.ctx.clusteredLight);\r\n frame.ctx.clusteredLight = undefined;\r\n frame.clusteredLightReleased = true;\r\n }\r\n}\r\n\r\nfunction restoreSunLight(frame: FrameState): void {\r\n if (!frame.sunLightRestored && frame.sunLightColor && frame.ctx.sunLight) {\r\n frame.ctx.sunLight.color = frame.sunLightColor;\r\n frame.sunLightRestored = true;\r\n }\r\n}\r\n\r\nfunction cleanupFrame(frame: FrameState): void {\r\n releaseIntermediateFramebuffer(frame);\r\n releaseDepthFramebuffer(frame);\r\n releaseClusteredLight(frame);\r\n disposeRenderQueue(frame);\r\n restoreSunLight(frame);\r\n}\r\n\r\n/** @internal */\r\nfunction renderSceneDepth(\r\n frame: FrameState,\r\n existingDepthFb: Nullable<FrameBuffer>,\r\n rgCtx: RGExecuteContext,\r\n depthTex?: Texture2D,\r\n motionVectorTex?: Nullable<Texture2D>,\r\n transmissionOverride?: boolean\r\n): FrameBuffer {\r\n const ctx = frame.ctx;\r\n const renderQueue = frame.renderQueue;\r\n const transmission = transmissionOverride ?? !!existingDepthFb;\r\n let depthFramebuffer = existingDepthFb;\r\n\r\n if (!depthFramebuffer) {\r\n // Use RenderGraph-allocated textures if provided\r\n if (depthTex) {\r\n const colorAttachments = motionVectorTex ? [depthTex, motionVectorTex] : depthTex;\r\n const depthAttachment = ctx.finalFramebuffer?.getDepthAttachment();\r\n const depthTexOrFormat = depthAttachment?.isTexture2D() ? depthAttachment : ctx.depthFormat;\r\n\r\n depthFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: depthTex.width,\r\n height: depthTex.height,\r\n colorAttachments,\r\n depthAttachment: depthTexOrFormat,\r\n ignoreDepthStencil: false\r\n });\r\n } else {\r\n // Allocate through RenderGraph so framebuffer lifetime is owned by the executor.\r\n const format: TextureFormat =\r\n ctx.device.type === 'webgl'\r\n ? ctx.SSRCalcThickness\r\n ? 'rgba16f'\r\n : 'rgba8unorm'\r\n : ctx.SSRCalcThickness\r\n ? 'rg32f'\r\n : 'r32f';\r\n const mvFormat: TextureFormat = 'rgba16f';\r\n if (!ctx.finalFramebuffer) {\r\n depthFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: ctx.motionVectors ? [format, mvFormat] : format,\r\n depthAttachment: ctx.depthFormat,\r\n ignoreDepthStencil: false\r\n });\r\n } else {\r\n const originDepth = ctx.finalFramebuffer?.getDepthAttachment();\r\n if (originDepth?.isTexture2D()) {\r\n depthFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: originDepth.width,\r\n height: originDepth.height,\r\n colorAttachments: ctx.motionVectors ? [format, mvFormat] : format,\r\n depthAttachment: originDepth,\r\n ignoreDepthStencil: false\r\n });\r\n } else {\r\n depthFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: ctx.motionVectors ? [format, mvFormat] : format,\r\n depthAttachment: ctx.depthFormat,\r\n ignoreDepthStencil: false\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!transmission) {\r\n frame.depthFramebuffer = depthFramebuffer!;\r\n }\r\n\r\n ctx.device.pushDeviceStates();\r\n try {\r\n ctx.device.setFramebuffer(depthFramebuffer!);\r\n _depthPass.encodeDepth = depthFramebuffer!.getColorAttachments()[0].format === 'rgba8unorm';\r\n _depthPass.clearColor = transmission\r\n ? null\r\n : _depthPass.encodeDepth\r\n ? new Vector4(0, 0, 0, 1)\r\n : new Vector4(1, 1, 1, 1);\r\n _depthPass.clearDepth = transmission ? null : 1;\r\n _depthPass.clearStencil = null;\r\n _depthPass.transmission = transmission;\r\n\r\n if (ctx.SSRCalcThickness && !transmission) {\r\n if (!_backDepthColorState) {\r\n _backDepthColorState = ctx.device.createColorState().setColorMask(false, true, false, false);\r\n }\r\n if (!_frontDepthColorState) {\r\n _frontDepthColorState = ctx.device.createColorState().setColorMask(true, false, false, false);\r\n }\r\n ctx.forceColorState = _backDepthColorState;\r\n ctx.forceCullMode = 'front';\r\n _depthPass.renderBackface = true;\r\n _depthPass.transmission = false;\r\n _depthPass.render(ctx, null, null, renderQueue);\r\n _depthPass.clearColor = null;\r\n _depthPass.renderBackface = false;\r\n ctx.forceColorState = _frontDepthColorState;\r\n ctx.forceCullMode = null;\r\n }\r\n _depthPass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n ctx.forceColorState = null;\r\n ctx.forceCullMode = null;\r\n _depthPass.renderBackface = false;\r\n ctx.device.popDeviceStates();\r\n }\r\n\r\n if (!transmission) {\r\n ctx.motionVectorTexture = ctx.motionVectors\r\n ? (depthFramebuffer!.getColorAttachments()[1] as Texture2D)\r\n : null;\r\n ctx.linearDepthTexture = depthFramebuffer!.getColorAttachments()[0] as Texture2D;\r\n ctx.depthTexture = depthFramebuffer!.getDepthAttachment() as Texture2D;\r\n // HiZ is now built in the dedicated HiZ pass\r\n }\r\n return depthFramebuffer!;\r\n}\r\n\r\n// ─── Sky Motion Vector State ────────────────────────────────────────\r\n\r\nlet _skyMVProgram: Nullable<GPUProgram> = null;\r\nlet _skyMVBindGroup: Nullable<BindGroup> = null;\r\nlet _skyMVBox: Nullable<Primitive> = null;\r\n\r\n/** @internal */\r\nfunction renderSkyMotionVectors(\r\n ctx: DrawContext,\r\n rgCtx: RGExecuteContext,\r\n framebufferHandle?: RGHandle\r\n): void {\r\n if (!ctx.motionVectorTexture) {\r\n return;\r\n }\r\n\r\n const device = ctx.device;\r\n const fb = framebufferHandle\r\n ? rgCtx.getFramebuffer<FrameBuffer>(framebufferHandle)\r\n : rgCtx.createFramebuffer<FrameBuffer>({\r\n colorAttachments: ctx.motionVectorTexture,\r\n depthAttachment: ctx.depthTexture\r\n });\r\n\r\n if (!_skyMVProgram) {\r\n _skyMVProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.VPMatrix = pb.mat4().uniform(0);\r\n this.prevVPMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.prevCameraPos = pb.vec3().uniform(0);\r\n pb.main(function () {\r\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\r\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\r\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\r\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\r\n this.clipPos.z = this.clipPos.w;\r\n this.$builtins.position = this.clipPos;\r\n this.$outputs.currentPos = this.clipPos;\r\n this.$outputs.prevPos = this.prevClipPos;\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.motionVector = pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\r\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\r\n ),\r\n 0.5\r\n );\r\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\r\n });\r\n }\r\n })!;\r\n _skyMVProgram.name = '@TAA_SkyMotionVector';\r\n }\r\n\r\n if (!_skyMVBindGroup) {\r\n _skyMVBindGroup = device.createBindGroup(_skyMVProgram.bindGroupLayouts[0]);\r\n }\r\n\r\n if (!_skyMVBox) {\r\n _skyMVBox = new BoxShape({ size: 2, needNormal: false, needUV: false });\r\n }\r\n\r\n _skyMVBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\r\n _skyMVBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix!);\r\n _skyMVBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n _skyMVBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition!);\r\n\r\n device.pushDeviceStates();\r\n device.setProgram(_skyMVProgram);\r\n device.setBindGroup(0, _skyMVBindGroup);\r\n device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));\r\n device.setFramebuffer(fb);\r\n _skyMVBox.draw();\r\n device.popDeviceStates();\r\n}\r\n\r\n/** @internal */\r\nfunction renderMainLightPass(\r\n frame: FrameState,\r\n sceneColorTex: Texture2D,\r\n sceneColorCopyTex: Nullable<Texture2D>,\r\n rgCtx: RGExecuteContext,\r\n sceneColorFramebufferHandle?: RGHandle,\r\n sceneColorCopyFramebufferHandle?: RGHandle\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n const device = ctx.device;\r\n\r\n // Use RenderGraph-allocated scene color texture\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n\r\n if (depthTex === ctx.finalFramebuffer?.getDepthAttachment()) {\r\n ctx.intermediateFramebuffer = ctx.finalFramebuffer;\r\n } else if (sceneColorFramebufferHandle) {\r\n ctx.intermediateFramebuffer = rgCtx.getFramebuffer<FrameBuffer>(sceneColorFramebufferHandle);\r\n } else {\r\n ctx.intermediateFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: sceneColorTex.width,\r\n height: sceneColorTex.height,\r\n colorAttachments: sceneColorTex,\r\n depthAttachment: depthTex\r\n });\r\n }\r\n\r\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\r\n device.pushDeviceStates();\r\n frame.intermediateDeviceStatePushed = true;\r\n device.setFramebuffer(ctx.intermediateFramebuffer);\r\n } else {\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n }\r\n\r\n _scenePass.transmission = false;\r\n _scenePass.clearDepth = depthTex ? null : 1;\r\n _scenePass.clearStencil = depthTex ? null : 0;\r\n\r\n if (ctx.SSR && !renderQueue.needSceneColor()) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n }\r\n\r\n ctx.compositor?.begin(ctx);\r\n\r\n if (renderQueue.needSceneColor() && sceneColorCopyTex) {\r\n const compositor = ctx.compositor;\r\n ctx.compositor = null;\r\n\r\n // Use RenderGraph-allocated sceneColorCopy texture\r\n const sceneColorFramebuffer =\r\n sceneColorCopyFramebufferHandle && !(ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS)\r\n ? rgCtx.getFramebuffer<FrameBuffer>(sceneColorCopyFramebufferHandle)\r\n : rgCtx.createFramebuffer<FrameBuffer>({\r\n width: sceneColorCopyTex.width,\r\n height: sceneColorCopyTex.height,\r\n colorAttachments:\r\n ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS\r\n ? [\r\n sceneColorCopyTex,\r\n device.getFramebuffer()!.getColorAttachments()[1]!,\r\n device.getFramebuffer()!.getColorAttachments()[2]!\r\n ]\r\n : sceneColorCopyTex,\r\n depthAttachment: depthTex,\r\n ignoreDepthStencil: false\r\n });\r\n let sceneColorStatePushed = false;\r\n try {\r\n device.pushDeviceStates();\r\n sceneColorStatePushed = true;\r\n device.setFramebuffer(sceneColorFramebuffer);\r\n _scenePass.transmission = false;\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n if (sceneColorStatePushed) {\r\n device.popDeviceStates();\r\n }\r\n ctx.compositor = compositor;\r\n }\r\n ctx.sceneColorTexture = sceneColorCopyTex;\r\n new CopyBlitter().blit(\r\n ctx.sceneColorTexture,\r\n device.getFramebuffer() ?? null,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n _scenePass.transmission = true;\r\n _scenePass.clearColor = null;\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n }\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n}\r\n\r\n/** @internal */\r\nfunction renderTransmissionDepthPass(frame: FrameState, rgCtx: RGExecuteContext): void {\r\n renderSceneDepth(frame, frame.depthFramebuffer, rgCtx);\r\n}\r\n\r\n/** @internal */\r\nfunction renderComposite(frame: FrameState): void {\r\n const { ctx } = frame;\r\n\r\n ctx.compositor?.drawPostEffects(ctx, PostEffectLayer.end, ctx.linearDepthTexture!);\r\n ctx.compositor?.end(ctx);\r\n disposeRenderQueue(frame);\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n\r\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\r\n const blitter = new CopyBlitter();\r\n blitter.srgbOut = !ctx.finalFramebuffer;\r\n const srcTex = ctx.intermediateFramebuffer.getColorAttachments()[0] as Texture2D;\r\n blitter.blit(srcTex, ctx.finalFramebuffer ?? null, fetchSampler('clamp_nearest_nomip'));\r\n }\r\n\r\n releaseIntermediateFramebuffer(frame);\r\n releaseDepthFramebuffer(frame);\r\n releaseClusteredLight(frame);\r\n restoreSunLight(frame);\r\n}\r\n\r\n// ─── Convenience: Execute Full Pipeline ─────────────────────────────\r\n\r\n/**\r\n * Build, compile, and execute the forward+ pipeline as a render graph.\r\n *\r\n * This is the drop-in replacement for `SceneRenderer._renderScene`.\r\n *\r\n * @param ctx - The draw context for this frame.\r\n * @public\r\n */\r\nexport function executeForwardPlusGraph(ctx: DrawContext): void {\r\n const device = ctx.device;\r\n const graph = new RenderGraph();\r\n\r\n // Cull scene first (needed to derive options)\r\n const renderQueue = _scenePass.cullScene(ctx, ctx.camera);\r\n\r\n const options = deriveForwardPlusOptions(ctx.scene, ctx.camera, device.type, renderQueue);\r\n\r\n // Ensure the camera has a history resource manager for temporal effects (TAA, motion blur)\r\n let historyManager = ctx.camera.getHistoryResourceManager();\r\n if (!historyManager) {\r\n historyManager = new HistoryResourceManager<Texture2D>(_devicePoolAllocator);\r\n ctx.camera.setHistoryResourceManager(historyManager);\r\n }\r\n historyManager.beginFrame();\r\n\r\n const { backbuffer, frame } = buildForwardPlusGraphInternal(graph, ctx, renderQueue, options);\r\n\r\n const compiled = graph.compile([backbuffer]);\r\n\r\n // Use RenderGraphExecutor for automatic resource management\r\n const executor = new RenderGraphExecutor(_devicePoolAllocator, ctx.renderWidth, ctx.renderHeight);\r\n\r\n // Register imported backbuffer (if using finalFramebuffer)\r\n if (ctx.finalFramebuffer) {\r\n const backbufferTex = ctx.finalFramebuffer.getColorAttachments()[0] as Texture2D;\r\n executor.setImportedTexture(backbuffer, backbufferTex);\r\n }\r\n historyManager.bindImportedTextures(executor);\r\n\r\n try {\r\n executor.execute(compiled);\r\n historyManager.commitFrame();\r\n } finally {\r\n historyManager.discardFrame();\r\n cleanupFrame(frame);\r\n executor.reset();\r\n }\r\n}\r\n"],"names":["_scenePass","LightPass","_depthPass","DepthPass","_shadowMapPass","ShadowMapPass","_clusters","_devicePoolAllocator","DevicePoolAllocator","_backDepthColorState","_frontDepthColorState","getClusteredLight","length","pop","ClusteredLight","freeClusteredLight","cl","push","deriveForwardPlusOptions","scene","camera","deviceType","renderQueue","ssr","SSR","env","light","envLight","hasRadiance","depthPrepass","motionVectors","TAA","motionBlur","hiZ","HiZ","ssrCalcThickness","gpuPicking","getPickResultResolveFunc","needSceneColor","buildForwardPlusGraph","graph","ctx","options","buildForwardPlusGraphInternal","backbuffer","importTexture","frame","depthFramebuffer","sunLightColor","intermediateDeviceStatePushed","renderQueueDisposed","clusteredLightReleased","sunLightRestored","orderToken","addPass","builder","done","createToken","sideEffect","setExecute","sky","update","read","clusteredLight","calculateLightIndex","pickResolveFunc","renderObjectColors","shadowedLights","renderShadowMaps","depthPassResult","format","device","type","SSRCalcThickness","mvFormat","depthHandle","createTexture","label","motionVectorHandle","undefined","finalDepthAttachment","finalFramebuffer","getDepthAttachment","externalDepthAttachment","isTexture2D","graphDepthAttachmentHandle","depthFormat","depthAttachmentOrFormat","depthFramebufferHandle","createFramebuffer","width","renderWidth","height","renderHeight","colorAttachments","depthAttachment","ignoreDepthStencil","skyMotionVectorFramebufferHandle","addSubpass","rgCtx","getFramebuffer","renderSceneDepth","renderSkyMotionVectors","renderDepthAttachment","hiZHandle","mipLevels","hiZFramebufferHandle","depthTex","hiZTex","getTexture","HiZFrameBuffer","buildHiZ","HiZTexture","lightPassResult","sceneColorHandle","colorFormat","sceneColorCopyHandle","useFinalFramebufferAsIntermediate","sceneColorFramebufferHandle","sceneColorCopyFramebufferHandle","sceneColorTex","sceneColorCopyTex","renderMainLightPass","historyManager","getHistoryResourceManager","historyReadBindings","historySize","colorHistoryHandle","importPreviousIfCompatible","RGHistoryResources","TAA_COLOR","sizeMode","motionVectorHistoryHandle","TAA_MOTION_VECTOR","name","handle","transmissionDepthToken","renderTransmissionDepthPass","presentedBackbuffer","binding","outputBackbuffer","write","beginReadScope","map","texture","renderComposite","endReadScope","lights","renderPass","pushDeviceStates","shadow","render","popDeviceStates","releaseIntermediateFramebuffer","intermediateFramebuffer","releaseDepthFramebuffer","disposeRenderQueue","dispose","releaseClusteredLight","restoreSunLight","sunLight","color","cleanupFrame","existingDepthFb","motionVectorTex","transmissionOverride","transmission","originDepth","setFramebuffer","encodeDepth","getColorAttachments","clearColor","Vector4","clearDepth","clearStencil","createColorState","setColorMask","forceColorState","forceCullMode","renderBackface","motionVectorTexture","linearDepthTexture","depthTexture","_skyMVProgram","_skyMVBindGroup","_skyMVBox","framebufferHandle","fb","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","prevVPMatrix","cameraPos","prevCameraPos","main","$l","worldPos","add","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","w","$builtins","position","$outputs","currentPos","prevPos","fragment","motionVector","sub","div","xy","createBindGroup","bindGroupLayouts","BoxShape","size","needNormal","needUV","setValue","viewProjectionMatrix","getWorldPosition","prevPosition","setProgram","setBindGroup","setRenderStates","AbstractPostEffect","getDefaultRenderState","draw","setViewport","setScissor","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","compositor","begin","sceneColorFramebuffer","sceneColorStatePushed","sceneColorTexture","CopyBlitter","blit","fetchSampler","drawPostEffects","PostEffectLayer","end","blitter","srgbOut","srcTex","executeForwardPlusGraph","RenderGraph","cullScene","HistoryResourceManager","setHistoryResourceManager","beginFrame","compiled","compile","executor","RenderGraphExecutor","backbufferTex","setImportedTexture","bindImportedTextures","execute","commitFrame","discardFrame","reset"],"mappings":"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"}
|