@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sources":["../../../src/render/renderer.ts"],"sourcesContent":["import { LightPass } from './lightpass';\nimport { ShadowMapPass } from './shadowmap_pass';\nimport { DepthPass } from './depthpass';\nimport { isPowerOf2, Matrix4x4, nextPowerOf2, Vector3, Vector4 } from '@zephyr3d/base';\nimport type {\n BindGroup,\n ColorState,\n FrameBuffer,\n GPUProgram,\n Texture2D,\n TextureFormat\n} from '@zephyr3d/device';\nimport { Application } from '../app/app';\nimport { CopyBlitter } from '../blitter';\nimport type { DrawContext } from './drawable';\nimport type { RenderQueue } from './render_queue';\nimport type { PunctualLight, Scene } from '../scene';\nimport type { PickResult } from '../camera';\nimport { Camera } from '../camera';\nimport { AbstractPostEffect, PostEffectLayer } from '../posteffect/posteffect';\nimport { ClusteredLight } from './cluster_light';\nimport { GlobalBindGroupAllocator } from './globalbindgroup_allocator';\nimport { ObjectColorPass } from './objectcolorpass';\nimport { buildHiZ } from './hzb';\nimport { MaterialVaryingFlags } from '../values';\nimport { fetchSampler } from '../utility/misc';\nimport type { Primitive } from '.';\nimport { BoxShape } from '../shapes';\n\n/**\n * Forward render scheme\n * @internal\n */\nexport class SceneRenderer {\n /** @internal */\n private static _skyMotionVectorProgram: GPUProgram = null;\n /** @internal */\n private static _skyMotionVectorBindGroup: BindGroup = null;\n private static _box: Primitive = null;\n /** @internal */\n private static readonly _pickCamera = new Camera(null);\n /** @internal */\n private static readonly _scenePass = new LightPass();\n /** @internal */\n private static readonly _depthPass = new DepthPass();\n /** @internal */\n private static readonly _shadowMapPass = new ShadowMapPass();\n /** @internal */\n private static readonly _objectColorPass = new ObjectColorPass();\n /** @internal */\n private static _frontDepthColorState: ColorState = null;\n /** @internal */\n private static _backDepthColorState: ColorState = null;\n /** @internal */\n private static readonly _clusters: ClusteredLight[] = [];\n /** lighting render pass */\n static get sceneRenderPass(): LightPass {\n return this._scenePass;\n }\n /** depth render pass */\n static get depthRenderPass(): DepthPass {\n return this._depthPass;\n }\n /** shadow map render pass */\n static get shadowMapRenderPass(): ShadowMapPass {\n return this._shadowMapPass;\n }\n /** @internal */\n static getClusteredLight(): ClusteredLight {\n if (this._clusters.length > 0) {\n return this._clusters.pop();\n }\n return new ClusteredLight();\n }\n /** @internal */\n static freeClusteredLight(clusteredLight: ClusteredLight) {\n this._clusters.push(clusteredLight);\n }\n /**\n * Renders a scene by given camera\n * @param scene - The scene tondered\n * @param camera - The camera that will be used to render the scene\n * @param compositor - The compositor that will be used to apply postprocess effects\n */\n static renderScene(scene: Scene, camera: Camera): void {\n const device = Application.instance.device;\n const colorFormat = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\n ? 'rgba16f'\n : 'rgba8unorm';\n const depthFormat = device.getDeviceCaps().framebufferCaps.supportDepth32floatStencil8\n ? 'd32fs8'\n : 'd24s8';\n const globalBindGroupAllocator = GlobalBindGroupAllocator.get();\n scene.frameUpdate();\n scene.frameUpdatePerCamera(camera);\n if (camera && !device.isContextLost()) {\n const defaultViewport = !camera.viewport && !camera.scissor;\n const renderX = camera.viewport ? device.screenToDevice(camera.viewport[0]) : 0;\n const renderY = camera.viewport ? device.screenToDevice(camera.viewport[1]) : 0;\n const renderWidth = camera.viewport\n ? device.screenToDevice(camera.viewport[2])\n : device.getDrawingBufferWidth();\n const renderHeight = camera.viewport\n ? device.screenToDevice(camera.viewport[3])\n : device.getDrawingBufferHeight();\n if (renderWidth <= 0 || renderHeight <= 0) {\n camera.getPickResultResolveFunc()?.(null);\n return;\n }\n const tmpFramebuffer = defaultViewport\n ? null\n : device.pool.fetchTemporalFramebuffer(false, renderWidth, renderHeight, colorFormat, depthFormat);\n const originFramebuffer = device.getFramebuffer();\n if (tmpFramebuffer) {\n device.pushDeviceStates();\n device.setFramebuffer(tmpFramebuffer);\n }\n const SSR = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();\n const ctx: DrawContext = {\n device,\n scene,\n renderWidth,\n renderHeight,\n primaryCamera: camera,\n picking: false,\n oit: null,\n motionVectors: device.type !== 'webgl' && (camera.TAA || camera.motionBlur),\n HiZ: camera.HiZ && device.type !== 'webgl',\n HiZTexture: null,\n globalBindGroupAllocator,\n camera,\n compositor: camera.compositor,\n timestamp: device.frameInfo.frameTimestamp,\n queue: 0,\n lightBlending: false,\n renderPass: null,\n renderPassHash: null,\n fogFlags: 0,\n flip: false,\n depthFormat,\n colorFormat,\n drawEnvLight: false,\n env: null,\n materialFlags: 0,\n TAA: camera.TAA,\n SSR,\n SSRCalcThickness: SSR && camera.ssrCalcThickness,\n SSRRoughnessTexture: device.pool.fetchTemporalTexture2D(\n true,\n 'rgba8unorm',\n renderWidth,\n renderHeight\n ),\n SSRNormalTexture: device.pool.fetchTemporalTexture2D(true, 'rgba8unorm', renderWidth, renderHeight),\n finalFramebuffer: device.getFramebuffer(),\n intermediateFramebuffer: null\n };\n this._renderScene(ctx);\n if (tmpFramebuffer) {\n device.popDeviceStates();\n const oversizedViewport =\n renderX < 0 ||\n renderY < 0 ||\n renderX + renderWidth > device.getDrawingBufferWidth() ||\n renderY + renderHeight > device.getDrawingBufferHeight();\n const blitter = new CopyBlitter();\n if (oversizedViewport) {\n blitter.destRect = [renderX, renderY, renderWidth, renderHeight];\n } else {\n blitter.viewport = camera.viewport;\n }\n blitter.scissor = camera.scissor;\n blitter.blit(\n tmpFramebuffer.getColorAttachments()[0],\n originFramebuffer ?? null,\n fetchSampler('clamp_nearest_nomip')\n );\n device.pool.releaseFrameBuffer(tmpFramebuffer);\n }\n }\n GlobalBindGroupAllocator.release(globalBindGroupAllocator);\n }\n private static renderSceneDepth(ctx: DrawContext, renderQueue: RenderQueue, depthFramebuffer: FrameBuffer) {\n const transmission = !!depthFramebuffer;\n if (!depthFramebuffer) {\n const format: TextureFormat =\n ctx.device.type === 'webgl'\n ? ctx.SSRCalcThickness\n ? 'rgba16f'\n : 'rgba8unorm'\n : ctx.SSRCalcThickness\n ? 'rg32f'\n : 'r32f';\n const mvFormat: TextureFormat = ctx.device.type === 'webgl' ? 'rgba16f' : 'rgba16f';\n if (!ctx.finalFramebuffer) {\n depthFramebuffer = ctx.device.pool.fetchTemporalFramebuffer(\n true,\n ctx.renderWidth,\n ctx.renderHeight,\n ctx.motionVectors ? [format, mvFormat] : format,\n ctx.depthFormat,\n false\n );\n } else {\n const originDepth = ctx.finalFramebuffer?.getDepthAttachment();\n depthFramebuffer = originDepth?.isTexture2D()\n ? ctx.device.pool.fetchTemporalFramebuffer(\n true,\n originDepth.width,\n originDepth.height,\n ctx.motionVectors ? [format, mvFormat] : format,\n originDepth,\n false\n )\n : ctx.device.pool.fetchTemporalFramebuffer(\n true,\n ctx.renderWidth,\n ctx.renderHeight,\n ctx.motionVectors ? [format, mvFormat] : format,\n ctx.depthFormat,\n false\n );\n }\n }\n ctx.device.pushDeviceStates();\n ctx.device.setFramebuffer(depthFramebuffer);\n this._depthPass.encodeDepth = depthFramebuffer.getColorAttachments()[0].format === 'rgba8unorm';\n this._depthPass.clearColor = transmission\n ? null\n : this._depthPass.encodeDepth\n ? new Vector4(0, 0, 0, 1)\n : new Vector4(1, 1, 1, 1);\n this._depthPass.clearDepth = transmission ? null : 1;\n this._depthPass.clearStencil = null;\n this._depthPass.transmission = transmission;\n if (ctx.SSRCalcThickness && !transmission) {\n if (!this._backDepthColorState) {\n this._backDepthColorState = ctx.device.createColorState().setColorMask(false, true, false, false);\n }\n if (!this._frontDepthColorState) {\n this._frontDepthColorState = ctx.device.createColorState().setColorMask(true, false, false, false);\n }\n ctx.forceColorState = this._backDepthColorState;\n ctx.forceCullMode = 'front';\n this._depthPass.renderBackface = true;\n this._depthPass.transmission = false;\n this._depthPass.render(ctx, null, renderQueue);\n this._depthPass.clearColor = null;\n this._depthPass.renderBackface = false;\n ctx.forceColorState = this._frontDepthColorState;\n ctx.forceCullMode = null;\n }\n this._depthPass.render(ctx, null, renderQueue);\n ctx.forceColorState = null;\n ctx.device.popDeviceStates();\n\n if (!transmission) {\n ctx.motionVectorTexture = ctx.motionVectors\n ? (depthFramebuffer.getColorAttachments()[1] as Texture2D)\n : null;\n ctx.linearDepthTexture = depthFramebuffer.getColorAttachments()[0] as Texture2D;\n ctx.depthTexture = depthFramebuffer.getDepthAttachment() as Texture2D;\n if (ctx.motionVectorTexture) {\n this.renderSkyMotionVectors(ctx);\n }\n if (ctx.HiZ) {\n let w = isPowerOf2(ctx.linearDepthTexture.width)\n ? ctx.linearDepthTexture.width\n : nextPowerOf2(ctx.linearDepthTexture.width);\n let h = isPowerOf2(ctx.linearDepthTexture.height)\n ? ctx.linearDepthTexture.height\n : nextPowerOf2(ctx.linearDepthTexture.height);\n w = Math.max(1, w >> 1);\n h = Math.max(1, h >> 1);\n w = ctx.linearDepthTexture.width;\n h = ctx.linearDepthTexture.height;\n const HiZFrameBuffer = ctx.device.pool.fetchTemporalFramebuffer(\n true,\n w,\n h,\n ctx.linearDepthTexture.format,\n null,\n true\n );\n buildHiZ(ctx.depthTexture, HiZFrameBuffer);\n ctx.HiZTexture = HiZFrameBuffer.getColorAttachments()[0] as Texture2D;\n }\n }\n return depthFramebuffer;\n }\n /** @internal */\n protected static _renderScene(ctx: DrawContext): void {\n const device = ctx.device;\n\n // Cull scene\n const renderQueue = this._scenePass.cullScene(ctx, ctx.camera);\n\n // Update sky\n const sunLightColor = ctx.scene.env.sky.update(ctx);\n\n // Gather lights\n ctx.clusteredLight = this.getClusteredLight();\n ctx.clusteredLight.calculateLightIndex(ctx.camera, renderQueue);\n\n // Do GPU ray picking if required\n const pickResolveFunc = ctx.camera.getPickResultResolveFunc();\n if (pickResolveFunc) {\n this.renderObjectColors(ctx, pickResolveFunc, renderQueue);\n }\n\n // Render shadow maps\n this.renderShadowMaps(ctx, renderQueue.shadowedLights);\n\n // Render scene depth first\n const depthFramebuffer = this.renderSceneDepth(ctx, renderQueue, null);\n if (ctx.depthTexture === ctx.finalFramebuffer?.getDepthAttachment()) {\n ctx.intermediateFramebuffer = ctx.finalFramebuffer;\n } else {\n // TODO: fetch resizable framebuffer if ctx.defaultViewport is true\n ctx.intermediateFramebuffer = device.pool.fetchTemporalFramebuffer(\n false,\n ctx.depthTexture.width,\n ctx.depthTexture.height,\n ctx.colorFormat,\n ctx.depthTexture\n );\n }\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\n device.pushDeviceStates();\n device.setFramebuffer(ctx.intermediateFramebuffer);\n } else {\n device.setViewport(null);\n device.setScissor(null);\n }\n this._scenePass.transmission = false; // transmission\n this._scenePass.clearDepth = ctx.depthTexture ? null : 1;\n this._scenePass.clearStencil = ctx.depthTexture ? null : 0;\n if (ctx.SSR && !renderQueue.needSceneColor()) {\n ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\n }\n ctx.compositor?.begin(ctx);\n if (renderQueue.needSceneColor()) {\n const compositor = ctx.compositor;\n ctx.compositor = null;\n const sceneColorFramebuffer = device.pool.fetchTemporalFramebuffer(\n true,\n ctx.depthTexture.width,\n ctx.depthTexture.height,\n ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS\n ? [\n ctx.colorFormat,\n device.getFramebuffer().getColorAttachments()[1],\n device.getFramebuffer().getColorAttachments()[2]\n ]\n : ctx.colorFormat,\n ctx.depthTexture,\n false\n );\n device.pushDeviceStates();\n device.setFramebuffer(sceneColorFramebuffer);\n this._scenePass.transmission = false;\n this._scenePass.render(ctx, null, renderQueue);\n device.popDeviceStates();\n ctx.sceneColorTexture = sceneColorFramebuffer.getColorAttachments()[0] as Texture2D;\n new CopyBlitter().blit(\n ctx.sceneColorTexture,\n device.getFramebuffer() ?? null,\n fetchSampler('clamp_nearest_nomip')\n );\n this._scenePass.transmission = true;\n this._scenePass.clearColor = null;\n this._scenePass.clearDepth = null;\n this._scenePass.clearStencil = null;\n ctx.compositor = compositor;\n }\n this._scenePass.render(ctx, null, renderQueue);\n if (renderQueue.needSceneColor()) {\n this.renderSceneDepth(ctx, renderQueue, depthFramebuffer);\n }\n ctx.compositor?.drawPostEffects(ctx, PostEffectLayer.end, ctx.linearDepthTexture);\n ctx.compositor?.end(ctx);\n renderQueue.dispose();\n ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\n\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\n const blitter = new CopyBlitter();\n blitter.srgbOut = !ctx.finalFramebuffer;\n const srcTex = ctx.intermediateFramebuffer.getColorAttachments()[0] as Texture2D;\n blitter.blit(srcTex, ctx.finalFramebuffer ?? null, fetchSampler('clamp_nearest_nomip'));\n device.popDeviceStates();\n device.pool.releaseFrameBuffer(ctx.intermediateFramebuffer);\n }\n //ShadowMapper.releaseTemporalResources(ctx);\n this.freeClusteredLight(ctx.clusteredLight);\n\n // Restore sun color\n if (sunLightColor) {\n ctx.sunLight.color = sunLightColor;\n }\n }\n private static _getSkyMotionVectorProgram(ctx: DrawContext): GPUProgram {\n if (!this._skyMotionVectorProgram) {\n this._skyMotionVectorProgram = ctx.device.buildRenderProgram({\n vertex(pb) {\n this.$inputs.pos = pb.vec3().attrib('position');\n this.VPMatrix = pb.mat4().uniform(0);\n this.prevVPMatrix = pb.mat4().uniform(0);\n this.cameraPos = pb.vec3().uniform(0);\n this.prevCameraPos = pb.vec3().uniform(0);\n pb.main(function () {\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\n this.clipPos.z = this.clipPos.w;\n this.$builtins.position = this.clipPos;\n this.$outputs.currentPos = this.clipPos;\n this.$outputs.prevPos = this.prevClipPos;\n });\n },\n fragment(pb) {\n this.$outputs.color = pb.vec4();\n pb.main(function () {\n this.$l.motionVector = pb.mul(\n pb.sub(\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\n ),\n 0.5\n );\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\n });\n }\n });\n }\n return this._skyMotionVectorProgram;\n }\n private static _getBox(_ctx: DrawContext) {\n if (!this._box) {\n this._box = new BoxShape({\n size: 2,\n needNormal: false,\n needUV: false\n });\n }\n return this._box;\n }\n /** @internal */\n private static renderSkyMotionVectors(ctx: DrawContext) {\n if (!ctx.motionVectorTexture) {\n return;\n }\n const fb = ctx.device.pool.fetchTemporalFramebuffer(\n false,\n 0,\n 0,\n ctx.motionVectorTexture,\n ctx.depthTexture\n );\n const program = this._getSkyMotionVectorProgram(ctx);\n if (!this._skyMotionVectorBindGroup) {\n this._skyMotionVectorBindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\n }\n const box = this._getBox(ctx);\n this._skyMotionVectorBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\n this._skyMotionVectorBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix);\n this._skyMotionVectorBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\n this._skyMotionVectorBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition);\n ctx.device.pushDeviceStates();\n ctx.device.setProgram(program);\n ctx.device.setBindGroup(0, this._skyMotionVectorBindGroup);\n ctx.device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));\n ctx.device.setFramebuffer(fb);\n box.draw();\n ctx.device.popDeviceStates();\n ctx.device.pool.releaseFrameBuffer(fb);\n }\n /** @internal */\n private static renderShadowMaps(ctx: DrawContext, lights: PunctualLight[]) {\n ctx.renderPass = this._shadowMapPass;\n ctx.device.pushDeviceStates();\n for (const light of lights) {\n light.shadow.render(ctx, this._shadowMapPass);\n }\n ctx.device.popDeviceStates();\n }\n /** @internal */\n private static decodeNormalizedFloat(rgba: Uint8Array<ArrayBuffer>): number {\n const a = rgba[0] / 255;\n const b = rgba[1] / 255;\n const c = rgba[2] / 255;\n const d = rgba[3] / 255;\n return a / (256 * 256 * 256) + b / (256 * 256) + c / 256 + d;\n }\n /** @internal */\n private static renderObjectColors(\n ctx: DrawContext,\n pickResolveFunc: (result: PickResult) => void,\n renderQueue: RenderQueue\n ) {\n const camera = ctx.camera;\n const isWebGL1 = ctx.device.type === 'webgl';\n ctx.renderPass = this._objectColorPass;\n ctx.device.pushDeviceStates();\n const fb = ctx.device.pool.fetchTemporalFramebuffer(\n false,\n 1,\n 1,\n isWebGL1 ? ['rgba8unorm', 'rgba8unorm'] : ['rgba8unorm', 'rgba32f'],\n ctx.depthFormat,\n false\n );\n ctx.device.setViewport(camera.viewport);\n const vp = ctx.device.getViewport();\n const windowX = camera.getPickPosX() / vp.width;\n const windowY = (vp.height - camera.getPickPosY() - 1) / vp.height;\n const windowW = 1 / vp.width;\n const windowH = 1 / vp.height;\n camera.worldMatrix.decompose(\n this._pickCamera.scale,\n this._pickCamera.rotation,\n this._pickCamera.position\n );\n let left = camera.getProjectionMatrix().getLeftPlane();\n let right = camera.getProjectionMatrix().getRightPlane();\n let bottom = camera.getProjectionMatrix().getBottomPlane();\n let top = camera.getProjectionMatrix().getTopPlane();\n const near = camera.getProjectionMatrix().getNearPlane();\n const far = camera.getProjectionMatrix().getFarPlane();\n const width = right - left;\n const height = top - bottom;\n left += width * windowX;\n bottom += height * windowY;\n right = left + width * windowW;\n top = bottom + height * windowH;\n this._pickCamera.setProjectionMatrix(\n camera.isPerspective()\n ? Matrix4x4.frustum(left, right, bottom, top, near, far)\n : Matrix4x4.ortho(left, right, bottom, top, near, far)\n );\n const cameraPos = isWebGL1 ? new Vector3(this._pickCamera.position) : null;\n const ray = isWebGL1 ? camera.constructRay(camera.getPickPosX(), camera.getPickPosY()) : null;\n ctx.device.setFramebuffer(fb);\n this._objectColorPass.clearColor = Vector4.zero();\n this._objectColorPass.clearDepth = 1;\n const rq = this._objectColorPass.cullScene(ctx, this._pickCamera);\n ctx.camera = this._pickCamera;\n this._objectColorPass.render(ctx, null, rq);\n ctx.camera = camera;\n ctx.device.popDeviceStates();\n const colorTex = fb.getColorAttachments()[0];\n const distanceTex = fb.getColorAttachments()[1];\n const colorPixels = new Uint8Array(4);\n const distancePixels = isWebGL1 ? new Uint8Array(4) : new Float32Array(4);\n const device = ctx.device;\n let fence: Promise<void[]>;\n if (ctx.device.type === 'webgl') {\n fence = Promise.all([\n ctx.device.runNextFrameAsync(() => colorTex.readPixels(0, 0, 1, 1, 0, 0, colorPixels)),\n ctx.device.runNextFrameAsync(() => distanceTex.readPixels(0, 0, 1, 1, 0, 0, distancePixels))\n ]);\n } else {\n fence = Promise.all([\n colorTex.readPixels(0, 0, 1, 1, 0, 0, colorPixels),\n distanceTex.readPixels(0, 0, 1, 1, 0, 0, distancePixels)\n ]);\n }\n fence\n .then(() => {\n const drawable = renderQueue.getDrawableByColor(colorPixels);\n let d = isWebGL1\n ? this.decodeNormalizedFloat(distancePixels as Uint8Array<ArrayBuffer>) * far\n : distancePixels[0];\n const intersectedPoint = new Vector3(distancePixels[0], distancePixels[1], distancePixels[2]);\n if (isWebGL1) {\n intersectedPoint.x = cameraPos.x + ray.direction.x * d;\n intersectedPoint.y = cameraPos.y + ray.direction.y * d;\n intersectedPoint.z = cameraPos.z + ray.direction.z * d;\n d = Vector3.distance(intersectedPoint, cameraPos);\n }\n pickResolveFunc(\n drawable\n ? {\n distance: d,\n intersectedPoint,\n drawable,\n target: drawable.getPickTarget()\n }\n : null\n );\n device.pool.releaseFrameBuffer(fb);\n })\n .catch((_err) => {\n camera.getPickResultResolveFunc()?.(null);\n device.pool.releaseFrameBuffer(fb);\n });\n }\n}\n"],"names":["SceneRenderer","_skyMotionVectorProgram","_skyMotionVectorBindGroup","_box","_pickCamera","Camera","_scenePass","LightPass","_depthPass","DepthPass","_shadowMapPass","ShadowMapPass","_objectColorPass","ObjectColorPass","_frontDepthColorState","_backDepthColorState","_clusters","sceneRenderPass","depthRenderPass","shadowMapRenderPass","getClusteredLight","length","pop","ClusteredLight","freeClusteredLight","clusteredLight","push","renderScene","scene","camera","device","Application","instance","colorFormat","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","depthFormat","framebufferCaps","supportDepth32floatStencil8","globalBindGroupAllocator","GlobalBindGroupAllocator","get","frameUpdate","frameUpdatePerCamera","isContextLost","defaultViewport","viewport","scissor","renderX","screenToDevice","renderY","renderWidth","getDrawingBufferWidth","renderHeight","getDrawingBufferHeight","getPickResultResolveFunc","tmpFramebuffer","pool","fetchTemporalFramebuffer","originFramebuffer","getFramebuffer","pushDeviceStates","setFramebuffer","SSR","env","light","envLight","hasRadiance","ctx","primaryCamera","picking","oit","motionVectors","type","TAA","motionBlur","HiZ","HiZTexture","compositor","timestamp","frameInfo","frameTimestamp","queue","lightBlending","renderPass","renderPassHash","fogFlags","flip","drawEnvLight","materialFlags","SSRCalcThickness","ssrCalcThickness","SSRRoughnessTexture","fetchTemporalTexture2D","SSRNormalTexture","finalFramebuffer","intermediateFramebuffer","_renderScene","popDeviceStates","oversizedViewport","blitter","CopyBlitter","destRect","blit","getColorAttachments","fetchSampler","releaseFrameBuffer","release","renderSceneDepth","renderQueue","depthFramebuffer","transmission","format","mvFormat","originDepth","getDepthAttachment","isTexture2D","width","height","encodeDepth","clearColor","Vector4","clearDepth","clearStencil","createColorState","setColorMask","forceColorState","forceCullMode","renderBackface","render","motionVectorTexture","linearDepthTexture","depthTexture","renderSkyMotionVectors","w","isPowerOf2","nextPowerOf2","h","Math","max","HiZFrameBuffer","buildHiZ","cullScene","sunLightColor","sky","update","calculateLightIndex","pickResolveFunc","renderObjectColors","renderShadowMaps","shadowedLights","setViewport","setScissor","needSceneColor","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","begin","sceneColorFramebuffer","sceneColorTexture","drawPostEffects","PostEffectLayer","end","dispose","srgbOut","srcTex","sunLight","color","_getSkyMotionVectorProgram","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","motionVector","sub","div","xy","_getBox","_ctx","BoxShape","size","needNormal","needUV","fb","program","createBindGroup","bindGroupLayouts","box","setValue","viewProjectionMatrix","getWorldPosition","prevPosition","setProgram","setBindGroup","setRenderStates","AbstractPostEffect","getDefaultRenderState","draw","lights","shadow","decodeNormalizedFloat","rgba","a","b","c","d","isWebGL1","vp","getViewport","windowX","getPickPosX","windowY","getPickPosY","windowW","windowH","worldMatrix","decompose","scale","rotation","left","getProjectionMatrix","getLeftPlane","right","getRightPlane","bottom","getBottomPlane","top","getTopPlane","near","getNearPlane","far","getFarPlane","setProjectionMatrix","isPerspective","Matrix4x4","frustum","ortho","Vector3","ray","constructRay","zero","rq","colorTex","distanceTex","colorPixels","Uint8Array","distancePixels","Float32Array","fence","Promise","all","runNextFrameAsync","readPixels","then","drawable","getDrawableByColor","intersectedPoint","x","direction","y","distance","target","getPickTarget","catch","_err"],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { Vector4 } from '@zephyr3d/base';
|
|
2
|
+
import { CullVisitor } from './cull_visitor.js';
|
|
3
|
+
import { Application } from '../app/app.js';
|
|
4
|
+
import { RenderQueue } from './render_queue.js';
|
|
5
|
+
import { ShaderHelper } from '../material/shader/helper.js';
|
|
6
|
+
import { RenderBundleWrapper } from './renderbundle_wrapper.js';
|
|
7
|
+
import { MaterialVaryingFlags } from '../values.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Base class for any kind of render passes
|
|
11
|
+
* @public
|
|
12
|
+
*/ class RenderPass {
|
|
13
|
+
/** @internal */ _type;
|
|
14
|
+
/** @internal */ _globalBindGroups;
|
|
15
|
+
/** @internal */ _clearColor;
|
|
16
|
+
/** @internal */ _clearDepth;
|
|
17
|
+
/** @internal */ _clearStencil;
|
|
18
|
+
/**
|
|
19
|
+
* Creates an instanceof RenderPass
|
|
20
|
+
* @param type - Render pass type
|
|
21
|
+
*/ constructor(type){
|
|
22
|
+
this._type = type;
|
|
23
|
+
this._clearColor = new Vector4(0, 0, 0, 1);
|
|
24
|
+
this._clearDepth = 1;
|
|
25
|
+
this._clearStencil = 0;
|
|
26
|
+
this._globalBindGroups = {};
|
|
27
|
+
}
|
|
28
|
+
/** Color value that is used to clear the frame buffer */ get clearColor() {
|
|
29
|
+
return this._clearColor;
|
|
30
|
+
}
|
|
31
|
+
set clearColor(color) {
|
|
32
|
+
this._clearColor = color ?? null;
|
|
33
|
+
}
|
|
34
|
+
/** Depth value that is used to clear the frame buffer */ get clearDepth() {
|
|
35
|
+
return this._clearDepth;
|
|
36
|
+
}
|
|
37
|
+
set clearDepth(depth) {
|
|
38
|
+
this._clearDepth = depth ?? null;
|
|
39
|
+
}
|
|
40
|
+
/** Stencil value that is used to clear the frame buffer */ get clearStencil() {
|
|
41
|
+
return this._clearStencil;
|
|
42
|
+
}
|
|
43
|
+
set clearStencil(stencil) {
|
|
44
|
+
this._clearStencil = stencil ?? null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The render pass type
|
|
48
|
+
*/ get type() {
|
|
49
|
+
return this._type;
|
|
50
|
+
}
|
|
51
|
+
/** @internal */ isAutoFlip(ctx) {
|
|
52
|
+
return !!(ctx.device.getFramebuffer() && ctx.device.type === 'webgpu');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Renders a scene
|
|
56
|
+
* @param ctx - Drawing context
|
|
57
|
+
*/ render(ctx, cullCamera, renderQueue) {
|
|
58
|
+
ctx.renderPass = this;
|
|
59
|
+
this.drawScene(ctx, cullCamera ?? ctx.camera, renderQueue);
|
|
60
|
+
}
|
|
61
|
+
/** @internal */ getGlobalBindGroup(ctx) {
|
|
62
|
+
const hash = this.getGlobalBindGroupHash(ctx);
|
|
63
|
+
let bindGroup = this._globalBindGroups[hash];
|
|
64
|
+
if (!bindGroup) {
|
|
65
|
+
const ret = ctx.device.programBuilder.buildRender({
|
|
66
|
+
vertex (pb) {
|
|
67
|
+
ShaderHelper.prepareVertexShader(pb, ctx);
|
|
68
|
+
pb.main(function() {});
|
|
69
|
+
},
|
|
70
|
+
fragment (pb) {
|
|
71
|
+
ShaderHelper.prepareFragmentShader(pb, ctx);
|
|
72
|
+
pb.main(function() {});
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
bindGroup = ctx.device.createBindGroup(ret[2][0]);
|
|
76
|
+
this._globalBindGroups[hash] = bindGroup;
|
|
77
|
+
}
|
|
78
|
+
return bindGroup;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Disposes the render pass
|
|
82
|
+
*/ dispose() {
|
|
83
|
+
this._globalBindGroups = {};
|
|
84
|
+
}
|
|
85
|
+
/** @internal */ getGlobalBindGroupHash(ctx) {
|
|
86
|
+
return `${this.constructor.name}:${this._getGlobalBindGroupHash(ctx)}`;
|
|
87
|
+
}
|
|
88
|
+
/** @internal */ drawScene(ctx, cullCamera, renderQueue) {
|
|
89
|
+
const device = ctx.device;
|
|
90
|
+
this.clearFramebuffer();
|
|
91
|
+
const rq = renderQueue ?? this.cullScene(ctx, cullCamera);
|
|
92
|
+
if (rq) {
|
|
93
|
+
const windingReversed = device.isWindingOrderReversed();
|
|
94
|
+
device.reverseVertexWindingOrder(this.isAutoFlip(ctx) ? !windingReversed : windingReversed);
|
|
95
|
+
this.renderItems(ctx, rq);
|
|
96
|
+
device.reverseVertexWindingOrder(windingReversed);
|
|
97
|
+
if (rq !== renderQueue) {
|
|
98
|
+
rq.dispose();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Culls a scene by a given camera
|
|
104
|
+
* @param ctx - The draw context
|
|
105
|
+
* @param cullCamera - The camera that will be used to cull the scene
|
|
106
|
+
* @returns The cull result
|
|
107
|
+
*/ cullScene(ctx, cullCamera) {
|
|
108
|
+
if (cullCamera) {
|
|
109
|
+
const renderQueue = new RenderQueue(this);
|
|
110
|
+
const cullVisitor = new CullVisitor(this, cullCamera, renderQueue, ctx.primaryCamera);
|
|
111
|
+
if (ctx.scene.octree) {
|
|
112
|
+
ctx.scene.octree.getRootNode().traverse(cullVisitor);
|
|
113
|
+
} else {
|
|
114
|
+
ctx.scene.rootNode.traverse(cullVisitor);
|
|
115
|
+
}
|
|
116
|
+
renderQueue.end(cullCamera);
|
|
117
|
+
ctx.sunLight = renderQueue.sunLight;
|
|
118
|
+
return renderQueue;
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
/** @internal */ internalDrawItemList(ctx, items, renderBundle, reverseWinding, hash) {
|
|
123
|
+
let recording = false;
|
|
124
|
+
if (renderBundle && ctx.primaryCamera.commandBufferReuse) {
|
|
125
|
+
const bundle = renderBundle.getRenderBundle(hash);
|
|
126
|
+
if (bundle) {
|
|
127
|
+
ctx.device.executeRenderBundle(bundle);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
recording = true;
|
|
131
|
+
renderBundle.beginRenderBundle();
|
|
132
|
+
}
|
|
133
|
+
for (const item of items){
|
|
134
|
+
ctx.instanceData = item.instanceData;
|
|
135
|
+
const reverse = reverseWinding !== item.drawable.getNode().worldMatrixDet < 0;
|
|
136
|
+
if (reverse) {
|
|
137
|
+
ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());
|
|
138
|
+
}
|
|
139
|
+
if (recording) {
|
|
140
|
+
RenderBundleWrapper.addDrawable(item.drawable, item.drawable.getMaterial()?.coreMaterial, item.drawable.getPrimitive(), renderBundle, hash);
|
|
141
|
+
}
|
|
142
|
+
item.drawable.draw(ctx, recording ? undefined : hash);
|
|
143
|
+
if (reverse) {
|
|
144
|
+
ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (renderBundle && ctx.primaryCamera.commandBufferReuse) {
|
|
148
|
+
renderBundle.endRenderBundle(hash);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** @internal */ drawItemList(itemList, ctx, reverseWinding) {
|
|
152
|
+
ctx.renderQueue = itemList.renderQueue;
|
|
153
|
+
ctx.instanceData = null;
|
|
154
|
+
const windingHash = reverseWinding ? '1' : '0';
|
|
155
|
+
const bindGroupHash = ctx.device.getBindGroup(0)[0].getGPUId();
|
|
156
|
+
const framebufferHash = ctx.device.getFramebuffer()?.getHash() ?? '';
|
|
157
|
+
const ctxHash = `${ctx.sceneColorTexture?.uid ?? 0}-${ctx.linearDepthTexture?.uid ?? 0}`;
|
|
158
|
+
const hash = `${windingHash}-${bindGroupHash}-${framebufferHash}-${ctxHash}-${ctx.renderPassHash}`;
|
|
159
|
+
if (itemList) {
|
|
160
|
+
if (itemList.itemList.length > 0) {
|
|
161
|
+
ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.INSTANCING | MaterialVaryingFlags.MORPH_ANIMATION);
|
|
162
|
+
itemList.materialList.forEach((mat)=>mat.apply(ctx));
|
|
163
|
+
this.internalDrawItemList(ctx, itemList.itemList, itemList.renderBundle, reverseWinding, hash);
|
|
164
|
+
}
|
|
165
|
+
if (itemList.skinItemList.length > 0) {
|
|
166
|
+
ctx.materialFlags |= MaterialVaryingFlags.SKIN_ANIMATION;
|
|
167
|
+
ctx.materialFlags &= ~(MaterialVaryingFlags.MORPH_ANIMATION | MaterialVaryingFlags.INSTANCING);
|
|
168
|
+
itemList.materialList.forEach((mat)=>mat.apply(ctx));
|
|
169
|
+
this.internalDrawItemList(ctx, itemList.skinItemList, itemList.skinRenderBundle, reverseWinding, hash);
|
|
170
|
+
}
|
|
171
|
+
if (itemList.morphItemList.length > 0) {
|
|
172
|
+
ctx.materialFlags |= MaterialVaryingFlags.MORPH_ANIMATION;
|
|
173
|
+
ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.INSTANCING);
|
|
174
|
+
itemList.materialList.forEach((mat)=>mat.apply(ctx));
|
|
175
|
+
this.internalDrawItemList(ctx, itemList.morphItemList, itemList.morphRenderBundle, reverseWinding, hash);
|
|
176
|
+
}
|
|
177
|
+
if (itemList.skinAndMorphItemList.length > 0) {
|
|
178
|
+
ctx.materialFlags |= MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION;
|
|
179
|
+
ctx.materialFlags &= ~MaterialVaryingFlags.INSTANCING;
|
|
180
|
+
itemList.materialList.forEach((mat)=>mat.apply(ctx));
|
|
181
|
+
this.internalDrawItemList(ctx, itemList.skinAndMorphItemList, itemList.skinAndMorphRenderBundle, reverseWinding, hash);
|
|
182
|
+
}
|
|
183
|
+
if (itemList.instanceItemList.length > 0) {
|
|
184
|
+
ctx.materialFlags |= MaterialVaryingFlags.INSTANCING;
|
|
185
|
+
ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION);
|
|
186
|
+
itemList.materialList.forEach((mat)=>mat.apply(ctx));
|
|
187
|
+
this.internalDrawItemList(ctx, itemList.instanceItemList, itemList.instanceRenderBundle, reverseWinding, hash);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
ctx.renderQueue = null;
|
|
191
|
+
}
|
|
192
|
+
/** @internal */ clearFramebuffer() {
|
|
193
|
+
if (this._clearColor || this._clearDepth || this._clearStencil) {
|
|
194
|
+
Application.instance.device.clearFrameBuffer(this._clearColor, this._clearDepth, this._clearStencil);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export { RenderPass };
|
|
200
|
+
//# sourceMappingURL=renderpass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderpass.js","sources":["../../../src/render/renderpass.ts"],"sourcesContent":["import { Vector4 } from '@zephyr3d/base';\r\nimport { CullVisitor } from './cull_visitor';\r\nimport { Application } from '../app';\r\nimport type { RenderItemListInfo, RenderQueueItem } from './render_queue';\r\nimport { RenderQueue } from './render_queue';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { RenderBundleWrapper } from './renderbundle_wrapper';\r\nimport { MaterialVaryingFlags } from '../values';\r\nimport type { BindGroup } from '@zephyr3d/device';\r\n\r\n/**\r\n * Base class for any kind of render passes\r\n * @public\r\n */\r\nexport abstract class RenderPass {\r\n /** @internal */\r\n protected _type: number;\r\n /** @internal */\r\n protected _globalBindGroups: Record<string, BindGroup>;\r\n /** @internal */\r\n protected _clearColor: Vector4;\r\n /** @internal */\r\n protected _clearDepth: number;\r\n /** @internal */\r\n protected _clearStencil: number;\r\n /**\r\n * Creates an instanceof RenderPass\r\n * @param type - Render pass type\r\n */\r\n constructor(type: number) {\r\n this._type = type;\r\n this._clearColor = new Vector4(0, 0, 0, 1);\r\n this._clearDepth = 1;\r\n this._clearStencil = 0;\r\n this._globalBindGroups = {};\r\n }\r\n /** Color value that is used to clear the frame buffer */\r\n get clearColor(): Vector4 {\r\n return this._clearColor;\r\n }\r\n set clearColor(color: Vector4) {\r\n this._clearColor = color ?? null;\r\n }\r\n /** Depth value that is used to clear the frame buffer */\r\n get clearDepth(): number {\r\n return this._clearDepth;\r\n }\r\n set clearDepth(depth: number) {\r\n this._clearDepth = depth ?? null;\r\n }\r\n /** Stencil value that is used to clear the frame buffer */\r\n get clearStencil(): number {\r\n return this._clearStencil;\r\n }\r\n set clearStencil(stencil: number) {\r\n this._clearStencil = stencil ?? null;\r\n }\r\n /**\r\n * The render pass type\r\n */\r\n get type(): number {\r\n return this._type;\r\n }\r\n /** @internal */\r\n isAutoFlip(ctx: DrawContext): boolean {\r\n return !!(ctx.device.getFramebuffer() && ctx.device.type === 'webgpu');\r\n }\r\n /**\r\n * Renders a scene\r\n * @param ctx - Drawing context\r\n */\r\n render(ctx: DrawContext, cullCamera?: Camera, renderQueue?: RenderQueue) {\r\n ctx.renderPass = this;\r\n this.drawScene(ctx, cullCamera ?? ctx.camera, renderQueue);\r\n }\r\n /** @internal */\r\n protected getGlobalBindGroup(ctx: DrawContext): BindGroup {\r\n const hash = this.getGlobalBindGroupHash(ctx);\r\n let bindGroup = this._globalBindGroups[hash];\r\n if (!bindGroup) {\r\n const ret = ctx.device.programBuilder.buildRender({\r\n vertex(pb) {\r\n ShaderHelper.prepareVertexShader(pb, ctx);\r\n pb.main(function () {});\r\n },\r\n fragment(pb) {\r\n ShaderHelper.prepareFragmentShader(pb, ctx);\r\n pb.main(function () {});\r\n }\r\n });\r\n bindGroup = ctx.device.createBindGroup(ret[2][0]);\r\n this._globalBindGroups[hash] = bindGroup;\r\n }\r\n return bindGroup;\r\n }\r\n /**\r\n * Disposes the render pass\r\n */\r\n dispose() {\r\n this._globalBindGroups = {};\r\n }\r\n /** @internal */\r\n getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${this.constructor.name}:${this._getGlobalBindGroupHash(ctx)}`;\r\n }\r\n /** @internal */\r\n protected abstract _getGlobalBindGroupHash(ctx: DrawContext);\r\n /** @internal */\r\n protected abstract renderItems(ctx: DrawContext, renderQueue: RenderQueue);\r\n /** @internal */\r\n protected drawScene(ctx: DrawContext, cullCamera: Camera, renderQueue?: RenderQueue) {\r\n const device = ctx.device;\r\n this.clearFramebuffer();\r\n const rq = renderQueue ?? this.cullScene(ctx, cullCamera);\r\n if (rq) {\r\n const windingReversed = device.isWindingOrderReversed();\r\n device.reverseVertexWindingOrder(this.isAutoFlip(ctx) ? !windingReversed : windingReversed);\r\n this.renderItems(ctx, rq);\r\n device.reverseVertexWindingOrder(windingReversed);\r\n if (rq !== renderQueue) {\r\n rq.dispose();\r\n }\r\n }\r\n }\r\n /**\r\n * Culls a scene by a given camera\r\n * @param ctx - The draw context\r\n * @param cullCamera - The camera that will be used to cull the scene\r\n * @returns The cull result\r\n */\r\n cullScene(ctx: DrawContext, cullCamera: Camera): RenderQueue {\r\n if (cullCamera) {\r\n const renderQueue = new RenderQueue(this);\r\n const cullVisitor = new CullVisitor(this, cullCamera, renderQueue, ctx.primaryCamera);\r\n if (ctx.scene.octree) {\r\n ctx.scene.octree.getRootNode().traverse(cullVisitor);\r\n } else {\r\n ctx.scene.rootNode.traverse(cullVisitor);\r\n }\r\n renderQueue.end(cullCamera);\r\n ctx.sunLight = renderQueue.sunLight;\r\n return renderQueue;\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private internalDrawItemList(\r\n ctx: DrawContext,\r\n items: RenderQueueItem[],\r\n renderBundle: RenderBundleWrapper,\r\n reverseWinding: boolean,\r\n hash: string\r\n ) {\r\n let recording = false;\r\n if (renderBundle && ctx.primaryCamera.commandBufferReuse) {\r\n const bundle = renderBundle.getRenderBundle(hash);\r\n if (bundle) {\r\n ctx.device.executeRenderBundle(bundle);\r\n return;\r\n }\r\n recording = true;\r\n renderBundle.beginRenderBundle();\r\n }\r\n for (const item of items) {\r\n ctx.instanceData = item.instanceData;\r\n const reverse = reverseWinding !== item.drawable.getNode().worldMatrixDet < 0;\r\n if (reverse) {\r\n ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());\r\n }\r\n if (recording) {\r\n RenderBundleWrapper.addDrawable(\r\n item.drawable,\r\n item.drawable.getMaterial()?.coreMaterial,\r\n item.drawable.getPrimitive(),\r\n renderBundle,\r\n hash\r\n );\r\n }\r\n item.drawable.draw(ctx, recording ? undefined : hash);\r\n if (reverse) {\r\n ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());\r\n }\r\n }\r\n if (renderBundle && ctx.primaryCamera.commandBufferReuse) {\r\n renderBundle.endRenderBundle(hash);\r\n }\r\n }\r\n /** @internal */\r\n protected drawItemList(itemList: RenderItemListInfo, ctx: DrawContext, reverseWinding: boolean) {\r\n ctx.renderQueue = itemList.renderQueue;\r\n ctx.instanceData = null;\r\n const windingHash = reverseWinding ? '1' : '0';\r\n const bindGroupHash = ctx.device.getBindGroup(0)[0].getGPUId();\r\n const framebufferHash = ctx.device.getFramebuffer()?.getHash() ?? '';\r\n const ctxHash = `${ctx.sceneColorTexture?.uid ?? 0}-${ctx.linearDepthTexture?.uid ?? 0}`;\r\n const hash = `${windingHash}-${bindGroupHash}-${framebufferHash}-${ctxHash}-${ctx.renderPassHash}`;\r\n if (itemList) {\r\n if (itemList.itemList.length > 0) {\r\n ctx.materialFlags &= ~(\r\n MaterialVaryingFlags.SKIN_ANIMATION |\r\n MaterialVaryingFlags.INSTANCING |\r\n MaterialVaryingFlags.MORPH_ANIMATION\r\n );\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(ctx, itemList.itemList, itemList.renderBundle, reverseWinding, hash);\r\n }\r\n if (itemList.skinItemList.length > 0) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SKIN_ANIMATION;\r\n ctx.materialFlags &= ~(MaterialVaryingFlags.MORPH_ANIMATION | MaterialVaryingFlags.INSTANCING);\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(\r\n ctx,\r\n itemList.skinItemList,\r\n itemList.skinRenderBundle,\r\n reverseWinding,\r\n hash\r\n );\r\n }\r\n if (itemList.morphItemList.length > 0) {\r\n ctx.materialFlags |= MaterialVaryingFlags.MORPH_ANIMATION;\r\n ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.INSTANCING);\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(\r\n ctx,\r\n itemList.morphItemList,\r\n itemList.morphRenderBundle,\r\n reverseWinding,\r\n hash\r\n );\r\n }\r\n if (itemList.skinAndMorphItemList.length > 0) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.INSTANCING;\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(\r\n ctx,\r\n itemList.skinAndMorphItemList,\r\n itemList.skinAndMorphRenderBundle,\r\n reverseWinding,\r\n hash\r\n );\r\n }\r\n if (itemList.instanceItemList.length > 0) {\r\n ctx.materialFlags |= MaterialVaryingFlags.INSTANCING;\r\n ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION);\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(\r\n ctx,\r\n itemList.instanceItemList,\r\n itemList.instanceRenderBundle,\r\n reverseWinding,\r\n hash\r\n );\r\n }\r\n }\r\n ctx.renderQueue = null;\r\n }\r\n /** @internal */\r\n private clearFramebuffer() {\r\n if (this._clearColor || this._clearDepth || this._clearStencil) {\r\n Application.instance.device.clearFrameBuffer(this._clearColor, this._clearDepth, this._clearStencil);\r\n }\r\n }\r\n}\r\n"],"names":["RenderPass","type","_type","_clearColor","Vector4","_clearDepth","_clearStencil","_globalBindGroups","clearColor","color","clearDepth","depth","clearStencil","stencil","isAutoFlip","ctx","device","getFramebuffer","render","cullCamera","renderQueue","renderPass","drawScene","camera","getGlobalBindGroup","hash","getGlobalBindGroupHash","bindGroup","ret","programBuilder","buildRender","vertex","pb","ShaderHelper","prepareVertexShader","main","fragment","prepareFragmentShader","createBindGroup","dispose","name","_getGlobalBindGroupHash","clearFramebuffer","rq","cullScene","windingReversed","isWindingOrderReversed","reverseVertexWindingOrder","renderItems","RenderQueue","cullVisitor","CullVisitor","primaryCamera","scene","octree","getRootNode","traverse","rootNode","end","sunLight","internalDrawItemList","items","renderBundle","reverseWinding","recording","commandBufferReuse","bundle","getRenderBundle","executeRenderBundle","beginRenderBundle","item","instanceData","reverse","drawable","getNode","worldMatrixDet","RenderBundleWrapper","addDrawable","getMaterial","coreMaterial","getPrimitive","draw","undefined","endRenderBundle","itemList","windingHash","bindGroupHash","getBindGroup","getGPUId","framebufferHash","getHash","ctxHash","sceneColorTexture","uid","linearDepthTexture","renderPassHash","length","materialFlags","MaterialVaryingFlags","SKIN_ANIMATION","INSTANCING","MORPH_ANIMATION","materialList","forEach","mat","apply","skinItemList","skinRenderBundle","morphItemList","morphRenderBundle","skinAndMorphItemList","skinAndMorphRenderBundle","instanceItemList","instanceRenderBundle","Application","instance","clearFrameBuffer"],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { RenderPass } from './renderpass.js';
|
|
2
|
+
import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
|
|
3
|
+
import { ShaderHelper } from '../material/shader/helper.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Shadow map render pass
|
|
7
|
+
*
|
|
8
|
+
* @public
|
|
9
|
+
*/ class ShadowMapPass extends RenderPass {
|
|
10
|
+
/** @internal */ _currentLight;
|
|
11
|
+
/**
|
|
12
|
+
* Creates an instance of ShadowMapPass
|
|
13
|
+
*/ constructor(){
|
|
14
|
+
super(RENDER_PASS_TYPE_SHADOWMAP);
|
|
15
|
+
this._currentLight = null;
|
|
16
|
+
}
|
|
17
|
+
/** The light that will be used to render shadow map */ get light() {
|
|
18
|
+
return this._currentLight;
|
|
19
|
+
}
|
|
20
|
+
set light(light) {
|
|
21
|
+
this._currentLight = light;
|
|
22
|
+
}
|
|
23
|
+
/** @internal */ _getGlobalBindGroupHash(ctx) {
|
|
24
|
+
return `${ctx.shadowMapInfo.get(this.light).shaderHash}`;
|
|
25
|
+
}
|
|
26
|
+
/** @internal */ renderItems(ctx, renderQueue) {
|
|
27
|
+
const items = renderQueue.itemList;
|
|
28
|
+
if (items) {
|
|
29
|
+
ctx.drawEnvLight = false;
|
|
30
|
+
ctx.env = null;
|
|
31
|
+
ctx.fogFlags = 0;
|
|
32
|
+
ctx.flip = this.isAutoFlip(ctx);
|
|
33
|
+
ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
|
|
34
|
+
const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
|
|
35
|
+
ctx.device.setBindGroup(0, bindGroup);
|
|
36
|
+
ShaderHelper.setLightUniformsShadowMap(bindGroup, ctx, this._currentLight);
|
|
37
|
+
ShaderHelper.setCameraUniforms(bindGroup, ctx, true);
|
|
38
|
+
const reverseWinding = ctx.camera.worldMatrixDet < 0;
|
|
39
|
+
for (const lit of items.opaque.lit){
|
|
40
|
+
this.drawItemList(lit, ctx, reverseWinding);
|
|
41
|
+
}
|
|
42
|
+
for (const unlit of items.opaque.unlit){
|
|
43
|
+
this.drawItemList(unlit, ctx, reverseWinding);
|
|
44
|
+
}
|
|
45
|
+
for (const lit of items.transmission.lit){
|
|
46
|
+
this.drawItemList(lit, ctx, reverseWinding);
|
|
47
|
+
}
|
|
48
|
+
for (const unlit of items.transmission.unlit){
|
|
49
|
+
this.drawItemList(unlit, ctx, reverseWinding);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { ShadowMapPass };
|
|
56
|
+
//# sourceMappingURL=shadowmap_pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadowmap_pass.js","sources":["../../../src/render/shadowmap_pass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { RENDER_PASS_TYPE_SHADOWMAP } from '../values';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\n/**\r\n * Shadow map render pass\r\n *\r\n * @public\r\n */\r\nexport class ShadowMapPass extends RenderPass {\r\n /** @internal */\r\n protected _currentLight: PunctualLight;\r\n /**\r\n * Creates an instance of ShadowMapPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_SHADOWMAP);\r\n this._currentLight = null;\r\n }\r\n /** The light that will be used to render shadow map */\r\n get light(): PunctualLight {\r\n return this._currentLight;\r\n }\r\n set light(light: PunctualLight) {\r\n this._currentLight = light;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${ctx.shadowMapInfo.get(this.light).shaderHash}`;\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, renderQueue: RenderQueue) {\r\n const items = renderQueue.itemList;\r\n if (items) {\r\n ctx.drawEnvLight = false;\r\n ctx.env = null;\r\n ctx.fogFlags = 0;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n ShaderHelper.setLightUniformsShadowMap(bindGroup, ctx, this._currentLight);\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, true);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n for (const lit of items.opaque.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of items.opaque.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n for (const lit of items.transmission.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of items.transmission.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["ShadowMapPass","RenderPass","RENDER_PASS_TYPE_SHADOWMAP","_currentLight","light","_getGlobalBindGroupHash","ctx","shadowMapInfo","get","shaderHash","renderItems","renderQueue","items","itemList","drawEnvLight","env","fogFlags","flip","isAutoFlip","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setLightUniformsShadowMap","setCameraUniforms","reverseWinding","camera","worldMatrixDet","lit","opaque","drawItemList","unlit","transmission"],"mappings":";;;;AAOA;;;;IAKO,MAAMA,aAAsBC,SAAAA,UAAAA,CAAAA;qBAEjC,aAAuC;AACvC;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,0BAAAA,CAAAA;QACN,IAAI,CAACC,aAAa,GAAG,IAAA;AACvB;4DAEA,IAAIC,KAAuB,GAAA;QACzB,OAAO,IAAI,CAACD,aAAa;AAC3B;IACA,IAAIC,KAAAA,CAAMA,KAAoB,EAAE;QAC9B,IAAI,CAACD,aAAa,GAAGC,KAAAA;AACvB;AACA,qBACUC,uBAAwBC,CAAAA,GAAgB,EAAE;QAClD,OAAO,CAAA,EAAGA,GAAIC,CAAAA,aAAa,CAACC,GAAG,CAAC,IAAI,CAACJ,KAAK,CAAEK,CAAAA,UAAU,CAAE,CAAA;AAC1D;AACA,qBACA,WAAUC,CAAYJ,GAAgB,EAAEK,WAAwB,EAAE;QAChE,MAAMC,KAAAA,GAAQD,YAAYE,QAAQ;AAClC,QAAA,IAAID,KAAO,EAAA;AACTN,YAAAA,GAAAA,CAAIQ,YAAY,GAAG,KAAA;AACnBR,YAAAA,GAAAA,CAAIS,GAAG,GAAG,IAAA;AACVT,YAAAA,GAAAA,CAAIU,QAAQ,GAAG,CAAA;AACfV,YAAAA,GAAAA,CAAIW,IAAI,GAAG,IAAI,CAACC,UAAU,CAACZ,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIa,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACd,GAAAA,CAAAA;AACjD,YAAA,MAAMe,SAAYf,GAAAA,GAAAA,CAAIgB,wBAAwB,CAACC,kBAAkB,CAACjB,GAAAA,CAAAA;AAClEA,YAAAA,GAAAA,CAAIkB,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;AAC3BK,YAAAA,YAAAA,CAAaC,yBAAyB,CAACN,SAAAA,EAAWf,GAAK,EAAA,IAAI,CAACH,aAAa,CAAA;YACzEuB,YAAaE,CAAAA,iBAAiB,CAACP,SAAAA,EAAWf,GAAK,EAAA,IAAA,CAAA;AAC/C,YAAA,MAAMuB,cAAiBvB,GAAAA,GAAAA,CAAIwB,MAAM,CAACC,cAAc,GAAG,CAAA;AACnD,YAAA,KAAK,MAAMC,GAAOpB,IAAAA,KAAAA,CAAMqB,MAAM,CAACD,GAAG,CAAE;AAClC,gBAAA,IAAI,CAACE,YAAY,CAACF,GAAAA,EAAK1B,GAAKuB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMM,KAASvB,IAAAA,KAAAA,CAAMqB,MAAM,CAACE,KAAK,CAAE;AACtC,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO7B,GAAKuB,EAAAA,cAAAA,CAAAA;AAChC;AACA,YAAA,KAAK,MAAMG,GAAOpB,IAAAA,KAAAA,CAAMwB,YAAY,CAACJ,GAAG,CAAE;AACxC,gBAAA,IAAI,CAACE,YAAY,CAACF,GAAAA,EAAK1B,GAAKuB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMM,KAASvB,IAAAA,KAAAA,CAAMwB,YAAY,CAACD,KAAK,CAAE;AAC5C,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO7B,GAAKuB,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACF;;;;"}
|