@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,245 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+
3
+ /**
4
+ * The slot bookkeeping of a physical page cache — a square grid of `page_size + 2*border` slots
5
+ * over an atlas — with no texture behind it: which slots are taken, when each was last touched,
6
+ * which may never be evicted, and the mip each holds.
7
+ *
8
+ * {@link VTPhysicalCache} adds the layer textures and uploads on top of this. A cache whose pages
9
+ * are drawn rather than uploaded — the virtual shadow map's pool is a region of the shadow atlas —
10
+ * uses it on its own.
11
+ *
12
+ * Eviction metadata lives here as flat parallel arrays; the pick is a linear scan, which at the
13
+ * typical slot count (≤ ~1k) is cheaper than maintaining a heap.
14
+ */
15
+ export class VTPhysicalSlots {
16
+
17
+ /**
18
+ * Payload texels per page side, without border.
19
+ * @type {number}
20
+ * @readonly
21
+ */
22
+ page_size;
23
+
24
+ /**
25
+ * Border texels on each side of the payload.
26
+ * @type {number}
27
+ * @readonly
28
+ */
29
+ border;
30
+
31
+ /**
32
+ * page_size + 2*border.
33
+ * @type {number}
34
+ * @readonly
35
+ */
36
+ slot_size;
37
+
38
+ /**
39
+ * Atlas side length in texels.
40
+ * @type {number}
41
+ * @readonly
42
+ */
43
+ atlas_size;
44
+
45
+ /**
46
+ * Slots along one atlas axis.
47
+ * @type {number}
48
+ * @readonly
49
+ */
50
+ slots_per_axis;
51
+
52
+ /**
53
+ * Total slot count.
54
+ * @type {number}
55
+ * @readonly
56
+ */
57
+ capacity;
58
+
59
+ /**
60
+ * Free slot indices, used as a stack.
61
+ * @type {number[]}
62
+ */
63
+ #free = [];
64
+
65
+ /**
66
+ * Per-slot: frame index of the last feedback touch.
67
+ * @type {Uint32Array}
68
+ */
69
+ #last_touch;
70
+
71
+ /**
72
+ * Per-slot: 1 when the slot must never be evicted (stack root pages).
73
+ * @type {Uint8Array}
74
+ */
75
+ #locked;
76
+
77
+ /**
78
+ * Per-slot: 1 when the slot is allocated.
79
+ * @type {Uint8Array}
80
+ */
81
+ #occupied;
82
+
83
+ /**
84
+ * Per-slot: virtual mip of the resident page — eviction tie-break only
85
+ * (prefer shedding fine pages, shrinking the resident quadtree from the
86
+ * leaves).
87
+ * @type {Uint8Array}
88
+ */
89
+ #mip;
90
+
91
+ /**
92
+ *
93
+ * @param {Object} options
94
+ * @param {number} [options.atlas_size]
95
+ * @param {number} [options.page_size]
96
+ * @param {number} [options.border]
97
+ */
98
+ constructor({
99
+ atlas_size = 4096,
100
+ page_size = 128,
101
+ border = 4,
102
+ }) {
103
+ assert.isNonNegativeInteger(atlas_size, 'atlas_size');
104
+ assert.isNonNegativeInteger(page_size, 'page_size');
105
+ assert.isNonNegativeInteger(border, 'border');
106
+
107
+ this.page_size = page_size;
108
+ this.border = border;
109
+ this.slot_size = page_size + border * 2;
110
+ this.atlas_size = atlas_size;
111
+
112
+ this.slots_per_axis = Math.floor(atlas_size / this.slot_size);
113
+ this.capacity = this.slots_per_axis * this.slots_per_axis;
114
+
115
+ assert.greaterThan(this.capacity, 0, 'cache capacity');
116
+
117
+ this.#last_touch = new Uint32Array(this.capacity);
118
+ this.#locked = new Uint8Array(this.capacity);
119
+ this.#occupied = new Uint8Array(this.capacity);
120
+ this.#mip = new Uint8Array(this.capacity);
121
+
122
+ for (let i = this.capacity - 1; i >= 0; i--) {
123
+ this.#free.push(i);
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Number of allocated slots.
129
+ * @returns {number}
130
+ */
131
+ get used() {
132
+ return this.capacity - this.#free.length;
133
+ }
134
+
135
+ /**
136
+ *
137
+ * @param {number} slot
138
+ * @returns {{x: number, y: number}} slot grid coordinates
139
+ */
140
+ slot_coords(slot) {
141
+ return {
142
+ x: slot % this.slots_per_axis,
143
+ y: (slot / this.slots_per_axis) | 0,
144
+ };
145
+ }
146
+
147
+ /**
148
+ *
149
+ * @param {number} slot
150
+ * @returns {boolean}
151
+ */
152
+ is_occupied(slot) {
153
+ return this.#occupied[slot] === 1;
154
+ }
155
+
156
+ /**
157
+ *
158
+ * @param {number} current_frame
159
+ * @param {boolean} [locked]
160
+ * @param {number} [mip] virtual mip of the incoming page
161
+ * @returns {number} slot index, or -1 when full
162
+ */
163
+ allocate(current_frame, locked = false, mip = 0) {
164
+ if (this.#free.length === 0) {
165
+ return -1;
166
+ }
167
+
168
+ const slot = this.#free.pop();
169
+
170
+ this.#occupied[slot] = 1;
171
+ this.#locked[slot] = locked ? 1 : 0;
172
+ this.#last_touch[slot] = current_frame;
173
+ this.#mip[slot] = mip;
174
+
175
+ return slot;
176
+ }
177
+
178
+ /**
179
+ *
180
+ * @param {number} slot
181
+ */
182
+ free(slot) {
183
+ assert.equal(this.#occupied[slot], 1, `slot ${slot} is not allocated`);
184
+
185
+ this.#occupied[slot] = 0;
186
+ this.#locked[slot] = 0;
187
+
188
+ this.#free.push(slot);
189
+ }
190
+
191
+ /**
192
+ *
193
+ * @param {number} slot
194
+ * @param {number} frame
195
+ */
196
+ touch(slot, frame) {
197
+ this.#last_touch[slot] = frame;
198
+ }
199
+
200
+ /**
201
+ *
202
+ * @param {number} slot
203
+ * @returns {number}
204
+ */
205
+ last_touch(slot) {
206
+ return this.#last_touch[slot];
207
+ }
208
+
209
+ /**
210
+ * Pick the least-recently-touched evictable slot.
211
+ *
212
+ * @param {number} current_frame
213
+ * @param {number} protect_window slots touched within this many frames
214
+ * are not eligible — feedback readback runs a couple of frames
215
+ * behind, so "recently touched" really means "probably on screen"
216
+ * @returns {number} slot index, or -1 when nothing is evictable
217
+ */
218
+ find_eviction_candidate(current_frame, protect_window) {
219
+ let best = -1;
220
+ let best_touch = 0xFFFFFFFF;
221
+ let best_mip = 0xFF;
222
+
223
+ for (let slot = 0; slot < this.capacity; slot++) {
224
+ if (this.#occupied[slot] === 0 || this.#locked[slot] === 1) {
225
+ continue;
226
+ }
227
+
228
+ const touch = this.#last_touch[slot];
229
+
230
+ if (current_frame - touch < protect_window) {
231
+ continue;
232
+ }
233
+
234
+ const mip = this.#mip[slot];
235
+
236
+ if (touch < best_touch || (touch === best_touch && mip < best_mip)) {
237
+ best_touch = touch;
238
+ best_mip = mip;
239
+ best = slot;
240
+ }
241
+ }
242
+
243
+ return best;
244
+ }
245
+ }
@@ -9,7 +9,7 @@
9
9
  * vt_stack_wrap_uv(uv, flags) — repeat/clamp addressing
10
10
  * vt_mip_level(info, ddx, ddy) — analytic LOD in virtual-texel units
11
11
  * vt_page_table_load(table, info, uv, m) — one textureLoad into the shared table
12
- * vt_entry_unpack(word) — page table entry fields
12
+ * vt_entry_unpack(word) — page table entry fields, from {@link chunk_vt_page_table_entry}
13
13
  * vt_physical_uv(entry, info, uv) — atlas UV for a wrapped virtual UV
14
14
  *
15
15
  * The mip formula must be byte-identical between feedback and sampling —
@@ -1 +1 @@
1
- {"version":3,"file":"build_chunk_vt_lookup.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IAL0B,SAAS,EAAxB,MAAM;IACS,MAAM,EAArB,MAAM;IACS,UAAU,EAAzB,MAAM;IACJ,SAAS,CA2HrB;0BArJyB,oCAAoC"}
1
+ {"version":3,"file":"build_chunk_vt_lookup.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IAL0B,SAAS,EAAxB,MAAM;IACS,MAAM,EAArB,MAAM;IACS,UAAU,EAAzB,MAAM;IACJ,SAAS,CA2GrB;0BArIyB,oCAAoC"}
@@ -1,5 +1,5 @@
1
1
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
- import { VT_ENTRY_MIP_BITS, VT_ENTRY_PHYS_BITS } from "./VT_CONSTANTS.js";
2
+ import { chunk_vt_page_table_entry } from "./chunk_vt_page_table_entry.js";
3
3
  import { VT_STACK_INFO_STRUCT } from "./VT_STACK_INFO_STRUCT.js";
4
4
 
5
5
  /**
@@ -13,7 +13,7 @@ import { VT_STACK_INFO_STRUCT } from "./VT_STACK_INFO_STRUCT.js";
13
13
  * vt_stack_wrap_uv(uv, flags) — repeat/clamp addressing
14
14
  * vt_mip_level(info, ddx, ddy) — analytic LOD in virtual-texel units
15
15
  * vt_page_table_load(table, info, uv, m) — one textureLoad into the shared table
16
- * vt_entry_unpack(word) — page table entry fields
16
+ * vt_entry_unpack(word) — page table entry fields, from {@link chunk_vt_page_table_entry}
17
17
  * vt_physical_uv(entry, info, uv) — atlas UV for a wrapped virtual UV
18
18
  *
19
19
  * The mip formula must be byte-identical between feedback and sampling —
@@ -41,23 +41,6 @@ const VT_INV_ATLAS_SIZE: f32 = ${(1 / atlas_size).toExponential()};
41
41
  const VT_STACK_FLAG_WRAP_REPEAT: u32 = 1u;
42
42
  const VT_STACK_FLAG_UV_SET_1: u32 = 2u;
43
43
 
44
- struct VTPageTableEntry {
45
- phys: vec2<u32>,
46
- mip: u32,
47
- valid: bool,
48
- }
49
-
50
- fn vt_entry_unpack(word: u32) -> VTPageTableEntry {
51
- return VTPageTableEntry(
52
- vec2<u32>(
53
- word & ${(1 << VT_ENTRY_PHYS_BITS) - 1}u,
54
- (word >> ${VT_ENTRY_PHYS_BITS}u) & ${(1 << VT_ENTRY_PHYS_BITS) - 1}u
55
- ),
56
- (word >> ${VT_ENTRY_PHYS_BITS * 2}u) & ${(1 << VT_ENTRY_MIP_BITS) - 1}u,
57
- (word & ${1 << (VT_ENTRY_PHYS_BITS * 2 + VT_ENTRY_MIP_BITS)}u) != 0u
58
- );
59
- }
60
-
61
44
  fn vt_stack_wrap_uv(uv: vec2<f32>, flags: u32) -> vec2<f32> {
62
45
  if ((flags & VT_STACK_FLAG_WRAP_REPEAT) != 0u) {
63
46
  return fract(uv);
@@ -145,6 +128,7 @@ fn vt_physical_uv(
145
128
  `,
146
129
  [
147
130
  VT_STACK_INFO_STRUCT.declaration_chunk,
131
+ chunk_vt_page_table_entry,
148
132
  ]
149
133
  );
150
134
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The page-table entry word as its fields — the WGSL side of {@link vt_entry_pack} /
3
+ * {@link vt_entry_unpack}: the physical slot holding a page, the mip of that page, and whether the
4
+ * entry points at anything.
5
+ *
6
+ * Independent of any cache geometry, so it is shared by every table that stores entries in this
7
+ * layout — the virtual texture page table, and the virtual shadow map's page rows.
8
+ *
9
+ * @type {CodeChunk}
10
+ */
11
+ export const chunk_vt_page_table_entry: CodeChunk;
12
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
13
+ //# sourceMappingURL=chunk_vt_page_table_entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_vt_page_table_entry.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.js"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,wCAFU,SAAS,CAsBjB;0BAjCwB,oCAAoC"}
@@ -0,0 +1,34 @@
1
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
+ import { VT_ENTRY_MIP_BITS, VT_ENTRY_PHYS_BITS } from "./VT_CONSTANTS.js";
3
+
4
+ /**
5
+ * The page-table entry word as its fields — the WGSL side of {@link vt_entry_pack} /
6
+ * {@link vt_entry_unpack}: the physical slot holding a page, the mip of that page, and whether the
7
+ * entry points at anything.
8
+ *
9
+ * Independent of any cache geometry, so it is shared by every table that stores entries in this
10
+ * layout — the virtual texture page table, and the virtual shadow map's page rows.
11
+ *
12
+ * @type {CodeChunk}
13
+ */
14
+ export const chunk_vt_page_table_entry = CodeChunk.from(
15
+ //language=WGSL
16
+ `
17
+ struct VTPageTableEntry {
18
+ phys: vec2<u32>,
19
+ mip: u32,
20
+ valid: bool,
21
+ }
22
+
23
+ fn vt_entry_unpack(word: u32) -> VTPageTableEntry {
24
+ return VTPageTableEntry(
25
+ vec2<u32>(
26
+ word & ${(1 << VT_ENTRY_PHYS_BITS) - 1}u,
27
+ (word >> ${VT_ENTRY_PHYS_BITS}u) & ${(1 << VT_ENTRY_PHYS_BITS) - 1}u
28
+ ),
29
+ (word >> ${VT_ENTRY_PHYS_BITS * 2}u) & ${(1 << VT_ENTRY_MIP_BITS) - 1}u,
30
+ (word & ${1 << (VT_ENTRY_PHYS_BITS * 2 + VT_ENTRY_MIP_BITS)}u) != 0u
31
+ );
32
+ }
33
+ `
34
+ );
@@ -1,6 +1,10 @@
1
1
  /** Production water channel. Only AVBOIT's shared resolve composites its radiance. */
2
2
  export class GPUWaterRenderer {
3
- surfaces: any[];
3
+ scene: any;
4
+ body_count: number;
5
+ meshlet_capacity: number;
6
+ time: number;
7
+ waves: any;
4
8
  settings: {
5
9
  enabled: boolean;
6
10
  max_distance: number;
@@ -11,6 +15,7 @@ export class GPUWaterRenderer {
11
15
  reflections: number;
12
16
  debug_view: number;
13
17
  inscatter_segments: number;
18
+ tessellation_pixels: number;
14
19
  };
15
20
  /**
16
21
  * The frame's water bodies table, recorded by whoever owns the surfaces at the head of the frame;
@@ -18,7 +23,7 @@ export class GPUWaterRenderer {
18
23
  * @type {import("./medium/GPUWaterBodies.js").GPUWaterBodies|null}
19
24
  */
20
25
  bodies: import("./medium/GPUWaterBodies.js").GPUWaterBodies | null;
21
- avboit_is_empty(): boolean;
26
+ avboit_is_empty(view: any): boolean;
22
27
  /** Optional single-pixel readback on the next rendered water frame. No per-frame readback. */
23
28
  request_probe(uv: any): Promise<any>;
24
29
  dispose(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"GPUWaterRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/GPUWaterRenderer.js"],"names":[],"mappings":"AAqCA,sFAAsF;AACtF;IACI,gBAAc;IACd;;;;;;;;;;MACwG;IACxG;;;;OAIG;IACH,QAFU,OAAO,4BAA4B,EAAE,cAAc,GAAC,IAAI,CAEpD;IAQd,2BAGC;IAED,8FAA8F;IAC9F,qCAgBC;IAED,gBAKC;IAED;;;;;;;;;;;;;;;;MA6HC;IAQD;;;;;YAMC;IAED;;;;;;;;;;MAOC;IAED;;;;;;;;;;;;;;MAwBC;IAED,gGAAgG;IAChG,mEAYC;;CA4BJ"}
1
+ {"version":3,"file":"GPUWaterRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/GPUWaterRenderer.js"],"names":[],"mappings":"AAmBA,sFAAsF;AACtF;IACI,WAAa;IACb,mBAAe;IACf,yBAAqB;IACrB,aAAS;IACT,WAAa;IACb;;;;;;;;;;;MAE6B;IAC7B;;;;OAIG;IACH,QAFU,OAAO,4BAA4B,EAAE,cAAc,GAAC,IAAI,CAEpD;IAQd,oCAIC;IAED,8FAA8F;IAC9F,qCAgBC;IAED,gBAKC;IAED;;;;;;;;;;;;;;;;MAyIC;IAQD;;;;;YAMC;IAED;;;;;;;;;;MAOC;IAED;;;;;;;;;;;;;;MAwBC;IAED,gGAAgG;IAChG,mEAYC;;CA4BJ"}
@@ -1,45 +1,32 @@
1
- import { half_to_float_uint16 } from "../../../core/binary/half_to_float_uint16.js";
2
1
  import { TextureResourceDescriptor } from "../../device/graph/TextureResourceDescriptor.js";
3
2
  import { DEFAULT_DEPTH_TEXTURE_VIEW } from "../depth/DEFAULT_DEPTH_TEXTURE_VIEW.js";
4
3
  import { graph_compute_pass } from "../shader/graph/compute/graph_compute_pass.js";
5
4
  import { graph_image_pass } from "../shader/graph/graph_image_pass.js";
6
5
  import { ShadeIndirectLightingMode } from "../ShadeIndirectLightingMode.js";
7
- import { water_missing_receiver_path } from "./water_missing_receiver_path.js";
6
+ import { BufferResourceDescriptor } from "../../device/graph/BufferResourceDescriptor.js";
7
+ import { build_indirect_draw_command } from "../gpu_primitive/indirect/build_indirect_draw_command.js";
8
+ import { graph_water_tessellation } from "./surface/graph_water_tessellation.js";
9
+ import { WATER_TESSELLATION_STRUCT, WATER_TILE_VERTEX_COUNT } from "./surface/chunk_water_tessellation.js";
8
10
  import { STATIC_GRAPHICS_ENGINE_ASSETS } from "../STATIC_GRAPHICS_ENGINE_ASSETS.js";
9
11
  import { SAMPLER_LINEAR_UPSCALE } from "../texture/SAMPLER_LINEAR_UPSCALE.js";
10
12
  import { SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR } from "../shadow/map/SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR.js";
11
13
  import { create_water_finalize_pipeline_brick4, create_water_finalize_pipeline_ibl, create_water_pipeline,
12
- WATER_DRAW_STRUCT, WATER_FINALIZE_RESOURCES_BRICK4, WATER_FINALIZE_RESOURCES_IBL, WATER_RESOURCES,
13
- WATER_TRACE_STRUCT } from "./shader_water.js";
14
+ WATER_FINALIZE_RESOURCES_BRICK4, WATER_FINALIZE_RESOURCES_IBL, WATER_RESOURCES,
15
+ WATER_TRACE_STRUCT, WATER_GRID_STRUCT } from "./shader_water.js";
14
16
  import { shader_water_background_copy, shader_water_debug, shader_water_draw,
15
17
  shader_water_occupancy, shader_water_splat, shader_water_confidence_seed,
16
18
  shader_water_confidence_x, shader_water_confidence_y } from "./shader_water_avboit.js";
17
19
 
18
- /**
19
- * A surface the water passes can draw: visible, and with its surface interface published by the
20
- * producer this frame.
21
- * @param {Object} s
22
- * @returns {boolean}
23
- */
24
- function water_surface_drawable(s) {
25
- return s.visible && s.gpu_surface !== undefined;
26
- }
27
-
28
- /**
29
- * Draw a surface interface's mesh: the producer's index buffer over its vertex storage buffer.
30
- * @param {ShadeGPURenderPassEncoder} render
31
- * @param {{indices: GPUBuffer, index_count: number}} surface
32
- */
33
- function water_surface_draw(render, surface) {
34
- render.setIndexBuffer(surface.indices, "uint32");
35
- render.drawIndexed(surface.index_count);
36
- }
37
-
38
20
  /** Production water channel. Only AVBOIT's shared resolve composites its radiance. */
39
21
  export class GPUWaterRenderer {
40
- surfaces = [];
22
+ scene = null;
23
+ body_count = 0;
24
+ meshlet_capacity = 0;
25
+ time = 0;
26
+ waves = null;
41
27
  settings = { enabled: true, max_distance: 300, distance_tolerance: 0.15,
42
- max_updates: 4, fallback_steps: 48, mode: 0, reflections: 1, debug_view: 0, inscatter_segments: 4 };
28
+ max_updates: 4, fallback_steps: 48, mode: 0, reflections: 1, debug_view: 0, inscatter_segments: 4,
29
+ tessellation_pixels: 4 };
43
30
  /**
44
31
  * The frame's water bodies table, recorded by whoever owns the surfaces at the head of the frame;
45
32
  * each drawable surface carries its row as `body_index`.
@@ -53,9 +40,10 @@ export class GPUWaterRenderer {
53
40
  #inspection = new WeakMap();
54
41
  #probe = null;
55
42
 
56
- avboit_is_empty() {
43
+ avboit_is_empty(view) {
57
44
  // the authored state: whether there is water at all, not whether its surface was produced yet
58
- return !this.settings.enabled || !this.surfaces.some(s => s.visible);
45
+ return !this.settings.enabled || this.body_count === 0 || this.meshlet_capacity === 0
46
+ || (view !== undefined && view.scene.scene !== this.scene);
59
47
  }
60
48
 
61
49
  /** Optional single-pixel readback on the next rendered water frame. No per-frame readback. */
@@ -87,16 +75,24 @@ export class GPUWaterRenderer {
87
75
  avboit_prepare({ graph, view_ctx, camera, color_texture, depth_texture, normal_texture,
88
76
  hzb_texture, environment_texture, light_cluster_parameters, light_cluster_lookup, light_cluster_data,
89
77
  shadowmap_atlas, indirect_lighting_mode = ShadeIndirectLightingMode.IBL }) {
90
- const surfaces = this.surfaces.filter(water_surface_drawable)
91
- .map(s => ({ ...s, missing_receiver_path: water_missing_receiver_path({ medium: s.medium,
92
- max_distance: this.settings.max_distance }) }))
93
- .sort((a, b) => a.entity - b.entity);
94
- surfaces.forEach((surface, index) => { surface.surface_id = index + 1; });
78
+ const scene = view_ctx.scene;
79
+ const meshlets = this.bodies.meshlets({ graph, view: view_ctx, camera, meshlet_capacity: this.meshlet_capacity });
95
80
  const settings = { ...this.settings };
96
81
  const probe = this.#probe;
97
82
  this.#probe = null;
98
83
  const resolution = Array.from(view_ctx.resolution);
99
- const data = { resolution, frame_time: surfaces[0]?.time ?? 0 };
84
+ const pixels = Math.max(1, settings.tessellation_pixels);
85
+ // Jitter moves raster samples, not the mesh sampling the simulation. A jittered
86
+ // reference would change displaced geometry and normals even while waves are paused.
87
+ const tessellation = { resolution, pixels,
88
+ view_projection_matrix: Float32Array.from(view_ctx.camera.camera.view_projection_matrix) };
89
+ const patches = graph_water_tessellation({ graph, scene, camera, meshlets,
90
+ meshlet_capacity: this.meshlet_capacity, tessellation });
91
+ const data = { resolution, frame_time: this.time };
92
+ const wave_state = this.waves.buffer, wave_resolution = this.waves.grid_resolution;
93
+ const geometry_bindings = () => ({ scene_database: scene.scene_database_buffer,
94
+ meshlet_metadata: scene.geometries.meshlets.buffer_metadata, meshlet_data: scene.geometries.meshlets.buffer_data,
95
+ wave_state });
100
96
  const pipeline = this.#pipeline;
101
97
  const pass = graph.add("Water / receivers", data, (data, resources, context) => {
102
98
  const { encoder, graphics } = context;
@@ -108,11 +104,13 @@ export class GPUWaterRenderer {
108
104
  tHZB: resources.get(data.hzb).obtainView(),
109
105
  tScene: resources.get(data.color).obtainView(),
110
106
  };
111
- // Copies/uniform uploads must be encoded before opening the render pass.
112
- const draws = surfaces.map(s => ({ surface: s.gpu_surface, bindings: WATER_RESOURCES.generateBindings({ ...shared,
113
- water: encoder.allocateTransientValueBuffer(WATER_DRAW_STRUCT, s),
114
- surface_vertices: s.gpu_surface.vertices,
115
- }, encoder) }));
107
+ const command = resources.get(data.command);
108
+ build_indirect_draw_command(graphics.device, `${WATER_TILE_VERTEX_COUNT}, input, 0, 0`,
109
+ encoder, resources.get(data.patch_count), command);
110
+ const bindings = WATER_RESOURCES.generateBindings({ ...shared, ...geometry_bindings(),
111
+ wave_grid: encoder.allocateTransientValueBuffer(WATER_GRID_STRUCT, { resolution: wave_resolution }),
112
+ water_tiles: resources.get(data.tiles), water_tile_sums: resources.get(data.sums),
113
+ tessellation: encoder.allocateTransientValueBuffer(WATER_TESSELLATION_STRUCT, tessellation) }, encoder);
116
114
  const render = encoder.constructRenderPass({ label: "Water / receivers", pipeline, bindings: [],
117
115
  colorAttachments: [data.receiver, data.trace_metadata].map(handle => ({
118
116
  view: resources.get(handle).obtainView(), loadOp: "clear", storeOp: "store", clearValue: [0,0,0,0],
@@ -120,7 +118,8 @@ export class GPUWaterRenderer {
120
118
  depthStencilAttachment: { view: resources.get(data.interface_depth).obtainView(DEFAULT_DEPTH_TEXTURE_VIEW),
121
119
  depthLoadOp: "clear", depthStoreOp: "store", depthClearValue: 0 },
122
120
  });
123
- for (const draw of draws) { graphics.setPipelineBindings(render, pipeline, draw.bindings); water_surface_draw(render, draw.surface); }
121
+ graphics.setPipelineBindings(render, pipeline, bindings);
122
+ render.drawIndirect(command, 0);
124
123
  render.end();
125
124
  });
126
125
  for (const [name, handle] of Object.entries({ camera, color: color_texture, scene_depth: depth_texture,
@@ -129,6 +128,8 @@ export class GPUWaterRenderer {
129
128
  resolution, format, usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING
130
129
  | (probe !== null && format !== "depth32float" ? GPUTextureUsage.COPY_SRC : 0),
131
130
  }));
131
+ data.tiles = pass.read(patches.tiles); data.sums = pass.read(patches.sums); data.patch_count = pass.read(patches.count);
132
+ data.command = pass.create('Water draw command', BufferResourceDescriptor.from(16, GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT));
132
133
  // Keep the accepted UV and both paths at f32 precision through final shading.
133
134
  data.receiver = target("receiver", "rgba32float");
134
135
  data.trace_metadata = target("trace metadata", "rgba32float");
@@ -155,7 +156,6 @@ export class GPUWaterRenderer {
155
156
  const use_brick4 = indirect_lighting_mode === ShadeIndirectLightingMode.Brick4;
156
157
  const finalize_pipeline = use_brick4 ? this.#finalize_pipeline_brick4 : this.#finalize_pipeline_ibl;
157
158
  const finalize_resources = use_brick4 ? WATER_FINALIZE_RESOURCES_BRICK4 : WATER_FINALIZE_RESOURCES_IBL;
158
- const bodies = this.bodies;
159
159
  const finalize = graph.add('Water / coherent optics', finalize_data, (d, resources, {encoder, graphics}) => {
160
160
  const shared = {
161
161
  camera: resources.get(d.camera), trace: encoder.allocateTransientValueBuffer(WATER_TRACE_STRUCT, settings),
@@ -164,7 +164,9 @@ export class GPUWaterRenderer {
164
164
  tScene: resources.get(d.color).obtainView(),
165
165
  receiver: resources.get(d.receiver).obtainView(), trace_metadata: resources.get(d.trace_metadata).obtainView(),
166
166
  visibility_distance: resources.get(d.visibility_distance).obtainView(),
167
- water_bodies: bodies?.buffer,
167
+ ...geometry_bindings(), water_tiles: resources.get(d.tiles), water_tile_sums: resources.get(d.sums),
168
+ tessellation: encoder.allocateTransientValueBuffer(WATER_TESSELLATION_STRUCT, tessellation),
169
+ wave_grid: encoder.allocateTransientValueBuffer(WATER_GRID_STRUCT, { resolution: wave_resolution }),
168
170
  // the lights, as the transparent meshes bind them
169
171
  light_data: view_ctx.scene.lights.buffer_data,
170
172
  tEnvironment: resources.get(d.environment).obtainView(),
@@ -178,10 +180,7 @@ export class GPUWaterRenderer {
178
180
  shared.brick4 = view_ctx.scene.volumetric_light_map.buffer;
179
181
  shared.view = view_ctx.uniform_buffer.buffer;
180
182
  }
181
- const draws = surfaces.map(s => ({ surface: s.gpu_surface, bindings: finalize_resources.generateBindings({...shared,
182
- water: encoder.allocateTransientValueBuffer(WATER_DRAW_STRUCT, s),
183
- surface_vertices: s.gpu_surface.vertices,
184
- }, encoder) }));
183
+ const bindings = finalize_resources.generateBindings(shared, encoder);
185
184
  const copy_pipeline = shader_water_background_copy.pipeline;
186
185
  const copy_bindings = shader_water_background_copy.descriptor.resources.generateBindings({tScene: shared.tScene}, encoder);
187
186
  const render = encoder.constructRenderPass({label: 'Water / coherent optics', pipeline: finalize_pipeline, bindings: [],
@@ -192,10 +191,11 @@ export class GPUWaterRenderer {
192
191
  render.setPipeline(graphics.render_pipelines.obtain(copy_pipeline)); render.record_pipeline(copy_pipeline);
193
192
  graphics.setPipelineBindings(render, copy_pipeline, copy_bindings); render.draw(3);
194
193
  render.setPipeline(graphics.render_pipelines.obtain(finalize_pipeline)); render.record_pipeline(finalize_pipeline);
195
- for (const draw of draws) { graphics.setPipelineBindings(render, finalize_pipeline, draw.bindings); water_surface_draw(render, draw.surface); }
194
+ graphics.setPipelineBindings(render, finalize_pipeline, bindings);
195
+ render.drawIndirect(resources.get(d.command), 0);
196
196
  render.end();
197
197
  });
198
- for (const key of ['camera','scene_depth','normal','hzb','color','receiver','trace_metadata','visibility_distance','interface_depth']) {
198
+ for (const key of ['camera','scene_depth','normal','hzb','color','receiver','trace_metadata','visibility_distance','interface_depth','tiles','sums','command']) {
199
199
  finalize_data[key] = finalize.read(data[key]);
200
200
  }
201
201
  for (const [key, handle] of Object.entries({ environment: environment_texture, light_cluster_parameters,
@@ -288,7 +288,7 @@ export class GPUWaterRenderer {
288
288
  try {
289
289
  await buffer.mapAsync(GPUMapMode.READ);
290
290
  const mapped = buffer.getMappedRange();
291
- const half = offset => Array.from(new Uint16Array(mapped, offset, 4), half_to_float_uint16);
291
+ const half = offset => Array.from(new Float16Array(mapped, offset, 4));
292
292
  const radiance = half(512);
293
293
  const confidence = radiance[3];
294
294
  radiance[3] = new Float32Array(mapped, 768, 4)[1];
@@ -76,12 +76,12 @@ fn water_receiver_path(depth: texture_2d<f32>, normals: texture_2d<u32>, uv: vec
76
76
  return distance(origin, screen_space_ray_lookup_position(uv, receiver, inverse_projection).xyz);
77
77
  }
78
78
  fn water_receiver_radiance(scene: texture_2d<f32>, depth: texture_2d<f32>, normals: texture_2d<u32>,
79
- uv: vec2f, inverse_projection: mat4x4f, inverse_view: mat4x4f, level: f32, below_interface: bool) -> vec4f {
79
+ uv: vec2f, inverse_projection: mat4x4f, inverse_view: mat4x4f, surface: vec3f, surface_normal: vec3f, below_interface: bool) -> vec4f {
80
80
  let size = vec2i(textureDimensions(depth, 0));
81
81
  let center = water_receiver_texel(depth, normals, clamp(vec2i(uv * vec2f(size)), vec2i(0), size-1),
82
82
  inverse_projection, inverse_view);
83
83
  if (is_background(center.depth)
84
- || (below_interface && center.position.y > level + WATER_LEVEL_TOLERANCE)) { return vec4f(0.0); }
84
+ || (below_interface && dot(center.position - surface, surface_normal) > WATER_LEVEL_TOLERANCE)) { return vec4f(0.0); }
85
85
  let bilinear = get_bilinear_filter_uv(uv, vec2u(size));
86
86
  let base = vec2i(bilinear.origin);
87
87
  let f = bilinear.weights;
@@ -91,7 +91,7 @@ fn water_receiver_radiance(scene: texture_2d<f32>, depth: texture_2d<f32>, norma
91
91
  for (var x = 0; x < 2; x++) {
92
92
  let coord = clamp(base + vec2i(x,y), vec2i(0), size-1);
93
93
  let tap = water_receiver_texel(depth, normals, coord, inverse_projection, inverse_view);
94
- if (is_background(tap.depth) || (below_interface && tap.position.y > level + WATER_LEVEL_TOLERANCE)
94
+ if (is_background(tap.depth) || (below_interface && dot(tap.position - surface, surface_normal) > WATER_LEVEL_TOLERANCE)
95
95
  || dot(center.normal, tap.normal) < 0.95
96
96
  || abs(dot(tap.position - center.position, center.normal)) > 0.02) { continue; }
97
97
  let w = select(1.0-f.x, f.x, x == 1) * select(1.0-f.y, f.y, y == 1);
@@ -1,29 +1,15 @@
1
- /**
2
- * The frame's water bodies on the GPU, as {@link WATER_BODIES_STRUCT}: one uniform buffer every
3
- * consumer of the water medium binds.
4
- *
5
- * Rebuilt each frame from the surfaces in entity order — the order the water passes draw in — and
6
- * each surface is told its row as `surface.body_index`. The derived fields are then integrated on
7
- * the GPU, in a pass recorded at the head of the frame, so everything recorded after reads them.
8
- */
1
+ /** GPU work over the scene's water table; no per-body render commands or transient body uniforms. */
9
2
  export class GPUWaterBodies {
10
- /**
11
- * The table, or null before the first record.
12
- * @returns {GPUBuffer|null}
13
- */
14
- get buffer(): any;
15
- dispose(): void;
16
- /**
17
- * @param {Object} options
18
- * @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} options.graph
19
- * @param {GPUDevice} options.device
20
- * @param {Object[]} options.surfaces
21
- */
22
- record({ graph, device, surfaces }: {
23
- graph: import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
24
- device: GPUDevice;
25
- surfaces: any[];
3
+ record({ graph, scene }: {
4
+ graph: any;
5
+ scene: any;
26
6
  }): void;
27
- #private;
7
+ /** Ordered prefix expansion preserves equal-depth ownership, including after holes and reuse. */
8
+ meshlets({ graph, view, camera, meshlet_capacity }: {
9
+ graph: any;
10
+ view: any;
11
+ camera: any;
12
+ meshlet_capacity: any;
13
+ }): any;
28
14
  }
29
15
  //# sourceMappingURL=GPUWaterBodies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUWaterBodies.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/medium/GPUWaterBodies.js"],"names":[],"mappings":"AAaA;;;;;;;GAOG;AACH;IAaI;;;OAGG;IACH,kBAEC;IAED,gBAIC;IAED;;;;;OAKG;IACH;QAJsG,KAAK,EAAhG,OAAO,8DAA8D,EAAE,UAAU;QAC9D,MAAM;QACP,QAAQ,EAA1B,KAAQ;aA8DlB;;CACJ"}
1
+ {"version":3,"file":"GPUWaterBodies.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/medium/GPUWaterBodies.js"],"names":[],"mappings":"AAUA,qGAAqG;AACrG;IACI;;;aASC;IAED,iGAAiG;IACjG;;;;;YAsCC;CACJ"}