@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
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Evaluates the normalized radial crown envelope profile $S_{\text{env}}(h_{\text{norm}}) \in [0.05, 1.0]$
3
+ * at normalized crown height $h_{\text{norm}} \in [0, 1]$ (0 = base of crown, 1 = apex of crown).
4
+ *
5
+ * Implements Weber & Penn (1995) / SpeedTree botanical crown envelope shapes.
6
+ *
7
+ * @param {CrownEnvelopeType|number} envelope_type
8
+ * @param {number} h_norm normalized height in [0, 1]
9
+ * @param {number} [prune_width_peak=0.6] normalized height of maximum crown width for asymmetric envelopes
10
+ * @param {number} [power_low=1.5] lower envelope exponent
11
+ * @param {number} [power_high=1.5] upper envelope exponent
12
+ * @returns {number} radial envelope factor in [0.05, 1.0]
13
+ */
14
+ export function crown_envelope_evaluate(envelope_type: CrownEnvelopeType | number, h_norm: number, prune_width_peak?: number, power_low?: number, power_high?: number): number;
15
+ /**
16
+ * Evaluates a signed distance approximation to the 3D crown envelope around the `+Y` trunk axis.
17
+ * Negative inside the crown envelope, positive outside.
18
+ *
19
+ * @param {number} px
20
+ * @param {number} py
21
+ * @param {number} pz
22
+ * @param {import("../config/CrownConfig.js").CrownConfig} crown_config
23
+ * @returns {number}
24
+ */
25
+ export function crown_envelope_sdf(px: number, py: number, pz: number, crown_config: import("../config/CrownConfig.js").CrownConfig): number;
26
+ import { CrownEnvelopeType } from "../config/CrownEnvelopeType.js";
27
+ //# sourceMappingURL=crown_envelope_evaluate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crown_envelope_evaluate.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/crown_envelope_evaluate.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,uDAPW,iBAAiB,GAAC,MAAM,UACxB,MAAM,qBACN,MAAM,cACN,MAAM,eACN,MAAM,GACJ,MAAM,CAyElB;AAED;;;;;;;;;GASG;AACH,uCANW,MAAM,MACN,MAAM,MACN,MAAM,gBACN,OAAO,0BAA0B,EAAE,WAAW,GAC5C,MAAM,CAuBlB;kCAvHiC,gCAAgC"}
@@ -0,0 +1,121 @@
1
+ import { clamp } from "../../../core/math/clamp.js";
2
+ import { CrownEnvelopeType } from "../config/CrownEnvelopeType.js";
3
+
4
+ /**
5
+ * Evaluates the normalized radial crown envelope profile $S_{\text{env}}(h_{\text{norm}}) \in [0.05, 1.0]$
6
+ * at normalized crown height $h_{\text{norm}} \in [0, 1]$ (0 = base of crown, 1 = apex of crown).
7
+ *
8
+ * Implements Weber & Penn (1995) / SpeedTree botanical crown envelope shapes.
9
+ *
10
+ * @param {CrownEnvelopeType|number} envelope_type
11
+ * @param {number} h_norm normalized height in [0, 1]
12
+ * @param {number} [prune_width_peak=0.6] normalized height of maximum crown width for asymmetric envelopes
13
+ * @param {number} [power_low=1.5] lower envelope exponent
14
+ * @param {number} [power_high=1.5] upper envelope exponent
15
+ * @returns {number} radial envelope factor in [0.05, 1.0]
16
+ */
17
+ export function crown_envelope_evaluate(
18
+ envelope_type,
19
+ h_norm,
20
+ prune_width_peak = 0.6,
21
+ power_low = 1.5,
22
+ power_high = 1.5
23
+ ) {
24
+ const h = clamp(h_norm, 0.0, 1.0);
25
+ let val = 1.0;
26
+
27
+ switch (envelope_type) {
28
+ case CrownEnvelopeType.Conical:
29
+ val = 0.2 + 0.8 * (1.0 - h);
30
+ break;
31
+
32
+ case CrownEnvelopeType.Spherical:
33
+ val = 0.2 + 0.8 * Math.sin(Math.PI * h);
34
+ break;
35
+
36
+ case CrownEnvelopeType.Hemispherical:
37
+ val = 0.2 + 0.8 * Math.sin(0.5 * Math.PI * (1.0 - h));
38
+ break;
39
+
40
+ case CrownEnvelopeType.Cylindrical:
41
+ val = 1.0;
42
+ break;
43
+
44
+ case CrownEnvelopeType.TaperedCylindrical:
45
+ val = 0.5 + 0.5 * (1.0 - h);
46
+ break;
47
+
48
+ case CrownEnvelopeType.Flame:
49
+ if (h <= 0.7) {
50
+ val = h / 0.7;
51
+ } else {
52
+ val = (1.0 - h) / 0.3;
53
+ }
54
+ val = 0.15 + 0.85 * val;
55
+ break;
56
+
57
+ case CrownEnvelopeType.InverseConical:
58
+ val = 0.2 + 0.8 * h;
59
+ break;
60
+
61
+ case CrownEnvelopeType.TendFlame:
62
+ if (h <= 0.7) {
63
+ val = 0.5 + 0.5 * (h / 0.7);
64
+ } else {
65
+ val = 0.5 + 0.5 * ((1.0 - h) / 0.3);
66
+ }
67
+ break;
68
+
69
+ case CrownEnvelopeType.Weeping: {
70
+ const peak = clamp(prune_width_peak, 0.1, 0.9);
71
+ if (h < peak) {
72
+ const u = (peak - h) / peak;
73
+ val = 1.0 - Math.pow(u, power_low);
74
+ } else {
75
+ const u = (h - peak) / (1.0 - peak);
76
+ val = 1.0 - Math.pow(u, power_high);
77
+ }
78
+ val = 0.18 + 0.82 * Math.max(0.0, val);
79
+ break;
80
+ }
81
+
82
+ default:
83
+ val = 0.2 + 0.8 * Math.sin(Math.PI * h);
84
+ break;
85
+ }
86
+
87
+ return clamp(val, 0.05, 1.0);
88
+ }
89
+
90
+ /**
91
+ * Evaluates a signed distance approximation to the 3D crown envelope around the `+Y` trunk axis.
92
+ * Negative inside the crown envelope, positive outside.
93
+ *
94
+ * @param {number} px
95
+ * @param {number} py
96
+ * @param {number} pz
97
+ * @param {import("../config/CrownConfig.js").CrownConfig} crown_config
98
+ * @returns {number}
99
+ */
100
+ export function crown_envelope_sdf(px, py, pz, crown_config) {
101
+ const base_y = crown_config.base_height;
102
+ const height = Math.max(0.1, crown_config.height);
103
+ const max_r = Math.max(0.1, crown_config.radius);
104
+
105
+ const h_norm = (py - base_y) / height;
106
+ const r_horiz = Math.sqrt(px * px + pz * pz);
107
+ const r_env = max_r * crown_envelope_evaluate(crown_config.envelope_type, clamp(h_norm, 0.0, 1.0));
108
+
109
+ const d_radial = r_horiz - r_env;
110
+ let d_vert = 0.0;
111
+ if (py < base_y) {
112
+ d_vert = base_y - py;
113
+ } else if (py > base_y + height) {
114
+ d_vert = py - (base_y + height);
115
+ }
116
+
117
+ if (d_vert > 0.0 && d_radial > 0.0) {
118
+ return Math.sqrt(d_radial * d_radial + d_vert * d_vert);
119
+ }
120
+ return Math.max(d_radial, d_vert > 0.0 ? d_vert : (Math.abs(h_norm - 0.5) - 0.5) * height);
121
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Computes a fourth-order accurate Rotation-Minimizing Frame (RMF) along a 3D spine step
3
+ * using the Double Reflection method (Wang, Jüttler, Zheng, & Liu, ACM TOG 2008).
4
+ *
5
+ * Writes the orthonormal cross-section basis `[Rx1, Ry1, Rz1, Sx1, Sy1, Sz1]` at `(x1, y1, z1)`
6
+ * into `out` starting at `out_offset`, where `S1 = T1 x R1`.
7
+ *
8
+ * Includes full numerical guards for:
9
+ * - Zero displacement (`||x1 - x0||^2 <= 1e-12`): delegates to `tube_frame_transport`.
10
+ * - Anti-parallel reflected tangent (`||T1 - T0_L||^2 <= 1e-12`): skips second reflection.
11
+ * - Gram-Schmidt re-orthonormalization against `T1` so `R1` is strictly unit and perpendicular to `T1`.
12
+ *
13
+ * @param {number[]|Float32Array|Float64Array} out
14
+ * @param {number} out_offset
15
+ * @param {number} x0 previous position X
16
+ * @param {number} y0 previous position Y
17
+ * @param {number} z0 previous position Z
18
+ * @param {number} tx0 previous unit tangent X
19
+ * @param {number} ty0 previous unit tangent Y
20
+ * @param {number} tz0 previous unit tangent Z
21
+ * @param {number} rx0 previous unit radial reference X
22
+ * @param {number} ry0 previous unit radial reference Y
23
+ * @param {number} rz0 previous unit radial reference Z
24
+ * @param {number} x1 current position X
25
+ * @param {number} y1 current position Y
26
+ * @param {number} z1 current position Z
27
+ * @param {number} tx1 current unit tangent X
28
+ * @param {number} ty1 current unit tangent Y
29
+ * @param {number} tz1 current unit tangent Z
30
+ */
31
+ export function spine_frame_double_reflection(out: number[] | Float32Array | Float64Array, out_offset: number, x0: number, y0: number, z0: number, tx0: number, ty0: number, tz0: number, rx0: number, ry0: number, rz0: number, x1: number, y1: number, z1: number, tx1: number, ty1: number, tz1: number): void;
32
+ //# sourceMappingURL=spine_frame_double_reflection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spine_frame_double_reflection.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/spine_frame_double_reflection.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,mDAlBW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,QAsDhB"}
@@ -0,0 +1,87 @@
1
+ import { tube_frame_transport } from "../../../engine/graphics/trail/tube/tube_frame.js";
2
+
3
+ const DEGENERATE_EPSILON = 1e-12;
4
+
5
+ /**
6
+ * Computes a fourth-order accurate Rotation-Minimizing Frame (RMF) along a 3D spine step
7
+ * using the Double Reflection method (Wang, Jüttler, Zheng, & Liu, ACM TOG 2008).
8
+ *
9
+ * Writes the orthonormal cross-section basis `[Rx1, Ry1, Rz1, Sx1, Sy1, Sz1]` at `(x1, y1, z1)`
10
+ * into `out` starting at `out_offset`, where `S1 = T1 x R1`.
11
+ *
12
+ * Includes full numerical guards for:
13
+ * - Zero displacement (`||x1 - x0||^2 <= 1e-12`): delegates to `tube_frame_transport`.
14
+ * - Anti-parallel reflected tangent (`||T1 - T0_L||^2 <= 1e-12`): skips second reflection.
15
+ * - Gram-Schmidt re-orthonormalization against `T1` so `R1` is strictly unit and perpendicular to `T1`.
16
+ *
17
+ * @param {number[]|Float32Array|Float64Array} out
18
+ * @param {number} out_offset
19
+ * @param {number} x0 previous position X
20
+ * @param {number} y0 previous position Y
21
+ * @param {number} z0 previous position Z
22
+ * @param {number} tx0 previous unit tangent X
23
+ * @param {number} ty0 previous unit tangent Y
24
+ * @param {number} tz0 previous unit tangent Z
25
+ * @param {number} rx0 previous unit radial reference X
26
+ * @param {number} ry0 previous unit radial reference Y
27
+ * @param {number} rz0 previous unit radial reference Z
28
+ * @param {number} x1 current position X
29
+ * @param {number} y1 current position Y
30
+ * @param {number} z1 current position Z
31
+ * @param {number} tx1 current unit tangent X
32
+ * @param {number} ty1 current unit tangent Y
33
+ * @param {number} tz1 current unit tangent Z
34
+ */
35
+ export function spine_frame_double_reflection(
36
+ out,
37
+ out_offset,
38
+ x0, y0, z0,
39
+ tx0, ty0, tz0,
40
+ rx0, ry0, rz0,
41
+ x1, y1, z1,
42
+ tx1, ty1, tz1
43
+ ) {
44
+ const v1x = x1 - x0;
45
+ const v1y = y1 - y0;
46
+ const v1z = z1 - z0;
47
+ const c1 = v1x * v1x + v1y * v1y + v1z * v1z;
48
+
49
+ if (c1 <= DEGENERATE_EPSILON) {
50
+ tube_frame_transport(out, out_offset, tx1, ty1, tz1, rx0, ry0, rz0);
51
+ return;
52
+ }
53
+
54
+ const two_inv_c1 = 2.0 / c1;
55
+ const dot_v1_r0 = v1x * rx0 + v1y * ry0 + v1z * rz0;
56
+ const dot_v1_t0 = v1x * tx0 + v1y * ty0 + v1z * tz0;
57
+
58
+ // First Householder reflection across hyperplane bisecting x0 and x1
59
+ const rLx = rx0 - two_inv_c1 * dot_v1_r0 * v1x;
60
+ const rLy = ry0 - two_inv_c1 * dot_v1_r0 * v1y;
61
+ const rLz = rz0 - two_inv_c1 * dot_v1_r0 * v1z;
62
+
63
+ const tLx = tx0 - two_inv_c1 * dot_v1_t0 * v1x;
64
+ const tLy = ty0 - two_inv_c1 * dot_v1_t0 * v1y;
65
+ const tLz = tz0 - two_inv_c1 * dot_v1_t0 * v1z;
66
+
67
+ // Second Householder reflection aligning tL with t1
68
+ const v2x = tx1 - tLx;
69
+ const v2y = ty1 - tLy;
70
+ const v2z = tz1 - tLz;
71
+ const c2 = v2x * v2x + v2y * v2y + v2z * v2z;
72
+
73
+ let rx1 = rLx;
74
+ let ry1 = rLy;
75
+ let rz1 = rLz;
76
+
77
+ if (c2 > DEGENERATE_EPSILON) {
78
+ const two_inv_c2 = 2.0 / c2;
79
+ const dot_v2_rL = v2x * rLx + v2y * rLy + v2z * rLz;
80
+ rx1 = rLx - two_inv_c2 * dot_v2_rL * v2x;
81
+ ry1 = rLy - two_inv_c2 * dot_v2_rL * v2y;
82
+ rz1 = rLz - two_inv_c2 * dot_v2_rL * v2z;
83
+ }
84
+
85
+ // Gram-Schmidt projection + normalization via tube_frame_transport to prevent floating-point drift
86
+ tube_frame_transport(out, out_offset, tx1, ty1, tz1, rx1, ry1, rz1);
87
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Selects up to `max_joints` structural skeleton nodes in strict topological pre-order
3
+ * (`joint_parents[j] < j`) from `skeleton.graph` for GPU skeletal wind animation (`Skin`),
4
+ * and writes `[primary_joint_index, parent_joint_index]` into `skeleton.attr_node_joint` for every node.
5
+ *
6
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
7
+ * @param {number} [max_joints=32]
8
+ * @returns {{
9
+ * joint_count: number,
10
+ * joint_vertex_ids: Int32Array,
11
+ * joint_parents: Int32Array,
12
+ * joint_positions: Float32Array,
13
+ * joint_tangents: Float32Array,
14
+ * joint_levels: Uint8Array,
15
+ * joint_phases: Float32Array,
16
+ * joint_t_norms: Float32Array,
17
+ * joint_radii: Float32Array,
18
+ * joint_lengths: Float32Array
19
+ * }}
20
+ */
21
+ export function tree_skeleton_assign_skin_joints(skeleton: import("./TreeSkeleton.js").TreeSkeleton, max_joints?: number): {
22
+ joint_count: number;
23
+ joint_vertex_ids: Int32Array;
24
+ joint_parents: Int32Array;
25
+ joint_positions: Float32Array;
26
+ joint_tangents: Float32Array;
27
+ joint_levels: Uint8Array;
28
+ joint_phases: Float32Array;
29
+ joint_t_norms: Float32Array;
30
+ joint_radii: Float32Array;
31
+ joint_lengths: Float32Array;
32
+ };
33
+ //# sourceMappingURL=tree_skeleton_assign_skin_joints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree_skeleton_assign_skin_joints.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,2DAfW,OAAO,mBAAmB,EAAE,YAAY,eACxC,MAAM,GACJ;IACZ,WAAe,EAAE,MAAM,CAAC;IACxB,gBAAoB,EAAE,UAAU,CAAC;IACjC,aAAiB,EAAE,UAAU,CAAC;IAC9B,eAAmB,EAAE,YAAY,CAAC;IAClC,cAAkB,EAAE,YAAY,CAAC;IACjC,YAAgB,EAAE,UAAU,CAAC;IAC7B,YAAgB,EAAE,YAAY,CAAC;IAC/B,aAAiB,EAAE,YAAY,CAAC;IAChC,WAAe,EAAE,YAAY,CAAC;IAC9B,aAAiB,EAAE,YAAY,CAAA;CAC5B,CAsLH"}
@@ -0,0 +1,205 @@
1
+ const SCRATCH_POS = new Float32Array(3);
2
+ const SCRATCH_TAN = new Float32Array(3);
3
+ const SCRATCH_PARAM = new Float32Array(3);
4
+
5
+ /**
6
+ * Selects up to `max_joints` structural skeleton nodes in strict topological pre-order
7
+ * (`joint_parents[j] < j`) from `skeleton.graph` for GPU skeletal wind animation (`Skin`),
8
+ * and writes `[primary_joint_index, parent_joint_index]` into `skeleton.attr_node_joint` for every node.
9
+ *
10
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
11
+ * @param {number} [max_joints=32]
12
+ * @returns {{
13
+ * joint_count: number,
14
+ * joint_vertex_ids: Int32Array,
15
+ * joint_parents: Int32Array,
16
+ * joint_positions: Float32Array,
17
+ * joint_tangents: Float32Array,
18
+ * joint_levels: Uint8Array,
19
+ * joint_phases: Float32Array,
20
+ * joint_t_norms: Float32Array,
21
+ * joint_radii: Float32Array,
22
+ * joint_lengths: Float32Array
23
+ * }}
24
+ */
25
+ export function tree_skeleton_assign_skin_joints(skeleton, max_joints = 32) {
26
+ const vertex_count = skeleton.node_count;
27
+ const budget = Math.max(1, max_joints | 0);
28
+
29
+ if (vertex_count === 0) {
30
+ return {
31
+ joint_count: 1,
32
+ joint_vertex_ids: new Int32Array([0]),
33
+ joint_parents: new Int32Array([-1]),
34
+ joint_positions: new Float32Array([0, 0, 0]),
35
+ joint_tangents: new Float32Array([0, 1, 0]),
36
+ joint_levels: new Uint8Array([0]),
37
+ joint_phases: new Float32Array([0]),
38
+ joint_t_norms: new Float32Array([0]),
39
+ joint_radii: new Float32Array([0.1]),
40
+ joint_lengths: new Float32Array([1.0])
41
+ };
42
+ }
43
+
44
+ // Mark candidate nodes by branch-aware round-robin so the joint budget is distributed
45
+ // across the trunk (2-4 joints) AND all primary boughs around 360° of the crown,
46
+ // then iterate node IDs in ascending order to guarantee topological pre-order (parent < child).
47
+ const is_selected = new Uint8Array(vertex_count);
48
+ let selected_count = 0;
49
+
50
+ // Always include node 0 (trunk root) as joint 0
51
+ is_selected[0] = 1;
52
+ selected_count = 1;
53
+
54
+ const branch_count = skeleton.branch_count;
55
+
56
+ // 1. Trunk / level-0 branches: pick up to 3 evenly spaced milestones (t ~ 0.35, 0.68, 1.0)
57
+ const max_trunk_joints = Math.min(budget, Math.max(2, Math.min(5, Math.floor(budget * 0.2))));
58
+ const trunk_targets = [0.38, 0.72, 1.0];
59
+ for (let m = 0; m < trunk_targets.length && selected_count < max_trunk_joints; m++) {
60
+ const target_t = trunk_targets[m];
61
+ for (let b = 0; b < branch_count && selected_count < max_trunk_joints; b++) {
62
+ if (skeleton.branch_level[b] !== 0) continue;
63
+ const nodes = [];
64
+ const edges = [];
65
+ skeleton.collect_branch_chain(b, nodes, edges);
66
+ let best_v = -1;
67
+ let best_dist = Infinity;
68
+ for (let i = 1; i < nodes.length; i++) {
69
+ const v = nodes[i];
70
+ if (is_selected[v]) continue;
71
+ const d = Math.abs(skeleton.node_t_norm(v) - target_t);
72
+ if (d < best_dist) {
73
+ best_dist = d;
74
+ best_v = v;
75
+ }
76
+ }
77
+ if (best_v >= 0 && best_dist <= 0.28) {
78
+ is_selected[best_v] = 1;
79
+ selected_count++;
80
+ }
81
+ }
82
+ }
83
+
84
+ // 2. Primary boughs (level === 1): first select root hinge nodes[0] so every bough pivots at its trunk collar,
85
+ // then select a mid-bough node (~0.55) on a second pass for multi-segment bough bending.
86
+ for (let pass = 0; pass < 2 && selected_count < budget; pass++) {
87
+ for (let b = 0; b < branch_count && selected_count < budget; b++) {
88
+ if (skeleton.branch_level[b] !== 1) continue;
89
+ const nodes = [];
90
+ const edges = [];
91
+ skeleton.collect_branch_chain(b, nodes, edges);
92
+ if (nodes.length === 0) continue;
93
+
94
+ if (pass === 0) {
95
+ const root_v = nodes[0];
96
+ if (!is_selected[root_v]) {
97
+ is_selected[root_v] = 1;
98
+ selected_count++;
99
+ }
100
+ } else if (nodes.length >= 3) {
101
+ const mid_idx = Math.max(1, Math.min(nodes.length - 1, Math.round((nodes.length - 1) * 0.55)));
102
+ const mid_v = nodes[mid_idx];
103
+ if (!is_selected[mid_v]) {
104
+ is_selected[mid_v] = 1;
105
+ selected_count++;
106
+ }
107
+ }
108
+ }
109
+ }
110
+
111
+ // 3. Secondary branches (level >= 2): select root hinge nodes[0] across remaining budget
112
+ for (let b = 0; b < branch_count && selected_count < budget; b++) {
113
+ if (skeleton.branch_level[b] < 2) continue;
114
+ const root_v = skeleton.branch_root_vertex[b];
115
+ if (root_v >= 0 && !is_selected[root_v]) {
116
+ is_selected[root_v] = 1;
117
+ selected_count++;
118
+ }
119
+ }
120
+
121
+ // 4. If budget still has room, fill any remaining nodes in topological order
122
+ for (let v = 1; v < vertex_count && selected_count < budget; v++) {
123
+ if (!is_selected[v]) {
124
+ is_selected[v] = 1;
125
+ selected_count++;
126
+ }
127
+ }
128
+
129
+ const joint_count = selected_count;
130
+ const joint_vertex_ids = new Int32Array(joint_count);
131
+ const joint_parents = new Int32Array(joint_count);
132
+ const joint_positions = new Float32Array(joint_count * 3);
133
+ const joint_tangents = new Float32Array(joint_count * 3);
134
+ const joint_levels = new Uint8Array(joint_count);
135
+ const joint_phases = new Float32Array(joint_count);
136
+ const joint_t_norms = new Float32Array(joint_count);
137
+ const joint_radii = new Float32Array(joint_count);
138
+ const joint_lengths = new Float32Array(joint_count);
139
+
140
+ // Map each node to its active joint index (or closest selected ancestor joint index in `skeleton.graph`)
141
+ const vertex_active_joint = new Int32Array(vertex_count);
142
+ let j_cursor = 0;
143
+
144
+ for (let v = 0; v < vertex_count; v++) {
145
+ const parent_v = skeleton.node_parent_vertex(v);
146
+ const ancestor_joint = (parent_v >= 0 && parent_v < v) ? vertex_active_joint[parent_v] : 0;
147
+
148
+ if (is_selected[v]) {
149
+ const j = j_cursor++;
150
+ const pj = v === 0 ? -1 : ancestor_joint;
151
+ joint_vertex_ids[j] = v;
152
+ joint_parents[j] = pj;
153
+
154
+ skeleton.node_read_position(SCRATCH_POS, 0, v);
155
+ skeleton.node_read_tangent(SCRATCH_TAN, 0, v);
156
+ skeleton.node_read_spine_param(SCRATCH_PARAM, 0, v);
157
+
158
+ joint_positions[j * 3] = SCRATCH_POS[0];
159
+ joint_positions[j * 3 + 1] = SCRATCH_POS[1];
160
+ joint_positions[j * 3 + 2] = SCRATCH_POS[2];
161
+
162
+ joint_tangents[j * 3] = SCRATCH_TAN[0];
163
+ joint_tangents[j * 3 + 1] = SCRATCH_TAN[1];
164
+ joint_tangents[j * 3 + 2] = SCRATCH_TAN[2];
165
+
166
+ const b_v = skeleton.node_branch_id(v);
167
+ joint_levels[j] = skeleton.node_level(v);
168
+ joint_t_norms[j] = b_v > 0 ? Math.max(0.55, SCRATCH_PARAM[0]) : SCRATCH_PARAM[0];
169
+ joint_phases[j] = SCRATCH_PARAM[2];
170
+ joint_radii[j] = Math.max(0.005, skeleton.node_read_radius(v));
171
+
172
+ if (b_v > 0 && b_v < skeleton.branch_count) {
173
+ joint_lengths[j] = Math.max(0.2, skeleton.branch_length[b_v]);
174
+ } else if (pj >= 0) {
175
+ const dx = SCRATCH_POS[0] - joint_positions[pj * 3];
176
+ const dy = SCRATCH_POS[1] - joint_positions[pj * 3 + 1];
177
+ const dz = SCRATCH_POS[2] - joint_positions[pj * 3 + 2];
178
+ joint_lengths[j] = Math.max(0.2, Math.hypot(dx, dy, dz));
179
+ } else {
180
+ joint_lengths[j] = 1.0;
181
+ }
182
+
183
+ vertex_active_joint[v] = j;
184
+ const p_joint = pj >= 0 ? pj : 0;
185
+ skeleton.node_write_joint(v, j, p_joint);
186
+ } else {
187
+ vertex_active_joint[v] = ancestor_joint;
188
+ const p_joint = joint_parents[ancestor_joint] >= 0 ? joint_parents[ancestor_joint] : 0;
189
+ skeleton.node_write_joint(v, ancestor_joint, p_joint);
190
+ }
191
+ }
192
+
193
+ return {
194
+ joint_count,
195
+ joint_vertex_ids,
196
+ joint_parents,
197
+ joint_positions,
198
+ joint_tangents,
199
+ joint_levels,
200
+ joint_phases,
201
+ joint_t_norms,
202
+ joint_radii,
203
+ joint_lengths
204
+ };
205
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Computes and blends botanical Pipe Model Theory (Shinozaki et al. 1964; Leonardo da Vinci / Murray's law)
3
+ * cross-sectional radii $R_p^\alpha = \sum R_i^\alpha$ bottom-up across `skeleton.graph`,
4
+ * blending with the parametric `radius_profile` curves according to `config.crown.pipe_model_weight`.
5
+ *
6
+ * Also guarantees monotonic non-increasing radii along each branch from base to tip and updates
7
+ * each node's {@link Transform64} scale and `skeleton.branch_base_radius`.
8
+ *
9
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
10
+ * @param {TreeSpeciesConfig|Object} [config]
11
+ */
12
+ export function tree_skeleton_compute_pipe_radii(skeleton: import("./TreeSkeleton.js").TreeSkeleton, config?: TreeSpeciesConfig | any): void;
13
+ import { TreeSpeciesConfig } from "../config/TreeSpeciesConfig.js";
14
+ //# sourceMappingURL=tree_skeleton_compute_pipe_radii.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree_skeleton_compute_pipe_radii.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,2DAHW,OAAO,mBAAmB,EAAE,YAAY,WACxC,iBAAiB,MAAO,QAqKlC;kCAhLiC,gCAAgC"}