@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.
Files changed (561) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts +24 -0
  4. package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts.map +1 -0
  5. package/src/core/geom/3d/quaternion/swing_twist_clamp.js +62 -0
  6. package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts +15 -0
  7. package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts.map +1 -0
  8. package/src/core/geom/3d/quaternion/swing_twist_compose.js +36 -0
  9. package/src/core/geom/3d/quaternion/swing_twist_error.d.ts +39 -0
  10. package/src/core/geom/3d/quaternion/swing_twist_error.d.ts.map +1 -0
  11. package/src/core/geom/3d/quaternion/swing_twist_error.js +85 -0
  12. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts +11 -6
  13. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts.map +1 -1
  14. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js +27 -13
  15. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts +25 -0
  16. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts.map +1 -0
  17. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js +166 -0
  18. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts +5 -3
  19. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts.map +1 -1
  20. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js +5 -3
  21. package/src/engine/EngineHarness.d.ts.map +1 -1
  22. package/src/engine/EngineHarness.js +17 -4
  23. package/src/engine/animation/curve/AnimationCurve.d.ts +3 -0
  24. package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
  25. package/src/engine/animation/curve/AnimationCurve.js +6 -1
  26. package/src/engine/asset/loaders/image/avif/threaded_image_encoder.js +1 -1
  27. package/src/engine/ecs/EntityManager.d.ts +9 -1
  28. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  29. package/src/engine/ecs/EntityManager.js +26 -27
  30. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +20 -0
  31. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -1
  32. package/src/engine/ecs/gpu/GPUStateAuthority.js +21 -0
  33. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts +13 -0
  34. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts.map +1 -0
  35. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.js +12 -0
  36. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +6 -0
  37. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -1
  38. package/src/engine/ecs/gpu/gpu_authority_grant.js +7 -1
  39. package/src/engine/ecs/gpu/gpu_authority_held.d.ts +14 -0
  40. package/src/engine/ecs/gpu/gpu_authority_held.d.ts.map +1 -0
  41. package/src/engine/ecs/gpu/gpu_authority_held.js +23 -0
  42. package/src/engine/ecs/gpu/gpu_authority_hold.d.ts +23 -0
  43. package/src/engine/ecs/gpu/gpu_authority_hold.d.ts.map +1 -0
  44. package/src/engine/ecs/gpu/gpu_authority_hold.js +41 -0
  45. package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts +14 -0
  46. package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts.map +1 -0
  47. package/src/engine/ecs/gpu/gpu_authority_unhold.js +32 -0
  48. package/src/engine/ecs/ik/IKGoal.d.ts +59 -0
  49. package/src/engine/ecs/ik/IKGoal.d.ts.map +1 -0
  50. package/src/engine/ecs/ik/IKGoal.js +83 -0
  51. package/src/engine/ecs/ik/IKGoalSystem.d.ts +75 -0
  52. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -0
  53. package/src/engine/ecs/ik/IKGoalSystem.js +1456 -0
  54. package/src/engine/ecs/ik/PLAN.md +179 -0
  55. package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
  56. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  57. package/src/engine/ecs/storage/BinaryBufferSerializer.d.ts.map +1 -1
  58. package/src/engine/ecs/storage/BinaryBufferSerializer.js +4 -5
  59. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +7 -3
  60. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  61. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +5 -2
  62. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts +33 -0
  63. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts.map +1 -0
  64. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.js +282 -0
  65. package/src/engine/ecs/transform/T64WorldCache.js +139 -139
  66. package/src/engine/ecs/transform/t64_evaluate_local.d.ts +25 -0
  67. package/src/engine/ecs/transform/t64_evaluate_local.d.ts.map +1 -0
  68. package/src/engine/ecs/transform/t64_evaluate_local.js +35 -0
  69. package/src/engine/ecs/transform/t64_evaluate_world.d.ts +5 -3
  70. package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -1
  71. package/src/engine/ecs/transform/t64_evaluate_world.js +128 -126
  72. package/src/engine/graphics/ecs/water/Water.d.ts +14 -17
  73. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  74. package/src/engine/graphics/ecs/water/Water.js +100 -110
  75. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  76. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +36 -38
  77. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts +6 -0
  78. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts.map +1 -0
  79. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.js +10 -0
  80. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +3 -3
  81. package/src/engine/graphics/ecs/water/WaterWaves.js +46 -46
  82. package/src/engine/graphics/texture/sampler/sampler2d_to_avif.d.ts.map +1 -1
  83. package/src/engine/graphics/texture/sampler/sampler2d_to_avif.js +8 -5
  84. package/src/engine/graphics3/AnimationGraphSystem.d.ts +2 -0
  85. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  86. package/src/engine/graphics3/AnimationGraphSystem.js +337 -329
  87. package/src/engine/graphics3/AnimationSystem.d.ts +2 -0
  88. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  89. package/src/engine/graphics3/AnimationSystem.js +360 -352
  90. package/src/engine/graphics3/WaterSystem.d.ts +21 -74
  91. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  92. package/src/engine/graphics3/WaterSystem.js +174 -367
  93. package/src/engine/physics/cloth/MEASUREMENTS.md +130 -0
  94. package/src/engine/physics/cloth/PLAN.md +16 -1
  95. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +5 -6
  96. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  97. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +5 -6
  98. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +4 -7
  99. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  100. package/src/engine/physics/cloth/ecs/ClothInstance.js +4 -7
  101. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +4 -3
  102. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  103. package/src/engine/physics/cloth/ecs/ClothSystem.js +4 -3
  104. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  105. package/src/engine/physics/cloth/ecs/ClothWorld.js +10 -0
  106. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +24 -24
  107. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  108. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +46 -43
  109. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +1 -1
  110. package/src/engine/physics/cloth/ecs/cloth_write_back.js +1 -1
  111. package/src/engine/physics/constraint/solve_constraints.d.ts +0 -35
  112. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  113. package/src/engine/physics/constraint/solve_constraints.js +1 -83
  114. package/src/engine/physics/ecs/ContactProbe.d.ts +73 -0
  115. package/src/engine/physics/ecs/ContactProbe.d.ts.map +1 -0
  116. package/src/engine/physics/ecs/ContactProbe.js +103 -0
  117. package/src/engine/physics/ecs/ContactProbeSystem.d.ts +44 -0
  118. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -0
  119. package/src/engine/physics/ecs/ContactProbeSystem.js +397 -0
  120. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +1 -1
  121. package/src/engine/physics/fluid/ecs/FluidComponent.js +1 -1
  122. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  123. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts +205 -0
  124. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts.map +1 -0
  125. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.js +245 -0
  126. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts +21 -0
  127. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts.map +1 -0
  128. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.js +63 -0
  129. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts +33 -0
  130. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -0
  131. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +874 -0
  132. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts +27 -0
  133. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts.map +1 -0
  134. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js +77 -0
  135. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts +36 -0
  136. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts.map +1 -0
  137. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.js +97 -0
  138. package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +33 -11
  139. package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -1
  140. package/src/engine/physics/inverse_kinematics/two_joint_ik.js +158 -67
  141. package/src/format/image/avif/api/convert_to_rgba.d.ts +2 -2
  142. package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
  143. package/src/format/image/avif/api/convert_to_rgba.js +10 -9
  144. package/src/format/image/avif/api/decode_avif.d.ts +2 -2
  145. package/src/format/image/avif/api/decode_avif.d.ts.map +1 -1
  146. package/src/format/image/avif/api/decode_avif.js +1 -1
  147. package/src/shade/playground/ssr_reprojection/README.md +111 -103
  148. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -68
  149. package/src/shade/playground/ssr_reprojection/index.html +80 -79
  150. package/src/shade/playground/ssr_reprojection/main.js +256 -247
  151. package/src/shade/playground/ssr_variance/capture.js +96 -96
  152. package/src/shade/playground/ssr_variance/reference.js +78 -78
  153. package/src/shade/playground/vsm/README.md +96 -0
  154. package/src/shade/playground/vsm/VSMDebugOverlay.d.ts +49 -0
  155. package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -0
  156. package/src/shade/playground/vsm/VSMDebugOverlay.js +351 -0
  157. package/src/shade/playground/vsm/clipmap_panel.d.ts +8 -0
  158. package/src/shade/playground/vsm/clipmap_panel.d.ts.map +1 -0
  159. package/src/shade/playground/vsm/clipmap_panel.js +138 -0
  160. package/src/shade/playground/vsm/index.html +170 -0
  161. package/src/shade/playground/vsm/main.d.ts +2 -0
  162. package/src/shade/playground/vsm/main.d.ts.map +1 -0
  163. package/src/shade/playground/vsm/main.js +389 -0
  164. package/src/shade/playground/vsm/scenes.d.ts +52 -0
  165. package/src/shade/playground/vsm/scenes.d.ts.map +1 -0
  166. package/src/shade/playground/vsm/scenes.js +320 -0
  167. package/src/shade/playground/vsm/verify_vsm.d.ts +38 -0
  168. package/src/shade/playground/vsm/verify_vsm.d.ts.map +1 -0
  169. package/src/shade/playground/vsm/verify_vsm.js +305 -0
  170. package/src/shade/playground/water_refraction/README.md +57 -9
  171. package/src/shade/playground/water_refraction/main.js +12 -3
  172. package/src/shade/playground/water_refraction/world.d.ts +1 -0
  173. package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
  174. package/src/shade/playground/water_refraction/world.js +15 -5
  175. package/src/shade/renderer/Renderer.d.ts +19 -0
  176. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  177. package/src/shade/renderer/Renderer.js +72 -1
  178. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
  179. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +10 -1
  180. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +18 -4
  181. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  182. package/src/shade/renderer/animation/GPUAnimationManager.js +269 -23
  183. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +12 -4
  184. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  185. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +12 -4
  186. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  187. package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -1
  188. package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts +78 -0
  189. package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts.map +1 -0
  190. package/src/shade/renderer/animation/pose/PoseChannelIndex.js +274 -0
  191. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +40 -3
  192. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  193. package/src/shade/renderer/animation/pose/PosePlayback.js +77 -3
  194. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +21 -3
  195. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  196. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +79 -11
  197. package/src/shade/renderer/animation/shader_animation_apply.js +1 -1
  198. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts +3 -2
  199. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +187 -176
  201. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +7 -0
  202. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  203. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -0
  204. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -1
  205. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
  206. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +10 -1
  207. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.d.ts.map +1 -1
  208. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js +28 -0
  209. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.d.ts.map +1 -1
  210. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js +31 -1
  211. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +3 -0
  212. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  213. package/src/shade/renderer/geometry/MeshletGeometry.js +1 -0
  214. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  215. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +62 -4
  216. package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
  217. package/src/shade/renderer/light/environment/rgbe/parse_rgbe.js +2 -2
  218. package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts +2 -2
  219. package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts.map +1 -1
  220. package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js +6 -14
  221. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -1
  222. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +5 -1
  223. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  224. package/src/shade/renderer/medium/ParticipatingMedium.d.ts +3 -0
  225. package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -1
  226. package/src/shade/renderer/medium/ParticipatingMedium.js +7 -0
  227. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +3 -1
  228. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
  229. package/src/shade/renderer/object_property/chunk_write_object_property.js +5 -2
  230. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +4 -0
  231. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  232. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +6 -1
  233. package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.d.ts.map +1 -1
  234. package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js +5 -35
  235. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  236. package/src/shade/renderer/postprocess/ssr/SSR.d.ts +12 -4
  237. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  238. package/src/shade/renderer/postprocess/ssr/SSR.js +36 -8
  239. package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts +3 -0
  240. package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts.map +1 -0
  241. package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.js +2 -0
  242. package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts +8 -0
  243. package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts.map +1 -0
  244. package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.js +40 -0
  245. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
  246. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +150 -137
  247. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts +3 -0
  248. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts.map +1 -0
  249. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.js +44 -0
  250. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts +5 -0
  251. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts.map +1 -0
  252. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.js +35 -0
  253. package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts +26 -0
  254. package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts.map +1 -0
  255. package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.js +42 -0
  256. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +1 -0
  257. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
  258. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +113 -105
  259. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +2 -0
  260. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  261. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +177 -167
  262. package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.d.ts.map +1 -1
  263. package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.js +10 -0
  264. package/src/shade/renderer/rasterize/RasterizationJob.d.ts +1 -2
  265. package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
  266. package/src/shade/renderer/rasterize/RasterizationJob.js +1 -2
  267. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +5 -6
  268. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
  269. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +5 -6
  270. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +2 -2
  271. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  272. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +1 -1
  273. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
  274. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +11 -0
  275. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +1 -1
  276. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
  277. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +135 -73
  278. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +7 -0
  279. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
  280. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +29 -1
  281. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts +19 -0
  282. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts.map +1 -0
  283. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.js +167 -0
  284. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts +25 -0
  285. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts.map +1 -0
  286. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.js +124 -0
  287. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts +19 -0
  288. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts.map +1 -0
  289. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.js +48 -0
  290. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +17 -1
  291. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  292. package/src/shade/renderer/scene/rows/GPUSceneRows.js +29 -3
  293. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.d.ts.map +1 -1
  294. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js +4 -5
  295. package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts.map +1 -1
  296. package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js +1 -5
  297. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts +30 -0
  298. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts.map +1 -0
  299. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js +54 -0
  300. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
  301. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +3 -2
  302. package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts +19 -0
  303. package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts.map +1 -0
  304. package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js +27 -0
  305. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +1 -0
  306. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  307. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +4 -0
  308. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +54 -0
  309. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  310. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +502 -10
  311. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +3 -2
  312. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  313. package/src/shade/renderer/shadow/map/Shadowmap.js +3 -2
  314. package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts +8 -0
  315. package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts.map +1 -1
  316. package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.js +34 -3
  317. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +3 -2
  318. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
  319. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +17 -2
  320. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
  321. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +137 -133
  322. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts +15 -0
  323. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts.map +1 -0
  324. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.js +14 -0
  325. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts +16 -0
  326. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts.map +1 -0
  327. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.js +15 -0
  328. package/src/shade/renderer/shadow/vsm/PLAN.md +440 -0
  329. package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +43 -0
  330. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +42 -0
  331. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +1 -0
  332. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +153 -0
  333. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +327 -0
  334. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -0
  335. package/src/shade/renderer/shadow/vsm/VSMPageManager.js +1408 -0
  336. package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts +14 -0
  337. package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts.map +1 -0
  338. package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.js +13 -0
  339. package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts +63 -0
  340. package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts.map +1 -0
  341. package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.js +70 -0
  342. package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts +11 -0
  343. package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts.map +1 -0
  344. package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.js +10 -0
  345. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +54 -0
  346. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +1 -0
  347. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +75 -0
  348. package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts +23 -0
  349. package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts.map +1 -0
  350. package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.js +85 -0
  351. package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts +16 -0
  352. package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts.map +1 -0
  353. package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.js +29 -0
  354. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +136 -25
  355. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
  356. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +282 -116
  357. package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +39 -0
  358. package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -0
  359. package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +289 -0
  360. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts +18 -0
  361. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts.map +1 -0
  362. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.js +65 -0
  363. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts +17 -0
  364. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts.map +1 -0
  365. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.js +75 -0
  366. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +14 -0
  367. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +1 -0
  368. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +45 -0
  369. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts +17 -0
  370. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts.map +1 -0
  371. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.js +100 -0
  372. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts +15 -0
  373. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts.map +1 -0
  374. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.js +47 -0
  375. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts +26 -0
  376. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts.map +1 -0
  377. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.js +156 -0
  378. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts +13 -0
  379. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts.map +1 -0
  380. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.js +65 -0
  381. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +30 -0
  382. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +1 -0
  383. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +184 -0
  384. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +23 -0
  385. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +1 -0
  386. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +109 -0
  387. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts +56 -0
  388. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts.map +1 -0
  389. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +211 -0
  390. package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts +1 -1
  391. package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts.map +1 -1
  392. package/src/shade/renderer/texture/format/decode_typed_gpu_data.js +3 -13
  393. package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -1
  394. package/src/shade/renderer/texture/format/infer_format_from_parameters.js +2 -3
  395. package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
  396. package/src/shade/renderer/texture/texture_write_to_gpu.js +16 -16
  397. package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts +4 -90
  398. package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts.map +1 -1
  399. package/src/shade/renderer/texture/virtual/VTPhysicalCache.js +6 -210
  400. package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts +119 -0
  401. package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts.map +1 -0
  402. package/src/shade/renderer/texture/virtual/VTPhysicalSlots.js +245 -0
  403. package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts +1 -1
  404. package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts.map +1 -1
  405. package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js +3 -19
  406. package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts +13 -0
  407. package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts.map +1 -0
  408. package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.js +34 -0
  409. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +7 -2
  410. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  411. package/src/shade/renderer/water/GPUWaterRenderer.js +49 -49
  412. package/src/shade/renderer/water/chunk_water_transport.js +3 -3
  413. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +11 -25
  414. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
  415. package/src/shade/renderer/water/medium/GPUWaterBodies.js +64 -116
  416. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +1 -20
  417. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -1
  418. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +10 -42
  419. package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts +3 -0
  420. package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts.map +1 -0
  421. package/src/shade/renderer/water/medium/chunk_water_bodies.js +3 -0
  422. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +1 -5
  423. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -1
  424. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +32 -30
  425. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +4 -0
  426. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -0
  427. package/src/shade/renderer/water/medium/shader_water_meshlets.js +69 -0
  428. package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -1
  429. package/src/shade/renderer/water/optics/chunk_water_inscatter.js +124 -123
  430. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
  431. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +75 -74
  432. package/src/shade/renderer/water/shader_water.d.ts +1 -1
  433. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  434. package/src/shade/renderer/water/shader_water.js +490 -406
  435. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +12 -85
  436. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -1
  437. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +128 -408
  438. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +6 -0
  439. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -0
  440. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +23 -0
  441. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +9 -0
  442. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +1 -0
  443. package/src/shade/renderer/water/surface/chunk_water_tessellation.js +144 -0
  444. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +3 -5
  445. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -1
  446. package/src/shade/renderer/water/surface/chunk_water_wave.js +40 -48
  447. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +14 -0
  448. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -0
  449. package/src/shade/renderer/water/surface/graph_water_tessellation.js +34 -0
  450. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +4 -0
  451. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +1 -0
  452. package/src/shade/renderer/water/surface/shader_water_tiles.js +123 -0
  453. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +6 -0
  454. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +1 -0
  455. package/src/shade/renderer/water/surface/shader_water_wave_batch.js +85 -0
  456. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +6 -0
  457. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +1 -0
  458. package/src/shade/renderer/water/surface/shader_water_wave_domain.js +83 -0
  459. package/src/shade/renderer/water/water_height_texture_from_sampler.d.ts.map +1 -1
  460. package/src/shade/renderer/water/water_height_texture_from_sampler.js +4 -3
  461. package/src/engine/ecs/ik/IKConstraint.d.ts +0 -52
  462. package/src/engine/ecs/ik/IKConstraint.d.ts.map +0 -1
  463. package/src/engine/ecs/ik/IKConstraint.js +0 -95
  464. package/src/engine/ecs/ik/IKProblem.d.ts +0 -45
  465. package/src/engine/ecs/ik/IKProblem.d.ts.map +0 -1
  466. package/src/engine/ecs/ik/IKProblem.js +0 -58
  467. package/src/engine/ecs/ik/IKSolver.d.ts +0 -8
  468. package/src/engine/ecs/ik/IKSolver.d.ts.map +0 -1
  469. package/src/engine/ecs/ik/IKSolver.js +0 -9
  470. package/src/engine/ecs/ik/InverseKinematics.d.ts +0 -48
  471. package/src/engine/ecs/ik/InverseKinematics.d.ts.map +0 -1
  472. package/src/engine/ecs/ik/InverseKinematics.js +0 -119
  473. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts +0 -19
  474. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts.map +0 -1
  475. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.js +0 -72
  476. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +0 -54
  477. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +0 -1
  478. package/src/engine/ecs/ik/InverseKinematicsSystem.js +0 -212
  479. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts +0 -8
  480. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +0 -1
  481. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +0 -153
  482. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts +0 -5
  483. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +0 -1
  484. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +0 -120
  485. package/src/engine/ecs/ik/ik_bone_chain.d.ts +0 -64
  486. package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +0 -1
  487. package/src/engine/ecs/ik/ik_bone_chain.js +0 -142
  488. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +0 -42
  489. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +0 -1
  490. package/src/engine/ecs/ik/ik_probe_terrain_contact.js +0 -123
  491. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +0 -18
  492. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +0 -1
  493. package/src/engine/ecs/ik/ik_write_local_rotation.js +0 -32
  494. package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts +0 -2
  495. package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts.map +0 -1
  496. package/src/engine/graphics/ecs/water/WATER_SIZE.js +0 -1
  497. package/src/shade/renderer/light/GPUViewLightContext.d.ts +0 -22
  498. package/src/shade/renderer/light/GPUViewLightContext.d.ts.map +0 -1
  499. package/src/shade/renderer/light/GPUViewLightContext.js +0 -62
  500. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +0 -14
  501. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +0 -1
  502. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +0 -20
  503. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts +0 -27
  504. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +0 -1
  505. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +0 -147
  506. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts +0 -7
  507. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +0 -1
  508. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +0 -10
  509. package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts +0 -2
  510. package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts.map +0 -1
  511. package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.js +0 -1
  512. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts +0 -3
  513. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +0 -1
  514. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +0 -8
  515. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +0 -27
  516. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +0 -1
  517. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +0 -102
  518. package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts +0 -8
  519. package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts.map +0 -1
  520. package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.js +0 -34
  521. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts +0 -10
  522. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts.map +0 -1
  523. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +0 -64
  524. package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts +0 -11
  525. package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +0 -1
  526. package/src/shade/renderer/shadow/vsm/decode_tile_address.js +0 -26
  527. package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts +0 -2
  528. package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts.map +0 -1
  529. package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.js +0 -11
  530. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts +0 -20
  531. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +0 -1
  532. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +0 -184
  533. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts +0 -25
  534. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +0 -1
  535. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +0 -230
  536. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts +0 -19
  537. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +0 -1
  538. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +0 -127
  539. package/src/shade/renderer/texture/encode/ENCODE_NOTES_2026_09_02.md +0 -462
  540. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +0 -23
  541. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +0 -1
  542. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +0 -18
  543. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +0 -1
  544. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +0 -12
  545. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +0 -1
  546. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +0 -27
  547. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +0 -14
  548. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +0 -1
  549. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +0 -49
  550. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +0 -9
  551. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +0 -1
  552. package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +0 -47
  553. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +0 -10
  554. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +0 -1
  555. package/src/shade/renderer/water/surface/shader_water_surface_write.js +0 -51
  556. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +0 -12
  557. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +0 -1
  558. package/src/shade/renderer/water/surface/shader_water_wave_step.js +0 -54
  559. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +0 -13
  560. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +0 -1
  561. 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"}