@woosh/meep-engine 3.52.0 → 3.54.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 (515) hide show
  1. package/package.json +1 -1
  2. package/src/core/math/noise/worley_noise_2d.d.ts +14 -0
  3. package/src/core/math/noise/worley_noise_2d.d.ts.map +1 -0
  4. package/src/core/math/noise/worley_noise_2d.js +74 -0
  5. package/src/engine/ecs/animation/Animation.d.ts +4 -25
  6. package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
  7. package/src/engine/ecs/animation/Animation.js +9 -41
  8. package/src/engine/ecs/ik/IKGoalSystem.d.ts +4 -5
  9. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
  10. package/src/engine/ecs/ik/IKGoalSystem.js +4 -6
  11. package/src/engine/graphics/ecs/mesh/assetTypeByPath.js +1 -1
  12. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts +6 -1
  13. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
  14. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +363 -325
  15. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts +93 -14
  16. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
  17. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +322 -183
  18. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts +9 -0
  19. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts.map +1 -1
  20. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js +110 -83
  21. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts +42 -0
  22. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts.map +1 -0
  23. package/src/engine/{graphics3/decal/DecalAtlas.js → graphics/texture/atlas/SpriteAtlas.js} +202 -194
  24. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts +12 -0
  25. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts.map +1 -0
  26. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.js +30 -0
  27. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +7 -0
  28. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  29. package/src/engine/graphics/texture/atlas/TextureAtlas.js +11 -1
  30. package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts +52 -0
  31. package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -0
  32. package/src/engine/{graphics3/decal/decal_atlas_border.js → graphics/texture/atlas/sprite_atlas_border.js} +69 -69
  33. package/src/engine/graphics3/AnimationGraphSystem.d.ts +9 -22
  34. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  35. package/src/engine/graphics3/AnimationGraphSystem.js +58 -203
  36. package/src/engine/graphics3/AnimationSystem.d.ts +7 -18
  37. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  38. package/src/engine/graphics3/AnimationSystem.js +62 -243
  39. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  40. package/src/engine/graphics3/DecalSystem.js +447 -450
  41. package/src/engine/graphics3/FoliageWindSystem.d.ts +67 -0
  42. package/src/engine/graphics3/FoliageWindSystem.d.ts.map +1 -0
  43. package/src/engine/graphics3/FoliageWindSystem.js +257 -0
  44. package/src/engine/graphics3/GPUFluidSystem.d.ts +7 -0
  45. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  46. package/src/engine/graphics3/GPUFluidSystem.js +39 -1
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +9 -23
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  49. package/src/engine/graphics3/GPUParticleEmitterSystem.js +904 -949
  50. package/src/engine/graphics3/animation/AnimationClips.d.ts +107 -13
  51. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  52. package/src/engine/graphics3/animation/AnimationClips.js +207 -10
  53. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts +89 -0
  54. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts.map +1 -0
  55. package/src/engine/graphics3/animation/AnimationClipsSink.js +205 -0
  56. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts +43 -0
  57. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts.map +1 -0
  58. package/src/engine/graphics3/animation/FoliageWindRigs.js +69 -0
  59. package/src/engine/graphics3/animation/write_clip_playback.d.ts +17 -11
  60. package/src/engine/graphics3/animation/write_clip_playback.d.ts.map +1 -1
  61. package/src/engine/graphics3/animation/write_clip_playback.js +36 -27
  62. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  63. package/src/engine/graphics3/decal/GPUDecalRenderer.js +8 -6
  64. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  65. package/src/engine/graphics3/decal/shader_decal_composite.js +11 -5
  66. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts +7 -7
  67. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts.map +1 -1
  68. package/src/engine/graphics3/pose/collect_entity_playbacks.js +14 -15
  69. package/src/engine/graphics3/prefab/Prefab.d.ts +6 -0
  70. package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -1
  71. package/src/engine/graphics3/prefab/Prefab.js +169 -162
  72. package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -1
  73. package/src/engine/graphics3/prefab/prefab_compile.js +369 -334
  74. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
  75. package/src/engine/graphics3/prefab/prefab_instantiate.js +43 -2
  76. package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +2 -2
  77. package/src/engine/physics/ecs/ContactProbeSystem.d.ts +2 -3
  78. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
  79. package/src/engine/physics/ecs/ContactProbeSystem.js +2 -4
  80. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  81. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +4 -4
  82. package/src/engine/sound/simulation/README.md +1 -1
  83. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts +22 -8
  84. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts.map +1 -1
  85. package/src/engine/sound/simulation/probe/bakeProbeField.js +60 -15
  86. package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
  87. package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +19 -23
  88. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +63 -17
  89. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -1
  90. package/src/engine/sound/simulation/probe/probe_sdf_grid.js +67 -17
  91. package/src/generation/foliage/FOLIAGE_DESIGN.md +319 -0
  92. package/src/generation/foliage/FOLIAGE_PLAN.md +198 -0
  93. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +20 -0
  94. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -0
  95. package/src/generation/foliage/animation/build_tree_wind_rig.js +108 -0
  96. package/src/generation/foliage/asset/TreeAsset.d.ts +86 -0
  97. package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -0
  98. package/src/generation/foliage/asset/TreeAsset.js +111 -0
  99. package/src/generation/foliage/asset/TreeLODAsset.d.ts +115 -0
  100. package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -0
  101. package/src/generation/foliage/asset/TreeLODAsset.js +346 -0
  102. package/src/generation/foliage/asset/generate_tree.d.ts +15 -0
  103. package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -0
  104. package/src/generation/foliage/asset/generate_tree.js +93 -0
  105. package/src/generation/foliage/asset/place_tree.d.ts +82 -0
  106. package/src/generation/foliage/asset/place_tree.d.ts.map +1 -0
  107. package/src/generation/foliage/asset/place_tree.js +194 -0
  108. package/src/generation/foliage/config/BarkMaterialConfig.d.ts +121 -0
  109. package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -0
  110. package/src/generation/foliage/config/BarkMaterialConfig.js +250 -0
  111. package/src/generation/foliage/config/BranchLevelConfig.d.ts +288 -0
  112. package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +1 -0
  113. package/src/generation/foliage/config/BranchLevelConfig.js +536 -0
  114. package/src/generation/foliage/config/CrownConfig.d.ts +100 -0
  115. package/src/generation/foliage/config/CrownConfig.d.ts.map +1 -0
  116. package/src/generation/foliage/config/CrownConfig.js +186 -0
  117. package/src/generation/foliage/config/CrownEnvelopeType.d.ts +16 -0
  118. package/src/generation/foliage/config/CrownEnvelopeType.d.ts.map +1 -0
  119. package/src/generation/foliage/config/CrownEnvelopeType.js +17 -0
  120. package/src/generation/foliage/config/FoliageBarkType.d.ts +11 -0
  121. package/src/generation/foliage/config/FoliageBarkType.d.ts.map +1 -0
  122. package/src/generation/foliage/config/FoliageBarkType.js +16 -0
  123. package/src/generation/foliage/config/FoliageCardType.d.ts +12 -0
  124. package/src/generation/foliage/config/FoliageCardType.d.ts.map +1 -0
  125. package/src/generation/foliage/config/FoliageCardType.js +18 -0
  126. package/src/generation/foliage/config/FoliageConfig.d.ts +151 -0
  127. package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -0
  128. package/src/generation/foliage/config/FoliageConfig.js +283 -0
  129. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +143 -0
  130. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -0
  131. package/src/generation/foliage/config/FoliageMaterialConfig.js +279 -0
  132. package/src/generation/foliage/config/PhyllotaxisMode.d.ts +13 -0
  133. package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -0
  134. package/src/generation/foliage/config/PhyllotaxisMode.js +20 -0
  135. package/src/generation/foliage/config/TreeLODConfig.d.ts +87 -0
  136. package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -0
  137. package/src/generation/foliage/config/TreeLODConfig.js +211 -0
  138. package/src/generation/foliage/config/TreePreset.d.ts +16 -0
  139. package/src/generation/foliage/config/TreePreset.d.ts.map +1 -0
  140. package/src/generation/foliage/config/TreePreset.js +17 -0
  141. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +109 -0
  142. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -0
  143. package/src/generation/foliage/config/TreeSpeciesConfig.js +400 -0
  144. package/src/generation/foliage/config/TreeWindConfig.d.ts +84 -0
  145. package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -0
  146. package/src/generation/foliage/config/TreeWindConfig.js +157 -0
  147. package/src/generation/foliage/index.d.ts +39 -0
  148. package/src/generation/foliage/index.d.ts.map +1 -0
  149. package/src/generation/foliage/index.js +44 -0
  150. package/src/generation/foliage/material/make_bark_material.d.ts +37 -0
  151. package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -0
  152. package/src/generation/foliage/material/make_bark_material.js +730 -0
  153. package/src/generation/foliage/material/make_foliage_material.d.ts +40 -0
  154. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -0
  155. package/src/generation/foliage/material/make_foliage_material.js +605 -0
  156. package/src/generation/foliage/mesh/branch_collar_project.d.ts +42 -0
  157. package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -0
  158. package/src/generation/foliage/mesh/branch_collar_project.js +205 -0
  159. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +35 -0
  160. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts.map +1 -0
  161. package/src/generation/foliage/mesh/branch_ring_triangulate.js +72 -0
  162. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +95 -0
  163. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -0
  164. package/src/generation/foliage/mesh/foliage_collect_attachments.js +569 -0
  165. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts +19 -0
  166. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts.map +1 -0
  167. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.js +150 -0
  168. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts +55 -0
  169. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -0
  170. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1049 -0
  171. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +22 -0
  172. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -0
  173. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +454 -0
  174. package/src/generation/foliage/presets/make_tree_species_preset.d.ts +13 -0
  175. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -0
  176. package/src/generation/foliage/presets/make_tree_species_preset.js +870 -0
  177. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +443 -0
  178. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -0
  179. package/src/generation/foliage/skeleton/TreeSkeleton.js +1100 -0
  180. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts +27 -0
  181. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts.map +1 -0
  182. package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -0
  183. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts +32 -0
  184. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts.map +1 -0
  185. package/src/generation/foliage/skeleton/spine_frame_double_reflection.js +87 -0
  186. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +33 -0
  187. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -0
  188. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +205 -0
  189. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +17 -0
  190. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -0
  191. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +206 -0
  192. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +18 -0
  193. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -0
  194. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1871 -0
  195. package/src/shade/playground/additive_blending/index.html +197 -0
  196. package/src/shade/playground/additive_blending/main.d.ts +2 -0
  197. package/src/shade/playground/additive_blending/main.d.ts.map +1 -0
  198. package/src/shade/playground/additive_blending/main.js +529 -0
  199. package/src/shade/playground/foliage_wind/README.md +18 -0
  200. package/src/shade/playground/foliage_wind/foliage_world.d.ts +133 -0
  201. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -0
  202. package/src/shade/playground/foliage_wind/foliage_world.js +602 -0
  203. package/src/shade/playground/foliage_wind/index.html +260 -0
  204. package/src/shade/playground/foliage_wind/main.d.ts +2 -0
  205. package/src/shade/playground/foliage_wind/main.d.ts.map +1 -0
  206. package/src/shade/playground/foliage_wind/main.js +275 -0
  207. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  208. package/src/shade/renderer/Renderer.js +45 -16
  209. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +145 -0
  210. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +9 -1
  211. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
  212. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +53 -1
  213. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts +8 -0
  214. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts.map +1 -0
  215. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.js +71 -0
  216. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts +11 -0
  217. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts.map +1 -0
  218. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.js +32 -0
  219. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +30 -3
  220. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  221. package/src/shade/renderer/animation/GPUAnimationManager.js +532 -79
  222. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +19 -12
  223. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  224. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +20 -13
  225. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +35 -8
  226. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  227. package/src/shade/renderer/animation/ShadeAnimationClip.js +433 -2
  228. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  229. package/src/shade/renderer/animation/chunk_pose_accumulator.js +40 -32
  230. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +97 -0
  231. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -0
  232. package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +161 -0
  233. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts +65 -0
  234. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts.map +1 -0
  235. package/src/shade/renderer/animation/foliage/FoliageWindRig.js +89 -0
  236. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts +19 -0
  237. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -0
  238. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +143 -0
  239. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts +14 -0
  240. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts.map +1 -0
  241. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js +116 -0
  242. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  243. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +39 -29
  244. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +37 -37
  245. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
  246. package/src/shade/renderer/extension/RenderExtension.d.ts +7 -0
  247. package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
  248. package/src/shade/renderer/extension/RenderExtension.js +9 -0
  249. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +6 -0
  250. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
  251. package/src/shade/renderer/extension/RenderExtensionRegistry.js +15 -0
  252. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +10 -3
  253. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  254. package/src/shade/renderer/fluid/GPUFluidCascade.js +15 -0
  255. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +8 -1
  256. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  257. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +11 -0
  258. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  259. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +51 -48
  260. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  261. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -0
  262. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  263. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +16 -0
  264. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
  265. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +15 -3
  266. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
  267. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +102 -96
  268. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +12 -12
  269. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +12 -12
  270. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +8 -1
  271. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
  272. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +16 -0
  273. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +7 -0
  274. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  275. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +10 -0
  276. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  277. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +2 -2
  278. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1 -1
  279. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +3 -3
  280. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  281. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +350 -294
  282. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts +0 -2
  283. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts.map +1 -1
  284. package/src/shade/renderer/hiz/generate_downsampler_code.js +99 -100
  285. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts +15 -0
  286. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -0
  287. package/src/shade/renderer/hiz/hzb_pick_alignment.js +148 -0
  288. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts +28 -0
  289. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts.map +1 -0
  290. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.js +58 -0
  291. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +5 -5
  292. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  293. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +57 -67
  294. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +3 -3
  295. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  296. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +111 -112
  297. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts +5 -0
  298. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts.map +1 -0
  299. package/src/shade/renderer/hiz/shader_hzb_spd.js +160 -0
  300. package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
  301. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  302. package/src/shade/renderer/light/GPULightCollection.js +67 -0
  303. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts +7 -0
  304. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts.map +1 -0
  305. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.js +13 -0
  306. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts +10 -0
  307. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts.map +1 -0
  308. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.js +72 -0
  309. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +39 -0
  310. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -0
  311. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +90 -0
  312. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +12 -0
  313. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -0
  314. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +56 -0
  315. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +31 -0
  316. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -0
  317. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +196 -0
  318. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +10 -0
  319. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -0
  320. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +163 -0
  321. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts +4 -0
  322. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts.map +1 -0
  323. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.js +137 -0
  324. package/src/shade/renderer/loader/SceneBundle.d.ts +7 -0
  325. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  326. package/src/shade/renderer/loader/SceneBundle.js +119 -111
  327. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  328. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +4 -0
  329. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  330. package/src/shade/renderer/material/standard/fragment_gbuffer.js +6 -5
  331. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +8 -7
  332. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  333. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -8
  334. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  335. package/src/shade/renderer/particles/GPUParticleSystem.js +4 -1
  336. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +4 -3
  337. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  338. package/src/shade/renderer/particles/graph_particles_avboit.js +28 -11
  339. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +9 -13
  340. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
  341. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +25 -20
  342. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  343. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +22 -34
  344. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  345. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  346. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +9 -7
  347. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.d.ts.map +1 -1
  348. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.js +15 -7
  349. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
  350. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +6 -4
  351. package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +3 -3
  352. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
  353. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +8 -5
  354. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  355. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +4 -3
  356. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.d.ts.map +1 -1
  357. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js +62 -62
  358. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts +6 -0
  359. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts.map +1 -0
  360. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.js +19 -0
  361. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.d.ts.map +1 -1
  362. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js +16 -10
  363. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.d.ts.map +1 -1
  364. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js +118 -117
  365. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1 -1
  366. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts +9 -0
  367. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts.map +1 -0
  368. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js +17 -0
  369. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts +8 -0
  370. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts.map +1 -1
  371. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js +28 -20
  372. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts +8 -0
  373. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts.map +1 -0
  374. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js +15 -0
  375. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +41 -7
  376. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
  377. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +162 -58
  378. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts +21 -0
  379. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts.map +1 -0
  380. package/src/shade/renderer/view/chunk_view_mip_bias.js +44 -0
  381. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -1
  382. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +10 -12
  383. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  384. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +583 -606
  385. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts +24 -0
  386. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts.map +1 -0
  387. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts.map +1 -1
  388. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +1 -1
  389. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +640 -640
  390. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +113 -0
  391. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -0
  392. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +484 -0
  393. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +50 -0
  394. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -0
  395. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +60 -0
  396. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +25 -0
  397. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -0
  398. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +47 -0
  399. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts +74 -0
  400. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts.map +1 -0
  401. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.js +173 -0
  402. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +26 -0
  403. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -0
  404. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +83 -0
  405. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts +31 -0
  406. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts.map +1 -0
  407. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js +113 -0
  408. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts +121 -0
  409. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -0
  410. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +356 -0
  411. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts +16 -0
  412. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -0
  413. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +191 -0
  414. package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts +16 -0
  415. package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts.map +1 -0
  416. package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts +23 -0
  417. package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts.map +1 -0
  418. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  419. package/src/shade/renderer/wind/GPUSceneWind.js +1 -1
  420. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
  421. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  422. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +105 -26
  423. package/src/engine/graphics/composit/CompositingStages.d.ts +0 -6
  424. package/src/engine/graphics/composit/CompositingStages.d.ts.map +0 -1
  425. package/src/engine/graphics/composit/CompositingStages.js +0 -8
  426. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +0 -7
  427. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +0 -1
  428. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +0 -24
  429. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts +0 -8
  430. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts.map +0 -1
  431. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.js +0 -17
  432. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +0 -8
  433. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +0 -1
  434. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +0 -60
  435. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +0 -7
  436. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +0 -1
  437. package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +0 -26
  438. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +0 -7
  439. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +0 -1
  440. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +0 -23
  441. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +0 -7
  442. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +0 -1
  443. package/src/engine/graphics/geometry/instancing/geometry_copy.js +0 -15
  444. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts +0 -2
  445. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts.map +0 -1
  446. package/src/engine/graphics/geometry/instancing/rewriteMaterial.js +0 -57
  447. package/src/engine/graphics/geometry/ribbon/Quad.d.ts +0 -96
  448. package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +0 -1
  449. package/src/engine/graphics/geometry/ribbon/Quad.js +0 -213
  450. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +0 -9
  451. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +0 -1
  452. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +0 -12
  453. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +0 -10
  454. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +0 -1
  455. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +0 -17
  456. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +0 -10
  457. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +0 -1
  458. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +0 -13
  459. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +0 -11
  460. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +0 -1
  461. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +0 -24
  462. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts +0 -6
  463. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts.map +0 -1
  464. package/src/engine/graphics/geometry/ribbon/rotateRibbon.js +0 -37
  465. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts +0 -9
  466. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts.map +0 -1
  467. package/src/engine/graphics/geometry/ribbon/updateTipPosition.js +0 -52
  468. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts +0 -8
  469. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts.map +0 -1
  470. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.js +0 -54
  471. package/src/engine/graphics/render/RenderPassType.d.ts +0 -6
  472. package/src/engine/graphics/render/RenderPassType.d.ts.map +0 -1
  473. package/src/engine/graphics/render/RenderPassType.js +0 -8
  474. package/src/engine/graphics/render/layers/RenderLayer.d.ts +0 -78
  475. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +0 -1
  476. package/src/engine/graphics/render/layers/RenderLayer.js +0 -95
  477. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts +0 -72
  478. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +0 -1
  479. package/src/engine/graphics/render/layers/RenderLayerManager.js +0 -160
  480. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts +0 -18
  481. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +0 -1
  482. package/src/engine/graphics/render/layers/RenderLayerManagerState.js +0 -48
  483. package/src/engine/graphics/render/layers/RenderLayerState.d.ts +0 -18
  484. package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +0 -1
  485. package/src/engine/graphics/render/layers/RenderLayerState.js +0 -27
  486. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts +0 -8
  487. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +0 -1
  488. package/src/engine/graphics/render/layers/RenderLayerUtils.js +0 -103
  489. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts +0 -10
  490. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts.map +0 -1
  491. package/src/engine/graphics/render/make_bvh_visibility_builder.js +0 -64
  492. package/src/engine/graphics/render/view/CameraViewFlags.d.ts +0 -7
  493. package/src/engine/graphics/render/view/CameraViewFlags.d.ts.map +0 -1
  494. package/src/engine/graphics/render/view/CameraViewFlags.js +0 -9
  495. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +0 -143
  496. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +0 -1
  497. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +0 -328
  498. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +0 -39
  499. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +0 -1
  500. package/src/engine/graphics/render/visibility/VisibilityComputer.js +0 -80
  501. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +0 -29
  502. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +0 -1
  503. package/src/engine/graphics/render/visibility/VisibilityFilter.js +0 -37
  504. package/src/engine/graphics3/animation/write_graph_playback.d.ts +0 -24
  505. package/src/engine/graphics3/animation/write_graph_playback.d.ts.map +0 -1
  506. package/src/engine/graphics3/animation/write_graph_playback.js +0 -48
  507. package/src/engine/graphics3/decal/DecalAtlasFill.js +0 -32
  508. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +0 -49
  509. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +0 -50
  510. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.js +0 -105
  511. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +0 -80
  512. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.js +0 -51
  513. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +0 -39
  514. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +0 -121
  515. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +0 -237
@@ -0,0 +1,113 @@
1
+ /**
2
+ * World-space irradiance clipmap (`GPUIrradianceClipmap`):
3
+ *
4
+ * Replaces the camera-frustum froxel irradiance volume with nested world-space clipmap cascades
5
+ * stored in a multi-texture {@link GPUTileAtlas3D} (`Y` in texture 0, `CoCg` in texture 1).
6
+ *
7
+ * - **Defaults (Decision 6.3):** 6 cascades (`c = 0..5`) of `32 × 32 × 32` content cells (plus a
8
+ * 1-texel trilinear skirt -> `34³` texels per tile), with finest voxel size `h0 = 0.25 m`
9
+ * (covering `8 m, 16 m, 32 m, 64 m, 128 m, 256 m`).
10
+ * - **Amortized Updates & Warp Detection (Decision 3.2):** Cascade `0` and the dyadic ruler cascade
11
+ * `fluid_cascade_ruler(tick, count)` update every frame. In addition, whenever a cascade's window
12
+ * shifts by 1 voxel (`placement.moved(c)`), an immediate update is forced on that cascade so the
13
+ * linear atlas tile never holds stale pre-shift texels.
14
+ */
15
+ export class GPUIrradianceClipmap {
16
+ /**
17
+ * @param {GPUDevice} device
18
+ * @param {Object} [options]
19
+ * @param {number} [options.cascade_count=IRRADIANCE_CLIPMAP_DEFAULT_CASCADE_COUNT]
20
+ * @param {number|ArrayLike<number>} [options.resolution=IRRADIANCE_CLIPMAP_DEFAULT_RESOLUTION]
21
+ * @param {number} [options.cell_size=IRRADIANCE_CLIPMAP_DEFAULT_CELL_SIZE]
22
+ * @param {number} [options.blend_skirt=IRRADIANCE_CLIPMAP_DEFAULT_BLEND_SKIRT]
23
+ */
24
+ constructor(device: GPUDevice, { cascade_count, resolution, cell_size, blend_skirt, }?: {
25
+ cascade_count?: number;
26
+ resolution?: number | ArrayLike<number>;
27
+ cell_size?: number;
28
+ blend_skirt?: number;
29
+ });
30
+ /**
31
+ * @returns {GPUTileAtlas3D}
32
+ */
33
+ get atlas(): GPUTileAtlas3D;
34
+ /**
35
+ * @returns {GPUTextureContext}
36
+ */
37
+ get texture_y(): GPUTextureContext;
38
+ /**
39
+ * @returns {GPUTextureContext}
40
+ */
41
+ get texture_cocg(): GPUTextureContext;
42
+ /**
43
+ * @returns {GPUBuffer}
44
+ */
45
+ get uniform(): GPUBuffer;
46
+ /**
47
+ * @returns {number}
48
+ */
49
+ get cascade_count(): number;
50
+ /**
51
+ * Number of voxels at each cascade window's outer faces where blending takes place.
52
+ * @returns {number}
53
+ */
54
+ get blend_skirt(): number;
55
+ /**
56
+ * @returns {IrradianceCascadePlacement}
57
+ */
58
+ get placement(): IrradianceCascadePlacement;
59
+ /**
60
+ * Forces all cascades to rebuild on the next executed frame.
61
+ */
62
+ invalidate_all(): void;
63
+ /**
64
+ * Updates cascade window placements around `anchor` (`[x, y, z]` in world metres), detects
65
+ * warp events (`placement.moved(c)`), schedules cascade updates, and uploads the uniform table.
66
+ *
67
+ * @param {number} x
68
+ * @param {number} y
69
+ * @param {number} z
70
+ * @param {ShaderSwitchSet} [shader_switches]
71
+ */
72
+ update_placement(x: number, y: number, z: number, shader_switches?: ShaderSwitchSet): void;
73
+ /**
74
+ * Records the world-space light cluster clipmap build and the irradiance clipmap cascade update
75
+ * passes into `graph`.
76
+ *
77
+ * Neither pass is marked a side effect, so if nothing in the frame reads `Y` or `CoCg` (e.g. a
78
+ * frame with no volumetrics and no lit particles), the frame graph culls both passes and `#dirty`
79
+ * remains set until a frame actually executes them.
80
+ *
81
+ * @param {Object} options
82
+ * @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} options.graph
83
+ * @param {import("../../camera/GPUCameraContext.js").GPUCameraContext} options.camera
84
+ * @param {import("../../scene/GPUSceneContext.js").GPUSceneContext} options.scene_ctx
85
+ * @param {number} options.shadowmap_atlas
86
+ * @param {ShaderSwitchSet} [options.shader_switches]
87
+ * @param {import("../../global_illumination/brick4/Brick4LightMap.js").Brick4LightMap} [options.brick4]
88
+ * @param {import("../../global_illumination/lpv/GPULightProbeVolume.js").GPULightProbeVolume} [options.lpv]
89
+ * @returns {{Y: number, CoCg: number, uniform: number}}
90
+ */
91
+ graph_update({ graph, camera, scene_ctx, shadowmap_atlas, shader_switches, brick4, lpv, }: {
92
+ graph: import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
93
+ camera: import("../../camera/GPUCameraContext.js").GPUCameraContext;
94
+ scene_ctx: import("../../scene/GPUSceneContext.js").GPUSceneContext;
95
+ shadowmap_atlas: number;
96
+ shader_switches?: ShaderSwitchSet;
97
+ brick4?: import("../../global_illumination/brick4/Brick4LightMap.js").Brick4LightMap;
98
+ lpv?: import("../../global_illumination/lpv/GPULightProbeVolume.js").GPULightProbeVolume;
99
+ }): {
100
+ Y: number;
101
+ CoCg: number;
102
+ uniform: number;
103
+ };
104
+ /**
105
+ * Releases GPU resources owned by the clipmap. Safe to call twice.
106
+ */
107
+ destroy(): void;
108
+ #private;
109
+ }
110
+ import { GPUTileAtlas3D } from "../../texture/atlas/GPUTileAtlas3D.js";
111
+ import { IrradianceCascadePlacement } from "./IrradianceCascadePlacement.js";
112
+ import { ShaderSwitchSet } from "../../shader/compiler/ShaderSwitchSet.js";
113
+ //# sourceMappingURL=GPUIrradianceClipmap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GPUIrradianceClipmap.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js"],"names":[],"mappings":"AA6CA;;;;;;;;;;;;;GAaG;AACH;IA2CI;;;;;;;OAOG;IACH;QAL4B,aAAa,GAA9B,MAAM;QAC6B,UAAU,GAA7C,MAAM,GAAC,UAAU,MAAM,CAAC;QACP,SAAS,GAA1B,MAAM;QACW,WAAW,GAA5B,MAAM;OA8DhB;IAED;;OAEG;IACH,4BAEC;IAED;;OAEG;IACH,mCAEC;IAED;;OAEG;IACH,sCAEC;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,4BAEC;IAED;;;OAGG;IACH,0BAEC;IAED;;OAEG;IACH,4CAEC;IAED;;OAEG;IACH,uBAEC;IAED;;;;;;;;OAQG;IACH,oBALW,MAAM,KACN,MAAM,KACN,MAAM,oBACN,eAAe,QAgFzB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH;QATsG,KAAK,EAAhG,OAAO,8DAA8D,EAAE,UAAU;QACZ,MAAM,EAA3E,OAAO,kCAAkC,EAAE,gBAAgB;QACO,SAAS,EAA3E,OAAO,gCAAgC,EAAE,eAAe;QACxC,eAAe,EAA/B,MAAM;QACoB,eAAe,GAAzC,eAAe;QACuE,MAAM,GAA5F,OAAO,oDAAoD,EAAE,cAAc;QACkB,GAAG,GAAhG,OAAO,sDAAsD,EAAE,mBAAmB;QAChF;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAuItD;IAED;;OAEG;IACH,gBAQC;;CACJ;+BAzd8B,uCAAuC;2CAe3B,iCAAiC;gCApB5C,0CAA0C"}
@@ -0,0 +1,484 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { fluid_cascade_ruler } from "../../fluid/fluid_cascade_ruler.js";
3
+ import { INDIRECT_LIGHTING } from "../../INDIRECT_LIGHTING.js";
4
+ import { graph_build_world_light_clusters } from "../../light/world_cluster/graph_build_world_light_clusters.js";
5
+ import { CLIPMAP_LEVEL_STRUCT } from "../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
6
+ import { ShaderSwitchSet } from "../../shader/compiler/ShaderSwitchSet.js";
7
+ import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
8
+ import { graph_import_texture } from "../../shader/graph/graph_import_texture.js";
9
+ import { encoder_prepare_shader_bindings_defaults } from "../../shader/resource/encoder_prepare_shader_bindings_defaults.js";
10
+ import { SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR } from "../../shadow/map/SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR.js";
11
+ import { GPUTileAtlas3D } from "../../texture/atlas/GPUTileAtlas3D.js";
12
+ import { DEFAULT_RENDER_TARGET_VIEW_DESCRIPTOR } from "../../texture/DEFAULT_RENDER_TARGET_VIEW_DESCRIPTOR.js";
13
+ import {
14
+ IRRADIANCE_CLIPMAP_CASCADE_LIMIT,
15
+ IRRADIANCE_CLIPMAP_DEFAULT_BLEND_SKIRT,
16
+ IRRADIANCE_CLIPMAP_DEFAULT_CASCADE_COUNT,
17
+ IRRADIANCE_CLIPMAP_DEFAULT_CELL_SIZE,
18
+ IRRADIANCE_CLIPMAP_DEFAULT_RESOLUTION,
19
+ IRRADIANCE_CLIPMAP_TILE_BORDER,
20
+ IRRADIANCE_CLIPMAP_TILE_FORMAT,
21
+ } from "./IRRADIANCE_CLIPMAP.js";
22
+ import {
23
+ IRRADIANCE_CASCADE_STRUCT,
24
+ IRRADIANCE_CLIPMAP_STRUCT,
25
+ } from "./IRRADIANCE_CLIPMAP_STRUCT.js";
26
+ import { IrradianceCascadePlacement } from "./IrradianceCascadePlacement.js";
27
+ import {
28
+ IRRADIANCE_CLIPMAP_BUILD_STRUCT,
29
+ shader_irradiance_clipmap_build,
30
+ } from "./shader_irradiance_clipmap_build.js";
31
+
32
+ // Word offsets in IRRADIANCE_CLIPMAP_STRUCT
33
+ const LEVELS = IRRADIANCE_CLIPMAP_STRUCT.get("levels").offset >>> 2;
34
+ const LEVEL_STRIDE = CLIPMAP_LEVEL_STRUCT.aligned_size >>> 2;
35
+ const LEVEL_CORNER = CLIPMAP_LEVEL_STRUCT.get("corner").offset >>> 2;
36
+ const LEVEL_CELL_SIZE = CLIPMAP_LEVEL_STRUCT.get("cell_size").offset >>> 2;
37
+ const LEVEL_SIZE = CLIPMAP_LEVEL_STRUCT.get("size").offset >>> 2;
38
+ const CASCADES = IRRADIANCE_CLIPMAP_STRUCT.get("cascades").offset >>> 2;
39
+ const CASCADE_STRIDE = IRRADIANCE_CASCADE_STRUCT.aligned_size >>> 2;
40
+ const CASCADE_CONTENT_ORIGIN = IRRADIANCE_CASCADE_STRUCT.get("content_origin").offset >>> 2;
41
+ const INVERSE_ATLAS_SIZE = IRRADIANCE_CLIPMAP_STRUCT.get("inverse_atlas_size").offset >>> 2;
42
+ const CASCADE_COUNT = IRRADIANCE_CLIPMAP_STRUCT.get("cascade_count").offset >>> 2;
43
+ const ANCHOR = IRRADIANCE_CLIPMAP_STRUCT.get("anchor").offset >>> 2;
44
+ const BLEND_SKIRT = IRRADIANCE_CLIPMAP_STRUCT.get("blend_skirt").offset >>> 2;
45
+
46
+ /**
47
+ * World-space irradiance clipmap (`GPUIrradianceClipmap`):
48
+ *
49
+ * Replaces the camera-frustum froxel irradiance volume with nested world-space clipmap cascades
50
+ * stored in a multi-texture {@link GPUTileAtlas3D} (`Y` in texture 0, `CoCg` in texture 1).
51
+ *
52
+ * - **Defaults (Decision 6.3):** 6 cascades (`c = 0..5`) of `32 × 32 × 32` content cells (plus a
53
+ * 1-texel trilinear skirt -> `34³` texels per tile), with finest voxel size `h0 = 0.25 m`
54
+ * (covering `8 m, 16 m, 32 m, 64 m, 128 m, 256 m`).
55
+ * - **Amortized Updates & Warp Detection (Decision 3.2):** Cascade `0` and the dyadic ruler cascade
56
+ * `fluid_cascade_ruler(tick, count)` update every frame. In addition, whenever a cascade's window
57
+ * shifts by 1 voxel (`placement.moved(c)`), an immediate update is forced on that cascade so the
58
+ * linear atlas tile never holds stale pre-shift texels.
59
+ */
60
+ export class GPUIrradianceClipmap {
61
+ /** @type {GPUDevice} */
62
+ #device;
63
+
64
+ /** @type {GPUTileAtlas3D} */
65
+ #atlas;
66
+
67
+ /** @type {IrradianceCascadePlacement} */
68
+ #placement;
69
+
70
+ /** @type {GPUBuffer} */
71
+ #uniform;
72
+
73
+ /** @type {ArrayBuffer} */
74
+ #bytes = new ArrayBuffer(IRRADIANCE_CLIPMAP_STRUCT.size);
75
+ #f32 = new Float32Array(this.#bytes);
76
+ #i32 = new Int32Array(this.#bytes);
77
+ #u32 = new Uint32Array(this.#bytes);
78
+
79
+ /** @type {Uint32Array} */
80
+ #slots = new Uint32Array(IRRADIANCE_CLIPMAP_CASCADE_LIMIT);
81
+
82
+ /** @type {Uint8Array} */
83
+ #dirty = new Uint8Array(IRRADIANCE_CLIPMAP_CASCADE_LIMIT);
84
+
85
+ /** @type {Object[]} */
86
+ #build_records = [];
87
+
88
+ /** @type {number[]} */
89
+ #origin = [0, 0, 0];
90
+
91
+ /** @type {number} */
92
+ #tick = 0;
93
+
94
+ /** @type {number} */
95
+ #blend_skirt;
96
+
97
+ /** @type {number} */
98
+ #last_indirect_mode = -1;
99
+
100
+ /** @type {boolean} */
101
+ #destroyed = false;
102
+
103
+ /**
104
+ * @param {GPUDevice} device
105
+ * @param {Object} [options]
106
+ * @param {number} [options.cascade_count=IRRADIANCE_CLIPMAP_DEFAULT_CASCADE_COUNT]
107
+ * @param {number|ArrayLike<number>} [options.resolution=IRRADIANCE_CLIPMAP_DEFAULT_RESOLUTION]
108
+ * @param {number} [options.cell_size=IRRADIANCE_CLIPMAP_DEFAULT_CELL_SIZE]
109
+ * @param {number} [options.blend_skirt=IRRADIANCE_CLIPMAP_DEFAULT_BLEND_SKIRT]
110
+ */
111
+ constructor(device, {
112
+ cascade_count = IRRADIANCE_CLIPMAP_DEFAULT_CASCADE_COUNT,
113
+ resolution = IRRADIANCE_CLIPMAP_DEFAULT_RESOLUTION,
114
+ cell_size = IRRADIANCE_CLIPMAP_DEFAULT_CELL_SIZE,
115
+ blend_skirt = IRRADIANCE_CLIPMAP_DEFAULT_BLEND_SKIRT,
116
+ } = {}) {
117
+ assert.defined(device, "device");
118
+ assert.isPositiveInteger(cascade_count, "cascade_count");
119
+ assert.lessThanOrEqual(cascade_count, IRRADIANCE_CLIPMAP_CASCADE_LIMIT, "cascade_count");
120
+ assert.isNumber(blend_skirt, "blend_skirt");
121
+ assert.greaterThan(blend_skirt, 0, "blend_skirt");
122
+
123
+ const res = typeof resolution === "number"
124
+ ? [resolution, resolution, resolution]
125
+ : [resolution[0], resolution[1], resolution[2]];
126
+
127
+ this.#device = device;
128
+ this.#blend_skirt = blend_skirt;
129
+ this.#placement = new IrradianceCascadePlacement({
130
+ cascade_count,
131
+ resolution: res,
132
+ cell_size,
133
+ });
134
+
135
+ const tile_z = res[2] + 2 * IRRADIANCE_CLIPMAP_TILE_BORDER;
136
+
137
+ this.#atlas = new GPUTileAtlas3D({
138
+ device,
139
+ formats: [IRRADIANCE_CLIPMAP_TILE_FORMAT, IRRADIANCE_CLIPMAP_TILE_FORMAT],
140
+ content_size: res,
141
+ border: IRRADIANCE_CLIPMAP_TILE_BORDER,
142
+ slots_x: 1,
143
+ slots_y: 1,
144
+ capacity: Math.max(1, Math.min(cascade_count, Math.floor(device.limits.maxTextureDimension3D / tile_z))),
145
+ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING,
146
+ label: "GPUIrradianceClipmap/atlas",
147
+ });
148
+
149
+ for (let c = 0; c < cascade_count; c++) {
150
+ this.#slots[c] = this.#atlas.allocate();
151
+ this.#dirty[c] = 1;
152
+ this.#build_records.push({
153
+ tile_origin: [0, 0, 0],
154
+ cascade_index: c,
155
+ corner: [0, 0, 0],
156
+ cell_size: this.#placement.cell_size(c),
157
+ tile_size: [
158
+ this.#atlas.tile_size[0],
159
+ this.#atlas.tile_size[1],
160
+ this.#atlas.tile_size[2],
161
+ ],
162
+ border: IRRADIANCE_CLIPMAP_TILE_BORDER,
163
+ });
164
+ }
165
+
166
+ this.#uniform = device.createBuffer({
167
+ label: "GPUIrradianceClipmap/table",
168
+ size: IRRADIANCE_CLIPMAP_STRUCT.size,
169
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
170
+ });
171
+ }
172
+
173
+ /**
174
+ * @returns {GPUTileAtlas3D}
175
+ */
176
+ get atlas() {
177
+ return this.#atlas;
178
+ }
179
+
180
+ /**
181
+ * @returns {GPUTextureContext}
182
+ */
183
+ get texture_y() {
184
+ return this.#atlas.texture_at(0);
185
+ }
186
+
187
+ /**
188
+ * @returns {GPUTextureContext}
189
+ */
190
+ get texture_cocg() {
191
+ return this.#atlas.texture_at(1);
192
+ }
193
+
194
+ /**
195
+ * @returns {GPUBuffer}
196
+ */
197
+ get uniform() {
198
+ return this.#uniform;
199
+ }
200
+
201
+ /**
202
+ * @returns {number}
203
+ */
204
+ get cascade_count() {
205
+ return this.#placement.cascade_count;
206
+ }
207
+
208
+ /**
209
+ * Number of voxels at each cascade window's outer faces where blending takes place.
210
+ * @returns {number}
211
+ */
212
+ get blend_skirt() {
213
+ return this.#blend_skirt;
214
+ }
215
+
216
+ /**
217
+ * @returns {IrradianceCascadePlacement}
218
+ */
219
+ get placement() {
220
+ return this.#placement;
221
+ }
222
+
223
+ /**
224
+ * Forces all cascades to rebuild on the next executed frame.
225
+ */
226
+ invalidate_all() {
227
+ this.#dirty.fill(1, 0, this.#placement.cascade_count);
228
+ }
229
+
230
+ /**
231
+ * Updates cascade window placements around `anchor` (`[x, y, z]` in world metres), detects
232
+ * warp events (`placement.moved(c)`), schedules cascade updates, and uploads the uniform table.
233
+ *
234
+ * @param {number} x
235
+ * @param {number} y
236
+ * @param {number} z
237
+ * @param {ShaderSwitchSet} [shader_switches]
238
+ */
239
+ update_placement(x, y, z, shader_switches = ShaderSwitchSet.EMPTY) {
240
+ assert.notOk(this.#destroyed, "destroyed");
241
+
242
+ const placement = this.#placement;
243
+ const count = placement.cascade_count;
244
+ const res = placement.resolution;
245
+
246
+ const indirect_mode = shader_switches.get(INDIRECT_LIGHTING);
247
+ if (indirect_mode !== this.#last_indirect_mode) {
248
+ this.#last_indirect_mode = indirect_mode;
249
+ this.#dirty.fill(1, 0, count);
250
+ }
251
+
252
+ placement.begin();
253
+ placement.place_all(x, y, z);
254
+
255
+ // Always schedule cascade 0 and the dyadic ruler cascade
256
+ this.#dirty[0] = 1;
257
+ const ruler_cascade = fluid_cascade_ruler(this.#tick, count);
258
+ if (ruler_cascade >= 0) {
259
+ this.#dirty[ruler_cascade] = 1;
260
+ }
261
+
262
+ // Force immediate update on any cascade whose window crossed a hysteretic voxel boundary (warp)
263
+ for (let c = 0; c < count; c++) {
264
+ if (placement.moved(c)) {
265
+ this.#dirty[c] = 1;
266
+ }
267
+ }
268
+
269
+ const atlas = this.#atlas;
270
+ const origin = this.#origin;
271
+ const f32 = this.#f32;
272
+ const i32 = this.#i32;
273
+
274
+ for (let c = 0; c < count; c++) {
275
+ const cx = placement.corner(c, 0);
276
+ const cy = placement.corner(c, 1);
277
+ const cz = placement.corner(c, 2);
278
+ const h = placement.cell_size(c);
279
+
280
+ const level = LEVELS + c * LEVEL_STRIDE;
281
+ i32[level + LEVEL_CORNER] = cx;
282
+ i32[level + LEVEL_CORNER + 1] = cy;
283
+ i32[level + LEVEL_CORNER + 2] = cz;
284
+ f32[level + LEVEL_CELL_SIZE] = h;
285
+ i32[level + LEVEL_SIZE] = res[0];
286
+ i32[level + LEVEL_SIZE + 1] = res[1];
287
+ i32[level + LEVEL_SIZE + 2] = res[2];
288
+
289
+ atlas.slot_origin(this.#slots[c], origin);
290
+
291
+ const cascade = CASCADES + c * CASCADE_STRIDE + CASCADE_CONTENT_ORIGIN;
292
+ f32[cascade] = origin[0] + IRRADIANCE_CLIPMAP_TILE_BORDER;
293
+ f32[cascade + 1] = origin[1] + IRRADIANCE_CLIPMAP_TILE_BORDER;
294
+ f32[cascade + 2] = origin[2] + IRRADIANCE_CLIPMAP_TILE_BORDER;
295
+
296
+ const record = this.#build_records[c];
297
+ record.tile_origin[0] = origin[0];
298
+ record.tile_origin[1] = origin[1];
299
+ record.tile_origin[2] = origin[2];
300
+ record.corner[0] = cx;
301
+ record.corner[1] = cy;
302
+ record.corner[2] = cz;
303
+ record.cell_size = h;
304
+ }
305
+
306
+ const tile = atlas.tile_size;
307
+ f32[INVERSE_ATLAS_SIZE] = 1 / (atlas.slots_x * tile[0]);
308
+ f32[INVERSE_ATLAS_SIZE + 1] = 1 / (atlas.slots_y * tile[1]);
309
+ f32[INVERSE_ATLAS_SIZE + 2] = 1 / (atlas.slots_z * tile[2]);
310
+ this.#u32[CASCADE_COUNT] = count;
311
+ f32[ANCHOR] = x;
312
+ f32[ANCHOR + 1] = y;
313
+ f32[ANCHOR + 2] = z;
314
+ f32[BLEND_SKIRT] = this.#blend_skirt;
315
+
316
+ this.#device.queue.writeBuffer(this.#uniform, 0, this.#bytes);
317
+ }
318
+
319
+ /**
320
+ * Records the world-space light cluster clipmap build and the irradiance clipmap cascade update
321
+ * passes into `graph`.
322
+ *
323
+ * Neither pass is marked a side effect, so if nothing in the frame reads `Y` or `CoCg` (e.g. a
324
+ * frame with no volumetrics and no lit particles), the frame graph culls both passes and `#dirty`
325
+ * remains set until a frame actually executes them.
326
+ *
327
+ * @param {Object} options
328
+ * @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} options.graph
329
+ * @param {import("../../camera/GPUCameraContext.js").GPUCameraContext} options.camera
330
+ * @param {import("../../scene/GPUSceneContext.js").GPUSceneContext} options.scene_ctx
331
+ * @param {number} options.shadowmap_atlas
332
+ * @param {ShaderSwitchSet} [options.shader_switches]
333
+ * @param {import("../../global_illumination/brick4/Brick4LightMap.js").Brick4LightMap} [options.brick4]
334
+ * @param {import("../../global_illumination/lpv/GPULightProbeVolume.js").GPULightProbeVolume} [options.lpv]
335
+ * @returns {{Y: number, CoCg: number, uniform: number}}
336
+ */
337
+ graph_update({
338
+ graph,
339
+ camera,
340
+ scene_ctx,
341
+ shadowmap_atlas,
342
+ shader_switches = ShaderSwitchSet.EMPTY,
343
+ brick4,
344
+ lpv,
345
+ }) {
346
+ const transform = camera?.camera?.transform;
347
+ const x = transform !== undefined ? transform.translation_x : 0;
348
+ const y = transform !== undefined ? transform.translation_y : 0;
349
+ const z = transform !== undefined ? transform.translation_z : 0;
350
+
351
+ this.update_placement(x, y, z, shader_switches);
352
+
353
+ const gr_uniform = graph_import_buffer(graph, this.#uniform, "irradiance clipmap table");
354
+ const count = this.#placement.cascade_count;
355
+ const coarsest = count - 1;
356
+ const coarsest_record = this.#build_records[coarsest];
357
+ const coarsest_h = coarsest_record.cell_size;
358
+ const border = IRRADIANCE_CLIPMAP_TILE_BORDER;
359
+ const res = this.#placement.resolution;
360
+
361
+ const coarsest_min = [
362
+ (coarsest_record.corner[0] - border) * coarsest_h,
363
+ (coarsest_record.corner[1] - border) * coarsest_h,
364
+ (coarsest_record.corner[2] - border) * coarsest_h,
365
+ ];
366
+ const coarsest_max = [
367
+ (coarsest_record.corner[0] + res[0] + border) * coarsest_h,
368
+ (coarsest_record.corner[1] + res[1] + border) * coarsest_h,
369
+ (coarsest_record.corner[2] + res[2] + border) * coarsest_h,
370
+ ];
371
+
372
+ const world_clusters = graph_build_world_light_clusters({
373
+ graph,
374
+ lights: scene_ctx.lights,
375
+ irradiance_clipmap_uniform: gr_uniform,
376
+ cascade_count: count,
377
+ coarsest_min,
378
+ coarsest_max,
379
+ });
380
+
381
+ const gr_atlas_y = graph_import_texture(graph, this.texture_y, "irradiance clipmap Y");
382
+ const gr_atlas_cocg = graph_import_texture(graph, this.texture_cocg, "irradiance clipmap CoCg");
383
+
384
+ const data = {};
385
+
386
+ const pass = graph.add(shader_irradiance_clipmap_build.descriptor.label, data, (data, resources, context) => {
387
+ if (this.#destroyed) {
388
+ return;
389
+ }
390
+
391
+ const encoder = context.encoder;
392
+ const output_Y = resources.get(data.irradiance_Y);
393
+ const output_CoCg = resources.get(data.irradiance_CoCg);
394
+ const world_cluster_lookup = resources.get(data.world_cluster_lookup);
395
+ const world_cluster_data = resources.get(data.world_cluster_data);
396
+ const shadowmap_view = resources.get(data.shadowmap_atlas).obtainView();
397
+ const sCompareLinear = context.graphics.samplers.obtain(SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR);
398
+
399
+ const tile = this.#atlas.tile_size;
400
+ const count = this.#placement.cascade_count;
401
+ const variant = shader_irradiance_clipmap_build.variant(shader_switches);
402
+
403
+ for (let c = 0; c < count; c++) {
404
+ if (this.#dirty[c] === 0) {
405
+ continue;
406
+ }
407
+
408
+ const bindings = {
409
+ build_settings: encoder.allocateTransientValueBuffer(
410
+ IRRADIANCE_CLIPMAP_BUILD_STRUCT,
411
+ this.#build_records[c],
412
+ GPUBufferUsage.UNIFORM
413
+ ),
414
+ camera: camera.buffer.buffer,
415
+ environment_sh: scene_ctx.lights.environment_sh,
416
+ light_data: scene_ctx.lights.buffer_data,
417
+ world_cluster_lookup,
418
+ world_cluster_data,
419
+ shadowmapAtlas: shadowmap_view,
420
+ sCompareLinear,
421
+ atlas_y: output_Y.obtainView(DEFAULT_RENDER_TARGET_VIEW_DESCRIPTOR),
422
+ atlas_cocg: output_CoCg.obtainView(DEFAULT_RENDER_TARGET_VIEW_DESCRIPTOR),
423
+ };
424
+
425
+ if (brick4 !== undefined) {
426
+ bindings.brick4 = brick4.buffer;
427
+ }
428
+
429
+ if (lpv !== undefined) {
430
+ bindings.lpv_lookup = lpv.buffer_mesh_bvh;
431
+ bindings.lpv_metadata = lpv.buffer_metadata;
432
+ bindings.lpv_mesh = lpv.buffer_mesh;
433
+ bindings.lpv_probes = lpv.buffer_probes;
434
+ }
435
+
436
+ encoder_prepare_shader_bindings_defaults(bindings, context, variant.descriptor.resources);
437
+
438
+ variant.dispatchThreads({
439
+ encoder,
440
+ thread_count_x: tile[0],
441
+ thread_count_y: tile[1],
442
+ thread_count_z: tile[2],
443
+ bindings,
444
+ });
445
+
446
+ this.#dirty[c] = 0;
447
+ }
448
+
449
+ this.#tick++;
450
+ });
451
+
452
+ data.world_cluster_lookup = pass.read(world_clusters.lookup);
453
+ data.world_cluster_data = pass.read(world_clusters.data);
454
+ data.shadowmap_atlas = pass.read(shadowmap_atlas);
455
+ pass.read(gr_atlas_y);
456
+ data.irradiance_Y = pass.write(gr_atlas_y);
457
+ pass.read(gr_atlas_cocg);
458
+ data.irradiance_CoCg = pass.write(gr_atlas_cocg);
459
+
460
+ // Allow the frame graph to cull the clipmap build (and upstream world cluster passes) on
461
+ // frames where neither volumetric fog nor lit particles read `Y` or `CoCg`. `#dirty` stays
462
+ // set until a surviving frame actually executes the pass.
463
+ graph.__pass_nodes[graph.__pass_nodes.length - 1].has_side_effects = false;
464
+
465
+ return {
466
+ Y: data.irradiance_Y,
467
+ CoCg: data.irradiance_CoCg,
468
+ uniform: gr_uniform,
469
+ };
470
+ }
471
+
472
+ /**
473
+ * Releases GPU resources owned by the clipmap. Safe to call twice.
474
+ */
475
+ destroy() {
476
+ if (this.#destroyed) {
477
+ return;
478
+ }
479
+
480
+ this.#destroyed = true;
481
+ this.#atlas.destroy();
482
+ this.#uniform.destroy();
483
+ }
484
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Default number of cascades in the world-space irradiance clipmap (Decision 6.3).
3
+ * Covers 8 m, 16 m, 32 m, 64 m, 128 m, 256 m at 32³ and h0 = 0.25 m.
4
+ * @type {number}
5
+ */
6
+ export const IRRADIANCE_CLIPMAP_DEFAULT_CASCADE_COUNT: number;
7
+ /**
8
+ * Maximum number of cascades supported by the irradiance clipmap table.
9
+ * @type {number}
10
+ */
11
+ export const IRRADIANCE_CLIPMAP_CASCADE_LIMIT: number;
12
+ /**
13
+ * Default resolution (cells per axis) of each irradiance clipmap cascade (Decision 6.3).
14
+ * @type {number}
15
+ */
16
+ export const IRRADIANCE_CLIPMAP_DEFAULT_RESOLUTION: number;
17
+ /**
18
+ * Default finest cascade cell size h0 in metres (25 cm, Decision 6.3).
19
+ * @type {number}
20
+ */
21
+ export const IRRADIANCE_CLIPMAP_DEFAULT_CELL_SIZE: number;
22
+ /**
23
+ * Texels of skirt on each side of a cascade's tile in the 3D atlas: 1 texel for hardware trilinear
24
+ * filtering (`tile_size = resolution + 2`).
25
+ * @type {number}
26
+ */
27
+ export const IRRADIANCE_CLIPMAP_TILE_BORDER: number;
28
+ /**
29
+ * Default blend-skirt width in voxels (cells of that cascade) at the outer faces of each cascade
30
+ * window where blending takes place. At the very outer edge of the border voxel (`edge = 0`), the
31
+ * finer cascade's weight is `0.0` (`edge_weight = 1.0`); `blend_skirt` voxels inward, the finer
32
+ * cascade's weight is `1.0` (`edge_weight = 0.0`).
33
+ * @type {number}
34
+ */
35
+ export const IRRADIANCE_CLIPMAP_DEFAULT_BLEND_SKIRT: number;
36
+ /**
37
+ * Format of the two synchronized 3D atlas textures (`Y` and `CoCg`).
38
+ * @type {GPUTextureFormat}
39
+ */
40
+ export const IRRADIANCE_CLIPMAP_TILE_FORMAT: GPUTextureFormat;
41
+ /**
42
+ * Sampler used for trilinear taps of the irradiance clipmap atlas textures.
43
+ */
44
+ export const IRRADIANCE_CLIPMAP_SAMPLER_DESCRIPTOR: Readonly<import("../../../descriptor/texture/SamplerDescriptor.js").SamplerDescriptor>;
45
+ /**
46
+ * Maximum number of point or spot lights evaluated per voxel in the irradiance clipmap build pass.
47
+ * @type {number}
48
+ */
49
+ export const IRRADIANCE_CLIPMAP_LIGHT_BUDGET: number;
50
+ //# sourceMappingURL=IRRADIANCE_CLIPMAP.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IRRADIANCE_CLIPMAP.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,uDAFU,MAAM,CAE0C;AAE1D;;;GAGG;AACH,+CAFU,MAAM,CAEoD;AAEpE;;;GAGG;AACH,oDAFU,MAAM,CAEwC;AAExD;;;GAGG;AACH,mDAFU,MAAM,CAEyC;AAEzD;;;;GAIG;AACH,6CAFU,MAAM,CAEgC;AAEhD;;;;;;GAMG;AACH,qDAFU,MAAM,CAEwC;AAExD;;;GAGG;AACH,8DAA4D;AAE5D;;GAEG;AACH,2IAA4E;AAE5E;;;GAGG;AACH,8CAFU,MAAM,CAEkC"}