@woosh/meep-engine 3.39.0 → 3.41.0
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/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts +24 -0
- package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_clamp.js +62 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts +15 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.js +36 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.d.ts +39 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.js +85 -0
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts +11 -6
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js +27 -13
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts +25 -0
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts.map +1 -0
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js +166 -0
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts +5 -3
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts.map +1 -1
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js +5 -3
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +17 -4
- package/src/engine/animation/curve/AnimationCurve.d.ts +3 -0
- package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
- package/src/engine/animation/curve/AnimationCurve.js +6 -1
- package/src/engine/asset/loaders/image/avif/threaded_image_encoder.js +1 -1
- package/src/engine/ecs/EntityManager.d.ts +9 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +26 -27
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +20 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -1
- package/src/engine/ecs/gpu/GPUStateAuthority.js +21 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts +13 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.js +12 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +6 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -1
- package/src/engine/ecs/gpu/gpu_authority_grant.js +7 -1
- package/src/engine/ecs/gpu/gpu_authority_held.d.ts +14 -0
- package/src/engine/ecs/gpu/gpu_authority_held.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_held.js +23 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.d.ts +23 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.js +41 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts +14 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.js +32 -0
- package/src/engine/ecs/ik/IKGoal.d.ts +59 -0
- package/src/engine/ecs/ik/IKGoal.d.ts.map +1 -0
- package/src/engine/ecs/ik/IKGoal.js +83 -0
- package/src/engine/ecs/ik/IKGoalSystem.d.ts +75 -0
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -0
- package/src/engine/ecs/ik/IKGoalSystem.js +1456 -0
- package/src/engine/ecs/ik/PLAN.md +179 -0
- package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/storage/BinaryBufferSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/BinaryBufferSerializer.js +4 -5
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +7 -3
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +5 -2
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts +33 -0
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts.map +1 -0
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.js +282 -0
- package/src/engine/ecs/transform/T64WorldCache.js +139 -139
- package/src/engine/ecs/transform/t64_evaluate_local.d.ts +25 -0
- package/src/engine/ecs/transform/t64_evaluate_local.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_evaluate_local.js +35 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts +5 -3
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -1
- package/src/engine/ecs/transform/t64_evaluate_world.js +128 -126
- package/src/engine/graphics/ecs/water/Water.d.ts +14 -17
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +100 -110
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +36 -38
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.js +10 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +3 -3
- package/src/engine/graphics/ecs/water/WaterWaves.js +46 -46
- package/src/engine/graphics/texture/sampler/sampler2d_to_avif.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_to_avif.js +8 -5
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +2 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +337 -329
- package/src/engine/graphics3/AnimationSystem.d.ts +2 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +360 -352
- package/src/engine/graphics3/WaterSystem.d.ts +21 -74
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +174 -367
- package/src/engine/physics/cloth/MEASUREMENTS.md +130 -0
- package/src/engine/physics/cloth/PLAN.md +16 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +5 -6
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +5 -6
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +4 -7
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +4 -7
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +4 -3
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +4 -3
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +10 -0
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +24 -24
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +46 -43
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +1 -1
- package/src/engine/physics/constraint/solve_constraints.d.ts +0 -35
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +1 -83
- package/src/engine/physics/ecs/ContactProbe.d.ts +73 -0
- package/src/engine/physics/ecs/ContactProbe.d.ts.map +1 -0
- package/src/engine/physics/ecs/ContactProbe.js +103 -0
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts +44 -0
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -0
- package/src/engine/physics/ecs/ContactProbeSystem.js +397 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts +205 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.js +245 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts +21 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.js +63 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts +33 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +874 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts +27 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js +77 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts +36 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.js +97 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +33 -11
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/two_joint_ik.js +158 -67
- package/src/format/image/avif/api/convert_to_rgba.d.ts +2 -2
- package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
- package/src/format/image/avif/api/convert_to_rgba.js +10 -9
- package/src/format/image/avif/api/decode_avif.d.ts +2 -2
- package/src/format/image/avif/api/decode_avif.d.ts.map +1 -1
- package/src/format/image/avif/api/decode_avif.js +1 -1
- package/src/shade/playground/ssr_reprojection/README.md +111 -103
- package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -68
- package/src/shade/playground/ssr_reprojection/index.html +80 -79
- package/src/shade/playground/ssr_reprojection/main.js +256 -247
- package/src/shade/playground/ssr_variance/capture.js +96 -96
- package/src/shade/playground/ssr_variance/reference.js +78 -78
- package/src/shade/playground/vsm/README.md +96 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts +49 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.js +351 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts +8 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts.map +1 -0
- package/src/shade/playground/vsm/clipmap_panel.js +138 -0
- package/src/shade/playground/vsm/index.html +170 -0
- package/src/shade/playground/vsm/main.d.ts +2 -0
- package/src/shade/playground/vsm/main.d.ts.map +1 -0
- package/src/shade/playground/vsm/main.js +389 -0
- package/src/shade/playground/vsm/scenes.d.ts +52 -0
- package/src/shade/playground/vsm/scenes.d.ts.map +1 -0
- package/src/shade/playground/vsm/scenes.js +320 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts +38 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts.map +1 -0
- package/src/shade/playground/vsm/verify_vsm.js +305 -0
- package/src/shade/playground/water_refraction/README.md +57 -9
- package/src/shade/playground/water_refraction/main.js +12 -3
- package/src/shade/playground/water_refraction/world.d.ts +1 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
- package/src/shade/playground/water_refraction/world.js +15 -5
- package/src/shade/renderer/Renderer.d.ts +19 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +72 -1
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +10 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +18 -4
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +269 -23
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +12 -4
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +12 -4
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -1
- package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts +78 -0
- package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts.map +1 -0
- package/src/shade/renderer/animation/pose/PoseChannelIndex.js +274 -0
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +40 -3
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +77 -3
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +21 -3
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +79 -11
- package/src/shade/renderer/animation/shader_animation_apply.js +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts +3 -2
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +187 -176
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +7 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -0
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +10 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js +28 -0
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js +31 -1
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts +3 -0
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometry.js +1 -0
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +62 -4
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.js +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js +6 -14
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +5 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts +3 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -1
- package/src/shade/renderer/medium/ParticipatingMedium.js +7 -0
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +3 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.js +5 -2
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +4 -0
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +6 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js +5 -35
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +12 -4
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +36 -8
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.js +2 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts +8 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.js +40 -0
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +150 -137
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.js +44 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts +5 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.js +35 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts +26 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.js +42 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +113 -105
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +2 -0
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +177 -167
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.js +10 -0
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts +1 -2
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/RasterizationJob.js +1 -2
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +5 -6
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +5 -6
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +2 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +11 -0
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +135 -73
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +7 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +29 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts +19 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.js +167 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts +25 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.js +124 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts +19 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.js +48 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +17 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +29 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js +4 -5
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js +1 -5
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts +30 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js +54 -0
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +3 -2
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts +19 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js +27 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +1 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +4 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +54 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +502 -10
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +3 -2
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +3 -2
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts +8 -0
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.js +34 -3
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +3 -2
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +17 -2
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +137 -133
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.js +14 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.js +15 -0
- package/src/shade/renderer/shadow/vsm/PLAN.md +440 -0
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +43 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +42 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +153 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +327 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.js +1408 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.js +13 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts +63 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.js +70 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts +11 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.js +10 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +54 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +75 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.js +85 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.js +29 -0
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +136 -25
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +282 -116
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +39 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +289 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts +18 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.js +75 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +45 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.js +100 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.js +47 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts +26 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.js +156 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +30 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +184 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +109 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts +56 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +211 -0
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.js +3 -13
- package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/infer_format_from_parameters.js +2 -3
- package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
- package/src/shade/renderer/texture/texture_write_to_gpu.js +16 -16
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts +4 -90
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.js +6 -210
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts +119 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.js +245 -0
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js +3 -19
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts +13 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.js +34 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +7 -2
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +49 -49
- package/src/shade/renderer/water/chunk_water_transport.js +3 -3
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +11 -25
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +64 -116
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +1 -20
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +10 -42
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts +3 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.js +3 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +1 -5
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +32 -30
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +4 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.js +69 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_inscatter.js +124 -123
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +75 -74
- package/src/shade/renderer/water/shader_water.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +490 -406
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +12 -85
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +128 -408
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +6 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +23 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +9 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.js +144 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +3 -5
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/chunk_water_wave.js +40 -48
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +14 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +34 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +4 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.js +123 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.js +85 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.js +83 -0
- package/src/shade/renderer/water/water_height_texture_from_sampler.d.ts.map +1 -1
- package/src/shade/renderer/water/water_height_texture_from_sampler.js +4 -3
- package/src/engine/ecs/ik/IKConstraint.d.ts +0 -52
- package/src/engine/ecs/ik/IKConstraint.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKConstraint.js +0 -95
- package/src/engine/ecs/ik/IKProblem.d.ts +0 -45
- package/src/engine/ecs/ik/IKProblem.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKProblem.js +0 -58
- package/src/engine/ecs/ik/IKSolver.d.ts +0 -8
- package/src/engine/ecs/ik/IKSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKSolver.js +0 -9
- package/src/engine/ecs/ik/InverseKinematics.d.ts +0 -48
- package/src/engine/ecs/ik/InverseKinematics.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematics.js +0 -119
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts +0 -19
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.js +0 -72
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +0 -54
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +0 -212
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts +0 -8
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +0 -153
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts +0 -5
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +0 -120
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +0 -64
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +0 -142
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +0 -42
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_probe_terrain_contact.js +0 -123
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +0 -18
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +0 -32
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts +0 -2
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts.map +0 -1
- package/src/engine/graphics/ecs/water/WATER_SIZE.js +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.d.ts +0 -22
- package/src/shade/renderer/light/GPUViewLightContext.d.ts.map +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.js +0 -62
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +0 -14
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +0 -20
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts +0 -27
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +0 -147
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts +0 -7
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +0 -10
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.js +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +0 -8
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +0 -27
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +0 -102
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts +0 -8
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.js +0 -34
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts +0 -10
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +0 -64
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts +0 -11
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/decode_tile_address.js +0 -26
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.js +0 -11
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts +0 -20
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +0 -184
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts +0 -25
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +0 -230
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts +0 -19
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +0 -127
- package/src/shade/renderer/texture/encode/ENCODE_NOTES_2026_09_02.md +0 -462
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +0 -23
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +0 -1
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +0 -18
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +0 -12
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +0 -27
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +0 -14
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +0 -49
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +0 -9
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +0 -47
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +0 -10
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_surface_write.js +0 -51
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +0 -12
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_step.js +0 -54
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +0 -13
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/water_surface_grid_indices.js +0 -39
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record a frame's virtual shadow map feedback into the `Shading` graph, once the main view's depth
|
|
3
|
+
* exists, and read it back.
|
|
4
|
+
*
|
|
5
|
+
* 1. **Movers**, once for the scene: every mesh row against the box it had last frame, and every
|
|
6
|
+
* skinned mesh against the pose it had, into one list ({@link shader_vsm_movers},
|
|
7
|
+
* {@link shader_vsm_skinned_movers}).
|
|
8
|
+
* 2. **Stale**, every frame for every map: the slots under a mover flagged in the map's persistent
|
|
9
|
+
* flags ({@link shader_vsm_stale}, sized indirectly to the movers).
|
|
10
|
+
* 3. **Feedback**, for a map under its readback cap: the pages the view's pixels ask for
|
|
11
|
+
* ({@link shader_vsm_demand}) with their pixel counts ({@link shader_vsm_gather_counts}), and the
|
|
12
|
+
* flagged slots listed and cleared ({@link shader_vsm_stale_compact}) — read back and handed to
|
|
13
|
+
* the map's {@link VSMPageManager#apply_reading} with the frame they were recorded in.
|
|
14
|
+
*
|
|
15
|
+
* @param {Object} options
|
|
16
|
+
* @param {FrameGraph} options.graph
|
|
17
|
+
* @param {import("../../view/GPUViewContext.js").GPUViewContext} options.view the view whose depth asks for pages
|
|
18
|
+
* @param {number} options.depth graph handle of the view's depth
|
|
19
|
+
* @param {VirtualShadowMap[]} options.maps
|
|
20
|
+
* @param {VSMMoverTracker} options.tracker the scene's casters as last seen
|
|
21
|
+
* @param {GPUDatabase} options.light_database
|
|
22
|
+
*/
|
|
23
|
+
export function graph_vsm_feedback({ graph, view, depth, maps, tracker, light_database, }: {
|
|
24
|
+
graph: FrameGraph;
|
|
25
|
+
view: import("../../view/GPUViewContext.js").GPUViewContext;
|
|
26
|
+
depth: number;
|
|
27
|
+
maps: VirtualShadowMap[];
|
|
28
|
+
tracker: VSMMoverTracker;
|
|
29
|
+
light_database: GPUDatabase;
|
|
30
|
+
}): void;
|
|
31
|
+
/**
|
|
32
|
+
* Readbacks of one map's feedback in flight at most: VT's cap. A frame that would go past it skips
|
|
33
|
+
* its readback — its wants come again the next frame, and its stale flags stay set until a readback
|
|
34
|
+
* lists them.
|
|
35
|
+
*
|
|
36
|
+
* @type {number}
|
|
37
|
+
*/
|
|
38
|
+
export const VSM_READBACKS_IN_FLIGHT: number;
|
|
39
|
+
//# sourceMappingURL=graph_vsm_feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_vsm_feedback.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/vsm/graph_vsm_feedback.js"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAP+B,KAAK;IACsC,IAAI,EAAnE,OAAO,8BAA8B,EAAE,cAAc;IACrC,KAAK,EAArB,MAAM;IACsB,IAAI,EAAhC,kBAAkB;IACO,OAAO;IACX,cAAc;SAsG7C;AAnID;;;;;;GAMG;AACH,sCAFU,MAAM,CAEyB"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
|
|
3
|
+
import { graph_read_buffer } from "../../buffer/graph_read_buffer.js";
|
|
4
|
+
import { WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION } from "../../gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js";
|
|
5
|
+
import { shader_vsm_demand, VSM_DEMAND_WORKGROUP_SIZE } from "./shader/shader_vsm_demand.js";
|
|
6
|
+
import { shader_vsm_gather_counts, VSM_GATHER_WORKGROUP_SIZE } from "./shader/shader_vsm_gather_counts.js";
|
|
7
|
+
import { shader_vsm_movers, VSM_MOVERS_WORKGROUP_SIZE } from "./shader/shader_vsm_movers.js";
|
|
8
|
+
import { shader_vsm_skinned_movers } from "./shader/shader_vsm_skinned_movers.js";
|
|
9
|
+
import { shader_vsm_stale, shader_vsm_stale_args, shader_vsm_stale_compact } from "./shader/shader_vsm_stale.js";
|
|
10
|
+
import { vsm_feedback_word_count } from "./VSM_FEEDBACK_LAYOUT.js";
|
|
11
|
+
import { VSM_MOVER_CAPACITY, VSM_MOVERS_BYTE_SIZE } from "./VSM_MOVER_LAYOUT.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Readbacks of one map's feedback in flight at most: VT's cap. A frame that would go past it skips
|
|
15
|
+
* its readback — its wants come again the next frame, and its stale flags stay set until a readback
|
|
16
|
+
* lists them.
|
|
17
|
+
*
|
|
18
|
+
* @type {number}
|
|
19
|
+
*/
|
|
20
|
+
export const VSM_READBACKS_IN_FLIGHT = 3;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Record a frame's virtual shadow map feedback into the `Shading` graph, once the main view's depth
|
|
24
|
+
* exists, and read it back.
|
|
25
|
+
*
|
|
26
|
+
* 1. **Movers**, once for the scene: every mesh row against the box it had last frame, and every
|
|
27
|
+
* skinned mesh against the pose it had, into one list ({@link shader_vsm_movers},
|
|
28
|
+
* {@link shader_vsm_skinned_movers}).
|
|
29
|
+
* 2. **Stale**, every frame for every map: the slots under a mover flagged in the map's persistent
|
|
30
|
+
* flags ({@link shader_vsm_stale}, sized indirectly to the movers).
|
|
31
|
+
* 3. **Feedback**, for a map under its readback cap: the pages the view's pixels ask for
|
|
32
|
+
* ({@link shader_vsm_demand}) with their pixel counts ({@link shader_vsm_gather_counts}), and the
|
|
33
|
+
* flagged slots listed and cleared ({@link shader_vsm_stale_compact}) — read back and handed to
|
|
34
|
+
* the map's {@link VSMPageManager#apply_reading} with the frame they were recorded in.
|
|
35
|
+
*
|
|
36
|
+
* @param {Object} options
|
|
37
|
+
* @param {FrameGraph} options.graph
|
|
38
|
+
* @param {import("../../view/GPUViewContext.js").GPUViewContext} options.view the view whose depth asks for pages
|
|
39
|
+
* @param {number} options.depth graph handle of the view's depth
|
|
40
|
+
* @param {VirtualShadowMap[]} options.maps
|
|
41
|
+
* @param {VSMMoverTracker} options.tracker the scene's casters as last seen
|
|
42
|
+
* @param {GPUDatabase} options.light_database
|
|
43
|
+
*/
|
|
44
|
+
export function graph_vsm_feedback({
|
|
45
|
+
graph,
|
|
46
|
+
view,
|
|
47
|
+
depth,
|
|
48
|
+
maps,
|
|
49
|
+
tracker,
|
|
50
|
+
light_database,
|
|
51
|
+
}) {
|
|
52
|
+
assert.defined(graph, 'graph');
|
|
53
|
+
assert.defined(view, 'view');
|
|
54
|
+
assert.isNonNegativeInteger(depth, 'depth');
|
|
55
|
+
assert.isArray(maps, 'maps');
|
|
56
|
+
assert.defined(tracker, 'tracker');
|
|
57
|
+
|
|
58
|
+
if (maps.length === 0) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const scene_ctx = view.scene;
|
|
63
|
+
const meshes = scene_ctx.scene_database.get('meshes');
|
|
64
|
+
const elements_per_page = meshes.descriptor.elements_per_page;
|
|
65
|
+
|
|
66
|
+
// every row the table has ever had, in whole pages
|
|
67
|
+
const pages = Math.ceil(Math.max(meshes.element_capacity, tracker.row_count) / elements_per_page);
|
|
68
|
+
|
|
69
|
+
tracker.ensure(pages * elements_per_page);
|
|
70
|
+
|
|
71
|
+
const row_count = tracker.row_count;
|
|
72
|
+
const groups_per_page = Math.ceil(elements_per_page / VSM_MOVERS_WORKGROUP_SIZE);
|
|
73
|
+
const mover_groups = Math.ceil(row_count / elements_per_page) * groups_per_page;
|
|
74
|
+
|
|
75
|
+
// folded into rows a dispatch dimension can hold
|
|
76
|
+
const mover_groups_x = Math.min(mover_groups, WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION);
|
|
77
|
+
const mover_groups_y = mover_groups > 0 ? Math.ceil(mover_groups / mover_groups_x) : 0;
|
|
78
|
+
|
|
79
|
+
const movers_data = {};
|
|
80
|
+
|
|
81
|
+
const movers_pass = graph.add("VSM Movers", movers_data, (data, resources, context) => {
|
|
82
|
+
const encoder = context.encoder;
|
|
83
|
+
const movers = resources.get(data.movers);
|
|
84
|
+
|
|
85
|
+
// only the count needs to start at zero: an entry is read only below it
|
|
86
|
+
encoder.clearBuffer(movers, 0, 16);
|
|
87
|
+
|
|
88
|
+
tracker.encode_growth(encoder);
|
|
89
|
+
|
|
90
|
+
if (mover_groups > 0) {
|
|
91
|
+
shader_vsm_movers.dispatch({
|
|
92
|
+
encoder,
|
|
93
|
+
group_count_x: mover_groups_x,
|
|
94
|
+
group_count_y: mover_groups_y,
|
|
95
|
+
bindings: {
|
|
96
|
+
settings: {
|
|
97
|
+
row_count,
|
|
98
|
+
capacity: VSM_MOVER_CAPACITY,
|
|
99
|
+
groups_x: mover_groups_x,
|
|
100
|
+
group_count: mover_groups,
|
|
101
|
+
},
|
|
102
|
+
scene_database: scene_ctx.scene_database_buffer,
|
|
103
|
+
last_seen: tracker.buffer,
|
|
104
|
+
movers,
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const skinning = scene_ctx.skinning;
|
|
110
|
+
const animation = scene_ctx.animation_manager;
|
|
111
|
+
|
|
112
|
+
if (skinning.binding_count > 0 && skinning.bindings_buffer !== null) {
|
|
113
|
+
// a workgroup per skinned mesh
|
|
114
|
+
assert.lessThanOrEqual(skinning.binding_count, 65535, 'skinning bindings beyond one dispatch row');
|
|
115
|
+
|
|
116
|
+
shader_vsm_skinned_movers.dispatch({
|
|
117
|
+
encoder,
|
|
118
|
+
group_count_x: skinning.binding_count,
|
|
119
|
+
bindings: {
|
|
120
|
+
settings: { binding_count: skinning.binding_count, capacity: VSM_MOVER_CAPACITY },
|
|
121
|
+
scene_database: scene_ctx.scene_database_buffer,
|
|
122
|
+
bindings: skinning.bindings_buffer,
|
|
123
|
+
// this frame's pose and last frame's, as the matrix prep left them
|
|
124
|
+
skin_matrices: animation.skin_matrices_buffer,
|
|
125
|
+
prev_skin_matrices: animation.prev_skin_matrices_buffer,
|
|
126
|
+
movers,
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
movers_data.movers = movers_pass.create("vsm_movers", BufferResourceDescriptor.from(
|
|
133
|
+
VSM_MOVERS_BYTE_SIZE,
|
|
134
|
+
GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
135
|
+
));
|
|
136
|
+
|
|
137
|
+
// the bounds it remembers have to move on every frame, whatever reads its list
|
|
138
|
+
movers_pass.make_side_effect();
|
|
139
|
+
|
|
140
|
+
for (let i = 0; i < maps.length; i++) {
|
|
141
|
+
// stamped with the map's own count, which its update advanced this frame
|
|
142
|
+
graph_vsm_map_feedback(graph, view, depth, maps[i], movers_data.movers, light_database, maps[i].frame_index);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @param {FrameGraph} graph
|
|
148
|
+
* @param {import("../../view/GPUViewContext.js").GPUViewContext} view
|
|
149
|
+
* @param {number} depth
|
|
150
|
+
* @param {VirtualShadowMap} map
|
|
151
|
+
* @param {number} movers graph handle of the scene's mover list
|
|
152
|
+
* @param {GPUDatabase} light_database
|
|
153
|
+
* @param {number} frame
|
|
154
|
+
*/
|
|
155
|
+
function graph_vsm_map_feedback(graph, view, depth, map, movers, light_database, frame) {
|
|
156
|
+
const manager = map.manager;
|
|
157
|
+
const slot_count = manager.slots.capacity;
|
|
158
|
+
const request_capacity = manager.request_capacity;
|
|
159
|
+
|
|
160
|
+
const read_back = map.readbacks_in_flight < VSM_READBACKS_IN_FLIGHT;
|
|
161
|
+
|
|
162
|
+
const data = {};
|
|
163
|
+
|
|
164
|
+
const pass = graph.add("VSM Feedback", data, (data, resources, context) => {
|
|
165
|
+
const encoder = context.encoder;
|
|
166
|
+
|
|
167
|
+
const database = light_database.buffer;
|
|
168
|
+
const mover_list = resources.get(data.movers);
|
|
169
|
+
const command = resources.get(data.command);
|
|
170
|
+
const record_row = map.record_row;
|
|
171
|
+
|
|
172
|
+
shader_vsm_stale_args.dispatch({
|
|
173
|
+
encoder,
|
|
174
|
+
bindings: {
|
|
175
|
+
settings: { slot_count },
|
|
176
|
+
movers: mover_list,
|
|
177
|
+
command,
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
shader_vsm_stale.dispatchIndirect({
|
|
182
|
+
encoder,
|
|
183
|
+
command,
|
|
184
|
+
bindings: {
|
|
185
|
+
settings: { record_row },
|
|
186
|
+
light_database: database,
|
|
187
|
+
movers: mover_list,
|
|
188
|
+
stale_flags: map.stale_flags,
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
if (!read_back) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const feedback = resources.get(data.feedback);
|
|
197
|
+
const counts = resources.get(data.counts);
|
|
198
|
+
const depth_texture = resources.get(data.depth);
|
|
199
|
+
|
|
200
|
+
// pooled buffers arrive holding whatever their last tenant left
|
|
201
|
+
encoder.clearBuffer(feedback);
|
|
202
|
+
encoder.clearBuffer(counts);
|
|
203
|
+
|
|
204
|
+
const width = depth_texture.size[0];
|
|
205
|
+
const height = depth_texture.size[1];
|
|
206
|
+
|
|
207
|
+
shader_vsm_demand.dispatch({
|
|
208
|
+
encoder,
|
|
209
|
+
group_count_x: Math.ceil(width / VSM_DEMAND_WORKGROUP_SIZE),
|
|
210
|
+
group_count_y: Math.ceil(height / VSM_DEMAND_WORKGROUP_SIZE),
|
|
211
|
+
bindings: {
|
|
212
|
+
settings: { record_row, request_capacity },
|
|
213
|
+
depth: depth_texture.obtainView(),
|
|
214
|
+
camera: view.camera.gpu_buffer,
|
|
215
|
+
light_database: database,
|
|
216
|
+
counts,
|
|
217
|
+
feedback,
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
shader_vsm_gather_counts.dispatch({
|
|
222
|
+
encoder,
|
|
223
|
+
group_count_x: Math.ceil(request_capacity / VSM_GATHER_WORKGROUP_SIZE),
|
|
224
|
+
bindings: {
|
|
225
|
+
settings: { record_row, request_capacity },
|
|
226
|
+
light_database: database,
|
|
227
|
+
counts,
|
|
228
|
+
feedback,
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
shader_vsm_stale_compact.dispatchThreads({
|
|
233
|
+
encoder,
|
|
234
|
+
thread_count_x: slot_count,
|
|
235
|
+
bindings: {
|
|
236
|
+
settings: { slot_count, request_capacity },
|
|
237
|
+
movers: mover_list,
|
|
238
|
+
stale_flags: map.stale_flags,
|
|
239
|
+
feedback,
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
data.movers = pass.read(movers);
|
|
245
|
+
data.depth = pass.read(depth);
|
|
246
|
+
data.command = pass.create("vsm_stale_command", BufferResourceDescriptor.from(
|
|
247
|
+
16,
|
|
248
|
+
GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT,
|
|
249
|
+
));
|
|
250
|
+
|
|
251
|
+
// the stale flags it sets outlive the frame
|
|
252
|
+
pass.make_side_effect();
|
|
253
|
+
|
|
254
|
+
if (!read_back) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
data.feedback = pass.create("vsm_feedback", BufferResourceDescriptor.from(
|
|
259
|
+
vsm_feedback_word_count(request_capacity, slot_count) * Uint32Array.BYTES_PER_ELEMENT,
|
|
260
|
+
GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,
|
|
261
|
+
));
|
|
262
|
+
|
|
263
|
+
data.counts = pass.create("vsm_counts", BufferResourceDescriptor.from(
|
|
264
|
+
manager.cell_count * Uint32Array.BYTES_PER_ELEMENT,
|
|
265
|
+
GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
266
|
+
));
|
|
267
|
+
|
|
268
|
+
map.readbacks_in_flight++;
|
|
269
|
+
|
|
270
|
+
graph_read_buffer({ graph, buffer: data.feedback })
|
|
271
|
+
.then(ref => {
|
|
272
|
+
try {
|
|
273
|
+
// a map torn down since has no pages to apply it to
|
|
274
|
+
if (!map.destroyed) {
|
|
275
|
+
const bytes = ref.getValue();
|
|
276
|
+
|
|
277
|
+
manager.apply_reading(new Uint32Array(bytes), new Float32Array(bytes), frame);
|
|
278
|
+
}
|
|
279
|
+
} finally {
|
|
280
|
+
ref.release();
|
|
281
|
+
}
|
|
282
|
+
})
|
|
283
|
+
.catch(e => {
|
|
284
|
+
console.error('vsm: feedback readback failed', e);
|
|
285
|
+
})
|
|
286
|
+
.finally(() => {
|
|
287
|
+
map.readbacks_in_flight--;
|
|
288
|
+
});
|
|
289
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A directional light's shadow from its virtual shadow map: the resident page that shadows the point
|
|
3
|
+
* — the page the point asked for, or the nearest coarser one standing in for it
|
|
4
|
+
* ({@link chunk_vsm_find_page}) — sampled as a cascade is, through the atlas sampler cascades use,
|
|
5
|
+
* with the page's view-projection and its slot's rect in the atlas. Same receiver bias, same filter,
|
|
6
|
+
* and the slot's border keeps the filter inside what the page's draw wrote.
|
|
7
|
+
*
|
|
8
|
+
* The bias is sized by the page's texel, which its level fixes. Read off the page's matrix, as a
|
|
9
|
+
* cascade's is, it would take in the depth range as the sun turns toward a world axis: straight
|
|
10
|
+
* overhead, twice the range over the slot's width — about 29 m for any level.
|
|
11
|
+
*
|
|
12
|
+
* A point no resident page covers is lit: nothing has been drawn there yet.
|
|
13
|
+
*
|
|
14
|
+
* @type {CodeChunk}
|
|
15
|
+
*/
|
|
16
|
+
export const chunk_shadowmap_sample_virtual: CodeChunk;
|
|
17
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
18
|
+
//# sourceMappingURL=chunk_shadowmap_sample_virtual.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_shadowmap_sample_virtual.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;GAcG;AACH,6CAFU,SAAS,CA0CjB;0BA9DwB,uCAAuC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { LIGHT_DATABASE_SPEC } from "../../../light/LIGHT_DATABASE_SPEC.js";
|
|
2
|
+
import { INCIDENT_LIGHT_STRUCT } from "../../../shader/chunk/light/INCIDENT_LIGHT_STRUCT.js";
|
|
3
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
4
|
+
import { chunk_sample_shadowmap_atlas_for_light } from "../../map/shader/chunk_sample_shadowmap_atlas_for_light.js";
|
|
5
|
+
import { chunk_vsm_find_page } from "./chunk_vsm_find_page.js";
|
|
6
|
+
import { chunk_vsm_page_view_projection } from "./chunk_vsm_page_view_projection.js";
|
|
7
|
+
|
|
8
|
+
const RECORD_TABLE = LIGHT_DATABASE_SPEC.get('shadow_virtual');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A directional light's shadow from its virtual shadow map: the resident page that shadows the point
|
|
12
|
+
* — the page the point asked for, or the nearest coarser one standing in for it
|
|
13
|
+
* ({@link chunk_vsm_find_page}) — sampled as a cascade is, through the atlas sampler cascades use,
|
|
14
|
+
* with the page's view-projection and its slot's rect in the atlas. Same receiver bias, same filter,
|
|
15
|
+
* and the slot's border keeps the filter inside what the page's draw wrote.
|
|
16
|
+
*
|
|
17
|
+
* The bias is sized by the page's texel, which its level fixes. Read off the page's matrix, as a
|
|
18
|
+
* cascade's is, it would take in the depth range as the sun turns toward a world axis: straight
|
|
19
|
+
* overhead, twice the range over the slot's width — about 29 m for any level.
|
|
20
|
+
*
|
|
21
|
+
* A point no resident page covers is lit: nothing has been drawn there yet.
|
|
22
|
+
*
|
|
23
|
+
* @type {CodeChunk}
|
|
24
|
+
*/
|
|
25
|
+
export const chunk_shadowmap_sample_virtual = CodeChunk.from(
|
|
26
|
+
//language=WGSL
|
|
27
|
+
`
|
|
28
|
+
fn shadowmap_sample_virtual(
|
|
29
|
+
database: ptr<storage, array<u32>>,
|
|
30
|
+
virtual_row: u32,
|
|
31
|
+
position_ws: vec3f,
|
|
32
|
+
surface_normal_ws: vec3f,
|
|
33
|
+
light: ${INCIDENT_LIGHT_STRUCT.wgsl_ref},
|
|
34
|
+
) -> f32 {
|
|
35
|
+
let record = ${RECORD_TABLE.marshalling_method_read}(database, virtual_row);
|
|
36
|
+
|
|
37
|
+
let found = vsm_find_resident_page(database, record, position_ws);
|
|
38
|
+
|
|
39
|
+
if (found.level == VSM_LEVEL_NONE) {
|
|
40
|
+
return 1.0;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
let view_projection = vsm_page_view_projection(record, found.level, found.page);
|
|
44
|
+
|
|
45
|
+
let slot_size = f32(record.page_size + 2u * record.border);
|
|
46
|
+
let slot_origin = vec2f(record.pool_origin) + vec2f(found.phys) * slot_size;
|
|
47
|
+
|
|
48
|
+
let texel = vsm_page_world_size(record, found.level) / f32(record.page_size);
|
|
49
|
+
|
|
50
|
+
return sample_shadowmap_atlas_with_texel(
|
|
51
|
+
view_projection,
|
|
52
|
+
texel,
|
|
53
|
+
position_ws,
|
|
54
|
+
surface_normal_ws,
|
|
55
|
+
light,
|
|
56
|
+
vec4f(slot_origin, slot_size, slot_size),
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
`, [
|
|
60
|
+
RECORD_TABLE.chunk_read,
|
|
61
|
+
chunk_vsm_find_page,
|
|
62
|
+
chunk_vsm_page_view_projection,
|
|
63
|
+
chunk_sample_shadowmap_atlas_for_light,
|
|
64
|
+
]
|
|
65
|
+
);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a world point falls in a virtual shadow map's clipmap — the arithmetic every pass that
|
|
3
|
+
* addresses the map shares, so that the pass asking for pages and every pass sampling them agree on
|
|
4
|
+
* which page a point is in. See {@link VSM_RECORD_STRUCT} for the light space and the windows.
|
|
5
|
+
*
|
|
6
|
+
* - `vsm_light_space(record, p)` — (x, y) across the light and the depth along it, `d`
|
|
7
|
+
* - `vsm_page_world_size(record, level)` — world units on a side of a page of the level
|
|
8
|
+
* - `vsm_desired_level(record, p)` — the level whose texel matches the main view's pixel at `p`
|
|
9
|
+
* - `vsm_world_page(record, xy, level)` — the world page of the level holding light-space `xy`
|
|
10
|
+
* - `vsm_window_contains(database, record, page, level)` — whether the level's window holds it
|
|
11
|
+
* - `vsm_cell_index(record, page, level)` — its row in the map's page table, from `first_page`
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_vsm_addressing: CodeChunk;
|
|
16
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
17
|
+
//# sourceMappingURL=chunk_vsm_addressing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_vsm_addressing.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;GAaG;AACH,mCAFU,SAAS,CAwDjB;0BAzEwB,uCAAuC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { LIGHT_DATABASE_SPEC } from "../../../light/LIGHT_DATABASE_SPEC.js";
|
|
2
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
3
|
+
import { VSM_RECORD_STRUCT } from "../VSM_RECORD_STRUCT.js";
|
|
4
|
+
|
|
5
|
+
const LEVEL_TABLE = LIGHT_DATABASE_SPEC.get('shadow_virtual_level');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Where a world point falls in a virtual shadow map's clipmap — the arithmetic every pass that
|
|
9
|
+
* addresses the map shares, so that the pass asking for pages and every pass sampling them agree on
|
|
10
|
+
* which page a point is in. See {@link VSM_RECORD_STRUCT} for the light space and the windows.
|
|
11
|
+
*
|
|
12
|
+
* - `vsm_light_space(record, p)` — (x, y) across the light and the depth along it, `d`
|
|
13
|
+
* - `vsm_page_world_size(record, level)` — world units on a side of a page of the level
|
|
14
|
+
* - `vsm_desired_level(record, p)` — the level whose texel matches the main view's pixel at `p`
|
|
15
|
+
* - `vsm_world_page(record, xy, level)` — the world page of the level holding light-space `xy`
|
|
16
|
+
* - `vsm_window_contains(database, record, page, level)` — whether the level's window holds it
|
|
17
|
+
* - `vsm_cell_index(record, page, level)` — its row in the map's page table, from `first_page`
|
|
18
|
+
*
|
|
19
|
+
* @type {CodeChunk}
|
|
20
|
+
*/
|
|
21
|
+
export const chunk_vsm_addressing = CodeChunk.from(
|
|
22
|
+
//language=WGSL
|
|
23
|
+
`
|
|
24
|
+
fn vsm_light_space(record: ${VSM_RECORD_STRUCT.wgsl_ref}, position_ws: vec3f) -> vec3f {
|
|
25
|
+
let v = record.view * vec4f(position_ws, 1.0);
|
|
26
|
+
|
|
27
|
+
// the camera looks down its -z, so a depth along the light is -z
|
|
28
|
+
return vec3f(v.x, v.y, -v.z);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
fn vsm_page_world_size(record: ${VSM_RECORD_STRUCT.wgsl_ref}, level: u32) -> f32 {
|
|
32
|
+
// a power of two times the level-0 page, so every level's page is an exact multiple of the last
|
|
33
|
+
return f32(record.page_size) * record.first_texel_size * exp2(f32(level));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
fn vsm_desired_level(record: ${VSM_RECORD_STRUCT.wgsl_ref}, position_ws: vec3f) -> u32 {
|
|
37
|
+
// how wide the main view's pixel is where the point is, in level-0 texels
|
|
38
|
+
let footprint = distance(position_ws, record.camera_position) * record.pixel_angle / record.first_texel_size;
|
|
39
|
+
|
|
40
|
+
// the finest level whose texel is no wider than that pixel; the floor of 1e-30 keeps log2 finite
|
|
41
|
+
let level = floor(log2(max(footprint, 1e-30)) + record.lod_bias);
|
|
42
|
+
|
|
43
|
+
return u32(clamp(level, 0.0, f32(record.level_count - 1u)));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
fn vsm_world_page(record: ${VSM_RECORD_STRUCT.wgsl_ref}, xy: vec2f, level: u32) -> vec2i {
|
|
47
|
+
return vec2i(floor(xy / vsm_page_world_size(record, level)));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
fn vsm_window_contains(
|
|
51
|
+
database: ptr<storage, array<u32>>,
|
|
52
|
+
record: ${VSM_RECORD_STRUCT.wgsl_ref},
|
|
53
|
+
page: vec2i,
|
|
54
|
+
level: u32,
|
|
55
|
+
) -> bool {
|
|
56
|
+
let origin = ${LEVEL_TABLE.marshalling_method_read}(database, record.first_level + level);
|
|
57
|
+
let relative = page - origin;
|
|
58
|
+
|
|
59
|
+
return all(relative >= vec2i(0)) && all(relative < vec2i(i32(record.pages_per_level)));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
fn vsm_cell_index(record: ${VSM_RECORD_STRUCT.wgsl_ref}, page: vec2i, level: u32) -> u32 {
|
|
63
|
+
// the window's side is a power of two, so the mask is a modulo that holds for negative pages too:
|
|
64
|
+
// u32() of an i32 keeps its bits
|
|
65
|
+
let mask = record.pages_per_level - 1u;
|
|
66
|
+
let cell_x = u32(page.x) & mask;
|
|
67
|
+
let cell_y = u32(page.y) & mask;
|
|
68
|
+
|
|
69
|
+
return (level * record.pages_per_level + cell_y) * record.pages_per_level + cell_x;
|
|
70
|
+
}
|
|
71
|
+
`, [
|
|
72
|
+
VSM_RECORD_STRUCT.declaration_chunk,
|
|
73
|
+
LEVEL_TABLE.chunk_read,
|
|
74
|
+
]
|
|
75
|
+
);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Append a lane's mover to the scene's mover list — `movers`, a `VSMMovers` the including shader
|
|
3
|
+
* binds read-write — one atomic per subgroup: the subgroup counts its movers, its first lane
|
|
4
|
+
* reserves that many entries, and each mover takes its place by its exclusive prefix.
|
|
5
|
+
*
|
|
6
|
+
* Every lane of the subgroup must call it, mover or not, from uniform control flow. Past `capacity`
|
|
7
|
+
* the count still rises — that is how the stale pass knows the list overflowed — but nothing is
|
|
8
|
+
* written.
|
|
9
|
+
*
|
|
10
|
+
* @type {CodeChunk}
|
|
11
|
+
*/
|
|
12
|
+
export const chunk_vsm_append_mover: CodeChunk;
|
|
13
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
14
|
+
//# sourceMappingURL=chunk_vsm_append_mover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_vsm_append_mover.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,qCAFU,SAAS,CA8BjB;0BA1CwB,uCAAuC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { WebGPUExtensionType } from "../../../../descriptor/WebGPUExtensionType.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Append a lane's mover to the scene's mover list — `movers`, a `VSMMovers` the including shader
|
|
6
|
+
* binds read-write — one atomic per subgroup: the subgroup counts its movers, its first lane
|
|
7
|
+
* reserves that many entries, and each mover takes its place by its exclusive prefix.
|
|
8
|
+
*
|
|
9
|
+
* Every lane of the subgroup must call it, mover or not, from uniform control flow. Past `capacity`
|
|
10
|
+
* the count still rises — that is how the stale pass knows the list overflowed — but nothing is
|
|
11
|
+
* written.
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_vsm_append_mover = CodeChunk.from(
|
|
16
|
+
//language=WGSL
|
|
17
|
+
`
|
|
18
|
+
fn vsm_append_mover(is_mover: bool, box_min: vec3f, box_max: vec3f, capacity: u32) {
|
|
19
|
+
let want = select(0u, 1u, is_mover);
|
|
20
|
+
|
|
21
|
+
let offset = subgroupExclusiveAdd(want);
|
|
22
|
+
let total = subgroupAdd(want);
|
|
23
|
+
let elected = subgroupElect();
|
|
24
|
+
|
|
25
|
+
var base = 0u;
|
|
26
|
+
|
|
27
|
+
if (elected && total > 0u) {
|
|
28
|
+
base = atomicAdd(&movers.count, total);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
base = subgroupBroadcastFirst(base);
|
|
32
|
+
|
|
33
|
+
if (is_mover) {
|
|
34
|
+
let index = base + offset;
|
|
35
|
+
|
|
36
|
+
if (index < capacity) {
|
|
37
|
+
movers.boxes[index * 2u] = vec4f(box_min, 0.0);
|
|
38
|
+
movers.boxes[index * 2u + 1u] = vec4f(box_max, 0.0);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
`
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
chunk_vsm_append_mover.addExtension(WebGPUExtensionType.Subgroups);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which page of a virtual shadow map a world point asks for, and which resident page shadows it.
|
|
3
|
+
*
|
|
4
|
+
* - `vsm_request_page(database, record, p)` — the first level at or above the point's desired level
|
|
5
|
+
* whose window holds it, and the world page there. The demand pass asks for exactly this page.
|
|
6
|
+
* - `vsm_find_resident_page(database, record, p)` — the same walk, carried on up the levels until a
|
|
7
|
+
* resident page is found: the requested page itself, or the nearest coarser one standing in for
|
|
8
|
+
* it. A sampler reads this one.
|
|
9
|
+
*
|
|
10
|
+
* Both walks are bounded by {@link VSM_LEVEL_LIMIT} and stop at the map's level count; a point no
|
|
11
|
+
* level holds, or no resident page covers, answers with level {@link VSM_LEVEL_NONE}.
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_vsm_find_page: CodeChunk;
|
|
16
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
17
|
+
//# sourceMappingURL=chunk_vsm_find_page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_vsm_find_page.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;GAaG;AACH,kCAFU,SAAS,CA8EjB;0BAjGwB,uCAAuC"}
|