@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
@@ -6,8 +6,7 @@ export class RasterizationJob {
6
6
  pipeline_type: number;
7
7
  /**
8
8
  * Side-to-cullMode lookup applied per material bucket. Default {@link CullPolicy.Standard}
9
- * matches main-pass culling. Shadow callers set {@link CullPolicy.Reversed} so the back
10
- * face of sided geometry is what gets written into the shadow map.
9
+ * matches main-pass culling, which shadow casters use too.
11
10
  * @type {Readonly<Record<number, GPUCullMode>>}
12
11
  */
13
12
  cull_policy: Readonly<Record<number, GPUCullMode>>;
@@ -1 +1 @@
1
- {"version":3,"file":"RasterizationJob.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/rasterize/RasterizationJob.js"],"names":[],"mappings":";;;;AAcA;IACI,sBAAmD;IAEnD;;;;;OAKG;IACH,aAFU,SAAS,OAAO,MAAM,cAAc,CAAC,CAEb;IAElC;;OAEG;IACH,kCAAW;IACX;;;;OAIG;IACH,0CAAiB;IAEjB;;OAEG;IACH,4BAAa;IAEb;;;OAGG;IACH,UAFU,MAAM,EAAE,CAEV;IAER;;OAEG;IACH,yBAAQ;IAER;;;OAGG;IACH,gBAAyB;IAEzB;;;OAGG;IACH,sBAA+B;CAClC"}
1
+ {"version":3,"file":"RasterizationJob.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/rasterize/RasterizationJob.js"],"names":[],"mappings":";;;;AAcA;IACI,sBAAmD;IAEnD;;;;OAIG;IACH,aAFU,SAAS,OAAO,MAAM,cAAc,CAAC,CAEb;IAElC;;OAEG;IACH,kCAAW;IACX;;;;OAIG;IACH,0CAAiB;IAEjB;;OAEG;IACH,4BAAa;IAEb;;;OAGG;IACH,UAFU,MAAM,EAAE,CAEV;IAER;;OAEG;IACH,yBAAQ;IAER;;;OAGG;IACH,gBAAyB;IAEzB;;;OAGG;IACH,sBAA+B;CAClC"}
@@ -17,8 +17,7 @@ export class RasterizationJob {
17
17
 
18
18
  /**
19
19
  * Side-to-cullMode lookup applied per material bucket. Default {@link CullPolicy.Standard}
20
- * matches main-pass culling. Shadow callers set {@link CullPolicy.Reversed} so the back
21
- * face of sided geometry is what gets written into the shadow map.
20
+ * matches main-pass culling, which shadow casters use too.
22
21
  * @type {Readonly<Record<number, GPUCullMode>>}
23
22
  */
24
23
  cull_policy = CullPolicy.Standard;
@@ -16,12 +16,11 @@ export function construct_primitive_state(draw_mode: ShadeDrawMode, side: ShadeD
16
16
  *
17
17
  * - `Standard` is the main-pass mapping: a one-sided material renders the face its winding
18
18
  * presents (cull back), `Double` renders both.
19
- * - `Reversed` culls the other way, so the *back* face is what gets drawn. This is the
20
- * standard "back-face shadow casting" / "front-face culling for shadow casters"
21
- * technique — shadow callers select this policy so the surface written into the shadow
22
- * map sits behind the lit surface, eliminating self-shadow acne on the lit side and
23
- * keeping shadow casting consistent with the user's view of one-sided geometry.
24
- * `Double` has no opposite and stays at `none`.
19
+ * - `Reversed` culls the other way, so the *back* face is what gets drawn — "back-face
20
+ * shadow casting". Shadow casters do not use it: they cull as the main view does, and the
21
+ * shared rasterizer slope bias keeps acne off; back faces on top of that bias left a gap of
22
+ * a shadow texel or so where a caster meets the ground. `Double` has no opposite and stays
23
+ * at `none`.
25
24
  */
26
25
  export type CullPolicy = Readonly<Record<number, GPUCullMode>>;
27
26
  export namespace CullPolicy {
@@ -1 +1 @@
1
- {"version":3,"file":"construct_primitive_state.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/construct_primitive_state.js"],"names":[],"mappings":"AA4DA;;;;;;GAMG;AACH,qDALW,aAAa,QACb,aAAa,gBACb,SAAS,OAAO,MAAM,cAAc,CAAC,GACnC,cAAc,CA2B1B;;;;;;;;;;;;;;;;;;yBA5DS,SAAS,OAAO,MAAM,cAAc,CAAC;;;;;;;;;AAe/C;;;;;;;GAOG;AACH,yCAFU,cAAc,aAAa,CAAC,CAKnC;8BAzD2B,iCAAiC;8BACjC,iCAAiC;+BAFhC,uDAAuD"}
1
+ {"version":3,"file":"construct_primitive_state.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/construct_primitive_state.js"],"names":[],"mappings":"AA2DA;;;;;;GAMG;AACH,qDALW,aAAa,QACb,aAAa,gBACb,SAAS,OAAO,MAAM,cAAc,CAAC,GACnC,cAAc,CA2B1B;;;;;;;;;;;;;;;;;yBA5DS,SAAS,OAAO,MAAM,cAAc,CAAC;;;;;;;;;AAe/C;;;;;;;GAOG;AACH,yCAFU,cAAc,aAAa,CAAC,CAKnC;8BAxD2B,iCAAiC;8BACjC,iCAAiC;+BAFhC,uDAAuD"}
@@ -23,12 +23,11 @@ const lut_topology = {
23
23
  *
24
24
  * - `Standard` is the main-pass mapping: a one-sided material renders the face its winding
25
25
  * presents (cull back), `Double` renders both.
26
- * - `Reversed` culls the other way, so the *back* face is what gets drawn. This is the
27
- * standard "back-face shadow casting" / "front-face culling for shadow casters"
28
- * technique — shadow callers select this policy so the surface written into the shadow
29
- * map sits behind the lit surface, eliminating self-shadow acne on the lit side and
30
- * keeping shadow casting consistent with the user's view of one-sided geometry.
31
- * `Double` has no opposite and stays at `none`.
26
+ * - `Reversed` culls the other way, so the *back* face is what gets drawn — "back-face
27
+ * shadow casting". Shadow casters do not use it: they cull as the main view does, and the
28
+ * shared rasterizer slope bias keeps acne off; back faces on top of that bias left a gap of
29
+ * a shadow texel or so where a caster meets the ground. `Double` has no opposite and stays
30
+ * at `none`.
32
31
  *
33
32
  * @enum {Readonly<Record<number, GPUCullMode>>}
34
33
  */
@@ -128,10 +128,10 @@ export type AVBOITSideChannel = {
128
128
  emission: number;
129
129
  };
130
130
  /**
131
- * whether the channel would add nothing this frame;
131
+ * whether the channel would add nothing for this view;
132
132
  * asked before the orchestrator records, and a channel that answers `true` is not asked for
133
133
  * anything else in that frame.
134
134
  */
135
- avboit_is_empty?: () => boolean;
135
+ avboit_is_empty?: (view: import("../../../view/GPUViewContext.js").GPUViewContext) => boolean;
136
136
  };
137
137
  //# sourceMappingURL=AVBOITSideChannel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AVBOITSideChannel.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoCc,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QACjH,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QACzF,aAAmB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAC3E,WAAiB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QACvD,wBAA8B,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QACjG,eAAqB,EAAE,MAAM,CAAC;QAC9B,sBAA4B,EAAE,OAAO,uCAAuC,EAAE,yBAAyB,CAAC;KACrG,KAAK;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAC;;;;;sBAKtB,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,kBAAwB,EAAE,UAAU,MAAM,CAAC,CAAC;QAC5C,SAAe,EAAE,MAAM,CAAC;KACrB,KAAK,MAAM;;;;;;;;kBAED,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,IAAU,EAAE,MAAM,CAAC;QACnB,aAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAsB,EAAE,MAAM,EAAE,CAAC;QACjC,MAAY,EAAE;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,CAAC;KACjE,KAAK;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;;;;;;;;;;;;;iBAKhD,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QACzE,MAAY,EAAE,MAAM,CAAC;QACrB,aAAmB,EAAE,MAAM,CAAC;QAC5B,IAAU,EAAE,MAAM,CAAC;QACnB,QAAc,EAAE,MAAM,CAAC;QACvB,eAAqB,EAAE,MAAM,CAAC;QAC9B,oBAA0B,EAAE,MAAM,CAAC;QACnC,sBAA4B,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAC;QACxD,YAAkB,EAAE;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAC,CAAC;KACrF,KAAK;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;;;;;;sBAU9D,MAAM,OAAO"}
1
+ {"version":3,"file":"AVBOITSideChannel.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoCc,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QACjH,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QACzF,aAAmB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAC3E,WAAiB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QACvD,wBAA8B,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QACjG,eAAqB,EAAE,MAAM,CAAC;QAC9B,sBAA4B,EAAE,OAAO,uCAAuC,EAAE,yBAAyB,CAAC;KACrG,KAAK;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAC;;;;;sBAKtB,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,kBAAwB,EAAE,UAAU,MAAM,CAAC,CAAC;QAC5C,SAAe,EAAE,MAAM,CAAC;KACrB,KAAK,MAAM;;;;;;;;kBAED,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,IAAU,EAAE,MAAM,CAAC;QACnB,aAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAsB,EAAE,MAAM,EAAE,CAAC;QACjC,MAAY,EAAE;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,CAAC;KACjE,KAAK;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;;;;;;;;;;;;;iBAKhD,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QACzE,MAAY,EAAE,MAAM,CAAC;QACrB,aAAmB,EAAE,MAAM,CAAC;QAC5B,IAAU,EAAE,MAAM,CAAC;QACnB,QAAc,EAAE,MAAM,CAAC;QACvB,eAAqB,EAAE,MAAM,CAAC;QAC9B,oBAA0B,EAAE,MAAM,CAAC;QACnC,sBAA4B,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAC;QACxD,YAAkB,EAAE;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAC,CAAC;KACrF,KAAK;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;;;;;;sBAU9D,CAAC,IAAI,EAAE,OAAO,iCAAiC,EAAE,cAAc,KAAK,OAAO"}
@@ -86,7 +86,7 @@
86
86
  * (`chunk_volumetrics_irradiance_sh`), for a channel whose fragments are lit: the renderer's
87
87
  * indirect lighting, whichever mode it runs, and the scene's lights, shadowed and attenuated by
88
88
  * the fog, written by the pass that lights the fog.
89
- * @property {() => boolean} [avboit_is_empty] whether the channel would add nothing this frame;
89
+ * @property {(view: import("../../../view/GPUViewContext.js").GPUViewContext) => boolean} [avboit_is_empty] whether the channel would add nothing for this view;
90
90
  * asked before the orchestrator records, and a channel that answers `true` is not asked for
91
91
  * anything else in that frame.
92
92
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SCENE_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/SCENE_DATABASE_SPEC.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wDAOG;sCAlBmC,0CAA0C"}
1
+ {"version":3,"file":"SCENE_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/SCENE_DATABASE_SPEC.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,wDASG;sCAtBmC,0CAA0C"}
@@ -2,6 +2,8 @@ import { GPUDatabaseDefinition } from "../buffer/table/GPUDatabaseDefinition.js"
2
2
  import { MESH_INSTANCE_METADATA_STRUCT } from "./MESH_INSTANCE_METADATA_STRUCT.js";
3
3
  import { NODE3D_STRUCT } from "./NODE3D_STRUCT.js";
4
4
  import { PARTICIPATING_MEDIA_VOLUME_STRUCT } from "../volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.js";
5
+ import { WATER_BODY_STRUCT } from "../water/medium/WATER_BODIES_STRUCT.js";
6
+ import { WATER_WAVE_RECORD_STRUCT } from "../water/surface/WATER_WAVE_RECORD_STRUCT.js";
5
7
 
6
8
  /**
7
9
  * Schema for the scene's GPU-resident records — meshes and the
@@ -16,8 +18,17 @@ export const SCENE_DATABASE_SPEC = GPUDatabaseDefinition.from({
16
18
  // GPUSceneVolumetrics whenever their version moves; read by the froxel volumetrics and by the
17
19
  // ray passes through chunk_participating_media_volumes_iterate
18
20
  participating_media_volumes: PARTICIPATING_MEDIA_VOLUME_STRUCT,
21
+ water_bodies: WATER_BODY_STRUCT,
22
+ water_waves: WATER_WAVE_RECORD_STRUCT,
19
23
  });
20
24
 
25
+ SCENE_DATABASE_SPEC.add_link({ table: 'water_bodies', field: 'node', target_database: SCENE_DATABASE_SPEC,
26
+ target_table: 'transforms', nullable: false, owning: false });
27
+ SCENE_DATABASE_SPEC.add_link({ table: 'water_bodies', field: 'wave', target_database: SCENE_DATABASE_SPEC,
28
+ target_table: 'water_waves', nullable: true, owning: true });
29
+ SCENE_DATABASE_SPEC.add_link({ table: 'water_waves', field: 'node', target_database: SCENE_DATABASE_SPEC,
30
+ target_table: 'transforms', nullable: false, owning: false });
31
+
21
32
  // A mesh's transform. A mesh row and its transforms row are the same row — the entity's, one on —
22
33
  // so this word always names its own index, and it is declared as the link it is.
23
34
  SCENE_DATABASE_SPEC.add_link({
@@ -37,7 +37,7 @@ export type GeometryDeduplicateOptions = {
37
37
  */
38
38
  position_epsilon?: number;
39
39
  /**
40
- * Max occurrences kept per rolling-hash bucket
40
+ * Max triangles kept per neighbourhood hash
41
41
  */
42
42
  seed_budget?: number;
43
43
  };
@@ -1 +1 @@
1
- {"version":3,"file":"geometry_deduplicate.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js"],"names":[],"mappings":"AA6CA;;;;;;;;;;GAUG;AACH,qGAHW,0BAA0B,GACxB,cAAc,CAAC,WAAW,WAAW,EAAE,CAAC,CAqNpD;;;;;gBA8Ea,MAAM;gBACN,MAAM;gBACN,MAAM;;;;YACN,MAAM;;;gBA1UN,UAAU;;;;qBACV,MAAM;;;;;;;;uBACN,MAAM;;;;kBAKN,MAAM;;4BArBQ,oDAAoD"}
1
+ {"version":3,"file":"geometry_deduplicate.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js"],"names":[],"mappings":"AAyDA;;;;;;;;;;GAUG;AACH,qGAHW,0BAA0B,GACxB,cAAc,CAAC,WAAW,WAAW,EAAE,CAAC,CA4LpD;;;;;gBAoJa,MAAM;gBACN,MAAM;gBACN,MAAM;;;;YACN,MAAM;;;gBAlYN,UAAU;;;;qBACV,MAAM;;;;;;;;uBACN,MAAM;;;;kBAKN,MAAM;;4BAtBQ,oDAAoD"}
@@ -6,13 +6,14 @@ import { Transform64 } from "../../../../../engine/ecs/transform/Transform64.js"
6
6
  import { StandardAttributes } from "../../../geometry/StandardAttributes.js";
7
7
  import { anchor_grow_topological } from "./internal/anchor_grow_topological.js";
8
8
  import { cover_greedy } from "./internal/cover_greedy.js";
9
+ import { face_neighbourhood_hash } from "./internal/face_neighbourhood_hash.js";
9
10
  import { geometry_extract_subset } from "./internal/geometry_extract_subset.js";
10
11
  import { geometry_to_topology } from "./internal/geometry_to_topology.js";
11
12
  import { GLOBAL_RESIDUAL_THRESHOLD_FRACTION, match_refit_and_validate } from "./internal/match_refit_validate.js";
12
13
  import { match_validate_topology } from "./internal/match_validate_topology.js";
13
- import { rolling_hash_anchor_index } from "./internal/rolling_hash_anchor_index.js";
14
- import { seed_correspondence_from_window } from "./internal/seed_correspondence_from_window.js";
15
- import { triangle_fingerprint_stream } from "./internal/triangle_fingerprint_stream.js";
14
+ import { ANCHOR_STRIDE, neighbourhood_anchor_index } from "./internal/neighbourhood_anchor_index.js";
15
+ import { seed_correspondence_from_face_pair } from "./internal/seed_correspondence_from_face_pair.js";
16
+ import { vertex_attribute_pairs } from "./internal/vertex_attributes_equal.js";
16
17
 
17
18
  /**
18
19
  * @typedef GeometryDeduplicateOptions
@@ -23,9 +24,20 @@ import { triangle_fingerprint_stream } from "./internal/triangle_fingerprint_str
23
24
  * own tolerance ≈ `min(diag_a, diag_b) * 1e-4`.
24
25
  * When provided, the per-pair derivation is
25
26
  * clamped to this value (the tighter wins).
26
- * @property {number} [seed_budget=256] Max occurrences kept per rolling-hash bucket
27
+ * @property {number} [seed_budget=256] Max triangles kept per neighbourhood hash
27
28
  */
28
29
 
30
+ /**
31
+ * Edge-steps of neighbourhood each triangle's anchor hash takes in ({@link face_neighbourhood_hash}).
32
+ * Fewer make a hash that more unrelated triangles share, and more growth spent finding that out; more
33
+ * keep a triangle from anchoring unless the piece around it is that much wider, and thin pieces go
34
+ * unfound. Measured on Sponza through scene_optimize's meshlet round trip, triangles shared and time
35
+ * taken (single runs on a busy machine): 2 rounds 147.3k in 6.5 s, 3 rounds 145.8k in 5.2 s, 4 rounds
36
+ * 144.8k in 3.6 s, 6 rounds 136.4k in 2.6 s.
37
+ * @type {number}
38
+ */
39
+ const NEIGHBOURHOOD_ROUNDS = 3;
40
+
29
41
  /**
30
42
  * Relative tolerance for the per-anchor `position_epsilon` derivation.
31
43
  * The smaller of the two paired geometries' bounding-box diagonals is multiplied
@@ -94,12 +106,14 @@ export function geometry_deduplicate({
94
106
  // loop can derive a per-pair tolerance without recomputing bounds.
95
107
  const geom_diagonals = compute_geometry_diagonals(unique_geoms);
96
108
 
97
- // ────────────────────── Stage B: fingerprints ──────────────────────
98
- let streams = unique_geoms.map(g => triangle_fingerprint_stream(g));
109
+ // ──────────────────── Stage B: neighbourhood hashes ────────────────────
110
+ // Keyed on the triangles around each triangle, not on its place in the index stream: a meshlet build
111
+ // orders a turned copy's triangles differently from the original's, and no run of them survives.
112
+ let hashes = unique_geoms.map(g => face_neighbourhood_hash(g, NEIGHBOURHOOD_ROUNDS));
99
113
 
100
- // ────────────────── Stage C: rolling-hash anchors ──────────────────
101
- const anchors = rolling_hash_anchor_index(streams, min_primitives, seed_budget);
102
- streams = null; // fingerprint streams aren't needed past this point — let GC reclaim
114
+ // ────────────────────── Stage C: anchors ──────────────────────
115
+ const anchors = neighbourhood_anchor_index(hashes, seed_budget);
116
+ hashes = null; // the hashes aren't needed past this point — let GC reclaim
103
117
 
104
118
  // ────────────────────── Stage D: grow each anchor ──────────────────────
105
119
  /** @type {Map<number, BinaryTopology>} */
@@ -118,79 +132,52 @@ export function geometry_deduplicate({
118
132
  /** Per-geom faces already covered by an accepted grown match. */
119
133
  const grown_face_set_per_geom = new Map();
120
134
 
121
- for (const anchor of anchors) {
122
- const a_grown = get_or_create_set(grown_face_set_per_geom, anchor.a_geom);
123
- const b_grown = get_or_create_set(grown_face_set_per_geom, anchor.b_geom);
135
+ /** @type {Map<number, number>} an anchor's seed, rewritten per attempt; growth works on a copy */
136
+ const seed = new Map();
124
137
 
125
- if (a_grown.has(anchor.a_start) && b_grown.has(anchor.b_start)) continue;
126
- if (anchor.a_geom === anchor.b_geom && anchor.a_start === anchor.b_start) continue;
138
+ for (let i = 0; i < anchors.length; i += ANCHOR_STRIDE) {
139
+ const a_index = anchors[i];
140
+ const a_face = anchors[i + 1];
141
+ const b_index = anchors[i + 2];
142
+ const b_face = anchors[i + 3];
127
143
 
128
- const a_geom = unique_geoms[anchor.a_geom];
129
- const b_geom = unique_geoms[anchor.b_geom];
130
- const topology_a = get_topology(anchor.a_geom);
131
- const topology_b = get_topology(anchor.b_geom);
144
+ const a_grown = get_or_create_set(grown_face_set_per_geom, a_index);
145
+ const b_grown = get_or_create_set(grown_face_set_per_geom, b_index);
132
146
 
133
- const seed = seed_correspondence_from_window(
134
- a_geom, b_geom,
135
- topology_a, topology_b,
136
- anchor.a_start, anchor.b_start,
137
- min_primitives
138
- );
139
- if (seed === null) continue;
147
+ if (a_grown.has(a_face) && b_grown.has(b_face)) continue;
148
+
149
+ const topology_a = get_topology(a_index);
150
+ const topology_b = get_topology(b_index);
151
+ const attributes = vertex_attribute_pairs(unique_geoms[a_index], unique_geoms[b_index]);
140
152
 
141
153
  const pair_epsilon = derive_pair_epsilon(
142
- geom_diagonals[anchor.a_geom],
143
- geom_diagonals[anchor.b_geom],
154
+ geom_diagonals[a_index],
155
+ geom_diagonals[b_index],
144
156
  position_epsilon
145
157
  );
146
158
 
147
- const grown = anchor_grow_topological({
148
- geometry_a: a_geom,
149
- geometry_b: b_geom,
150
- topology_a, topology_b,
151
- initial_vertex_correspondence: seed.vertex_correspondence,
152
- seed_face_a: seed.seed_face_a,
153
- seed_face_b: seed.seed_face_b,
154
- position_epsilon: pair_epsilon,
155
- });
156
- if (grown === null) continue;
157
- if (grown.faces_a.length < min_primitives) continue;
158
-
159
- const matched_set_a = new Set(grown.faces_a);
160
- if (!match_validate_topology(
161
- topology_a, topology_b,
162
- matched_set_a, grown.face_correspondence, grown.vertex_correspondence
163
- )) {
164
- continue;
165
- }
159
+ // the anchor pairs two triangles; which corner lies on which is for attributes, then positions, to say
160
+ for (let offset = 0; offset < 3; offset++) {
161
+ if (!seed_correspondence_from_face_pair(seed, attributes, topology_a, topology_b, a_face, b_face, offset)) {
162
+ continue;
163
+ }
164
+
165
+ const match = grow_validated_match(
166
+ unique_geoms, a_index, b_index,
167
+ topology_a, topology_b,
168
+ seed, a_face, b_face,
169
+ pair_epsilon, min_primitives
170
+ );
166
171
 
167
- // Global post-grow residual check: the per-face check inside growth
168
- // uses the incrementally-refit transform, so cumulative drift can
169
- // smuggle past-acceptable faces through while the final fit produces
170
- // worse residuals elsewhere. Refit on all correspondences and reject
171
- // if any vertex deviates by more than a fraction of pair_epsilon.
172
- const validation = match_refit_and_validate({
173
- geometry_a: a_geom,
174
- geometry_b: b_geom,
175
- vertex_correspondence: grown.vertex_correspondence,
176
- transform: grown.transform,
177
- threshold: pair_epsilon * GLOBAL_RESIDUAL_THRESHOLD_FRACTION,
178
- });
179
- if (!validation.valid) {
180
- continue;
181
- }
172
+ if (match === null) continue;
173
+
174
+ for (const f of match.faces_a) a_grown.add(f);
175
+ for (const f of match.faces_b) b_grown.add(f);
176
+
177
+ matches.push(match);
182
178
 
183
- for (const f of grown.faces_a) a_grown.add(f);
184
- for (const f of grown.faces_b) b_grown.add(f);
185
-
186
- matches.push({
187
- a_geom: anchor.a_geom,
188
- b_geom: anchor.b_geom,
189
- faces_a: grown.faces_a,
190
- faces_b: grown.faces_b,
191
- transform: grown.transform,
192
- max_residual: validation.max_residual,
193
- });
179
+ break;
180
+ }
194
181
  }
195
182
 
196
183
  // ────────────────────── Stage E: greedy cover ──────────────────────
@@ -267,6 +254,76 @@ export function geometry_deduplicate({
267
254
  return result;
268
255
  }
269
256
 
257
+ /**
258
+ * Grow a match out from a seeded triangle pair, and keep it only if it covers at least `min_primitives`
259
+ * triangles, its connectivity is the same on both sides, and one transform fitted to all of it still
260
+ * places every vertex within tolerance.
261
+ *
262
+ * @param {Geometry[]} unique_geoms
263
+ * @param {number} a_geom index of A in `unique_geoms`
264
+ * @param {number} b_geom index of B in `unique_geoms`
265
+ * @param {BinaryTopology} topology_a
266
+ * @param {BinaryTopology} topology_b
267
+ * @param {Map<number, number>} seed vertex of A → vertex of B, for the seed triangles' corners
268
+ * @param {number} seed_face_a
269
+ * @param {number} seed_face_b
270
+ * @param {number} pair_epsilon
271
+ * @param {number} min_primitives
272
+ * @returns {import("./internal/cover_greedy.js").GrownMatchRecord|null}
273
+ */
274
+ function grow_validated_match(
275
+ unique_geoms, a_geom, b_geom,
276
+ topology_a, topology_b,
277
+ seed, seed_face_a, seed_face_b,
278
+ pair_epsilon, min_primitives
279
+ ) {
280
+ const geometry_a = unique_geoms[a_geom];
281
+ const geometry_b = unique_geoms[b_geom];
282
+
283
+ const grown = anchor_grow_topological({
284
+ geometry_a,
285
+ geometry_b,
286
+ topology_a, topology_b,
287
+ initial_vertex_correspondence: seed,
288
+ seed_face_a,
289
+ seed_face_b,
290
+ position_epsilon: pair_epsilon,
291
+ });
292
+ if (grown === null) return null;
293
+ if (grown.faces_a.length < min_primitives) return null;
294
+
295
+ const matched_set_a = new Set(grown.faces_a);
296
+ if (!match_validate_topology(
297
+ topology_a, topology_b,
298
+ matched_set_a, grown.face_correspondence, grown.vertex_correspondence
299
+ )) {
300
+ return null;
301
+ }
302
+
303
+ // Global post-grow residual check: the per-face check inside growth
304
+ // uses the incrementally-refit transform, so cumulative drift can
305
+ // smuggle past-acceptable faces through while the final fit produces
306
+ // worse residuals elsewhere. Refit on all correspondences and reject
307
+ // if any vertex deviates by more than a fraction of pair_epsilon.
308
+ const validation = match_refit_and_validate({
309
+ geometry_a,
310
+ geometry_b,
311
+ vertex_correspondence: grown.vertex_correspondence,
312
+ transform: grown.transform,
313
+ threshold: pair_epsilon * GLOBAL_RESIDUAL_THRESHOLD_FRACTION,
314
+ });
315
+ if (!validation.valid) return null;
316
+
317
+ return {
318
+ a_geom,
319
+ b_geom,
320
+ faces_a: grown.faces_a,
321
+ faces_b: grown.faces_b,
322
+ transform: grown.transform,
323
+ max_residual: validation.max_residual,
324
+ };
325
+ }
326
+
270
327
  /**
271
328
  * Bounding-box diagonal length per unique geometry, in input order.
272
329
  *
@@ -429,7 +486,12 @@ function match_transform_to_meep_transform(mt, piece_stats, max_residual) {
429
486
  if (delta > OVERSCALE_MAX_FRACTION) delta = OVERSCALE_MAX_FRACTION;
430
487
  }
431
488
 
432
- if (delta === 0) return t;
489
+ if (delta === 0) {
490
+ // The solver writes components only, so the clone's matrix was never composed. An exact fit (a half
491
+ // turn, say) leaves no residual to boost, and still owes the matrix its rotation and scale.
492
+ t.updateMatrix();
493
+ return t;
494
+ }
433
495
 
434
496
  const boost = 1 + delta;
435
497
  t.setScale(t.scale_x * boost, t.scale_y * boost, t.scale_z * boost);
@@ -31,6 +31,13 @@
31
31
  * - faces_b not yet claimed as instance or canonical anywhere
32
32
  * - faces_a not yet claimed as instance anywhere (we allow them to keep
33
33
  * serving as canonical for additional matches)
34
+ * - within one geometry, faces_b sharing no face with faces_a: the piece is
35
+ * drawn at the canonical's place and again at the instance's, so a shared
36
+ * face would be drawn twice (a symmetric part matched onto itself)
37
+ * - a new canonical face-set sharing no face with one already chosen in its
38
+ * geometry: every piece of a geometry is drawn at the geometry's own place,
39
+ * so two overlapping pieces draw the overlap twice. The same set exactly
40
+ * is not new, and its piece is reused.
34
41
  *
35
42
  * @param {GrownMatchRecord[]} matches
36
43
  * @param {number} min_primitives Drop matches smaller than this — they go to leftover
@@ -1 +1 @@
1
- {"version":3,"file":"cover_greedy.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AAEH;;;;;;;GAOG;AAEH;;;;;;;;;;;GAWG;AACH,sCAJW,gBAAgB,EAAE,kBAClB,MAAM,GACJ,aAAa,EAAE,CA2F3B;;;;;YAhIa,MAAM;;;;YACN,MAAM;aACN,MAAM,EAAE;aACR,MAAM,EAAE;eACR,OAAO,uDAAuD,EAAE,WAAW;;;;;;kBAC3E,MAAM;;;YAON,MAAM;aACN,MAAM,EAAE;eACR,OAAO,uDAAuD,EAAE,WAAW;kBAC3E,MAAM;;;;;;wBAKN,MAAM;;;;YACN,MAAM;;;;qBACN,MAAM,EAAE;;;;eACR,qBAAqB,EAAE"}
1
+ {"version":3,"file":"cover_greedy.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AAEH;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,sCAJW,gBAAgB,EAAE,kBAClB,MAAM,GACJ,aAAa,EAAE,CAwG3B;;;;;YApJa,MAAM;;;;YACN,MAAM;aACN,MAAM,EAAE;aACR,MAAM,EAAE;eACR,OAAO,uDAAuD,EAAE,WAAW;;;;;;kBAC3E,MAAM;;;YAON,MAAM;aACN,MAAM,EAAE;eACR,OAAO,uDAAuD,EAAE,WAAW;kBAC3E,MAAM;;;;;;wBAKN,MAAM;;;;YACN,MAAM;;;;qBACN,MAAM,EAAE;;;;eACR,qBAAqB,EAAE"}
@@ -34,6 +34,13 @@
34
34
  * - faces_b not yet claimed as instance or canonical anywhere
35
35
  * - faces_a not yet claimed as instance anywhere (we allow them to keep
36
36
  * serving as canonical for additional matches)
37
+ * - within one geometry, faces_b sharing no face with faces_a: the piece is
38
+ * drawn at the canonical's place and again at the instance's, so a shared
39
+ * face would be drawn twice (a symmetric part matched onto itself)
40
+ * - a new canonical face-set sharing no face with one already chosen in its
41
+ * geometry: every piece of a geometry is drawn at the geometry's own place,
42
+ * so two overlapping pieces draw the overlap twice. The same set exactly
43
+ * is not new, and its piece is reused.
37
44
  *
38
45
  * @param {GrownMatchRecord[]} matches
39
46
  * @param {number} min_primitives Drop matches smaller than this — they go to leftover
@@ -92,6 +99,9 @@ export function cover_greedy(matches, min_primitives) {
92
99
  }
93
100
  if (conflict) continue;
94
101
 
102
+ // (3) within one geometry, the two sides must not share a face
103
+ if (match.a_geom === match.b_geom && face_sets_intersect(match.faces_a, match.faces_b)) continue;
104
+
95
105
  // Accept. If another match has chosen this exact canonical face-set,
96
106
  // reuse the piece. Group candidates by a cheap hash, then deep-compare
97
107
  // on hash collision.
@@ -99,6 +109,17 @@ export function cover_greedy(matches, min_primitives) {
99
109
  let decision = find_decision(decisions_by_canonical.get(canonical_hash), match.a_geom, match.faces_a);
100
110
 
101
111
  if (decision === undefined) {
112
+ // (4) a new canonical face-set must not share a face with one already chosen
113
+ const a_canonical_set = get_or_create(claimed_as_canonical, match.a_geom);
114
+
115
+ for (const f of match.faces_a) {
116
+ if (a_canonical_set.has(f)) {
117
+ conflict = true;
118
+ break;
119
+ }
120
+ }
121
+ if (conflict) continue;
122
+
102
123
  decision = {
103
124
  canonical_piece_id: next_piece_id++,
104
125
  a_geom: match.a_geom,
@@ -113,7 +134,6 @@ export function cover_greedy(matches, min_primitives) {
113
134
  bucket.push(decision);
114
135
  decisions.push(decision);
115
136
 
116
- const a_canonical_set = get_or_create(claimed_as_canonical, match.a_geom);
117
137
  for (const f of match.faces_a) a_canonical_set.add(f);
118
138
  }
119
139
 
@@ -173,3 +193,11 @@ function face_sets_equal(a, b) {
173
193
  }
174
194
  return true;
175
195
  }
196
+
197
+ function face_sets_intersect(a, b) {
198
+ const seen = new Set(a);
199
+ for (const f of b) {
200
+ if (seen.has(f)) return true;
201
+ }
202
+ return false;
203
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * One 32-bit hash per triangle that depends on the triangles within `rounds` edge-steps of it, and on
3
+ * nothing else: not on where any of them sits in the index stream, not on which corner a triangle's
4
+ * indices start at, and not on the rigid motion and uniform scale the geometry was placed with.
5
+ *
6
+ * Round 0 is the triangle's own {@link triangle_fingerprint_stream} fingerprint. Each round after that
7
+ * mixes in the three hashes across the triangle's edges, read in winding order and started at the
8
+ * smallest, so the same triangle indexed from another corner reads the same three in the same order.
9
+ *
10
+ * Two copies of a piece hash their triangles alike wherever a triangle's `rounds`-ring lies inside the
11
+ * piece, whatever order a meshlet build or an exporter left the triangles in. A triangle nearer the
12
+ * piece's edge than that sees what surrounds the piece, which differs between copies.
13
+ *
14
+ * @param {Geometry} geometry
15
+ * @param {number} rounds
16
+ * @returns {Uint32Array} one per triangle
17
+ */
18
+ export function face_neighbourhood_hash(geometry: Geometry, rounds: number): Uint32Array;
19
+ //# sourceMappingURL=face_neighbourhood_hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"face_neighbourhood_hash.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.js"],"names":[],"mappings":"AAkGA;;;;;;;;;;;;;;;;GAgBG;AACH,oEAHW,MAAM,GACJ,WAAW,CAqDvB"}