@woosh/meep-engine 3.52.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 (370) 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/renderer/Renderer.d.ts.map +1 -1
  179. package/src/shade/renderer/Renderer.js +45 -16
  180. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +145 -0
  181. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +9 -1
  182. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
  183. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +53 -1
  184. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts +8 -0
  185. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts.map +1 -0
  186. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.js +71 -0
  187. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts +11 -0
  188. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts.map +1 -0
  189. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.js +32 -0
  190. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +30 -3
  191. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  192. package/src/shade/renderer/animation/GPUAnimationManager.js +532 -79
  193. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +19 -12
  194. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  195. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +20 -13
  196. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +35 -8
  197. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  198. package/src/shade/renderer/animation/ShadeAnimationClip.js +433 -2
  199. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/chunk_pose_accumulator.js +40 -32
  201. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +97 -0
  202. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -0
  203. package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +161 -0
  204. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts +65 -0
  205. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts.map +1 -0
  206. package/src/shade/renderer/animation/foliage/FoliageWindRig.js +89 -0
  207. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts +19 -0
  208. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -0
  209. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +143 -0
  210. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts +14 -0
  211. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts.map +1 -0
  212. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js +116 -0
  213. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  214. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +39 -29
  215. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +37 -37
  216. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
  217. package/src/shade/renderer/extension/RenderExtension.d.ts +7 -0
  218. package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
  219. package/src/shade/renderer/extension/RenderExtension.js +9 -0
  220. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +6 -0
  221. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
  222. package/src/shade/renderer/extension/RenderExtensionRegistry.js +15 -0
  223. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +7 -0
  224. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  225. package/src/shade/renderer/fluid/GPUFluidCascade.js +15 -0
  226. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +7 -0
  227. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  228. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +11 -0
  229. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  230. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +51 -48
  231. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -0
  232. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  233. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +16 -0
  234. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
  235. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +15 -3
  236. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
  237. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +102 -96
  238. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +12 -12
  239. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +12 -12
  240. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +7 -0
  241. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
  242. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +16 -0
  243. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +7 -0
  244. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  245. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +10 -0
  246. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +2 -2
  247. package/src/shade/renderer/loader/SceneBundle.d.ts +7 -0
  248. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  249. package/src/shade/renderer/loader/SceneBundle.js +119 -111
  250. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +4 -0
  251. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  252. package/src/shade/renderer/material/standard/fragment_gbuffer.js +6 -5
  253. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +8 -7
  254. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  255. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -8
  256. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  257. package/src/shade/renderer/particles/GPUParticleSystem.js +3 -1
  258. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  259. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +9 -4
  260. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  261. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +9 -7
  262. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.d.ts.map +1 -1
  263. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.js +15 -7
  264. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
  265. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +6 -4
  266. package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +3 -3
  267. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
  268. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +8 -5
  269. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  270. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +4 -3
  271. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1 -1
  272. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts +9 -0
  273. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts.map +1 -0
  274. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js +17 -0
  275. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts +8 -0
  276. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts.map +1 -1
  277. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js +28 -20
  278. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts +8 -0
  279. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts.map +1 -0
  280. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js +15 -0
  281. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts +21 -0
  282. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts.map +1 -0
  283. package/src/shade/renderer/view/chunk_view_mip_bias.js +44 -0
  284. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
  285. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  286. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +105 -26
  287. package/src/engine/graphics/composit/CompositingStages.d.ts +0 -6
  288. package/src/engine/graphics/composit/CompositingStages.d.ts.map +0 -1
  289. package/src/engine/graphics/composit/CompositingStages.js +0 -8
  290. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +0 -7
  291. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +0 -1
  292. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +0 -24
  293. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts +0 -8
  294. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts.map +0 -1
  295. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.js +0 -17
  296. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +0 -8
  297. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +0 -1
  298. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +0 -60
  299. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +0 -7
  300. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +0 -1
  301. package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +0 -26
  302. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +0 -7
  303. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +0 -1
  304. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +0 -23
  305. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +0 -7
  306. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +0 -1
  307. package/src/engine/graphics/geometry/instancing/geometry_copy.js +0 -15
  308. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts +0 -2
  309. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts.map +0 -1
  310. package/src/engine/graphics/geometry/instancing/rewriteMaterial.js +0 -57
  311. package/src/engine/graphics/geometry/ribbon/Quad.d.ts +0 -96
  312. package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +0 -1
  313. package/src/engine/graphics/geometry/ribbon/Quad.js +0 -213
  314. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +0 -9
  315. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +0 -1
  316. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +0 -12
  317. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +0 -10
  318. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +0 -1
  319. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +0 -17
  320. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +0 -10
  321. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +0 -1
  322. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +0 -13
  323. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +0 -11
  324. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +0 -1
  325. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +0 -24
  326. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts +0 -6
  327. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts.map +0 -1
  328. package/src/engine/graphics/geometry/ribbon/rotateRibbon.js +0 -37
  329. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts +0 -9
  330. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts.map +0 -1
  331. package/src/engine/graphics/geometry/ribbon/updateTipPosition.js +0 -52
  332. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts +0 -8
  333. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts.map +0 -1
  334. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.js +0 -54
  335. package/src/engine/graphics/render/RenderPassType.d.ts +0 -6
  336. package/src/engine/graphics/render/RenderPassType.d.ts.map +0 -1
  337. package/src/engine/graphics/render/RenderPassType.js +0 -8
  338. package/src/engine/graphics/render/layers/RenderLayer.d.ts +0 -78
  339. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +0 -1
  340. package/src/engine/graphics/render/layers/RenderLayer.js +0 -95
  341. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts +0 -72
  342. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +0 -1
  343. package/src/engine/graphics/render/layers/RenderLayerManager.js +0 -160
  344. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts +0 -18
  345. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +0 -1
  346. package/src/engine/graphics/render/layers/RenderLayerManagerState.js +0 -48
  347. package/src/engine/graphics/render/layers/RenderLayerState.d.ts +0 -18
  348. package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +0 -1
  349. package/src/engine/graphics/render/layers/RenderLayerState.js +0 -27
  350. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts +0 -8
  351. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +0 -1
  352. package/src/engine/graphics/render/layers/RenderLayerUtils.js +0 -103
  353. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts +0 -10
  354. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts.map +0 -1
  355. package/src/engine/graphics/render/make_bvh_visibility_builder.js +0 -64
  356. package/src/engine/graphics/render/view/CameraViewFlags.d.ts +0 -7
  357. package/src/engine/graphics/render/view/CameraViewFlags.d.ts.map +0 -1
  358. package/src/engine/graphics/render/view/CameraViewFlags.js +0 -9
  359. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +0 -143
  360. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +0 -1
  361. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +0 -328
  362. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +0 -39
  363. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +0 -1
  364. package/src/engine/graphics/render/visibility/VisibilityComputer.js +0 -80
  365. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +0 -29
  366. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +0 -1
  367. package/src/engine/graphics/render/visibility/VisibilityFilter.js +0 -37
  368. package/src/engine/graphics3/animation/write_graph_playback.d.ts +0 -24
  369. package/src/engine/graphics3/animation/write_graph_playback.d.ts.map +0 -1
  370. package/src/engine/graphics3/animation/write_graph_playback.js +0 -48
@@ -3,6 +3,8 @@ import { chunk_atomic_add_f32_storage } from "../shader/chunk/atomic/chunk_atomi
3
3
  import {
4
4
  POSE_ACCUMULATOR_OFFSET_DIRTY,
5
5
  POSE_ACCUMULATOR_OFFSET_REST_ROTATION,
6
+ POSE_ACCUMULATOR_OFFSET_REST_SCALE,
7
+ POSE_ACCUMULATOR_OFFSET_REST_TRANSLATION,
6
8
  POSE_ACCUMULATOR_OFFSET_ROTATION,
7
9
  POSE_ACCUMULATOR_OFFSET_SCALE,
8
10
  POSE_ACCUMULATOR_OFFSET_TRANSLATION,
@@ -42,6 +44,8 @@ const POSE_OFFSET_ROTATION: u32 = ${POSE_ACCUMULATOR_OFFSET_ROTATION}u;
42
44
  const POSE_OFFSET_SCALE: u32 = ${POSE_ACCUMULATOR_OFFSET_SCALE}u;
43
45
  const POSE_OFFSET_DIRTY: u32 = ${POSE_ACCUMULATOR_OFFSET_DIRTY}u;
44
46
  const POSE_OFFSET_REST_ROTATION: u32 = ${POSE_ACCUMULATOR_OFFSET_REST_ROTATION}u;
47
+ const POSE_OFFSET_REST_TRANSLATION: u32 = ${POSE_ACCUMULATOR_OFFSET_REST_TRANSLATION}u;
48
+ const POSE_OFFSET_REST_SCALE: u32 = ${POSE_ACCUMULATOR_OFFSET_REST_SCALE}u;
45
49
 
46
50
  const POSE_DIRTY_TX: u32 = ${POSE_DIRTY_TX}u;
47
51
  const POSE_DIRTY_TY: u32 = ${POSE_DIRTY_TY}u;
@@ -57,23 +61,28 @@ fn pose_accumulator_slot_base(row: u32) -> u32 {
57
61
  return row * POSE_ACCUMULATOR_STRIDE;
58
62
  }
59
63
 
60
- fn pose_accumulator_add_translation(row: u32, value: vec3<f32>, mask: u32) {
61
- let base = pose_accumulator_slot_base(row) + POSE_OFFSET_TRANSLATION;
64
+ fn pose_accumulator_add_translation(row: u32, value: vec3<f32>, mask: u32, weight: f32, rest: vec3<f32>) {
65
+ let slot_base = pose_accumulator_slot_base(row);
66
+ let base = slot_base + POSE_OFFSET_TRANSLATION;
67
+ let rest_base = slot_base + POSE_OFFSET_REST_TRANSLATION;
62
68
  var dirty_bits: u32 = 0u;
63
69
  if (mask & 0x1u) != 0u {
64
- atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x);
70
+ atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x - rest.x * weight);
71
+ atomicStore(&pose_accumulator[rest_base + 0u], bitcast<u32>(rest.x));
65
72
  dirty_bits |= POSE_DIRTY_TX;
66
73
  }
67
74
  if (mask & 0x2u) != 0u {
68
- atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y);
75
+ atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y - rest.y * weight);
76
+ atomicStore(&pose_accumulator[rest_base + 1u], bitcast<u32>(rest.y));
69
77
  dirty_bits |= POSE_DIRTY_TY;
70
78
  }
71
79
  if (mask & 0x4u) != 0u {
72
- atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z);
80
+ atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z - rest.z * weight);
81
+ atomicStore(&pose_accumulator[rest_base + 2u], bitcast<u32>(rest.z));
73
82
  dirty_bits |= POSE_DIRTY_TZ;
74
83
  }
75
84
  if dirty_bits != 0u {
76
- atomicOr(&pose_accumulator[pose_accumulator_slot_base(row) + POSE_OFFSET_DIRTY], dirty_bits);
85
+ atomicOr(&pose_accumulator[slot_base + POSE_OFFSET_DIRTY], dirty_bits);
77
86
  }
78
87
  }
79
88
 
@@ -84,55 +93,54 @@ fn pose_accumulator_add_rotation(row: u32, value: vec4<f32>, mask: u32, weight:
84
93
  // right for x/y/z but turns a missing w curve into a 180-degree
85
94
  // rotation after normalisation — pose_evaluate_local, the CPU twin,
86
95
  // defaults w to 1 and the GPU must match.
87
- // The resolve pass normalises the accumulated sum, which is what
88
- // corrects a weighted-vec4 blend back onto the unit 4-sphere.
96
+ // The resolve pass adds rest and normalises the accumulated delta sum,
97
+ // which corrects a weighted-vec4 blend back onto the unit 4-sphere.
89
98
  //
90
- // The value arrives ALREADY multiplied by the clip's weight, which is why
91
- // the weight is passed in rather than inferred: this clip's share of the
92
- // identity's w is the weight, not 1.0. Substituting an unweighted 1.0 made
93
- // one clip at weight 0.5 accumulate (0.5x, 0.5y, 0.5z, 1.0) against the
94
- // twin's (0.5x, 0.5y, 0.5z, 0.5) — a different rotation once normalised,
95
- // pulled toward identity — and it put a floor of 1.0 under the sum's
96
- // length, so the resolve's rest-pose fallback for a zero-length sum could
97
- // not fire and a joint rotated only by a silent clip lost its rest pose.
99
+ // The value arrives ALREADY multiplied by the clip's weight, so by
100
+ // distributive law w_i * (q_i - rest) == value - rest * weight.
98
101
  let w = select(weight, value.w, (mask & 0x8u) != 0u);
99
102
 
100
- let base = pose_accumulator_slot_base(row) + POSE_OFFSET_ROTATION;
101
- atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x);
102
- atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y);
103
- atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z);
104
- atomic_add_f32_storage(&pose_accumulator[base + 3u], w);
103
+ let slot_base = pose_accumulator_slot_base(row);
104
+ let base = slot_base + POSE_OFFSET_ROTATION;
105
+ atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x - rest.x * weight);
106
+ atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y - rest.y * weight);
107
+ atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z - rest.z * weight);
108
+ atomic_add_f32_storage(&pose_accumulator[base + 3u], w - rest.w * weight);
105
109
 
106
110
  // The target's rest rotation, stored rather than added, by every contribution whatever its
107
- // weight: the resolve writes it when the sum has length zero, which is every clip rotating the
108
- // joint playing at weight zero, and by then the row holds the last clip's pose rather than the
109
- // rest. Every binding of one target carries the same rest, so concurrent stores agree.
110
- let rest_base = pose_accumulator_slot_base(row) + POSE_OFFSET_REST_ROTATION;
111
+ // weight: the resolve reconstructs rest + delta from it. Every binding of one target carries
112
+ // the same rest, so concurrent stores agree.
113
+ let rest_base = slot_base + POSE_OFFSET_REST_ROTATION;
111
114
  atomicStore(&pose_accumulator[rest_base + 0u], bitcast<u32>(rest.x));
112
115
  atomicStore(&pose_accumulator[rest_base + 1u], bitcast<u32>(rest.y));
113
116
  atomicStore(&pose_accumulator[rest_base + 2u], bitcast<u32>(rest.z));
114
117
  atomicStore(&pose_accumulator[rest_base + 3u], bitcast<u32>(rest.w));
115
118
 
116
- atomicOr(&pose_accumulator[pose_accumulator_slot_base(row) + POSE_OFFSET_DIRTY], POSE_DIRTY_R);
119
+ atomicOr(&pose_accumulator[slot_base + POSE_OFFSET_DIRTY], POSE_DIRTY_R);
117
120
  }
118
121
 
119
- fn pose_accumulator_add_scale(row: u32, value: vec3<f32>, mask: u32) {
120
- let base = pose_accumulator_slot_base(row) + POSE_OFFSET_SCALE;
122
+ fn pose_accumulator_add_scale(row: u32, value: vec3<f32>, mask: u32, weight: f32, rest: vec3<f32>) {
123
+ let slot_base = pose_accumulator_slot_base(row);
124
+ let base = slot_base + POSE_OFFSET_SCALE;
125
+ let rest_base = slot_base + POSE_OFFSET_REST_SCALE;
121
126
  var dirty_bits: u32 = 0u;
122
127
  if (mask & 0x1u) != 0u {
123
- atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x);
128
+ atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x - rest.x * weight);
129
+ atomicStore(&pose_accumulator[rest_base + 0u], bitcast<u32>(rest.x));
124
130
  dirty_bits |= POSE_DIRTY_SX;
125
131
  }
126
132
  if (mask & 0x2u) != 0u {
127
- atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y);
133
+ atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y - rest.y * weight);
134
+ atomicStore(&pose_accumulator[rest_base + 1u], bitcast<u32>(rest.y));
128
135
  dirty_bits |= POSE_DIRTY_SY;
129
136
  }
130
137
  if (mask & 0x4u) != 0u {
131
- atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z);
138
+ atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z - rest.z * weight);
139
+ atomicStore(&pose_accumulator[rest_base + 2u], bitcast<u32>(rest.z));
132
140
  dirty_bits |= POSE_DIRTY_SZ;
133
141
  }
134
142
  if dirty_bits != 0u {
135
- atomicOr(&pose_accumulator[pose_accumulator_slot_base(row) + POSE_OFFSET_DIRTY], dirty_bits);
143
+ atomicOr(&pose_accumulator[slot_base + POSE_OFFSET_DIRTY], dirty_bits);
136
144
  }
137
145
  }
138
146
  `, [chunk_atomic_add_f32_storage]);
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Botanical and aeroelastic parameters for one skeletal foliage bone in a {@link FoliageWindRig}.
3
+ *
4
+ * When carried on a {@link SceneBundle} or {@link Prefab}, {@link target} is a node index;
5
+ * when bound to a placed instance (`place_tree` or `GPUAnimationManager#register_foliage_rig`),
6
+ * {@link target} is the joint's ECS entity ID.
7
+ */
8
+ export class FoliageWindJoint {
9
+ /**
10
+ * @param {Object} options
11
+ * @param {number} options.target
12
+ * @param {ArrayLike<number>} [options.branch_axis]
13
+ * @param {number} [options.compliance]
14
+ * @param {number} [options.natural_frequency]
15
+ * @param {number} [options.damping_ratio]
16
+ * @param {number} [options.max_angle]
17
+ * @param {number} [options.turbulence]
18
+ * @param {number} [options.phase_offset]
19
+ * @param {number} [options.flutter_phase]
20
+ * @returns {FoliageWindJoint}
21
+ */
22
+ static from({ target, branch_axis, compliance, natural_frequency, damping_ratio, max_angle, turbulence, phase_offset, flutter_phase, }: {
23
+ target: number;
24
+ branch_axis?: ArrayLike<number>;
25
+ compliance?: number;
26
+ natural_frequency?: number;
27
+ damping_ratio?: number;
28
+ max_angle?: number;
29
+ turbulence?: number;
30
+ phase_offset?: number;
31
+ flutter_phase?: number;
32
+ }): FoliageWindJoint;
33
+ /**
34
+ * Target node index (in a `SceneBundle` / `Prefab`) or ECS entity ID (when bound to an instance).
35
+ * @type {number}
36
+ */
37
+ target: number;
38
+ /**
39
+ * Unit growth axis `[dx, dy, dz]` of the branch segment in tree model space.
40
+ * @type {Float32Array}
41
+ */
42
+ branch_axis: Float32Array;
43
+ /**
44
+ * Rotational aeroelastic compliance (`rad / (m/s)^2`) derived from the pipe-model cross-section radius.
45
+ * @type {number}
46
+ */
47
+ compliance: number;
48
+ /**
49
+ * Undamped natural angular frequency `omega_0` (`rad/s`) of the branch's restoring stiffness.
50
+ * @type {number}
51
+ */
52
+ natural_frequency: number;
53
+ /**
54
+ * Dimensionless damping ratio `zeta` (`> 0`).
55
+ * @type {number}
56
+ */
57
+ damping_ratio: number;
58
+ /**
59
+ * Asymptotic soft-saturation deflection angle limit in radians (`theta_max`).
60
+ * @type {number}
61
+ */
62
+ max_angle: number;
63
+ /**
64
+ * Strouhal vortex-shedding oscillation amplitude factor.
65
+ * @type {number}
66
+ */
67
+ turbulence: number;
68
+ /**
69
+ * Initial vortex-shedding phase offset in radians.
70
+ * @type {number}
71
+ */
72
+ phase_offset: number;
73
+ /**
74
+ * @param {number} v
75
+ */
76
+ set flutter_phase(v: number);
77
+ /**
78
+ * Alias for {@link phase_offset}.
79
+ * @returns {number}
80
+ */
81
+ get flutter_phase(): number;
82
+ /**
83
+ * @param {FoliageWindJoint} other
84
+ * @returns {this}
85
+ */
86
+ copy(other: FoliageWindJoint): this;
87
+ /**
88
+ * @returns {FoliageWindJoint}
89
+ */
90
+ clone(): FoliageWindJoint;
91
+ /**
92
+ * @readonly
93
+ * @type {boolean}
94
+ */
95
+ readonly isFoliageWindJoint: boolean;
96
+ }
97
+ //# sourceMappingURL=FoliageWindJoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoliageWindJoint.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/foliage/FoliageWindJoint.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH;IAgEI;;;;;;;;;;;;OAYG;IACH;QAX2B,MAAM,EAAtB,MAAM;QACsB,WAAW,GAAvC,UAAU,MAAM,CAAC;QACA,UAAU,GAA3B,MAAM;QACW,iBAAiB,GAAlC,MAAM;QACW,aAAa,GAA9B,MAAM;QACW,SAAS,GAA1B,MAAM;QACW,UAAU,GAA3B,MAAM;QACW,YAAY,GAA7B,MAAM;QACW,aAAa,GAA9B,MAAM;QACJ,gBAAgB,CAyC5B;IAnHD;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,aAFU,YAAY,CAEoB;IAE1C;;;OAGG;IACH,YAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,mBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,eAFU,MAAM,CAEK;IAErB;;;OAGG;IACH,WAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,YAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,cAFU,MAAM,CAEG;IAUnB;;OAEG;IACH,6BAEC;IAbD;;;OAGG;IACH,4BAEC;IA+DD;;;OAGG;IACH,YAHW,gBAAgB,GACd,IAAI,CAehB;IAED;;OAEG;IACH,SAFa,gBAAgB,CAM5B;IAGL;;;OAGG;IACH,6BAFU,OAAO,CAE4B;CAN5C"}
@@ -0,0 +1,161 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+
3
+ /**
4
+ * Botanical and aeroelastic parameters for one skeletal foliage bone in a {@link FoliageWindRig}.
5
+ *
6
+ * When carried on a {@link SceneBundle} or {@link Prefab}, {@link target} is a node index;
7
+ * when bound to a placed instance (`place_tree` or `GPUAnimationManager#register_foliage_rig`),
8
+ * {@link target} is the joint's ECS entity ID.
9
+ */
10
+ export class FoliageWindJoint {
11
+ /**
12
+ * Target node index (in a `SceneBundle` / `Prefab`) or ECS entity ID (when bound to an instance).
13
+ * @type {number}
14
+ */
15
+ target = 0;
16
+
17
+ /**
18
+ * Unit growth axis `[dx, dy, dz]` of the branch segment in tree model space.
19
+ * @type {Float32Array}
20
+ */
21
+ branch_axis = new Float32Array([0, 1, 0]);
22
+
23
+ /**
24
+ * Rotational aeroelastic compliance (`rad / (m/s)^2`) derived from the pipe-model cross-section radius.
25
+ * @type {number}
26
+ */
27
+ compliance = 0.02;
28
+
29
+ /**
30
+ * Undamped natural angular frequency `omega_0` (`rad/s`) of the branch's restoring stiffness.
31
+ * @type {number}
32
+ */
33
+ natural_frequency = 3.0;
34
+
35
+ /**
36
+ * Dimensionless damping ratio `zeta` (`> 0`).
37
+ * @type {number}
38
+ */
39
+ damping_ratio = 0.45;
40
+
41
+ /**
42
+ * Asymptotic soft-saturation deflection angle limit in radians (`theta_max`).
43
+ * @type {number}
44
+ */
45
+ max_angle = 0.45;
46
+
47
+ /**
48
+ * Strouhal vortex-shedding oscillation amplitude factor.
49
+ * @type {number}
50
+ */
51
+ turbulence = 0.35;
52
+
53
+ /**
54
+ * Initial vortex-shedding phase offset in radians.
55
+ * @type {number}
56
+ */
57
+ phase_offset = 0.0;
58
+
59
+ /**
60
+ * Alias for {@link phase_offset}.
61
+ * @returns {number}
62
+ */
63
+ get flutter_phase() {
64
+ return this.phase_offset;
65
+ }
66
+
67
+ /**
68
+ * @param {number} v
69
+ */
70
+ set flutter_phase(v) {
71
+ this.phase_offset = v;
72
+ }
73
+
74
+ /**
75
+ * @param {Object} options
76
+ * @param {number} options.target
77
+ * @param {ArrayLike<number>} [options.branch_axis]
78
+ * @param {number} [options.compliance]
79
+ * @param {number} [options.natural_frequency]
80
+ * @param {number} [options.damping_ratio]
81
+ * @param {number} [options.max_angle]
82
+ * @param {number} [options.turbulence]
83
+ * @param {number} [options.phase_offset]
84
+ * @param {number} [options.flutter_phase]
85
+ * @returns {FoliageWindJoint}
86
+ */
87
+ static from({
88
+ target,
89
+ branch_axis = [0, 1, 0],
90
+ compliance = 0.02,
91
+ natural_frequency = 3.0,
92
+ damping_ratio = 0.45,
93
+ max_angle = 0.45,
94
+ turbulence = 0.35,
95
+ phase_offset,
96
+ flutter_phase = 0.0,
97
+ }) {
98
+ assert.isNonNegativeInteger(target, 'target');
99
+ const r = new FoliageWindJoint();
100
+ r.target = target;
101
+
102
+ let ax = branch_axis[0] ?? 0;
103
+ let ay = branch_axis[1] ?? 1;
104
+ let az = branch_axis[2] ?? 0;
105
+ const len = Math.hypot(ax, ay, az);
106
+ if (len > 1e-6) {
107
+ ax /= len;
108
+ ay /= len;
109
+ az /= len;
110
+ } else {
111
+ ax = 0;
112
+ ay = 1;
113
+ az = 0;
114
+ }
115
+ r.branch_axis[0] = ax;
116
+ r.branch_axis[1] = ay;
117
+ r.branch_axis[2] = az;
118
+
119
+ r.compliance = Math.max(0, compliance);
120
+ r.natural_frequency = Math.max(0.1, natural_frequency);
121
+ r.damping_ratio = Math.max(0.05, damping_ratio);
122
+ r.max_angle = Math.max(0.01, max_angle);
123
+ r.turbulence = Math.max(0, turbulence);
124
+ r.phase_offset = phase_offset !== undefined ? phase_offset : flutter_phase;
125
+ return r;
126
+ }
127
+
128
+ /**
129
+ * @param {FoliageWindJoint} other
130
+ * @returns {this}
131
+ */
132
+ copy(other) {
133
+ assert.defined(other, 'other');
134
+ this.target = other.target;
135
+ this.branch_axis[0] = other.branch_axis[0];
136
+ this.branch_axis[1] = other.branch_axis[1];
137
+ this.branch_axis[2] = other.branch_axis[2];
138
+ this.compliance = other.compliance;
139
+ this.natural_frequency = other.natural_frequency;
140
+ this.damping_ratio = other.damping_ratio;
141
+ this.max_angle = other.max_angle;
142
+ this.turbulence = other.turbulence;
143
+ this.phase_offset = other.phase_offset;
144
+ return this;
145
+ }
146
+
147
+ /**
148
+ * @returns {FoliageWindJoint}
149
+ */
150
+ clone() {
151
+ const r = new FoliageWindJoint();
152
+ r.copy(this);
153
+ return r;
154
+ }
155
+ }
156
+
157
+ /**
158
+ * @readonly
159
+ * @type {boolean}
160
+ */
161
+ FoliageWindJoint.prototype.isFoliageWindJoint = true;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Aeroelastic foliage bone rig descriptor for GPU fluid-driven skeletal wind animation.
3
+ *
4
+ * Unlike a baked keyframe {@link ShadeAnimationClip}, a `FoliageWindRig` defines the physical
5
+ * and botanical parameters of each skeletal branch joint (`branch_axis`, `compliance`,
6
+ * `natural_frequency`, `damping_ratio`, `max_angle`, `turbulence`, `phase_offset`).
7
+ *
8
+ * At runtime, `GPUAnimationManager` evaluates `shader_foliage_wind_apply` on the GPU, sampling
9
+ * the scene's 3D fluid wind field (`GPUSceneWind` / `wind_field_sample(pos_ws)`) at each bone's
10
+ * world position, stepping a second-order damped spring-damper oscillator with Strouhal vortex
11
+ * shedding, and contributing the resulting bone rotations into `pose_accumulator`.
12
+ */
13
+ export class FoliageWindRig {
14
+ /**
15
+ * @param {Object} options
16
+ * @param {string} [options.name=""]
17
+ * @param {number} [options.root=0]
18
+ * @param {number} [options.weight=1.0]
19
+ * @param {FoliageWindJoint[]} [options.joints=[]]
20
+ * @returns {FoliageWindRig}
21
+ */
22
+ static from({ name, root, weight, joints }?: {
23
+ name?: string;
24
+ root?: number;
25
+ weight?: number;
26
+ joints?: FoliageWindJoint[];
27
+ }): FoliageWindRig;
28
+ /**
29
+ * Optional rig name.
30
+ * @type {string}
31
+ */
32
+ name: string;
33
+ /**
34
+ * Root node index (in a `SceneBundle` / `Prefab`, typically `0`) or root ECS entity ID (when bound).
35
+ * Used by the GPU solver to transform world-space wind vectors into the tree's model frame.
36
+ * @type {number}
37
+ */
38
+ root: number;
39
+ /**
40
+ * Overall rig contribution weight (`1.0` = full aeroelastic response).
41
+ * @type {number}
42
+ */
43
+ weight: number;
44
+ /**
45
+ * Aeroelastic joints in this rig.
46
+ * @type {FoliageWindJoint[]}
47
+ */
48
+ joints: FoliageWindJoint[];
49
+ /**
50
+ * @param {FoliageWindRig} other
51
+ * @returns {this}
52
+ */
53
+ copy(other: FoliageWindRig): this;
54
+ /**
55
+ * @returns {FoliageWindRig}
56
+ */
57
+ clone(): FoliageWindRig;
58
+ /**
59
+ * @readonly
60
+ * @type {boolean}
61
+ */
62
+ readonly isFoliageWindRig: boolean;
63
+ }
64
+ import { FoliageWindJoint } from "./FoliageWindJoint.js";
65
+ //# sourceMappingURL=FoliageWindRig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoliageWindRig.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/foliage/FoliageWindRig.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH;IA0BI;;;;;;;OAOG;IACH;QAN4B,IAAI,GAArB,MAAM;QACW,IAAI,GAArB,MAAM;QACW,MAAM,GAAvB,MAAM;QACuB,MAAM,GAAnC,gBAAgB,EAAE;QAChB,cAAc,CAY1B;IA3CD;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,QAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,QAFU,gBAAgB,EAAE,CAEhB;IAsBZ;;;OAGG;IACH,YAHW,cAAc,GACZ,IAAI,CAShB;IAED;;OAEG;IACH,SAFa,cAAc,CAM1B;IAGL;;;OAGG;IACH,2BAFU,OAAO,CAEwB;CANxC;iCAjFgC,uBAAuB"}
@@ -0,0 +1,89 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { FoliageWindJoint } from "./FoliageWindJoint.js";
3
+
4
+ /**
5
+ * Aeroelastic foliage bone rig descriptor for GPU fluid-driven skeletal wind animation.
6
+ *
7
+ * Unlike a baked keyframe {@link ShadeAnimationClip}, a `FoliageWindRig` defines the physical
8
+ * and botanical parameters of each skeletal branch joint (`branch_axis`, `compliance`,
9
+ * `natural_frequency`, `damping_ratio`, `max_angle`, `turbulence`, `phase_offset`).
10
+ *
11
+ * At runtime, `GPUAnimationManager` evaluates `shader_foliage_wind_apply` on the GPU, sampling
12
+ * the scene's 3D fluid wind field (`GPUSceneWind` / `wind_field_sample(pos_ws)`) at each bone's
13
+ * world position, stepping a second-order damped spring-damper oscillator with Strouhal vortex
14
+ * shedding, and contributing the resulting bone rotations into `pose_accumulator`.
15
+ */
16
+ export class FoliageWindRig {
17
+ /**
18
+ * Optional rig name.
19
+ * @type {string}
20
+ */
21
+ name = "";
22
+
23
+ /**
24
+ * Root node index (in a `SceneBundle` / `Prefab`, typically `0`) or root ECS entity ID (when bound).
25
+ * Used by the GPU solver to transform world-space wind vectors into the tree's model frame.
26
+ * @type {number}
27
+ */
28
+ root = 0;
29
+
30
+ /**
31
+ * Overall rig contribution weight (`1.0` = full aeroelastic response).
32
+ * @type {number}
33
+ */
34
+ weight = 1.0;
35
+
36
+ /**
37
+ * Aeroelastic joints in this rig.
38
+ * @type {FoliageWindJoint[]}
39
+ */
40
+ joints = [];
41
+
42
+ /**
43
+ * @param {Object} options
44
+ * @param {string} [options.name=""]
45
+ * @param {number} [options.root=0]
46
+ * @param {number} [options.weight=1.0]
47
+ * @param {FoliageWindJoint[]} [options.joints=[]]
48
+ * @returns {FoliageWindRig}
49
+ */
50
+ static from({ name = "", root = 0, weight = 1.0, joints = [] } = {}) {
51
+ assert.isNonNegativeInteger(root, 'root');
52
+ assert.isArray(joints, 'joints');
53
+
54
+ const r = new FoliageWindRig();
55
+ r.name = name;
56
+ r.root = root;
57
+ r.weight = weight;
58
+ r.joints = joints.map((j) => (j && j.isFoliageWindJoint ? j.clone() : FoliageWindJoint.from(j)));
59
+ return r;
60
+ }
61
+
62
+ /**
63
+ * @param {FoliageWindRig} other
64
+ * @returns {this}
65
+ */
66
+ copy(other) {
67
+ assert.defined(other, 'other');
68
+ this.name = other.name;
69
+ this.root = other.root;
70
+ this.weight = other.weight;
71
+ this.joints = other.joints.map((j) => j.clone());
72
+ return this;
73
+ }
74
+
75
+ /**
76
+ * @returns {FoliageWindRig}
77
+ */
78
+ clone() {
79
+ const r = new FoliageWindRig();
80
+ r.copy(this);
81
+ return r;
82
+ }
83
+ }
84
+
85
+ /**
86
+ * @readonly
87
+ * @type {boolean}
88
+ */
89
+ FoliageWindRig.prototype.isFoliageWindRig = true;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Aeroelastic foliage bone step and local pose composition.
3
+ *
4
+ * - `foliage_wind_to_model(wind_ws, root_global)`: projects a world-space fluid velocity (m/s)
5
+ * onto the unit local axes of the tree root's world matrix (`mat4_extract_scale` + `v3_safe_rcp`),
6
+ * preserving metric wind speed regardless of node scale.
7
+ * - `foliage_wind_step(joint, wind_model, dt)`: evaluates cross-flow aerodynamic drag torque and
8
+ * Strouhal vortex-shedding oscillation around the bone's rest `branch_axis` (using
9
+ * `build_orthonormal_matrix_n` when flow is axial), soft-saturates the target deflection to
10
+ * `joint.max_angle`, and advances the bone's 2nd-order damped spring-damper state with an
11
+ * unconditionally stable implicit Euler step.
12
+ * - `foliage_wind_local_rotation(rest_rotation, angular_displacement)`: composes the bone's
13
+ * rest quaternion with the axis-angle deflection (`quat_from_axis_angle` + `quat_multiply`).
14
+ *
15
+ * @type {CodeChunk}
16
+ */
17
+ export const chunk_foliage_wind_step: CodeChunk;
18
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
19
+ //# sourceMappingURL=chunk_foliage_wind_step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_foliage_wind_step.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;GAeG;AACH,sCAFU,SAAS,CAmHjB;0BApIwB,oCAAoC"}