@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
@@ -1,43 +1,154 @@
1
- export class VirtualShadowMap {
2
- tile_resolution: number;
1
+ /**
2
+ * A directional light's virtual shadow map: a clipmap of world-anchored pages around the main
3
+ * camera, rendered into a region of the shadow atlas as the GPU asks for them and as movers make
4
+ * them stale, under a budget of pages per frame.
5
+ *
6
+ * The page bookkeeping is {@link VSMPageManager}'s; this holds what ties it to the light and to the
7
+ * shadow context: the light space, the depth range, the main view's numbers the record carries, the
8
+ * rows the context claimed for it in the light database, and the pooled views pages are drawn with
9
+ * ({@link views}, one per page a frame may draw).
10
+ *
11
+ * Built and owned by {@link GPUSceneShadowmapContext} when its renderer asks for virtual shadow maps.
12
+ *
13
+ * @extends {Shadowmap}
14
+ */
15
+ export class VirtualShadowMap extends Shadowmap {
3
16
  /**
4
- * @type {GPUTextureContext}
17
+ * @param {Object} options
18
+ * @param {number} options.level_count
19
+ * @param {number} options.pages_per_level
20
+ * @param {number} options.first_texel_size
21
+ * @param {number} options.page_size
22
+ * @param {number} options.border
23
+ * @param {number} options.pool_size texels on the pool's side
24
+ * @param {number} options.request_capacity
25
+ * @param {number} options.protect_frames
26
+ * @param {number} options.depth_extent
5
27
  */
6
- physical_texture: GPUTextureContext;
28
+ constructor({ level_count, pages_per_level, first_texel_size, page_size, border, pool_size, request_capacity, protect_frames, depth_extent, }: {
29
+ level_count: number;
30
+ pages_per_level: number;
31
+ first_texel_size: number;
32
+ page_size: number;
33
+ border: number;
34
+ pool_size: number;
35
+ request_capacity: number;
36
+ protect_frames: number;
37
+ depth_extent: number;
38
+ });
7
39
  /**
8
- *
40
+ * @type {VSMPageManager}
41
+ * @readonly
42
+ */
43
+ readonly manager: VSMPageManager;
44
+ /**
45
+ * Distance either side of the snapped camera depth that the light's depth range reaches.
46
+ * @type {number}
47
+ * @readonly
48
+ */
49
+ readonly depth_extent: number;
50
+ /**
51
+ * The map's row of `shadow_virtual`, claimed by the shadow context with the map; -1 before.
9
52
  * @type {number}
10
53
  */
11
- resolution_in_tiles: number;
54
+ record_row: number;
12
55
  /**
13
- * @type {AbstractLight}
56
+ * First rows of the map's runs of `shadow_virtual_level`, `shadow_virtual_page` and
57
+ * `shadow_virtual_slot`; -1 before they are claimed.
58
+ * @type {number}
14
59
  */
15
- light: AbstractLight;
60
+ first_level: number;
61
+ first_page: number;
62
+ first_slot: number;
16
63
  /**
17
- * @type {GPUCameraContext[]}
64
+ * The map's own frame count, advanced by every {@link update}: what its pages, touches and
65
+ * readings are stamped with. The map's own because it has to keep rising whichever view the
66
+ * frame was rendered for — a view's count starts again at zero with each new camera, and a
67
+ * reading stamped from it would be refused as older than the last one applied.
68
+ * @type {number}
69
+ */
70
+ frame_index: number;
71
+ /**
72
+ * What this frame's {@link update} works with, set by the shadow context before it: how many
73
+ * pages it may draw, the bias the record carries, and the main view's height in pixels.
74
+ */
75
+ page_budget: number;
76
+ lod_bias: number;
77
+ view_height: number;
78
+ /**
79
+ * One word per pool slot, set on the GPU when a mover crosses the slot and cleared when a
80
+ * readback lists it — persistent, so a frame whose readback was skipped loses nothing. Created
81
+ * by the shadow context with the map's rows; null before.
82
+ * @type {GPUBuffer|null}
83
+ */
84
+ stale_flags: GPUBuffer | null;
85
+ /**
86
+ * Readbacks of this map's feedback on their way back.
87
+ * @type {number}
18
88
  */
19
- light_views: GPUCameraContext[];
89
+ readbacks_in_flight: number;
20
90
  /**
21
- * @type {GPUBuffer}
91
+ * Set once the map is torn down: a reading still in flight is then dropped.
92
+ * @type {boolean}
22
93
  */
23
- buffer_uniforms: GPUBuffer;
94
+ destroyed: boolean;
24
95
  /**
25
- * Quad-tree (implicit) containing references into physical texture
26
- * We use buffer because writing into a texture in WebGPU can only be done one LOD at a time
27
- * @see https://www.w3.org/TR/WGSL/#texturestore
28
- * @type {GPUBuffer}
96
+ * The light camera at the world origin; its view matrix is light space.
97
+ * @type {OrthographicCamera}
29
98
  */
30
- buffer_lookup: GPUBuffer;
31
- get total_tile_count(): number;
99
+ light_camera: OrthographicCamera;
32
100
  /**
101
+ * The light's depth range this frame, as distances along the light from light space's origin.
102
+ * @type {number}
103
+ */
104
+ near: number;
105
+ far: number;
106
+ /**
107
+ * Texels on a slot's side: a page and its border.
108
+ * @returns {number}
109
+ */
110
+ get slot_size(): number;
111
+ /**
112
+ * Fit the light space and the windows to this frame and choose its pages, advancing
113
+ * {@link frame_index}. Reads {@link page_budget}, {@link lod_bias} and {@link view_height}, which
114
+ * the shadow context sets first.
115
+ *
116
+ * @param {Camera} main_camera
117
+ * @param {GPUSceneContext} scene_ctx
118
+ */
119
+ update(main_camera: Camera, scene_ctx: GPUSceneContext): void;
120
+ /**
121
+ * The `shadow_directional` record: an empty cascade range, and this map's `shadow_virtual` row.
122
+ * @returns {{first_cascade: number, cascade_count: number, virtual_map: number}}
123
+ */
124
+ make_record(): {
125
+ first_cascade: number;
126
+ cascade_count: number;
127
+ virtual_map: number;
128
+ };
129
+ /**
130
+ * The `shadow_virtual` record as of the last {@link update}.
131
+ * @returns {object}
132
+ */
133
+ make_virtual_record(): object;
134
+ /**
135
+ * Point a page camera at a page: turned as the light, at the origin, its planes the page's
136
+ * square widened by its border on every side, the light's depth range.
33
137
  *
34
- * @param {GPUDevice} device
35
- * @param {number} [virtual_resolution]
36
- * @param {number} [physical_resolution]
37
- * @param {number} [tile_resolution]
138
+ * @param {OrthographicCamera} camera
139
+ * @param {number} level
140
+ * @param {number} x world page
141
+ * @param {number} y world page
142
+ */
143
+ aim_page_camera(camera: OrthographicCamera, level: number, x: number, y: number): void;
144
+ /**
145
+ * @readonly
146
+ * @type {boolean}
38
147
  */
39
- initialize({ device, virtual_resolution, physical_resolution, tile_resolution }: GPUDevice): void;
40
- destroy(): void;
148
+ readonly isVirtualShadowMap: boolean;
149
+ #private;
41
150
  }
42
- import { GPUTextureContext } from "../../texture/GPUTextureContext.js";
151
+ import { Shadowmap } from "../map/Shadowmap.js";
152
+ import { VSMPageManager } from "./VSMPageManager.js";
153
+ import { OrthographicCamera } from "../../camera/OrthographicCamera.js";
43
154
  //# sourceMappingURL=VirtualShadowMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualShadowMap.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/vsm/VirtualShadowMap.js"],"names":[],"mappings":"AAIA;IAEI,wBAAsB;IAEtB;;OAEG;IACH,kBAFU,iBAAiB,CAEV;IAGjB;;;OAGG;IACH,qBAFU,MAAM,CAEQ;IAExB;;OAEG;IACH,qBAAM;IAEN;;OAEG;IACH,aAFU,kBAAkB,CAEX;IAEjB;;OAEG;IACH,2BAAgB;IAGhB;;;;;OAKG;IACH,yBAAa;IAEb,+BAGC;IAED;;;;;;OAMG;IACH,kGAuFC;IAED,gBAsBC;CACJ;kCAvKiC,oCAAoC"}
1
+ {"version":3,"file":"VirtualShadowMap.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/vsm/VirtualShadowMap.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;GAaG;AACH;IAuHI;;;;;;;;;;;OAWG;IACH;QAV2B,WAAW,EAA3B,MAAM;QACU,eAAe,EAA/B,MAAM;QACU,gBAAgB,EAAhC,MAAM;QACU,SAAS,EAAzB,MAAM;QACU,MAAM,EAAtB,MAAM;QACU,SAAS,EAAzB,MAAM;QACU,gBAAgB,EAAhC,MAAM;QACU,cAAc,EAA9B,MAAM;QACU,YAAY,EAA5B,MAAM;OA8BhB;IA7JD;;;OAGG;IACH,kBAHU,cAAc,CAGhB;IAER;;;;OAIG;IACH,uBAHU,MAAM,CAGH;IAEb;;;OAGG;IACH,YAFU,MAAM,CAEA;IAEhB;;;;OAIG;IACH,aAFU,MAAM,CAEC;IACjB,mBAAgB;IAChB,mBAAgB;IAEhB;;;;;;OAMG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,oBAAgB;IAChB,iBAAa;IACb,oBAAgB;IAEhB;;;;;OAKG;IACH,aAFU,YAAU,IAAI,CAEL;IAEnB;;;OAGG;IACH,qBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,WAFU,OAAO,CAEC;IAElB;;;OAGG;IACH,cAFU,kBAAkB,CAEY;IAExC;;;OAGG;IACH,MAFU,MAAM,CAEP;IACT,YAAQ;IAmFR;;;OAGG;IACH,wBAEC;IAED;;;;;;;OAOG;IACH,8DA2DC;IAED;;;OAGG;IACH,eAFa;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAM/E;IAED;;;OAGG;IACH,uBAFa,MAAM,CAsBlB;IAED;;;;;;;;OAQG;IACH,wBALW,kBAAkB,SAClB,MAAM,KACN,MAAM,KACN,MAAM,QAiBhB;IAYL;;;OAGG;IACH,6BAFU,OAAO,CAE4B;;CAN5C;0BArUyB,qBAAqB;+BAChB,qBAAqB;mCAFjB,oCAAoC"}
@@ -1,169 +1,335 @@
1
- import { platform_compute_endianness } from "../../../../core/binary/platform_compute_endianness.js";
2
- import { GPUTextureContext } from "../../texture/GPUTextureContext.js";
3
- import { VSM_UNIFORMS_STRUCT } from "./VSM_UNIFORMS_STRUCT.js";
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { GPU_DATABASE_NULL } from "../../buffer/table/GPU_DATABASE_NULL.js";
3
+ import { OrthographicCamera } from "../../camera/OrthographicCamera.js";
4
+ import { Shadowmap } from "../map/Shadowmap.js";
5
+ import { VSMPageManager } from "./VSMPageManager.js";
6
+
7
+ /**
8
+ * A directional light's virtual shadow map: a clipmap of world-anchored pages around the main
9
+ * camera, rendered into a region of the shadow atlas as the GPU asks for them and as movers make
10
+ * them stale, under a budget of pages per frame.
11
+ *
12
+ * The page bookkeeping is {@link VSMPageManager}'s; this holds what ties it to the light and to the
13
+ * shadow context: the light space, the depth range, the main view's numbers the record carries, the
14
+ * rows the context claimed for it in the light database, and the pooled views pages are drawn with
15
+ * ({@link views}, one per page a frame may draw).
16
+ *
17
+ * Built and owned by {@link GPUSceneShadowmapContext} when its renderer asks for virtual shadow maps.
18
+ *
19
+ * @extends {Shadowmap}
20
+ */
21
+ export class VirtualShadowMap extends Shadowmap {
4
22
 
5
- export class VirtualShadowMap {
23
+ /**
24
+ * @type {VSMPageManager}
25
+ * @readonly
26
+ */
27
+ manager;
6
28
 
7
- tile_resolution = 128;
29
+ /**
30
+ * Distance either side of the snapped camera depth that the light's depth range reaches.
31
+ * @type {number}
32
+ * @readonly
33
+ */
34
+ depth_extent;
8
35
 
9
36
  /**
10
- * @type {GPUTextureContext}
37
+ * The map's row of `shadow_virtual`, claimed by the shadow context with the map; -1 before.
38
+ * @type {number}
11
39
  */
12
- physical_texture;
40
+ record_row = -1;
13
41
 
42
+ /**
43
+ * First rows of the map's runs of `shadow_virtual_level`, `shadow_virtual_page` and
44
+ * `shadow_virtual_slot`; -1 before they are claimed.
45
+ * @type {number}
46
+ */
47
+ first_level = -1;
48
+ first_page = -1;
49
+ first_slot = -1;
14
50
 
15
51
  /**
16
- *
52
+ * The map's own frame count, advanced by every {@link update}: what its pages, touches and
53
+ * readings are stamped with. The map's own because it has to keep rising whichever view the
54
+ * frame was rendered for — a view's count starts again at zero with each new camera, and a
55
+ * reading stamped from it would be refused as older than the last one applied.
17
56
  * @type {number}
18
57
  */
19
- resolution_in_tiles = 0;
58
+ frame_index = 0;
20
59
 
21
60
  /**
22
- * @type {AbstractLight}
61
+ * What this frame's {@link update} works with, set by the shadow context before it: how many
62
+ * pages it may draw, the bias the record carries, and the main view's height in pixels.
23
63
  */
24
- light;
64
+ page_budget = 0;
65
+ lod_bias = 0;
66
+ view_height = 1;
25
67
 
26
68
  /**
27
- * @type {GPUCameraContext[]}
69
+ * One word per pool slot, set on the GPU when a mover crosses the slot and cleared when a
70
+ * readback lists it — persistent, so a frame whose readback was skipped loses nothing. Created
71
+ * by the shadow context with the map's rows; null before.
72
+ * @type {GPUBuffer|null}
28
73
  */
29
- light_views = [];
74
+ stale_flags = null;
30
75
 
31
76
  /**
32
- * @type {GPUBuffer}
77
+ * Readbacks of this map's feedback on their way back.
78
+ * @type {number}
33
79
  */
34
- buffer_uniforms;
80
+ readbacks_in_flight = 0;
35
81
 
82
+ /**
83
+ * Set once the map is torn down: a reading still in flight is then dropped.
84
+ * @type {boolean}
85
+ */
86
+ destroyed = false;
36
87
 
37
88
  /**
38
- * Quad-tree (implicit) containing references into physical texture
39
- * We use buffer because writing into a texture in WebGPU can only be done one LOD at a time
40
- * @see https://www.w3.org/TR/WGSL/#texturestore
41
- * @type {GPUBuffer}
89
+ * The light camera at the world origin; its view matrix is light space.
90
+ * @type {OrthographicCamera}
42
91
  */
43
- buffer_lookup
92
+ light_camera = new OrthographicCamera();
93
+
94
+ /**
95
+ * The light's depth range this frame, as distances along the light from light space's origin.
96
+ * @type {number}
97
+ */
98
+ near = 0;
99
+ far = 0;
100
+
101
+ /**
102
+ * Where the depth range is centred, along the light; set by the first {@link update}.
103
+ */
104
+ #depth_centre = 0;
105
+ #depth_centred = false;
106
+
107
+ /**
108
+ * The `shadow_virtual` record, written whole every frame.
109
+ */
110
+ #record = {
111
+ view: new Float32Array(16),
112
+ camera_position: new Float32Array(3),
113
+ pixel_angle: 0,
114
+ near: 0,
115
+ far: 0,
116
+ first_texel_size: 0,
117
+ lod_bias: 0,
118
+ first_level: 0,
119
+ level_count: 0,
120
+ pages_per_level: 0,
121
+ page_size: 0,
122
+ border: 0,
123
+ pool_origin: new Uint32Array(2),
124
+ slots_per_axis: 0,
125
+ first_page: 0,
126
+ page_count: 0,
127
+ first_slot: 0,
128
+ slot_count: 0,
129
+ };
130
+
131
+ /**
132
+ * The `shadow_directional` record: no cascades, and this map.
133
+ */
134
+ #directional_record = {
135
+ first_cascade: GPU_DATABASE_NULL,
136
+ cascade_count: 0,
137
+ virtual_map: GPU_DATABASE_NULL,
138
+ };
139
+
140
+ /**
141
+ * @param {Object} options
142
+ * @param {number} options.level_count
143
+ * @param {number} options.pages_per_level
144
+ * @param {number} options.first_texel_size
145
+ * @param {number} options.page_size
146
+ * @param {number} options.border
147
+ * @param {number} options.pool_size texels on the pool's side
148
+ * @param {number} options.request_capacity
149
+ * @param {number} options.protect_frames
150
+ * @param {number} options.depth_extent
151
+ */
152
+ constructor({
153
+ level_count,
154
+ pages_per_level,
155
+ first_texel_size,
156
+ page_size,
157
+ border,
158
+ pool_size,
159
+ request_capacity,
160
+ protect_frames,
161
+ depth_extent,
162
+ }) {
163
+ super();
164
+
165
+ assert.isNumber(depth_extent, 'depth_extent');
166
+ assert.greaterThan(depth_extent, 0, 'depth_extent');
167
+
168
+ this.manager = new VSMPageManager({
169
+ level_count,
170
+ pages_per_level,
171
+ first_texel_size,
172
+ page_size,
173
+ border,
174
+ pool_size,
175
+ request_capacity,
176
+ protect_frames,
177
+ });
178
+
179
+ this.depth_extent = depth_extent;
180
+ }
44
181
 
45
- get total_tile_count() {
46
- // Sum of the square grids at every level: 1 + 4 + ... + resolution_in_tiles^2.
47
- return this.resolution_in_tiles === 0 ? 0 : (4 * this.resolution_in_tiles ** 2 - 1) / 3;
182
+ /**
183
+ * Texels on a slot's side: a page and its border.
184
+ * @returns {number}
185
+ */
186
+ get slot_size() {
187
+ return this.manager.slots.slot_size;
48
188
  }
49
189
 
50
190
  /**
191
+ * Fit the light space and the windows to this frame and choose its pages, advancing
192
+ * {@link frame_index}. Reads {@link page_budget}, {@link lod_bias} and {@link view_height}, which
193
+ * the shadow context sets first.
51
194
  *
52
- * @param {GPUDevice} device
53
- * @param {number} [virtual_resolution]
54
- * @param {number} [physical_resolution]
55
- * @param {number} [tile_resolution]
56
- */
57
- initialize({
58
- device,
59
- virtual_resolution = 4096,
60
- physical_resolution = 1024,
61
- tile_resolution = 128
62
- }) {
63
-
64
- if (!Number.isSafeInteger(virtual_resolution) || virtual_resolution <= 0
65
- || virtual_resolution > 0xffffffff || !Number.isInteger(Math.log2(virtual_resolution))) {
66
- throw new RangeError(`virtual_resolution must be a positive u32 power of two, instead was ${virtual_resolution}`);
67
- }
195
+ * @param {Camera} main_camera
196
+ * @param {GPUSceneContext} scene_ctx
197
+ */
198
+ update(main_camera, scene_ctx) {
199
+ assert.defined(main_camera, 'main_camera');
68
200
 
69
- if (!Number.isSafeInteger(tile_resolution) || tile_resolution <= 0
70
- || tile_resolution > virtual_resolution || !Number.isInteger(Math.log2(tile_resolution))) {
71
- throw new RangeError(`tile_resolution must be a positive power of two no larger than virtual_resolution, instead was ${tile_resolution}`);
72
- }
201
+ const t = this.light.transform;
202
+ const light_camera = this.light_camera;
73
203
 
74
- if (!Number.isSafeInteger(physical_resolution) || physical_resolution <= 0) {
75
- throw new RangeError(`physical_resolution must be a positive integer, instead was ${physical_resolution}`);
76
- }
204
+ // turned as the light, at the origin: its view matrix is world to light space
205
+ light_camera.transform.setRotation(t.rotation_x, t.rotation_y, t.rotation_z, t.rotation_w);
206
+ light_camera.transform.setTranslation(0, 0, 0);
207
+ light_camera.update();
77
208
 
78
- const resolution_limit = device.limits.maxTextureDimension2D;
79
- // Pages cannot straddle the edge of the physical atlas, including after device clamping.
80
- const physical_tiles_per_side = Math.floor(Math.min(physical_resolution, resolution_limit) / tile_resolution);
81
- const _actual_physical_resolution = physical_tiles_per_side * tile_resolution;
82
- if (physical_tiles_per_side === 0) {
83
- throw new RangeError('The physical atlas must fit at least one tile within the device texture limit');
84
- }
209
+ const view = light_camera.view_matrix;
85
210
 
86
- const resolution_in_tiles = virtual_resolution / tile_resolution;
87
- const total_tile_count = (4 * resolution_in_tiles ** 2 - 1) / 3;
88
- const lookup_size = total_tile_count * Uint32Array.BYTES_PER_ELEMENT;
89
- // The shaders spread at most sixteen bits and dispatch one invocation per tree node.
90
- if (resolution_in_tiles > 32768 || lookup_size > device.limits.maxBufferSize
91
- || lookup_size > device.limits.maxStorageBufferBindingSize
92
- || Math.ceil(total_tile_count / 256) > device.limits.maxComputeWorkgroupsPerDimension) {
93
- throw new RangeError('The virtual tile tree exceeds the shader or device buffer/dispatch limits');
94
- }
211
+ const c = main_camera.transform;
212
+ const cx = c.translation_x;
213
+ const cy = c.translation_y;
214
+ const cz = c.translation_z;
95
215
 
96
- // Validate first so an invalid replacement leaves the existing map intact.
97
- this.destroy();
98
- this.tile_resolution = tile_resolution;
99
- this.resolution_in_tiles = resolution_in_tiles;
216
+ const light_x = view[0] * cx + view[4] * cy + view[8] * cz + view[12];
217
+ const light_y = view[1] * cx + view[5] * cy + view[9] * cz + view[13];
218
+ const light_depth = -(view[2] * cx + view[6] * cy + view[10] * cz + view[14]);
100
219
 
220
+ // snapped, so the range moves — and every page with it — only when the camera has gone a
221
+ // quarter of it along the light from where the range is centred: a camera standing on the
222
+ // plane between two snaps does not move it back and forth
223
+ const snap = this.depth_extent / 4;
101
224
 
102
- // initialize physical texture
103
- this.physical_texture = new GPUTextureContext(device);
104
- const physical_descriptor = this.physical_texture.descriptor;
225
+ if (!this.#depth_centred || Math.abs(light_depth - this.#depth_centre) > snap) {
226
+ this.#depth_centre = Math.round(light_depth / snap) * snap;
227
+ this.#depth_centred = true;
228
+ }
105
229
 
106
- physical_descriptor.format = "depth16unorm";
107
- physical_descriptor.dimension = "2d";
108
- physical_descriptor.size = [_actual_physical_resolution, _actual_physical_resolution];
109
- physical_descriptor.mipLevelCount = 1;
110
- physical_descriptor.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT;
230
+ this.near = this.#depth_centre - this.depth_extent;
231
+ this.far = this.#depth_centre + this.depth_extent;
111
232
 
112
- //
113
- this.buffer_uniforms = device.createBuffer({
114
- label: "Virtual Shadow Map / uniforms",
115
- size: VSM_UNIFORMS_STRUCT.size,
116
- usage: GPUBufferUsage.UNIFORM,
117
- mappedAtCreation: true
118
- });
233
+ const manager = this.manager;
234
+ const frame = ++this.frame_index;
119
235
 
120
- const buffer_uniforms_data = this.buffer_uniforms.getMappedRange();
236
+ manager.set_light_space(view, this.near, this.far, frame);
237
+ manager.update_windows(light_x, light_y);
238
+ manager.select(frame, this.page_budget);
121
239
 
122
- const buffer_uniforms_view = new DataView(buffer_uniforms_data);
240
+ const record = this.#record;
123
241
 
124
- buffer_uniforms_view.setUint32(VSM_UNIFORMS_STRUCT.get('tile_resolution').offset, tile_resolution, platform_compute_endianness());
125
- buffer_uniforms_view.setUint32(VSM_UNIFORMS_STRUCT.get('resolution_in_tiles').offset, this.resolution_in_tiles, platform_compute_endianness());
126
- buffer_uniforms_view.setUint32(VSM_UNIFORMS_STRUCT.get('physical_tile_count').offset, physical_tiles_per_side ** 2, platform_compute_endianness());
242
+ record.view.set(view);
243
+ record.camera_position[0] = cx;
244
+ record.camera_position[1] = cy;
245
+ record.camera_position[2] = cz;
127
246
 
128
- this.buffer_uniforms.unmap();
247
+ // a perspective view's pixel at unit distance; a view without a field of view selects the
248
+ // finest level everywhere
249
+ const fov = main_camera.fov;
250
+ record.pixel_angle = fov === undefined ? 0 : 2 * Math.tan(fov * 0.5) / Math.max(1, this.view_height);
129
251
 
130
- //
252
+ record.near = this.near;
253
+ record.far = this.far;
254
+ record.lod_bias = this.lod_bias;
131
255
 
132
- // One entry per node of the implicit quadtree.
133
- this.buffer_lookup = device.createBuffer({
134
- label:"VSM / lookup",
135
- size: Uint32Array.BYTES_PER_ELEMENT * this.total_tile_count,
136
- usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
137
- mappedAtCreation: true
138
- });
139
- // Page zero is a valid allocation, so a zero-initialized table would claim that every
140
- // virtual tile already has a page before the first allocation pass has run.
141
- new Uint32Array(this.buffer_lookup.getMappedRange()).fill(0xffffffff);
142
- this.buffer_lookup.unmap();
256
+ this.metadata_changed = true;
257
+ }
258
+
259
+ /**
260
+ * The `shadow_directional` record: an empty cascade range, and this map's `shadow_virtual` row.
261
+ * @returns {{first_cascade: number, cascade_count: number, virtual_map: number}}
262
+ */
263
+ make_record() {
264
+ this.#directional_record.virtual_map = this.record_row;
143
265
 
266
+ return this.#directional_record;
144
267
  }
145
268
 
146
- destroy() {
269
+ /**
270
+ * The `shadow_virtual` record as of the last {@link update}.
271
+ * @returns {object}
272
+ */
273
+ make_virtual_record() {
274
+ const record = this.#record;
275
+ const manager = this.manager;
276
+ const pool = this.layout[0];
277
+
278
+ record.first_texel_size = manager.first_texel_size;
279
+ record.first_level = this.first_level;
280
+ record.level_count = manager.level_count;
281
+ record.pages_per_level = manager.pages_per_level;
282
+ record.page_size = manager.page_size;
283
+ record.border = manager.border;
284
+ record.pool_origin[0] = pool.x0;
285
+ record.pool_origin[1] = pool.y0;
286
+ record.slots_per_axis = manager.slots.slots_per_axis;
287
+ record.first_page = this.first_page;
288
+ record.page_count = manager.cell_count;
289
+ record.first_slot = this.first_slot;
290
+ record.slot_count = manager.slots.capacity;
291
+
292
+ return record;
293
+ }
147
294
 
148
- for (const v of this.light_views) {
149
- v.destroy();
150
- }
295
+ /**
296
+ * Point a page camera at a page: turned as the light, at the origin, its planes the page's
297
+ * square widened by its border on every side, the light's depth range.
298
+ *
299
+ * @param {OrthographicCamera} camera
300
+ * @param {number} level
301
+ * @param {number} x world page
302
+ * @param {number} y world page
303
+ */
304
+ aim_page_camera(camera, level, x, y) {
305
+ const manager = this.manager;
306
+ const size = manager.page_world_size(level);
307
+ const border = size * manager.border / manager.page_size;
151
308
 
152
- this.light_views.splice(0, this.light_views.length);
309
+ camera.transform.copy(this.light_camera.transform);
153
310
 
154
- if (this.physical_texture !== undefined) {
155
- this.physical_texture.destroy();
156
- this.physical_texture = undefined;
157
- }
311
+ camera.left = x * size - border;
312
+ camera.right = (x + 1) * size + border;
313
+ camera.bottom = y * size - border;
314
+ camera.top = (y + 1) * size + border;
315
+ camera.near = this.near;
316
+ camera.far = this.far;
158
317
 
159
- if (this.buffer_uniforms !== undefined) {
160
- this.buffer_uniforms.destroy();
161
- this.buffer_uniforms = undefined;
162
- }
163
- if (this.buffer_lookup !== undefined) {
164
- this.buffer_lookup.destroy();
165
- this.buffer_lookup = undefined;
318
+ camera.update();
319
+ }
320
+
321
+ destroy() {
322
+ this.destroyed = true;
323
+
324
+ if (this.stale_flags !== null) {
325
+ this.stale_flags.destroy();
326
+ this.stale_flags = null;
166
327
  }
167
- this.resolution_in_tiles = 0;
168
328
  }
169
329
  }
330
+
331
+ /**
332
+ * @readonly
333
+ * @type {boolean}
334
+ */
335
+ VirtualShadowMap.prototype.isVirtualShadowMap = true;