@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,205 @@
1
+ import { assert } from "../../../core/assert.js";
2
+ import { hold_clip_targets, register_clips, release_clip_targets, unregister_clips } from "../register_clips.js";
3
+ import { RowChains } from "../RowChains.js";
4
+ import { write_clip_playback } from "./write_clip_playback.js";
5
+
6
+ /**
7
+ * @typedef {import("../../ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
8
+ * @typedef {import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
9
+ * @typedef {import("../../../shade/renderer/scene/Scene.js").Scene} Scene
10
+ * @typedef {import("../GraphicsEngine.js").GraphicsEngine} GraphicsEngine
11
+ * @typedef {import("./AnimationClips.js").AnimationClips} AnimationClips
12
+ */
13
+
14
+ /**
15
+ * Connects an animation driver (`AnimationSystem` or `AnimationGraphSystem`) to the scene's GPU
16
+ * context for every {@link AnimationClips} component the driver plays:
17
+ *
18
+ * - **Holds a row chain for every node the clips key** ({@link hold_clip_targets}), from the clips
19
+ * being bound until they go. A clip binds on the GPU only once every node it keys holds a row, and
20
+ * a keyed node outside every skin with nothing drawn under it is held by no other system.
21
+ * - **Registers only the clips the driver names** ({@link AnimationClips#played_slots}), and
22
+ * re-registers when that set moves or when a renderer restart replaces the GPU scene context.
23
+ * - **Pushes this tick's weights and times** from {@link AnimationClips} to
24
+ * {@link GPUAnimationManager} via {@link write_clip_playback}.
25
+ *
26
+ * @author Alex Goldring
27
+ * @copyright Company Named Limited (c) 2026
28
+ */
29
+ export class AnimationClipsSink {
30
+ /**
31
+ * @type {GraphicsEngine}
32
+ */
33
+ #graphics;
34
+
35
+ /**
36
+ * The scene whose GPU context issues the clip ids.
37
+ *
38
+ * @type {Scene}
39
+ */
40
+ #scene;
41
+
42
+ /**
43
+ * The chains of the nodes the clips key. Null until the driver has a dataset.
44
+ *
45
+ * @type {RowChains|null}
46
+ */
47
+ #chains = null;
48
+
49
+ /**
50
+ * @param {GraphicsEngine} graphics
51
+ * @param {Scene} scene
52
+ */
53
+ constructor(graphics, scene) {
54
+ assert.defined(graphics, 'graphics');
55
+ assert.equal(scene?.isScene, true, 'scene.isScene !== true');
56
+
57
+ this.#graphics = graphics;
58
+ this.#scene = scene;
59
+ }
60
+
61
+ /**
62
+ * Bind the scene to the dataset and start tracking row chains for keyed nodes.
63
+ *
64
+ * @param {EntityComponentDataset} dataset
65
+ */
66
+ startup(dataset) {
67
+ // the scene's rows are this dataset's entities; the first system to place one says so
68
+ const scene = this.#scene;
69
+
70
+ assert.ok(
71
+ scene.dataset === null || scene.dataset === undefined || scene.dataset === dataset,
72
+ 'the scene is bound to another dataset'
73
+ );
74
+
75
+ scene.dataset = dataset;
76
+
77
+ this.#chains = new RowChains(dataset);
78
+ }
79
+
80
+ /**
81
+ * Release the GPU registration and playback state of one {@link AnimationClips} during system
82
+ * shutdown, leaving row-chain teardown to {@link shutdown}.
83
+ *
84
+ * @param {AnimationClips} clips
85
+ */
86
+ unbind_on_shutdown(clips) {
87
+ this.#release_registration(clips);
88
+
89
+ clips.unbind();
90
+ }
91
+
92
+ /**
93
+ * Tear down the row chains on system shutdown.
94
+ */
95
+ shutdown() {
96
+ this.#chains.destroy();
97
+ this.#chains = null;
98
+ }
99
+
100
+ /**
101
+ * Bind the row chains to the current GPU context's rows and answer that context.
102
+ *
103
+ * No device — before the first start, and again after a stop — answers `null`. The driver's
104
+ * clocks still run; holds are recorded and acquired in whole when a context arrives.
105
+ *
106
+ * @returns {GPUSceneContext|null}
107
+ */
108
+ begin_update() {
109
+ const context = this.#graphics.scene_context(this.#scene);
110
+
111
+ // a new context after a restart is acquired in whole; until there is one, holds are recorded
112
+ this.#chains.bind(context === null ? null : context.rows);
113
+
114
+ return context;
115
+ }
116
+
117
+ /**
118
+ * Take up an entity's {@link AnimationClips}: allocate its playback buffers and hold a row chain
119
+ * for every node its channels key.
120
+ *
121
+ * Called before anything registers, so the clips bind on the GPU in the update that registers
122
+ * them.
123
+ *
124
+ * @param {AnimationClips} clips
125
+ */
126
+ bind(clips) {
127
+ if (clips.bound) {
128
+ this.release(clips);
129
+ }
130
+
131
+ clips.bind();
132
+
133
+ hold_clip_targets(this.#chains, clips.clips);
134
+ }
135
+
136
+ /**
137
+ * Let go of an entity's {@link AnimationClips}: return its GPU registration if the manager that
138
+ * issued it is still current, release the row chains held for its targets, and clear its
139
+ * playback state.
140
+ *
141
+ * @param {AnimationClips} clips
142
+ */
143
+ release(clips) {
144
+ if (!clips.bound) {
145
+ return;
146
+ }
147
+
148
+ this.#release_registration(clips);
149
+
150
+ release_clip_targets(this.#chains, clips.clips);
151
+
152
+ clips.unbind();
153
+ }
154
+
155
+ /**
156
+ * Keep the GPU registration equal to {@link AnimationClips#played_slots} on the current context,
157
+ * and write this tick's weights and times down to the animation manager.
158
+ *
159
+ * @param {AnimationClips} clips
160
+ * @param {GPUSceneContext|null} context
161
+ * @param {boolean} slots_changed whether {@link AnimationClips#played_slots} changed this tick
162
+ */
163
+ sync(clips, context, slots_changed) {
164
+ if (context === null) {
165
+ return;
166
+ }
167
+
168
+ const registration = clips.clip_registration;
169
+
170
+ if (slots_changed || registration === null || registration.context !== context) {
171
+ this.#release_registration(clips);
172
+
173
+ clips.clip_registration = register_clips(context, clips.clips, clips.played_slots);
174
+
175
+ // whatever the last registration was told is not what this one knows
176
+ clips.written.fill(-1);
177
+ }
178
+
179
+ write_clip_playback(context.animation_manager, clips);
180
+ }
181
+
182
+ /**
183
+ * Give these clips' registration back, if the manager that issued it is still the one running.
184
+ *
185
+ * **An id may only be handed back to the manager that issued it.** A renderer restart replaces
186
+ * the GPU scene context and voids every id it gave out, so a registration stamped with a context
187
+ * that is no longer current is forgotten rather than returned — returning it would corrupt a
188
+ * stranger's table.
189
+ *
190
+ * @param {AnimationClips} clips
191
+ */
192
+ #release_registration(clips) {
193
+ const registration = clips.clip_registration;
194
+
195
+ if (registration === null) {
196
+ return;
197
+ }
198
+
199
+ if (registration.context === this.#graphics.scene_context(this.#scene)) {
200
+ unregister_clips(registration);
201
+ }
202
+
203
+ clips.clip_registration = null;
204
+ }
205
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The procedural foliage wind rigs a model came with, re-addressed to one placed instance's entities.
3
+ *
4
+ * **What it is for.** {@link prefab_instantiate} puts one of these on the root of a placed foliage
5
+ * model when the prefab carries {@link Prefab#foliage_rigs}, with every joint's `target` and the
6
+ * rig's `root` rewritten from the prefab's node index to the entity that node became in the
7
+ * instance. {@link FoliageWindSystem} pairs it with a {@link Transform64} on the same entity:
8
+ * `FoliageWindRigs` is *what* aeroelastic bone rigs the tree has and their blend weight, and
9
+ * `FoliageWindSystem` registers them with {@link GPUAnimationManager} and holds their scene rows.
10
+ */
11
+ export class FoliageWindRigs {
12
+ /**
13
+ * @param {FoliageWindRig[]} [rigs]
14
+ * @param {number} [weight=1]
15
+ * @returns {FoliageWindRigs}
16
+ */
17
+ static from(rigs?: FoliageWindRig[], weight?: number): FoliageWindRigs;
18
+ /**
19
+ * Each rig's `root` and every joint's `target` are entity ids in the dataset this component
20
+ * lives in.
21
+ *
22
+ * @type {FoliageWindRig[]}
23
+ */
24
+ rigs: FoliageWindRig[];
25
+ /**
26
+ * Blend weight applied to all foliage wind rigs on this entity in `[0, 1]` (or `>= 0`). Setting
27
+ * `weight = 0` disables wind contribution in `GPUAnimationManager`'s pose accumulator.
28
+ *
29
+ * @type {number}
30
+ */
31
+ weight: number;
32
+ /**
33
+ * @readonly
34
+ * @type {boolean}
35
+ */
36
+ readonly isFoliageWindRigs: boolean;
37
+ }
38
+ export namespace FoliageWindRigs {
39
+ let typeName: string;
40
+ let serializable: boolean;
41
+ }
42
+ import { FoliageWindRig } from "../../../shade/renderer/animation/foliage/FoliageWindRig.js";
43
+ //# sourceMappingURL=FoliageWindRigs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoliageWindRigs.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/animation/FoliageWindRigs.js"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH;IAiBI;;;;OAIG;IACH,mBAJW,cAAc,EAAE,WAChB,MAAM,GACJ,eAAe,CAgB3B;IAnCD;;;;;OAKG;IACH,MAFU,cAAc,EAAE,CAEhB;IAEV;;;;;OAKG;IACH,QAFU,MAAM,CAEL;IAwBf;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAN1C;;kBAUS,MAAM;sBAMN,OAAO;;+BAjEc,6DAA6D"}
@@ -0,0 +1,69 @@
1
+ import { assert } from "../../../core/assert.js";
2
+ import { FoliageWindRig } from "../../../shade/renderer/animation/foliage/FoliageWindRig.js";
3
+
4
+ /**
5
+ * The procedural foliage wind rigs a model came with, re-addressed to one placed instance's entities.
6
+ *
7
+ * **What it is for.** {@link prefab_instantiate} puts one of these on the root of a placed foliage
8
+ * model when the prefab carries {@link Prefab#foliage_rigs}, with every joint's `target` and the
9
+ * rig's `root` rewritten from the prefab's node index to the entity that node became in the
10
+ * instance. {@link FoliageWindSystem} pairs it with a {@link Transform64} on the same entity:
11
+ * `FoliageWindRigs` is *what* aeroelastic bone rigs the tree has and their blend weight, and
12
+ * `FoliageWindSystem` registers them with {@link GPUAnimationManager} and holds their scene rows.
13
+ */
14
+ export class FoliageWindRigs {
15
+ /**
16
+ * Each rig's `root` and every joint's `target` are entity ids in the dataset this component
17
+ * lives in.
18
+ *
19
+ * @type {FoliageWindRig[]}
20
+ */
21
+ rigs = [];
22
+
23
+ /**
24
+ * Blend weight applied to all foliage wind rigs on this entity in `[0, 1]` (or `>= 0`). Setting
25
+ * `weight = 0` disables wind contribution in `GPUAnimationManager`'s pose accumulator.
26
+ *
27
+ * @type {number}
28
+ */
29
+ weight = 1;
30
+
31
+ /**
32
+ * @param {FoliageWindRig[]} [rigs]
33
+ * @param {number} [weight=1]
34
+ * @returns {FoliageWindRigs}
35
+ */
36
+ static from(rigs = [], weight = 1) {
37
+ assert.isArray(rigs, 'rigs');
38
+ assert.isNumber(weight, 'weight');
39
+
40
+ for (let i = 0; i < rigs.length; i++) {
41
+ assert.isInstanceOf(rigs[i], FoliageWindRig, `rigs[${i}]`);
42
+ }
43
+
44
+ const r = new FoliageWindRigs();
45
+
46
+ r.rigs = rigs;
47
+ r.weight = weight;
48
+
49
+ return r;
50
+ }
51
+ }
52
+
53
+ /**
54
+ * @readonly
55
+ * @type {boolean}
56
+ */
57
+ FoliageWindRigs.prototype.isFoliageWindRigs = true;
58
+
59
+ /**
60
+ * @readonly
61
+ * @type {string}
62
+ */
63
+ FoliageWindRigs.typeName = "FoliageWindRigs";
64
+
65
+ /**
66
+ * @readonly
67
+ * @type {boolean}
68
+ */
69
+ FoliageWindRigs.serializable = false;
@@ -1,26 +1,32 @@
1
1
  /**
2
- * Hand one clip list's blend down to the renderer: what each of the entity's clips weighs, and where
3
- * each of the audible ones is playing.
2
+ * @typedef {import("../../../shade/renderer/animation/GPUAnimationManager.js").GPUAnimationManager} GPUAnimationManager
3
+ * @typedef {import("./AnimationClips.js").AnimationClips} AnimationClips
4
+ */
5
+ /**
6
+ * Hand an entity's {@link AnimationClips} blend down to the renderer: what each of its playable
7
+ * clips weighs, and where each of the audible ones is playing.
4
8
  *
5
9
  * **Time is written every frame and weight only when it moves.** The clock is the reason this
6
10
  * function exists — Shade can advance a clip itself and is never asked to, because the pose gameplay
7
- * reads and the pose on the screen have to be the same one (I-4) — while a building looping one clip
8
- * has the weight it had last frame and there is nothing to say. Both calls go through the clip
9
- * table's upload dedupe, so a repeated value costs a comparison rather than a transfer; skipping the
10
- * unchanged weights is about not doing the read either.
11
+ * reads and the pose on the screen have to be the same one (I-4) — while an entity looping one clip
12
+ * or sitting in one graph state has the weights it had last frame and there is nothing to say. Both
13
+ * calls go through the clip table's upload dedupe, so a repeated value costs a comparison rather
14
+ * than a transfer; skipping the unchanged weights is about not doing the read either.
11
15
  *
12
16
  * A clip at zero weight has its time left alone. It contributes nothing wherever it is, and where it
13
17
  * is, is where it stopped.
14
18
  *
15
19
  * @param {GPUAnimationManager} manager
16
- * @param {ClipListPlayer} player
17
- * @param {ArrayLike<number>} clip_ids the manager's id for each of the entity's clips, in its
18
- * `AnimationClips`' order, or {@link CLIP_NOT_REGISTERED} for one this driver does not play. Those are
20
+ * @param {AnimationClips} clips
21
+ * @param {ArrayLike<number>} [clip_ids] the manager's id for each of the entity's clips, in
22
+ * `clips.clips`' order, or {@link CLIP_NOT_REGISTERED} for one the driver does not play. Those are
19
23
  * skipped rather than written at weight zero: an unregistered clip has no row, and it is unregistered
20
24
  * precisely so that it marks no joints (D37)
21
- * @param {Float32Array} written the weight each of those clips was last given; updated in place.
25
+ * @param {Float32Array} [written] the weight each of those clips was last given; updated in place.
22
26
  * A value no weight can take — `-1` — is how a caller says it does not know, which is the case
23
27
  * after a renderer restart
24
28
  */
25
- export function write_clip_playback(manager: GPUAnimationManager, player: ClipListPlayer, clip_ids: ArrayLike<number>, written: Float32Array): void;
29
+ export function write_clip_playback(manager: GPUAnimationManager, clips: AnimationClips, clip_ids?: ArrayLike<number>, written?: Float32Array): void;
30
+ export type GPUAnimationManager = import("../../../shade/renderer/animation/GPUAnimationManager.js").GPUAnimationManager;
31
+ export type AnimationClips = import("./AnimationClips.js").AnimationClips;
26
32
  //# sourceMappingURL=write_clip_playback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"write_clip_playback.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/animation/write_clip_playback.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,oGARW,UAAU,MAAM,CAAC,WAIjB,YAAY,QAoCtB"}
1
+ {"version":3,"file":"write_clip_playback.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/animation/write_clip_playback.js"],"names":[],"mappings":"AAGA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,6CAVW,mBAAmB,SACnB,cAAc,aACd,UAAU,MAAM,CAAC,YAIjB,YAAY,QAwCtB;kCAhEY,OAAO,0DAA0D,EAAE,mBAAmB;6BACtF,OAAO,qBAAqB,EAAE,cAAc"}
@@ -2,59 +2,68 @@ import { assert } from "../../../core/assert.js";
2
2
  import { CLIP_NOT_REGISTERED } from "../register_clips.js";
3
3
 
4
4
  /**
5
- * Hand one clip list's blend down to the renderer: what each of the entity's clips weighs, and where
6
- * each of the audible ones is playing.
5
+ * @typedef {import("../../../shade/renderer/animation/GPUAnimationManager.js").GPUAnimationManager} GPUAnimationManager
6
+ * @typedef {import("./AnimationClips.js").AnimationClips} AnimationClips
7
+ */
8
+
9
+ /**
10
+ * Hand an entity's {@link AnimationClips} blend down to the renderer: what each of its playable
11
+ * clips weighs, and where each of the audible ones is playing.
7
12
  *
8
13
  * **Time is written every frame and weight only when it moves.** The clock is the reason this
9
14
  * function exists — Shade can advance a clip itself and is never asked to, because the pose gameplay
10
- * reads and the pose on the screen have to be the same one (I-4) — while a building looping one clip
11
- * has the weight it had last frame and there is nothing to say. Both calls go through the clip
12
- * table's upload dedupe, so a repeated value costs a comparison rather than a transfer; skipping the
13
- * unchanged weights is about not doing the read either.
15
+ * reads and the pose on the screen have to be the same one (I-4) — while an entity looping one clip
16
+ * or sitting in one graph state has the weights it had last frame and there is nothing to say. Both
17
+ * calls go through the clip table's upload dedupe, so a repeated value costs a comparison rather
18
+ * than a transfer; skipping the unchanged weights is about not doing the read either.
14
19
  *
15
20
  * A clip at zero weight has its time left alone. It contributes nothing wherever it is, and where it
16
21
  * is, is where it stopped.
17
22
  *
18
23
  * @param {GPUAnimationManager} manager
19
- * @param {ClipListPlayer} player
20
- * @param {ArrayLike<number>} clip_ids the manager's id for each of the entity's clips, in its
21
- * `AnimationClips`' order, or {@link CLIP_NOT_REGISTERED} for one this driver does not play. Those are
24
+ * @param {AnimationClips} clips
25
+ * @param {ArrayLike<number>} [clip_ids] the manager's id for each of the entity's clips, in
26
+ * `clips.clips`' order, or {@link CLIP_NOT_REGISTERED} for one the driver does not play. Those are
22
27
  * skipped rather than written at weight zero: an unregistered clip has no row, and it is unregistered
23
28
  * precisely so that it marks no joints (D37)
24
- * @param {Float32Array} written the weight each of those clips was last given; updated in place.
29
+ * @param {Float32Array} [written] the weight each of those clips was last given; updated in place.
25
30
  * A value no weight can take — `-1` — is how a caller says it does not know, which is the case
26
31
  * after a renderer restart
27
32
  */
28
- export function write_clip_playback(manager, player, clip_ids, written) {
33
+ export function write_clip_playback(
34
+ manager,
35
+ clips,
36
+ clip_ids = clips.clip_registration.ids,
37
+ written = clips.written
38
+ ) {
29
39
  assert.defined(manager, 'manager');
30
- assert.defined(player, 'player');
40
+ assert.defined(clips, 'clips');
31
41
 
32
- const weights = player.weights;
42
+ const weights = clips.weights;
43
+ const times = clips.times;
44
+ const played = clips.played_slots;
33
45
 
34
46
  assert.equal(clip_ids.length, weights.length, 'clip_ids.length');
35
47
  assert.equal(written.length, weights.length, 'written.length');
36
48
 
37
- for (let i = 0; i < weights.length; i++) {
38
- if (clip_ids[i] === CLIP_NOT_REGISTERED) {
49
+ for (let i = 0; i < played.length; i++) {
50
+ const slot = played[i];
51
+ const clip_id = clip_ids[slot];
52
+
53
+ if (clip_id === CLIP_NOT_REGISTERED) {
39
54
  continue;
40
55
  }
41
56
 
42
- const weight = weights[i];
57
+ const weight = weights[slot];
43
58
 
44
- if (weight !== written[i]) {
45
- manager.set_playback_weight(clip_ids[i], weight);
59
+ if (weight !== written[slot]) {
60
+ manager.set_playback_weight(clip_id, weight);
46
61
 
47
- written[i] = weight;
62
+ written[slot] = weight;
48
63
  }
49
- }
50
-
51
- const playbacks = player.playbacks;
52
-
53
- for (let i = 0; i < playbacks.length; i++) {
54
- const playback = playbacks[i];
55
64
 
56
- if (playback.weight > 0) {
57
- manager.set_time(clip_ids[playback.slot], playback.time);
65
+ if (weight > 0) {
66
+ manager.set_time(clip_id, times[slot]);
58
67
  }
59
68
  }
60
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GPUDecalRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/GPUDecalRenderer.js"],"names":[],"mappings":"AA4CA;;;;;;;GAOG;AACH;IA6BI;;;;;;;;;;;OAWG;IACH;QAP8B,KAAK;QACL,OAAO,EAA1B,YAAY;QACC,YAAY,EAAzB,MAAM;QACU,YAAY;QACZ,YAAY;QACZ,SAAS;aAuBnC;IAgPD,gBAoBC;;CACJ"}
1
+ {"version":3,"file":"GPUDecalRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/GPUDecalRenderer.js"],"names":[],"mappings":"AA4CA;;;;;;;GAOG;AACH;IA6BI;;;;;;;;;;;OAWG;IACH;QAP8B,KAAK;QACL,OAAO,EAA1B,YAAY;QACC,YAAY,EAAzB,MAAM;QACU,YAAY;QACZ,YAAY;QACZ,SAAS;aAuBnC;IAkPD,gBAoBC;;CACJ"}
@@ -7,7 +7,7 @@ import { TextureViewDescriptor } from "../../../shade/descriptor/texture/Texture
7
7
  import { TextureResourceDescriptor } from "../../../shade/device/graph/TextureResourceDescriptor.js";
8
8
  import { G_BUFFER_ALBEDO_FORMAT } from "../../../shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.js";
9
9
  import { TextureFilterType } from "../../../shade/renderer/texture/TextureFilterType.js";
10
- import { SAMPLER_LINEAR_UPSCALE } from "../../../shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js";
10
+ import { SAMPLER_ANISOTROPIC_CLAMP } from "../../../shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js";
11
11
  import { graph_build_decal_clusters } from "./graph_build_decal_clusters.js";
12
12
  import { DECAL_RECORD_WORD_COUNT } from "./DECAL_GPU_RECORD.js";
13
13
  import { shader_decal_composite } from "./shader_decal_composite.js";
@@ -138,7 +138,7 @@ export class GPUDecalRenderer {
138
138
  const data = {};
139
139
 
140
140
  const pass = graph.add('decals / composite', data, (data, resources, execution) => {
141
- this.#execute(data, resources, execution, camera, cluster_params, resolution);
141
+ this.#execute(data, resources, execution, frame.view, cluster_params, resolution);
142
142
  });
143
143
 
144
144
  data.depth = pass.read(frame.get(ViewTextures).depth);
@@ -182,11 +182,12 @@ export class GPUDecalRenderer {
182
182
  * @param data
183
183
  * @param {FramePassResources} resources
184
184
  * @param {GraphicsExecutionContext} context
185
- * @param {GPUCameraContext} camera
185
+ * @param {GPUViewContext} view_context
186
186
  * @param {number[]} cluster_params
187
187
  * @param {number[]} resolution
188
188
  */
189
- #execute(data, resources, context, camera, cluster_params, resolution) {
189
+ #execute(data, resources, context, view_context, cluster_params, resolution) {
190
+ const camera = view_context.camera;
190
191
  const encoder = context.encoder;
191
192
  const graphics = context.graphics;
192
193
 
@@ -197,7 +198,7 @@ export class GPUDecalRenderer {
197
198
  distance_max: camera.camera.far,
198
199
  };
199
200
 
200
- const sampler = graphics.samplers.obtain(SAMPLER_LINEAR_UPSCALE);
201
+ const sampler = graphics.samplers.obtain(SAMPLER_ANISOTROPIC_CLAMP);
201
202
 
202
203
  /**
203
204
  * @param {number} handle
@@ -217,7 +218,8 @@ export class GPUDecalRenderer {
217
218
  shader_decal_composite.draw({
218
219
  encoder,
219
220
  bindings: {
220
- camera: camera.buffer,
221
+ camera: camera.buffer,
222
+ view: view_context.uniform_buffer.buffer,
221
223
  settings,
222
224
  gBufferPBR: view(data.in_pbr),
223
225
  gBufferNormal: view(data.in_normal),
@@ -1 +1 @@
1
- {"version":3,"file":"shader_decal_composite.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_decal_composite.js"],"names":[],"mappings":"AA8DA,oDAKG;AAqSH;;;;;;;;;;;;GAYG;AACH,qCAFU,WAAW,CAclB;6BAtV0B,qDAAqD;4BAPtD,+CAA+C"}
1
+ {"version":3,"file":"shader_decal_composite.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_decal_composite.js"],"names":[],"mappings":"AAgEA,oDAKG;AAySH;;;;;;;;;;;;GAYG;AACH,qCAFU,WAAW,CAclB;6BA1V0B,qDAAqD;4BAPtD,+CAA+C"}
@@ -1,4 +1,6 @@
1
- import { CAMERA_UNIFORM_STRUCT } from "../../../shade/renderer/camera/CAMERA_UNIFORM_STRUCT.js";
1
+ import { CAMERA_UNIFORM_STRUCT } from "../../../shade/renderer/camera/CAMERA_UNIFORM_STRUCT.js";
2
+ import { VIEW_UNIFORM_STRUCT } from "../../../shade/renderer/view/VIEW_UNIFORM_STRUCT.js";
3
+ import { chunk_view_mip_bias } from "../../../shade/renderer/view/chunk_view_mip_bias.js";
2
4
  import { G_BUFFER_ALBEDO_FORMAT } from "../../../shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.js";
3
5
  import {
4
6
  chunk_cluster_depth_to_z_slice
@@ -73,7 +75,8 @@ const resources = new ShaderResourceSetDescriptor();
73
75
  resources.setImmediate("settings", DECAL_COMPOSITE_SETTINGS);
74
76
 
75
77
  resources.createGroup()
76
- .addUniform("camera", CAMERA_UNIFORM_STRUCT);
78
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT)
79
+ .addUniform("view", VIEW_UNIFORM_STRUCT);
77
80
 
78
81
  /*
79
82
  The two integer targets are declared as such, exactly as `shader_deferred_main` declares the same
@@ -243,6 +246,8 @@ fn main(
243
246
  var normal = shading_normal;
244
247
  var emissive = rgbe9995_decode(old_emissive);
245
248
 
249
+ let uv_bias = view_uv_derivative_bias(view.upscale_ratio);
250
+
246
251
  for (var i = 0u; i < metadata.count; i++) {
247
252
  let decal_index = cluster_data[metadata.offset + i];
248
253
 
@@ -274,8 +279,8 @@ fn main(
274
279
  let local_x = (inverse * vec4<f32>(position_x, 1.0)).xy;
275
280
  let local_y = (inverse * vec4<f32>(position_y, 1.0)).xy;
276
281
 
277
- let duv_dx = local_x - local.xy;
278
- let duv_dy = local_y - local.xy;
282
+ let duv_dx = (local_x - local.xy) * uv_bias.x;
283
+ let duv_dy = (local_y - local.xy) * uv_bias.y;
279
284
 
280
285
  let lod = decal_vec4(decal_index, ${DECAL_RECORD_OFFSET_LOD}u);
281
286
 
@@ -354,7 +359,8 @@ fn main(
354
359
  chunk_rgbe9995_encode,
355
360
  chunk_light_cluster_resolution_xy_from_screen,
356
361
  chunk_cluster_depth_to_z_slice,
357
- chunk_grid3d_to_index
362
+ chunk_grid3d_to_index,
363
+ chunk_view_mip_bias
358
364
  ]
359
365
  );
360
366
 
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Collect what every animation driver is playing on an entity, in the form the
3
- * CPU pose evaluator takes.
2
+ * Collect what is playing on an entity, in the form the CPU pose evaluator
3
+ * takes.
4
4
  *
5
- * Both drivers are asked because either may be the one driving it — a combat
6
- * unit runs a state machine, a building runs a clip list — and an entity has
7
- * one of them, so the two sets do not overlap in practice. What they hand back
8
- * is one entry per clip of the model, silent clips included, because that is
9
- * what the GPU's accumulator is summing.
5
+ * Whichever animation driver is running (`AnimationSystem` for a clip list,
6
+ * `AnimationGraphSystem` for a state machine) writes this tick's weights and
7
+ * times into the entity's {@link AnimationClips} sink. What it hands back is
8
+ * one entry per clip the driver plays, silent clips included, because that is
9
+ * what the GPU's accumulator is summing (D37).
10
10
  *
11
11
  * A free function rather than a private helper of
12
12
  * {@link query_entity_node_world_pose} because M3 gave it a second caller:
@@ -1 +1 @@
1
- {"version":3,"file":"collect_entity_playbacks.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/pose/collect_entity_playbacks.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,iDARW,cAAc,yCAEd,MAAM,GACJ,IAAI,CAiBhB"}
1
+ {"version":3,"file":"collect_entity_playbacks.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/pose/collect_entity_playbacks.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,iDARW,cAAc,yCAEd,MAAM,GACJ,IAAI,CAiBhB"}
@@ -1,15 +1,14 @@
1
- import { AnimationGraphSystem } from "../AnimationGraphSystem.js";
2
- import { AnimationSystem } from "../AnimationSystem.js";
1
+ import { AnimationClips } from "../animation/AnimationClips.js";
3
2
 
4
3
  /**
5
- * Collect what every animation driver is playing on an entity, in the form the
6
- * CPU pose evaluator takes.
4
+ * Collect what is playing on an entity, in the form the CPU pose evaluator
5
+ * takes.
7
6
  *
8
- * Both drivers are asked because either may be the one driving it — a combat
9
- * unit runs a state machine, a building runs a clip list — and an entity has
10
- * one of them, so the two sets do not overlap in practice. What they hand back
11
- * is one entry per clip of the model, silent clips included, because that is
12
- * what the GPU's accumulator is summing.
7
+ * Whichever animation driver is running (`AnimationSystem` for a clip list,
8
+ * `AnimationGraphSystem` for a state machine) writes this tick's weights and
9
+ * times into the entity's {@link AnimationClips} sink. What it hands back is
10
+ * one entry per clip the driver plays, silent clips included, because that is
11
+ * what the GPU's accumulator is summing (D37).
13
12
  *
14
13
  * A free function rather than a private helper of
15
14
  * {@link query_entity_node_world_pose} because M3 gave it a second caller:
@@ -26,15 +25,15 @@ import { AnimationSystem } from "../AnimationSystem.js";
26
25
  * @copyright Company Named Limited (c) 2026
27
26
  */
28
27
  export function collect_entity_playbacks(target, entity_manager, entity) {
29
- const graphs = entity_manager.getSystem(AnimationGraphSystem);
28
+ const dataset = entity_manager.dataset;
30
29
 
31
- if (graphs !== null) {
32
- graphs.write_pose_playbacks(target, entity);
30
+ if (dataset === null || entity < 0 || !dataset.entityExists(entity)) {
31
+ return;
33
32
  }
34
33
 
35
- const clips = entity_manager.getSystem(AnimationSystem);
34
+ const clips = dataset.getComponent(entity, AnimationClips);
36
35
 
37
- if (clips !== null) {
38
- clips.write_pose_playbacks(target, entity);
36
+ if (clips !== undefined) {
37
+ clips.write_pose_playbacks(target);
39
38
  }
40
39
  }