@woosh/meep-engine 3.51.0 → 3.53.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 (433) hide show
  1. package/package.json +1 -1
  2. package/src/engine/ecs/animation/Animation.d.ts +4 -25
  3. package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
  4. package/src/engine/ecs/animation/Animation.js +9 -41
  5. package/src/engine/ecs/ik/IKGoalSystem.d.ts +4 -5
  6. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
  7. package/src/engine/ecs/ik/IKGoalSystem.js +4 -6
  8. package/src/engine/graphics/ecs/mesh/assetTypeByPath.js +1 -1
  9. package/src/engine/graphics3/AnimationGraphSystem.d.ts +9 -22
  10. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  11. package/src/engine/graphics3/AnimationGraphSystem.js +58 -203
  12. package/src/engine/graphics3/AnimationSystem.d.ts +7 -18
  13. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  14. package/src/engine/graphics3/AnimationSystem.js +62 -243
  15. package/src/engine/graphics3/FoliageWindSystem.d.ts +67 -0
  16. package/src/engine/graphics3/FoliageWindSystem.d.ts.map +1 -0
  17. package/src/engine/graphics3/FoliageWindSystem.js +257 -0
  18. package/src/engine/graphics3/GPUFluidSystem.d.ts +7 -0
  19. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  20. package/src/engine/graphics3/GPUFluidSystem.js +39 -1
  21. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -1
  22. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  23. package/src/engine/graphics3/GPUParticleEmitterSystem.js +19 -5
  24. package/src/engine/graphics3/animation/AnimationClips.d.ts +107 -13
  25. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  26. package/src/engine/graphics3/animation/AnimationClips.js +207 -10
  27. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts +89 -0
  28. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts.map +1 -0
  29. package/src/engine/graphics3/animation/AnimationClipsSink.js +205 -0
  30. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts +43 -0
  31. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts.map +1 -0
  32. package/src/engine/graphics3/animation/FoliageWindRigs.js +69 -0
  33. package/src/engine/graphics3/animation/write_clip_playback.d.ts +17 -11
  34. package/src/engine/graphics3/animation/write_clip_playback.d.ts.map +1 -1
  35. package/src/engine/graphics3/animation/write_clip_playback.js +36 -27
  36. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  37. package/src/engine/graphics3/decal/GPUDecalRenderer.js +8 -6
  38. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  39. package/src/engine/graphics3/decal/shader_decal_composite.js +11 -5
  40. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts +7 -7
  41. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts.map +1 -1
  42. package/src/engine/graphics3/pose/collect_entity_playbacks.js +14 -15
  43. package/src/engine/graphics3/prefab/Prefab.d.ts +6 -0
  44. package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -1
  45. package/src/engine/graphics3/prefab/Prefab.js +169 -162
  46. package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -1
  47. package/src/engine/graphics3/prefab/prefab_compile.js +369 -334
  48. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
  49. package/src/engine/graphics3/prefab/prefab_instantiate.js +43 -2
  50. package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +2 -2
  51. package/src/engine/physics/ecs/ContactProbeSystem.d.ts +2 -3
  52. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
  53. package/src/engine/physics/ecs/ContactProbeSystem.js +2 -4
  54. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  55. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +4 -4
  56. package/src/engine/sound/simulation/README.md +1 -1
  57. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts +22 -8
  58. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts.map +1 -1
  59. package/src/engine/sound/simulation/probe/bakeProbeField.js +60 -15
  60. package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
  61. package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +19 -23
  62. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +63 -17
  63. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -1
  64. package/src/engine/sound/simulation/probe/probe_sdf_grid.js +67 -17
  65. package/src/generation/foliage/FOLIAGE_DESIGN.md +318 -0
  66. package/src/generation/foliage/FOLIAGE_PLAN.md +198 -0
  67. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +20 -0
  68. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -0
  69. package/src/generation/foliage/animation/build_tree_wind_rig.js +108 -0
  70. package/src/generation/foliage/asset/TreeAsset.d.ts +86 -0
  71. package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -0
  72. package/src/generation/foliage/asset/TreeAsset.js +111 -0
  73. package/src/generation/foliage/asset/TreeLODAsset.d.ts +115 -0
  74. package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -0
  75. package/src/generation/foliage/asset/TreeLODAsset.js +346 -0
  76. package/src/generation/foliage/asset/generate_tree.d.ts +15 -0
  77. package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -0
  78. package/src/generation/foliage/asset/generate_tree.js +93 -0
  79. package/src/generation/foliage/asset/place_tree.d.ts +82 -0
  80. package/src/generation/foliage/asset/place_tree.d.ts.map +1 -0
  81. package/src/generation/foliage/asset/place_tree.js +194 -0
  82. package/src/generation/foliage/config/BarkMaterialConfig.d.ts +120 -0
  83. package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -0
  84. package/src/generation/foliage/config/BarkMaterialConfig.js +250 -0
  85. package/src/generation/foliage/config/BranchLevelConfig.d.ts +288 -0
  86. package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +1 -0
  87. package/src/generation/foliage/config/BranchLevelConfig.js +536 -0
  88. package/src/generation/foliage/config/CrownConfig.d.ts +100 -0
  89. package/src/generation/foliage/config/CrownConfig.d.ts.map +1 -0
  90. package/src/generation/foliage/config/CrownConfig.js +186 -0
  91. package/src/generation/foliage/config/CrownEnvelopeType.d.ts +16 -0
  92. package/src/generation/foliage/config/CrownEnvelopeType.d.ts.map +1 -0
  93. package/src/generation/foliage/config/CrownEnvelopeType.js +17 -0
  94. package/src/generation/foliage/config/FoliageCardType.d.ts +12 -0
  95. package/src/generation/foliage/config/FoliageCardType.d.ts.map +1 -0
  96. package/src/generation/foliage/config/FoliageCardType.js +18 -0
  97. package/src/generation/foliage/config/FoliageConfig.d.ts +151 -0
  98. package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -0
  99. package/src/generation/foliage/config/FoliageConfig.js +283 -0
  100. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +90 -0
  101. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -0
  102. package/src/generation/foliage/config/FoliageMaterialConfig.js +181 -0
  103. package/src/generation/foliage/config/PhyllotaxisMode.d.ts +13 -0
  104. package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -0
  105. package/src/generation/foliage/config/PhyllotaxisMode.js +20 -0
  106. package/src/generation/foliage/config/TreeLODConfig.d.ts +87 -0
  107. package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -0
  108. package/src/generation/foliage/config/TreeLODConfig.js +211 -0
  109. package/src/generation/foliage/config/TreePreset.d.ts +16 -0
  110. package/src/generation/foliage/config/TreePreset.d.ts.map +1 -0
  111. package/src/generation/foliage/config/TreePreset.js +17 -0
  112. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +109 -0
  113. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -0
  114. package/src/generation/foliage/config/TreeSpeciesConfig.js +400 -0
  115. package/src/generation/foliage/config/TreeWindConfig.d.ts +84 -0
  116. package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -0
  117. package/src/generation/foliage/config/TreeWindConfig.js +157 -0
  118. package/src/generation/foliage/index.d.ts +38 -0
  119. package/src/generation/foliage/index.d.ts.map +1 -0
  120. package/src/generation/foliage/index.js +43 -0
  121. package/src/generation/foliage/material/make_bark_material.d.ts +37 -0
  122. package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -0
  123. package/src/generation/foliage/material/make_bark_material.js +802 -0
  124. package/src/generation/foliage/material/make_foliage_material.d.ts +14 -0
  125. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -0
  126. package/src/generation/foliage/material/make_foliage_material.js +359 -0
  127. package/src/generation/foliage/mesh/branch_collar_project.d.ts +42 -0
  128. package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -0
  129. package/src/generation/foliage/mesh/branch_collar_project.js +203 -0
  130. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +35 -0
  131. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts.map +1 -0
  132. package/src/generation/foliage/mesh/branch_ring_triangulate.js +72 -0
  133. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +80 -0
  134. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -0
  135. package/src/generation/foliage/mesh/foliage_collect_attachments.js +502 -0
  136. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts +19 -0
  137. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts.map +1 -0
  138. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.js +150 -0
  139. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts +55 -0
  140. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -0
  141. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1047 -0
  142. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +21 -0
  143. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -0
  144. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +415 -0
  145. package/src/generation/foliage/presets/make_tree_species_preset.d.ts +13 -0
  146. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -0
  147. package/src/generation/foliage/presets/make_tree_species_preset.js +837 -0
  148. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +443 -0
  149. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -0
  150. package/src/generation/foliage/skeleton/TreeSkeleton.js +1100 -0
  151. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts +27 -0
  152. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts.map +1 -0
  153. package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -0
  154. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts +32 -0
  155. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts.map +1 -0
  156. package/src/generation/foliage/skeleton/spine_frame_double_reflection.js +87 -0
  157. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +33 -0
  158. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -0
  159. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +205 -0
  160. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +14 -0
  161. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -0
  162. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +179 -0
  163. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +18 -0
  164. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -0
  165. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1104 -0
  166. package/src/shade/playground/additive_blending/index.html +197 -0
  167. package/src/shade/playground/additive_blending/main.d.ts +2 -0
  168. package/src/shade/playground/additive_blending/main.d.ts.map +1 -0
  169. package/src/shade/playground/additive_blending/main.js +529 -0
  170. package/src/shade/playground/foliage_wind/README.md +18 -0
  171. package/src/shade/playground/foliage_wind/foliage_world.d.ts +127 -0
  172. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -0
  173. package/src/shade/playground/foliage_wind/foliage_world.js +593 -0
  174. package/src/shade/playground/foliage_wind/index.html +254 -0
  175. package/src/shade/playground/foliage_wind/main.d.ts +2 -0
  176. package/src/shade/playground/foliage_wind/main.d.ts.map +1 -0
  177. package/src/shade/playground/foliage_wind/main.js +263 -0
  178. package/src/shade/playground/tonemap_sdr/README.md +5 -3
  179. package/src/shade/renderer/Renderer.d.ts +1 -1
  180. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  181. package/src/shade/renderer/Renderer.js +88 -31
  182. package/src/shade/renderer/ShadeToneMappingMode.d.ts +3 -2
  183. package/src/shade/renderer/ShadeToneMappingMode.js +15 -4
  184. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +145 -0
  185. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +9 -1
  186. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
  187. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +53 -1
  188. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts +8 -0
  189. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts.map +1 -0
  190. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.js +71 -0
  191. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts +11 -0
  192. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts.map +1 -0
  193. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.js +32 -0
  194. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +30 -3
  195. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  196. package/src/shade/renderer/animation/GPUAnimationManager.js +532 -79
  197. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +19 -12
  198. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  199. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +20 -13
  200. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +35 -8
  201. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  202. package/src/shade/renderer/animation/ShadeAnimationClip.js +433 -2
  203. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  204. package/src/shade/renderer/animation/chunk_pose_accumulator.js +40 -32
  205. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +97 -0
  206. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -0
  207. package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +161 -0
  208. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts +65 -0
  209. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts.map +1 -0
  210. package/src/shade/renderer/animation/foliage/FoliageWindRig.js +89 -0
  211. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts +19 -0
  212. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -0
  213. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +143 -0
  214. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts +14 -0
  215. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts.map +1 -0
  216. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js +116 -0
  217. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  218. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +39 -29
  219. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +37 -37
  220. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
  221. package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts +38 -0
  222. package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts.map +1 -0
  223. package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.js +97 -0
  224. package/src/shade/renderer/deferred/{TonemapDisplaySettings.d.ts → tonemap/TonemapDisplaySettings.d.ts} +1 -1
  225. package/src/shade/renderer/deferred/tonemap/TonemapDisplaySettings.d.ts.map +1 -0
  226. package/src/shade/renderer/deferred/{TonemapDisplaySettings.js → tonemap/TonemapDisplaySettings.js} +5 -5
  227. package/src/shade/renderer/deferred/{shader_tonemap_HDR.d.ts → tonemap/shader_tonemap_HDR.d.ts} +1 -1
  228. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR.d.ts.map +1 -0
  229. package/src/shade/renderer/deferred/{shader_tonemap_HDR.js → tonemap/shader_tonemap_HDR.js} +9 -9
  230. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts +17 -0
  231. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts.map +1 -0
  232. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.js +101 -0
  233. package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.d.ts → tonemap/shader_tonemap_HDR_none.d.ts} +1 -1
  234. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_none.d.ts.map +1 -0
  235. package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.js → tonemap/shader_tonemap_HDR_none.js} +6 -6
  236. package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.d.ts → tonemap/shader_tonemap_HDR_pbr_neutral.d.ts} +1 -1
  237. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
  238. package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.js → tonemap/shader_tonemap_HDR_pbr_neutral.js} +8 -8
  239. package/src/shade/renderer/deferred/{shader_tonemap_LDR.d.ts → tonemap/shader_tonemap_LDR.d.ts} +1 -1
  240. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR.d.ts.map +1 -0
  241. package/src/shade/renderer/deferred/{shader_tonemap_LDR.js → tonemap/shader_tonemap_LDR.js} +10 -10
  242. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts +10 -0
  243. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts.map +1 -0
  244. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.js +77 -0
  245. package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.d.ts → tonemap/shader_tonemap_LDR_none.d.ts} +1 -1
  246. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_none.d.ts.map +1 -0
  247. package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.js → tonemap/shader_tonemap_LDR_none.js} +7 -7
  248. package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.d.ts → tonemap/shader_tonemap_LDR_pbr_neutral.d.ts} +1 -1
  249. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
  250. package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.js → tonemap/shader_tonemap_LDR_pbr_neutral.js} +8 -8
  251. package/src/shade/renderer/extension/RenderExtension.d.ts +7 -0
  252. package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
  253. package/src/shade/renderer/extension/RenderExtension.js +9 -0
  254. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +6 -0
  255. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
  256. package/src/shade/renderer/extension/RenderExtensionRegistry.js +15 -0
  257. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +10 -3
  258. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  259. package/src/shade/renderer/fluid/GPUFluidCascade.js +15 -0
  260. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +8 -1
  261. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  262. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +11 -0
  263. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  264. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +51 -48
  265. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  266. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -0
  267. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  268. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +16 -0
  269. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
  270. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +15 -3
  271. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
  272. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +102 -96
  273. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +12 -12
  274. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +12 -12
  275. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +8 -1
  276. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
  277. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +16 -0
  278. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +7 -0
  279. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  280. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +10 -0
  281. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  282. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +2 -2
  283. package/src/shade/renderer/loader/SceneBundle.d.ts +7 -0
  284. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  285. package/src/shade/renderer/loader/SceneBundle.js +119 -111
  286. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  287. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +4 -0
  288. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  289. package/src/shade/renderer/material/standard/fragment_gbuffer.js +6 -5
  290. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +8 -7
  291. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  292. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -8
  293. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  294. package/src/shade/renderer/particles/GPUParticleSystem.js +3 -1
  295. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  296. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +9 -4
  297. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  298. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  299. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +9 -7
  300. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.d.ts.map +1 -1
  301. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.js +15 -7
  302. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
  303. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +6 -4
  304. package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +3 -3
  305. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
  306. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +8 -5
  307. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  308. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +4 -3
  309. package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +160 -0
  310. package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +5 -1
  311. package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +15 -5
  312. package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts +41 -0
  313. package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts.map +1 -0
  314. package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.js +692 -0
  315. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts +25 -0
  316. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts.map +1 -0
  317. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.js +446 -0
  318. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +22 -0
  319. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -0
  320. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +68 -0
  321. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +32 -0
  322. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts.map +1 -0
  323. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +163 -0
  324. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +10 -3
  325. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -1
  326. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +12 -4
  327. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1 -1
  328. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts +9 -0
  329. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts.map +1 -0
  330. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js +17 -0
  331. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts +8 -0
  332. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts.map +1 -1
  333. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js +28 -20
  334. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts +8 -0
  335. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts.map +1 -0
  336. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js +15 -0
  337. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts +21 -0
  338. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts.map +1 -0
  339. package/src/shade/renderer/view/chunk_view_mip_bias.js +44 -0
  340. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
  341. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  342. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +105 -26
  343. package/src/engine/graphics/composit/CompositingStages.d.ts +0 -6
  344. package/src/engine/graphics/composit/CompositingStages.d.ts.map +0 -1
  345. package/src/engine/graphics/composit/CompositingStages.js +0 -8
  346. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +0 -7
  347. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +0 -1
  348. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +0 -24
  349. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts +0 -8
  350. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts.map +0 -1
  351. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.js +0 -17
  352. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +0 -8
  353. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +0 -1
  354. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +0 -60
  355. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +0 -7
  356. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +0 -1
  357. package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +0 -26
  358. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +0 -7
  359. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +0 -1
  360. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +0 -23
  361. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +0 -7
  362. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +0 -1
  363. package/src/engine/graphics/geometry/instancing/geometry_copy.js +0 -15
  364. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts +0 -2
  365. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts.map +0 -1
  366. package/src/engine/graphics/geometry/instancing/rewriteMaterial.js +0 -57
  367. package/src/engine/graphics/geometry/ribbon/Quad.d.ts +0 -96
  368. package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +0 -1
  369. package/src/engine/graphics/geometry/ribbon/Quad.js +0 -213
  370. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +0 -9
  371. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +0 -1
  372. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +0 -12
  373. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +0 -10
  374. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +0 -1
  375. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +0 -17
  376. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +0 -10
  377. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +0 -1
  378. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +0 -13
  379. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +0 -11
  380. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +0 -1
  381. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +0 -24
  382. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts +0 -6
  383. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts.map +0 -1
  384. package/src/engine/graphics/geometry/ribbon/rotateRibbon.js +0 -37
  385. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts +0 -9
  386. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts.map +0 -1
  387. package/src/engine/graphics/geometry/ribbon/updateTipPosition.js +0 -52
  388. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts +0 -8
  389. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts.map +0 -1
  390. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.js +0 -54
  391. package/src/engine/graphics/render/RenderPassType.d.ts +0 -6
  392. package/src/engine/graphics/render/RenderPassType.d.ts.map +0 -1
  393. package/src/engine/graphics/render/RenderPassType.js +0 -8
  394. package/src/engine/graphics/render/layers/RenderLayer.d.ts +0 -78
  395. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +0 -1
  396. package/src/engine/graphics/render/layers/RenderLayer.js +0 -95
  397. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts +0 -72
  398. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +0 -1
  399. package/src/engine/graphics/render/layers/RenderLayerManager.js +0 -160
  400. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts +0 -18
  401. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +0 -1
  402. package/src/engine/graphics/render/layers/RenderLayerManagerState.js +0 -48
  403. package/src/engine/graphics/render/layers/RenderLayerState.d.ts +0 -18
  404. package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +0 -1
  405. package/src/engine/graphics/render/layers/RenderLayerState.js +0 -27
  406. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts +0 -8
  407. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +0 -1
  408. package/src/engine/graphics/render/layers/RenderLayerUtils.js +0 -103
  409. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts +0 -10
  410. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts.map +0 -1
  411. package/src/engine/graphics/render/make_bvh_visibility_builder.js +0 -64
  412. package/src/engine/graphics/render/view/CameraViewFlags.d.ts +0 -7
  413. package/src/engine/graphics/render/view/CameraViewFlags.d.ts.map +0 -1
  414. package/src/engine/graphics/render/view/CameraViewFlags.js +0 -9
  415. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +0 -143
  416. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +0 -1
  417. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +0 -328
  418. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +0 -39
  419. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +0 -1
  420. package/src/engine/graphics/render/visibility/VisibilityComputer.js +0 -80
  421. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +0 -29
  422. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +0 -1
  423. package/src/engine/graphics/render/visibility/VisibilityFilter.js +0 -37
  424. package/src/engine/graphics3/animation/write_graph_playback.d.ts +0 -24
  425. package/src/engine/graphics3/animation/write_graph_playback.d.ts.map +0 -1
  426. package/src/engine/graphics3/animation/write_graph_playback.js +0 -48
  427. package/src/shade/renderer/deferred/TonemapDisplaySettings.d.ts.map +0 -1
  428. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +0 -1
  429. package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +0 -1
  430. package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +0 -1
  431. package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +0 -1
  432. package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +0 -1
  433. package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +0 -1
@@ -0,0 +1,257 @@
1
+ import { assert } from "../../core/assert.js";
2
+ import { System } from "../ecs/System.js";
3
+ import { Transform64 } from "../ecs/transform/Transform64.js";
4
+ import { FoliageWindRigs } from "./animation/FoliageWindRigs.js";
5
+ import { RowChains } from "./RowChains.js";
6
+
7
+ /**
8
+ * @typedef {import("../../shade/ShadeGraphicsEngine.js").ShadeGraphicsEngine} ShadeGraphicsEngine
9
+ * @typedef {import("../../shade/PublicScene.js").PublicScene} PublicScene
10
+ * @typedef {import("../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
11
+ * @typedef {import("../../shade/renderer/animation/foliage/FoliageWindRig.js").FoliageWindRig} FoliageWindRig
12
+ */
13
+
14
+ /**
15
+ * @typedef {object} FoliageWindEntry
16
+ * @property {FoliageWindRigs} component
17
+ * @property {FoliageWindRig[]} rigs
18
+ * @property {GPUSceneContext|null} context
19
+ * @property {Int32Array|null} rig_ids
20
+ * @property {number} written_weight
21
+ */
22
+
23
+ /**
24
+ * Registers every entity carrying {@link FoliageWindRigs} with the scene's
25
+ * {@link GPUAnimationManager}, so that procedural foliage skeletons deform in real time under
26
+ * the scene's 3D fluid dynamics cascades and global wind field (`GPUSceneWind`).
27
+ *
28
+ * **Rows.** Each rig's `root` entity and every `joint.target` entity are held in this system's
29
+ * {@link RowChains}, along with the transform chain above them, so every bone has a live
30
+ * `transforms` row on the GPU before {@link GPUAnimationManager#register_foliage_rig} binds it.
31
+ *
32
+ * **Lifecycle & Restart.** Mirrors {@link MeshSkinSystem}: rigs linked while a device is live
33
+ * register immediately; rigs linked before the renderer starts (or across a WebGPU device restart)
34
+ * bind and register on the next {@link update}. Changes to {@link FoliageWindRigs#weight} are
35
+ * propagated to {@link GPUAnimationManager#set_foliage_rig_weight} each frame.
36
+ */
37
+ export class FoliageWindSystem extends System {
38
+ /**
39
+ * @type {ShadeGraphicsEngine}
40
+ */
41
+ #graphics;
42
+
43
+ /**
44
+ * @type {PublicScene}
45
+ */
46
+ #scene;
47
+
48
+ /**
49
+ * @type {RowChains|null}
50
+ */
51
+ #chains = null;
52
+
53
+ /**
54
+ * @type {GPUSceneContext|null}
55
+ */
56
+ #context = null;
57
+
58
+ /**
59
+ * @type {Map<number, FoliageWindEntry>}
60
+ */
61
+ #entries = new Map();
62
+
63
+ /**
64
+ * @param {ShadeGraphicsEngine} graphics
65
+ * @param {PublicScene} scene
66
+ */
67
+ constructor(graphics, scene) {
68
+ super();
69
+
70
+ assert.defined(graphics, 'graphics');
71
+ assert.defined(scene, 'scene');
72
+
73
+ this.#graphics = graphics;
74
+ this.#scene = scene;
75
+
76
+ this.dependencies = [FoliageWindRigs, Transform64];
77
+ }
78
+
79
+ async startup(entityManager) {
80
+ const dataset = entityManager.dataset;
81
+ const scene = this.#scene;
82
+
83
+ assert.ok(
84
+ scene.dataset === null || scene.dataset === undefined || scene.dataset === dataset,
85
+ 'the scene is bound to another dataset'
86
+ );
87
+
88
+ scene.dataset = dataset;
89
+
90
+ this.#chains = new RowChains(dataset);
91
+ }
92
+
93
+ async shutdown() {
94
+ for (const entry of this.#entries.values()) {
95
+ this.#unregister(entry);
96
+ }
97
+
98
+ this.#entries.clear();
99
+
100
+ this.#chains.destroy();
101
+ this.#chains = null;
102
+ this.#context = null;
103
+ }
104
+
105
+ /**
106
+ * @param {FoliageWindRigs} component
107
+ * @param {Transform64} _transform
108
+ * @param {number} entity
109
+ */
110
+ link(component, _transform, entity) {
111
+ const rigs = component.rigs;
112
+ const chains = this.#chains;
113
+
114
+ for (let r = 0; r < rigs.length; r++) {
115
+ const rig = rigs[r];
116
+ chains.hold(rig.root);
117
+
118
+ const joints = rig.joints;
119
+ for (let j = 0; j < joints.length; j++) {
120
+ chains.hold(joints[j].target);
121
+ }
122
+ }
123
+
124
+ /** @type {FoliageWindEntry} */
125
+ const entry = {
126
+ component,
127
+ rigs,
128
+ context: null,
129
+ rig_ids: null,
130
+ written_weight: NaN,
131
+ };
132
+
133
+ this.#entries.set(entity, entry);
134
+
135
+ const context = this.#graphics.scene_context(this.#scene);
136
+
137
+ if (context !== null) {
138
+ chains.bind(context.rows);
139
+ this.#context = context;
140
+ this.#register(entry, context);
141
+ }
142
+ }
143
+
144
+ /**
145
+ * @param {FoliageWindRigs} _component
146
+ * @param {Transform64} _transform
147
+ * @param {number} entity
148
+ */
149
+ unlink(_component, _transform, entity) {
150
+ const entry = this.#entries.get(entity);
151
+
152
+ if (entry === undefined) {
153
+ return;
154
+ }
155
+
156
+ this.#entries.delete(entity);
157
+
158
+ this.#unregister(entry);
159
+
160
+ const chains = this.#chains;
161
+ const rigs = entry.rigs;
162
+
163
+ for (let r = 0; r < rigs.length; r++) {
164
+ const rig = rigs[r];
165
+ const joints = rig.joints;
166
+
167
+ for (let j = 0; j < joints.length; j++) {
168
+ chains.release(joints[j].target);
169
+ }
170
+
171
+ chains.release(rig.root);
172
+ }
173
+ }
174
+
175
+ update() {
176
+ const context = this.#graphics.scene_context(this.#scene);
177
+
178
+ if (context !== this.#context) {
179
+ this.#chains.bind(context === null ? null : context.rows);
180
+ this.#context = context;
181
+
182
+ if (context !== null) {
183
+ for (const entry of this.#entries.values()) {
184
+ if (entry.context !== context) {
185
+ this.#register(entry, context);
186
+ }
187
+ }
188
+ }
189
+ }
190
+
191
+ if (context === null) {
192
+ return;
193
+ }
194
+
195
+ const manager = context.animation_manager;
196
+
197
+ for (const entry of this.#entries.values()) {
198
+ if (entry.context !== context) {
199
+ this.#register(entry, context);
200
+ }
201
+
202
+ const weight = entry.component.weight;
203
+ if (weight !== entry.written_weight && entry.rig_ids !== null) {
204
+ const rig_ids = entry.rig_ids;
205
+ for (let i = 0; i < rig_ids.length; i++) {
206
+ manager.set_foliage_rig_weight(rig_ids[i], weight);
207
+ }
208
+ entry.written_weight = weight;
209
+ }
210
+ }
211
+ }
212
+
213
+ /**
214
+ * @param {FoliageWindEntry} entry
215
+ * @param {GPUSceneContext} context
216
+ */
217
+ #register(entry, context) {
218
+ const manager = context.animation_manager;
219
+ const rigs = entry.rigs;
220
+ const rig_ids = new Int32Array(rigs.length);
221
+ const weight = entry.component.weight;
222
+
223
+ for (let i = 0; i < rigs.length; i++) {
224
+ const rig_id = manager.register_foliage_rig(rigs[i]);
225
+ if (weight !== 1) {
226
+ manager.set_foliage_rig_weight(rig_id, weight);
227
+ }
228
+ rig_ids[i] = rig_id;
229
+ }
230
+
231
+ entry.context = context;
232
+ entry.rig_ids = rig_ids;
233
+ entry.written_weight = weight;
234
+ }
235
+
236
+ /**
237
+ * @param {FoliageWindEntry} entry
238
+ */
239
+ #unregister(entry) {
240
+ if (entry.context === null || entry.rig_ids === null) {
241
+ return;
242
+ }
243
+
244
+ if (entry.context === this.#graphics.scene_context(this.#scene)) {
245
+ const manager = entry.context.animation_manager;
246
+ const rig_ids = entry.rig_ids;
247
+
248
+ for (let i = 0; i < rig_ids.length; i++) {
249
+ manager.unregister_foliage_rig(rig_ids[i]);
250
+ }
251
+ }
252
+
253
+ entry.context = null;
254
+ entry.rig_ids = null;
255
+ entry.written_weight = NaN;
256
+ }
257
+ }
@@ -114,6 +114,13 @@ export const GPU_FLUID_SYSTEM_TICK_CAP: number;
114
114
  * releases everything, rows included. At a fixed scene, nothing is created after the first frame.
115
115
  */
116
116
  export class GPUFluidSystem extends System<any> {
117
+ /**
118
+ * Offer the compute pipelines the GPU fluid cascades, forcing, and query readback dispatch —
119
+ * see {@link PipelineEnquiry}.
120
+ *
121
+ * @param {import("../../shade/device/pipeline/PipelineEnquiry.js").PipelineEnquiry} enquiry
122
+ */
123
+ static enquirePipelines(enquiry: import("../../shade/device/pipeline/PipelineEnquiry.js").PipelineEnquiry): void;
117
124
  /**
118
125
  * @param {import("./GraphicsEngine.js").GraphicsEngine} graphics
119
126
  * @param {import("../../shade/renderer/scene/Scene.js").Scene} scene the scene whose wind this is
@@ -1 +1 @@
1
- {"version":3,"file":"GPUFluidSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GPUFluidSystem.js"],"names":[],"mappings":"AAyCA;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,wCAFU,MAAM,CAE2B;AAmG3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGG;AACH;IAyII;;;OAGG;IACH,sBAHW,OAAO,qBAAqB,EAAE,cAAc,SAC5C,OAAO,qCAAqC,EAAE,KAAK,EAU7D;IAnJD,gEAAgD;IAEhD,oOAME;IA6IF;;OAEG;IACH,iEAEC;IAED;;;;;OAKG;IACH,qBAEC;IAED;;;;;OAKG;IACH,kCAEC;IAED;;;;;OAKG;IACH,+BAEC;IAED;;;;;OAKG;IACH,iCAEC;IAED;;;;;;OAMG;IACH,eAFW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,QAQ5C;IAED;;;;;;;;;;OAUG;IACH,yBAEC;IAED;;;;;OAKG;IACH,+BAEC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eAbW,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,UACN,YAAY,iBACZ,MAAM,GACJ,MAAM,CA+ClB;IAmMD,2CAoBC;IAED,4CAaC;IA6CD;;;;OAIG;IACH,gBAJW,iBAAiB,aACjB,WAAW,UACX,MAAM,QAOhB;IAED;;;;OAIG;IACH,kBAJW,iBAAiB,aACjB,WAAW,UACX,MAAM,QAiBhB;IAohBD;;;;;OAKG;IACH,eAFW,YAAY,QAetB;IAkKL;;;;;;;OAOG;IACH,2BAFU,OAAO,CAEwB;;CAVxC;AAYD;;;GAGG;AACH;IAII;;OAEG;IACH,oBAFW,cAAc,EAMxB;IADG,uBAAoB;CAS3B;8BAliDY,OAAO,+CAA+C,EAAE,eAAe;2BACvE,OAAO,gDAAgD,EAAE,YAAY;oCACrE,OAAO,oDAAoD,EAAE,qBAAqB;kCAClF,OAAO,kEAAkE,EAAE,mBAAmB;kCAC9F,OAAO,2DAA2D,EAAE,mBAAmB;8BACvF,OAAO,6CAA6C,EAAE,eAAe;uBAjC3D,kBAAkB;4BACb,iCAAiC;kCAWtD,2CAA2C;wCARV,iDAAiD;4CAf7C,iDAAiD;8BAiB/D,uCAAuC;yBAJ5C,4BAA4B;0BAC3B,6BAA6B;qCARlB,oDAAoD;gCADzD,uDAAuD;gCAE5B,qDAAqD;gCAJhF,mDAAmD"}
1
+ {"version":3,"file":"GPUFluidSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GPUFluidSystem.js"],"names":[],"mappings":"AAyCA;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,wCAFU,MAAM,CAE2B;AAmG3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGG;AACH;IAEI;;;;;OAKG;IACH,iCAFW,OAAO,gDAAgD,EAAE,eAAe,QAMlF;IAyID;;;OAGG;IACH,sBAHW,OAAO,qBAAqB,EAAE,cAAc,SAC5C,OAAO,qCAAqC,EAAE,KAAK,EAU7D;IAnJD,gEAAgD;IAEhD,oOAME;IA6IF;;OAEG;IACH,iEAEC;IAED;;;;;OAKG;IACH,qBAEC;IAED;;;;;OAKG;IACH,kCAEC;IAED;;;;;OAKG;IACH,+BAEC;IAED;;;;;OAKG;IACH,iCAEC;IAED;;;;;;OAMG;IACH,eAFW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,QAQ5C;IAED;;;;;;;;;;OAUG;IACH,yBAEC;IAED;;;;;OAKG;IACH,+BAEC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eAbW,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,UACN,YAAY,iBACZ,MAAM,GACJ,MAAM,CA+ClB;IAmMD,2CAoBC;IAED,4CAaC;IA6CD;;;;OAIG;IACH,gBAJW,iBAAiB,aACjB,WAAW,UACX,MAAM,QAOhB;IAED;;;;OAIG;IACH,kBAJW,iBAAiB,aACjB,WAAW,UACX,MAAM,QAiBhB;IAqiBD;;;;;OAKG;IACH,eAFW,YAAY,QAetB;IAkKL;;;;;;;OAOG;IACH,2BAFU,OAAO,CAEwB;;CAVxC;AAYD;;;GAGG;AACH;IAII;;OAEG;IACH,oBAFW,cAAc,EAMxB;IADG,uBAAoB;CAkB3B;8BAxkDY,OAAO,+CAA+C,EAAE,eAAe;2BACvE,OAAO,gDAAgD,EAAE,YAAY;oCACrE,OAAO,oDAAoD,EAAE,qBAAqB;kCAClF,OAAO,kEAAkE,EAAE,mBAAmB;kCAC9F,OAAO,2DAA2D,EAAE,mBAAmB;8BACvF,OAAO,6CAA6C,EAAE,eAAe;uBAjC3D,kBAAkB;4BACb,iCAAiC;kCAWtD,2CAA2C;wCARV,iDAAiD;4CAf7C,iDAAiD;8BAiB/D,uCAAuC;yBAJ5C,4BAA4B;0BAC3B,6BAA6B;qCARlB,oDAAoD;gCADzD,uDAAuD;gCAE5B,qDAAqD;gCAJhF,mDAAmD"}
@@ -255,6 +255,18 @@ class ObstacleEntry {
255
255
  */
256
256
  export class GPUFluidSystem extends System {
257
257
 
258
+ /**
259
+ * Offer the compute pipelines the GPU fluid cascades, forcing, and query readback dispatch —
260
+ * see {@link PipelineEnquiry}.
261
+ *
262
+ * @param {import("../../shade/device/pipeline/PipelineEnquiry.js").PipelineEnquiry} enquiry
263
+ */
264
+ static enquirePipelines(enquiry) {
265
+ GPUFluidCascadeStack.enquirePipelines(enquiry);
266
+ GPUFluidForcing.enquirePipelines(enquiry);
267
+ GPUFluidQueries.enquirePipelines(enquiry);
268
+ }
269
+
258
270
  dependencies = [GPUFluidComponent, Transform64];
259
271
 
260
272
  components_used = [
@@ -1077,9 +1089,26 @@ export class GPUFluidSystem extends System {
1077
1089
  assert.isPositiveInteger(cascade_count, 'GPUFluidComponent.cascade_count');
1078
1090
  assert.lessThanOrEqual(cascade_count, GPU_FLUID_COMPONENT_CASCADE_LIMIT, 'GPUFluidComponent.cascade_count');
1079
1091
 
1080
- const device = this.#graphics.renderer.graphics.device;
1092
+ const graphics = this.#graphics.renderer.graphics;
1093
+ const device = graphics.device;
1081
1094
 
1082
1095
  if (this.#forcing === null) {
1096
+ if (graphics.compute_pipelines !== undefined) {
1097
+ const enquiry = /** @type {import("../../shade/device/pipeline/PipelineEnquiry.js").PipelineEnquiry} */ ({
1098
+ device,
1099
+ render: [],
1100
+ compute: [],
1101
+ });
1102
+
1103
+ GPUFluidSystem.enquirePipelines(enquiry);
1104
+
1105
+ const compute = enquiry.compute;
1106
+
1107
+ for (let i = 0; i < compute.length; i++) {
1108
+ graphics.compute_pipelines.prepare(compute[i]);
1109
+ }
1110
+ }
1111
+
1083
1112
  this.#forcing = new GPUFluidForcing({ device });
1084
1113
  }
1085
1114
 
@@ -1610,4 +1639,13 @@ export class GPUFluidExtension extends RenderExtension {
1610
1639
  record(frame) {
1611
1640
  this.system.prepare(frame);
1612
1641
  }
1642
+
1643
+ /**
1644
+ * @param {import("../../shade/device/pipeline/PipelineEnquiry.js").PipelineEnquiry} enquiry
1645
+ */
1646
+ enquirePipelines(enquiry) {
1647
+ if (this.system.domain !== -1) {
1648
+ GPUFluidSystem.enquirePipelines(enquiry);
1649
+ }
1650
+ }
1613
1651
  }
@@ -232,5 +232,4 @@ import { ParticleEmitter } from "../../shade/renderer/particles/runtime/Particle
232
232
  import { ParticleEffect } from "../graphics/ecs/particles/ParticleEffect.js";
233
233
  import { System } from "../ecs/System.js";
234
234
  import { Transform64 } from "../ecs/transform/Transform64.js";
235
- import { TextureAtlas } from "../graphics/texture/atlas/TextureAtlas.js";
236
235
  //# sourceMappingURL=GPUParticleEmitterSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUParticleEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GPUParticleEmitterSystem.js"],"names":[],"mappings":"AAszBA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,+CAJW,eAAe,UACf,cAAc,GACZ,OAAO,CAiFnB;AAl4BD;;;;GAIG;AAEH;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH;IAoDI;;;;;OAKG;IACH,sBALW,OAAO,qBAAqB,EAAE,cAAc,SAC5C,OAAO,qCAAqC,EAAE,KAAK,gEAgB7D;IArED,6DAA6C;IAE7C;;;OAGG;IACH,OAFU,YAAY,CAEO;IAiE7B;;;;;;OAMG;IACH,iEAEC;IAED;;;;;OAKG;IACH,kCAEC;IAED;;;;;;;;;;OAUG;IACH,mBAJW,MAAM,GACJ,eAAe,GAAC,IAAI,CAWhC;IAED;;;;;;;;;;;OAWG;IACH,cAHW,MAAM,SACN,MAAM,QA4BhB;IA6BD,+BAA+B;IAC/B,YADc,QAAQ,IAAI,CAAC,CAyB1B;IAED;;;;OAIG;IACH,aAJW,cAAc,aACd,WAAW,UACX,MAAM,QAqChB;IAED;;;;OAIG;IACH,eAJW,cAAc,aACd,WAAW,UACX,MAAM,QAIhB;IAED;;;;;;;OAOG;IACH,4BAHW,MAAM,GACJ,IAAI,CAgBhB;IAoCD;;;;;;;;;;;;OAYG;IACH,eAHW,OAAO,gDAAgD,EAAE,YAAY,GACnE,IAAI,CAqChB;;CAiWJ;;;;;gBAxxBa,MAAM;;;;WACN,OAAO,yCAAyC,EAAE,UAAU,GAAC,IAAI;;;YAKjE,MAAM;;;;YACN,cAAc;;;;eACd,WAAW;;;;aACX,eAAe,GAAC,IAAI;;;;;aACpB,OAAO,+CAA+C,EAAE,eAAe,GAAC,IAAI;gCAGjE,IAAI;;;;SACf,MAAM,GAAC,IAAI;;;;aACX,oBAAoB,GAAC,IAAI;;gCAvCP,2DAA2D;+BAS5D,6CAA6C;uBAPrD,kBAAkB;4BAEb,iCAAiC;6BAMhC,2CAA2C"}
1
+ {"version":3,"file":"GPUParticleEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GPUParticleEmitterSystem.js"],"names":[],"mappings":"AAo0BA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,+CAJW,eAAe,UACf,cAAc,GACZ,OAAO,CAiFnB;AA94BD;;;;GAIG;AAEH;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH;IAoDI;;;;;OAKG;IACH,sBALW,OAAO,qBAAqB,EAAE,cAAc,SAC5C,OAAO,qCAAqC,EAAE,KAAK,gEAgB7D;IArED,6DAA6C;IAE7C;;;OAGG;IACH,oBAAsD;IAiEtD;;;;;;OAMG;IACH,iEAEC;IAED;;;;;OAKG;IACH,kCAEC;IAED;;;;;;;;;;OAUG;IACH,mBAJW,MAAM,GACJ,eAAe,GAAC,IAAI,CAWhC;IAED;;;;;;;;;;;OAWG;IACH,cAHW,MAAM,SACN,MAAM,QA4BhB;IA6BD,+BAA+B;IAC/B,YADc,QAAQ,IAAI,CAAC,CAyB1B;IAED;;;;OAIG;IACH,aAJW,cAAc,aACd,WAAW,UACX,MAAM,QAqChB;IAED;;;;OAIG;IACH,eAJW,cAAc,aACd,WAAW,UACX,MAAM,QAIhB;IAED;;;;;;;OAOG;IACH,4BAHW,MAAM,GACJ,IAAI,CAgBhB;IAoCD;;;;;;;;;;;;OAYG;IACH,eAHW,OAAO,gDAAgD,EAAE,YAAY,GACnE,IAAI,CAqChB;;CA6WJ;;;;;gBApyBa,MAAM;;;;WACN,OAAO,yCAAyC,EAAE,UAAU,GAAC,IAAI;;;YAKjE,MAAM;;;;YACN,cAAc;;;;eACd,WAAW;;;;aACX,eAAe,GAAC,IAAI;;;;;aACpB,OAAO,+CAA+C,EAAE,eAAe,GAAC,IAAI;gCAGjE,IAAI;;;;SACf,MAAM,GAAC,IAAI;;;;aACX,oBAAoB,GAAC,IAAI;;gCAzCP,2DAA2D;+BAS5D,6CAA6C;uBAPrD,kBAAkB;4BAEb,iCAAiC"}
@@ -12,7 +12,9 @@ import { row_of_entity } from "../../shade/renderer/scene/rows/GPUSceneRows.js";
12
12
  import { GameAssetType } from "../asset/GameAssetType.js";
13
13
  import { ImageRGBADataLoader } from "../asset/loaders/image/ImageRGBADataLoader.js";
14
14
  import { ParticleEffect } from "../graphics/ecs/particles/ParticleEffect.js";
15
- import { TextureAtlas } from "../graphics/texture/atlas/TextureAtlas.js";
15
+ import { DecalAtlas } from "./decal/DecalAtlas.js";
16
+ import { DecalAtlasFill } from "./decal/DecalAtlasFill.js";
17
+ import { TextureFilterType } from "../../shade/renderer/texture/TextureFilterType.js";
16
18
  import { Sampler2D } from "../graphics/texture/sampler/Sampler2D.js";
17
19
  import { sampler2d_ensure_uint8_RGBA } from "../graphics/texture/sampler/sampler2d_ensure_uint8_RGBA.js";
18
20
 
@@ -107,7 +109,7 @@ export class GPUParticleEmitterSystem extends System {
107
109
  * CPU atlas, exposed for inspection. Owned by this system.
108
110
  * @type {TextureAtlas}
109
111
  */
110
- atlas = new TextureAtlas(64);
112
+ atlas = new DecalAtlas(DecalAtlasFill.EdgeExtend, 64);
111
113
 
112
114
  /** @type {import("./GraphicsEngine.js").GraphicsEngine} */
113
115
  #graphics;
@@ -459,7 +461,7 @@ export class GPUParticleEmitterSystem extends System {
459
461
 
460
462
  this.#register(particles, frame.view.scene);
461
463
 
462
- this.#upload(renderer.graphics.device);
464
+ this.#upload(renderer.graphics);
463
465
 
464
466
  particles.atlas = this.#view;
465
467
 
@@ -767,7 +769,8 @@ export class GPUParticleEmitterSystem extends System {
767
769
  * @param {GPUDevice} device
768
770
  * @returns {void}
769
771
  */
770
- #upload(device) {
772
+ #upload(graphics) {
773
+ const device = graphics.device;
771
774
  const source = this.atlas.sampler;
772
775
 
773
776
  if (this.#device !== device || this.#texture === null) {
@@ -780,7 +783,9 @@ export class GPUParticleEmitterSystem extends System {
780
783
 
781
784
  descriptor.label = "particles/sprite atlas";
782
785
  descriptor.format = "rgba8unorm";
783
- descriptor.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST;
786
+ descriptor.usage = GPUTextureUsage.TEXTURE_BINDING
787
+ | GPUTextureUsage.COPY_DST
788
+ | GPUTextureUsage.RENDER_ATTACHMENT;
784
789
 
785
790
  this.#uploaded_version = -1;
786
791
  }
@@ -788,6 +793,7 @@ export class GPUParticleEmitterSystem extends System {
788
793
  const texture = this.#texture;
789
794
 
790
795
  if (texture.width !== source.width || texture.height !== source.height) {
796
+ texture.descriptor.mipLevelCount = 1 + Math.floor(Math.log2(Math.max(source.width, source.height)));
791
797
  texture.resize(source.width, source.height);
792
798
 
793
799
  this.#uploaded_version = -1;
@@ -797,6 +803,14 @@ export class GPUParticleEmitterSystem extends System {
797
803
  device.queue.writeTexture({ texture: texture.gpu_texture }, source.data,
798
804
  { bytesPerRow: source.width * 4 }, [source.width, source.height]);
799
805
 
806
+ if (texture.descriptor.mipLevelCount > 1) {
807
+ graphics.textures.mipmaps.generateMipmap(
808
+ texture.gpu_texture,
809
+ texture.descriptor,
810
+ TextureFilterType.Linear
811
+ );
812
+ }
813
+
800
814
  texture.incrementVersion();
801
815
 
802
816
  this.#uploaded_version = source.version;
@@ -1,19 +1,18 @@
1
1
  /**
2
- * @typedef {import("../../../shade/renderer/animation/ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
3
- */
4
- /**
5
- * The clips this entity can play: each a {@link ShadeAnimationClip} whose channels key entities —
6
- * the joints of a rig, the nodes of a loaded model.
2
+ * The clips this entity can play — each a {@link ShadeAnimationClip} whose channels key entities
3
+ * (the joints of a rig, the nodes of a loaded model) — and the playback sink where whichever driver
4
+ * plays them writes what each weighs and where it is playing this tick.
7
5
  *
8
6
  * **It lives on the entity that plays them**, beside its `Animation` or `AnimationGraphController`.
9
7
  * A clip is one clock over many targets and describes no single one of them, so it is not a
10
8
  * component on a joint. `AnimationSystem` and `AnimationGraphSystem` resolve the names their lists
11
- * and graphs ask for against this set. The CPU pose consumers (IK, ContactProbe, cloth) ask those
12
- * drivers about a joint's `ParentEntity`, so a joint they should see names this entity there.
9
+ * and graphs ask for against this set and write the resulting blend back onto it; the GPU clip
10
+ * uploader and the CPU pose consumers (IK, ContactProbe, cloth, `query_entity_node_world_pose`)
11
+ * read from here without caring which driver produced the blend.
13
12
  *
14
13
  * **Not `Animation.clips`.** That list says what to play — a name, a weight, a repeat count each;
15
- * this says what there is to play and what each of those does to which entity. A name in the one is
16
- * looked up by name in the other.
14
+ * this says what there is to play, what each of those does to which entity, and where the active
15
+ * driver has placed each clip this frame.
17
16
  *
18
17
  * A model loaded by `MeshSystem` carries one on its root, re-addressed to the entities of that
19
18
  * placement; code that builds a rig puts one there the same way. A model with no clips carries an
@@ -23,10 +22,10 @@
23
22
  * clip, take the component off and put another on, which the drivers see as their entity leaving
24
23
  * and coming back.
25
24
  *
26
- * **The entities it keys go no sooner than it does.** While it is on, the drivers hold a row for
27
- * every entity a channel keys, as a skin holds its joints'. Removing one of them means taking this
28
- * off before the next frame — `prefab_instance_destroy` removes the entities and then the clips, in
29
- * one step — or the scene is left holding the row of an entity that is gone.
25
+ * **The entities it keys go no sooner than it does.** While it is bound, the driver's sink holds a
26
+ * row for every entity a channel keys, as a skin holds its joints'. Removing one of them means
27
+ * taking this off before the next frame — `prefab_instance_destroy` removes the entities and then
28
+ * the clips, in one step — or the scene is left holding the row of an entity that is gone.
30
29
  *
31
30
  * **Not saved**, for the reason `MeshSkin` is not: the channels key entities that whatever builds
32
31
  * the rig creates, and the curves are asset data. A load rebuilds them the way it rebuilds the rig.
@@ -47,6 +46,99 @@ export class AnimationClips {
47
46
  * @type {ShadeAnimationClip[]}
48
47
  */
49
48
  clips: ShadeAnimationClip[];
49
+ /**
50
+ * Whether a driver currently has these clips bound. `false` before the driver's first `update`
51
+ * after `link`, and `false` again once the driver unlinks or shuts down.
52
+ *
53
+ * @type {boolean}
54
+ */
55
+ bound: boolean;
56
+ /**
57
+ * Distinct indices into {@link clips} that the active driver plays (and registers on the GPU),
58
+ * in the driver's own order.
59
+ *
60
+ * Maintained here rather than alongside the GPU registration because **the pose evaluator needs
61
+ * it whether or not there is a device**: `collect_entity_playbacks` answers on the CPU from the
62
+ * clips the driver plays, and a game with rendering disabled still asks (I-4).
63
+ *
64
+ * @type {Int32Array}
65
+ */
66
+ played_slots: Int32Array;
67
+ /**
68
+ * What each of {@link clips} weighs this tick, in {@link clips}' order and at `f32` width — the
69
+ * width the renderer's clip table takes, so the CPU pose evaluator and the GPU agree on every
70
+ * share.
71
+ *
72
+ * @type {Float32Array}
73
+ */
74
+ weights: Float32Array;
75
+ /**
76
+ * Where each of {@link clips} is playing this tick, in seconds from its start, in {@link clips}'
77
+ * order.
78
+ *
79
+ * @type {Float64Array}
80
+ */
81
+ times: Float64Array;
82
+ /**
83
+ * One reusable {@link PosePlayback} per entry of {@link clips}, rewritten by
84
+ * {@link write_pose_playbacks} so per-frame CPU pose queries allocate nothing.
85
+ *
86
+ * @type {PosePlayback[]}
87
+ */
88
+ poses: PosePlayback[];
89
+ /**
90
+ * The active GPU registration for {@link played_slots}, or `null` when no device context has
91
+ * registered them yet.
92
+ *
93
+ * @type {ClipRegistration|null}
94
+ */
95
+ clip_registration: ClipRegistration | null;
96
+ /**
97
+ * The weight each entry of {@link clips} was last given on the GPU (`-1` where not yet written
98
+ * to the current registration).
99
+ *
100
+ * @type {Float32Array}
101
+ */
102
+ written: Float32Array;
103
+ /**
104
+ * Prepare the playback buffers when a driver takes up these clips.
105
+ */
106
+ bind(): void;
107
+ /**
108
+ * Clear the playback state when the driver releases these clips.
109
+ */
110
+ unbind(): void;
111
+ /**
112
+ * Update which of {@link clips} the driver plays, deduplicated in order of first appearance.
113
+ *
114
+ * Two entries of a clip list or two states of a graph can name one clip, and it is one row on
115
+ * the GPU either way — registered once, and reported to the pose evaluator once.
116
+ *
117
+ * @param {ArrayLike<number>} slots indices into {@link clips}
118
+ * @returns {boolean} whether the distinct set changed
119
+ */
120
+ set_played_slots(slots: ArrayLike<number>): boolean;
121
+ /**
122
+ * What the entity is playing, in the form the CPU pose evaluator takes: one entry per clip of
123
+ * {@link clips} in {@link played_slots}, at the weight and the time the renderer has been given.
124
+ *
125
+ * **Only the clips the driver names are here, because they are the only ones registered** (D37).
126
+ * The GPU's accumulator marks a joint dirty for every bound clip that writes to it, weight and
127
+ * all — so a bound clip at weight zero resolves the joints only it drives to zero rather than
128
+ * leaving them at rest. The answer is not to hand the surplus to the evaluator so it agrees
129
+ * with a mistake; it is not to bind them, and then a clip nothing names moves nothing.
130
+ *
131
+ * A clip the driver names that is not currently playing **is** here, at weight zero, because it
132
+ * is bound and the accumulator does see it.
133
+ *
134
+ * The entries are this component's own and are rewritten by the next call, which is what keeps
135
+ * a query on a per-frame path from allocating.
136
+ *
137
+ * @param {PosePlayback[]} target appended to
138
+ * @returns {boolean} whether a driver has bound these clips — `false` when no driver is playing
139
+ * them, or when they arrived since the driver's last update
140
+ */
141
+ write_pose_playbacks(target: PosePlayback[]): boolean;
50
142
  /**
51
143
  * @readonly
52
144
  * @type {boolean}
@@ -58,4 +150,6 @@ export namespace AnimationClips {
58
150
  let serializable: boolean;
59
151
  }
60
152
  export type ShadeAnimationClip = import("../../../shade/renderer/animation/ShadeAnimationClip.js").ShadeAnimationClip;
153
+ export type ClipRegistration = import("../register_clips.js").ClipRegistration;
154
+ import { PosePlayback } from "../../../shade/renderer/animation/pose/PosePlayback.js";
61
155
  //# sourceMappingURL=AnimationClips.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationClips.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/animation/AnimationClips.js"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH;IASI;;;OAGG;IACH,mBAHW,kBAAkB,EAAE,GAClB,cAAc,CAc1B;IAxBD;;;;;OAKG;IACH,OAFU,kBAAkB,EAAE,CAEnB;IAqBf;;;OAGG;IACH,2BAFU,OAAO,CAEwB;CANxC;;kBAUS,MAAM;sBAMN,OAAO;;iCA9EJ,OAAO,yDAAyD,EAAE,kBAAkB"}
1
+ {"version":3,"file":"AnimationClips.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/animation/AnimationClips.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH;IAsEI;;;OAGG;IACH,mBAHW,kBAAkB,EAAE,GAClB,cAAc,CAc1B;IArFD;;;;;OAKG;IACH,OAFU,kBAAkB,EAAE,CAEnB;IAEX;;;;;OAKG;IACH,OAFU,OAAO,CAEH;IAEd;;;;;;;;;OASG;IACH,cAFU,UAAU,CAEO;IAE3B;;;;;;OAMG;IACH,SAFU,YAAY,CAEE;IAExB;;;;;OAKG;IACH,OAFU,YAAY,CAEF;IAEpB;;;;;OAKG;IACH,OAFU,YAAY,EAAE,CAEb;IAEX;;;;;OAKG;IACH,mBAFU,gBAAgB,GAAC,IAAI,CAEN;IAEzB;;;;;OAKG;IACH,SAFU,YAAY,CAEE;IAoBxB;;OAEG;IACH,aAWC;IAED;;OAEG;IACH,eAQC;IAED;;;;;;;;OAQG;IACH,wBAHW,UAAU,MAAM,CAAC,GACf,OAAO,CAsCnB;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,6BAJW,YAAY,EAAE,GACZ,OAAO,CA0BnB;IAGL;;;OAGG;IACH,2BAFU,OAAO,CAEwB;CANxC;;kBAUS,MAAM;sBAMN,OAAO;;iCAlRJ,OAAO,yDAAyD,EAAE,kBAAkB;+BACpF,OAAO,sBAAsB,EAAE,gBAAgB;6BAJ/B,wDAAwD"}