@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,186 @@
1
+ import { assert } from "../../../core/assert.js";
2
+ import { hash_mix2 } from "../../../core/math/hash/hash_mix2.js";
3
+ import { computeHashFloat } from "../../../core/primitives/numbers/computeHashFloat.js";
4
+ import { CrownEnvelopeType } from "./CrownEnvelopeType.js";
5
+
6
+ /**
7
+ * Macro crown silhouette, space colonization competition, and pipe-model parameters.
8
+ */
9
+ export class CrownConfig {
10
+ /**
11
+ * Silhouette envelope shape.
12
+ * @type {CrownEnvelopeType|number}
13
+ */
14
+ envelope_type = CrownEnvelopeType.Spherical;
15
+
16
+ /**
17
+ * Total crown vertical extent (meters).
18
+ * @type {number}
19
+ */
20
+ height = 8.4;
21
+
22
+ /**
23
+ * Maximum crown horizontal radius (meters).
24
+ * @type {number}
25
+ */
26
+ radius = 5.4;
27
+
28
+ /**
29
+ * Height above ground (Y=0) where the crown envelope begins (meters).
30
+ * @type {number}
31
+ */
32
+ base_height = 2.4;
33
+
34
+ /**
35
+ * Strength [0, 1] of envelope pruning / length clamping on lateral branches.
36
+ * @type {number}
37
+ */
38
+ prune_ratio = 0.35;
39
+
40
+ /**
41
+ * Weight [0, 1] of Runions space-colonization attraction steering on growing branch tips.
42
+ * @type {number}
43
+ */
44
+ space_colonization_weight = 0.25;
45
+
46
+ /**
47
+ * Number of attraction points distributed inside the crown envelope.
48
+ * @type {number}
49
+ */
50
+ attraction_point_count = 160;
51
+
52
+ /**
53
+ * Radius of influence (meters) within which an attraction point pulls growing tips.
54
+ * @type {number}
55
+ */
56
+ attraction_radius = 2.5;
57
+
58
+ /**
59
+ * Kill distance (meters) within which an attraction point is consumed by a growing tip.
60
+ * @type {number}
61
+ */
62
+ kill_radius = 0.65;
63
+
64
+ /**
65
+ * Da Vinci / Murray pipe-model exponent alpha in r_parent^alpha = sum(r_child^alpha).
66
+ * @type {number}
67
+ */
68
+ pipe_model_exponent = 2.3;
69
+
70
+ /**
71
+ * Blend weight [0, 1] between parametric taper and bottom-up pipe-model radius accumulation.
72
+ * @type {number}
73
+ */
74
+ pipe_model_weight = 0.6;
75
+
76
+ /**
77
+ * Mix [0, 1] between zenith (+Y) and radial crown-outward vector for phototropism.
78
+ * @type {number}
79
+ */
80
+ sky_phototropism_mix = 0.6;
81
+
82
+ /**
83
+ * @param {Partial<CrownConfig>} [options]
84
+ * @returns {CrownConfig}
85
+ */
86
+ static from(options = {}) {
87
+ const r = new CrownConfig();
88
+ r.applyOverrides(options);
89
+ return r;
90
+ }
91
+
92
+ /**
93
+ * @param {Partial<CrownConfig>} [overrides]
94
+ * @returns {this}
95
+ */
96
+ applyOverrides(overrides = {}) {
97
+ if (overrides === null || overrides === undefined) {
98
+ return this;
99
+ }
100
+ if (overrides.envelope_type !== undefined) this.envelope_type = overrides.envelope_type;
101
+ if (overrides.height !== undefined) this.height = overrides.height;
102
+ if (overrides.radius !== undefined) this.radius = overrides.radius;
103
+ if (overrides.base_height !== undefined) this.base_height = overrides.base_height;
104
+ if (overrides.prune_ratio !== undefined) this.prune_ratio = overrides.prune_ratio;
105
+ if (overrides.space_colonization_weight !== undefined) this.space_colonization_weight = overrides.space_colonization_weight;
106
+ if (overrides.attraction_point_count !== undefined) this.attraction_point_count = Math.max(0, overrides.attraction_point_count | 0);
107
+ if (overrides.attraction_radius !== undefined) this.attraction_radius = overrides.attraction_radius;
108
+ if (overrides.kill_radius !== undefined) this.kill_radius = overrides.kill_radius;
109
+ if (overrides.pipe_model_exponent !== undefined) this.pipe_model_exponent = overrides.pipe_model_exponent;
110
+ if (overrides.pipe_model_weight !== undefined) this.pipe_model_weight = overrides.pipe_model_weight;
111
+ if (overrides.sky_phototropism_mix !== undefined) this.sky_phototropism_mix = overrides.sky_phototropism_mix;
112
+ return this;
113
+ }
114
+
115
+ /**
116
+ * @param {CrownConfig} other
117
+ * @returns {this}
118
+ */
119
+ copy(other) {
120
+ assert.defined(other, 'other');
121
+ this.envelope_type = other.envelope_type;
122
+ this.height = other.height;
123
+ this.radius = other.radius;
124
+ this.base_height = other.base_height;
125
+ this.prune_ratio = other.prune_ratio;
126
+ this.space_colonization_weight = other.space_colonization_weight;
127
+ this.attraction_point_count = other.attraction_point_count;
128
+ this.attraction_radius = other.attraction_radius;
129
+ this.kill_radius = other.kill_radius;
130
+ this.pipe_model_exponent = other.pipe_model_exponent;
131
+ this.pipe_model_weight = other.pipe_model_weight;
132
+ this.sky_phototropism_mix = other.sky_phototropism_mix;
133
+ return this;
134
+ }
135
+
136
+ /**
137
+ * @returns {CrownConfig}
138
+ */
139
+ clone() {
140
+ const r = new CrownConfig();
141
+ r.copy(this);
142
+ return r;
143
+ }
144
+
145
+ /**
146
+ * @param {CrownConfig} other
147
+ * @returns {boolean}
148
+ */
149
+ equals(other) {
150
+ if (this === other) return true;
151
+ if (!other || !other.isCrownConfig) return false;
152
+ return this.envelope_type === other.envelope_type
153
+ && this.height === other.height
154
+ && this.radius === other.radius
155
+ && this.base_height === other.base_height
156
+ && this.prune_ratio === other.prune_ratio
157
+ && this.space_colonization_weight === other.space_colonization_weight
158
+ && this.attraction_point_count === other.attraction_point_count
159
+ && this.attraction_radius === other.attraction_radius
160
+ && this.kill_radius === other.kill_radius
161
+ && this.pipe_model_exponent === other.pipe_model_exponent
162
+ && this.pipe_model_weight === other.pipe_model_weight
163
+ && this.sky_phototropism_mix === other.sky_phototropism_mix;
164
+ }
165
+
166
+ /**
167
+ * @returns {number}
168
+ */
169
+ hash() {
170
+ let h = hash_mix2(this.envelope_type, computeHashFloat(this.height));
171
+ h = hash_mix2(h, computeHashFloat(this.radius));
172
+ h = hash_mix2(h, computeHashFloat(this.base_height));
173
+ h = hash_mix2(h, computeHashFloat(this.prune_ratio));
174
+ h = hash_mix2(h, computeHashFloat(this.space_colonization_weight));
175
+ h = hash_mix2(h, this.attraction_point_count);
176
+ h = hash_mix2(h, computeHashFloat(this.pipe_model_exponent));
177
+ h = hash_mix2(h, computeHashFloat(this.pipe_model_weight));
178
+ return h;
179
+ }
180
+ }
181
+
182
+ /**
183
+ * @readonly
184
+ * @type {boolean}
185
+ */
186
+ CrownConfig.prototype.isCrownConfig = true;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Botanical crown silhouette envelope shapes (Weber & Penn 1995 + weeping extension).
3
+ */
4
+ export type CrownEnvelopeType = number;
5
+ export namespace CrownEnvelopeType {
6
+ let Conical: number;
7
+ let Spherical: number;
8
+ let Hemispherical: number;
9
+ let Cylindrical: number;
10
+ let TaperedCylindrical: number;
11
+ let Flame: number;
12
+ let InverseConical: number;
13
+ let TendFlame: number;
14
+ let Weeping: number;
15
+ }
16
+ //# sourceMappingURL=CrownEnvelopeType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CrownEnvelopeType.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/CrownEnvelopeType.js"],"names":[],"mappings":";;;gCAIU,MAAM"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Botanical crown silhouette envelope shapes (Weber & Penn 1995 + weeping extension).
3
+ *
4
+ * @readonly
5
+ * @enum {number}
6
+ */
7
+ export const CrownEnvelopeType = {
8
+ Conical: 0,
9
+ Spherical: 1,
10
+ Hemispherical: 2,
11
+ Cylindrical: 3,
12
+ TaperedCylindrical: 4,
13
+ Flame: 5,
14
+ InverseConical: 6,
15
+ TendFlame: 7,
16
+ Weeping: 8,
17
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Real-time foliage cluster card and frond mesh archetypes.
3
+ */
4
+ export type FoliageCardType = number;
5
+ export namespace FoliageCardType {
6
+ let FoldedVCard: number;
7
+ let CrossCard: number;
8
+ let TriStarCluster: number;
9
+ let RibbedFrond: number;
10
+ let OctagonalCutoutHull: number;
11
+ }
12
+ //# sourceMappingURL=FoliageCardType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoliageCardType.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/FoliageCardType.js"],"names":[],"mappings":";;;8BAIU,MAAM"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Real-time foliage cluster card and frond mesh archetypes.
3
+ *
4
+ * @readonly
5
+ * @enum {number}
6
+ */
7
+ export const FoliageCardType = {
8
+ /** Folded V-card with longitudinal arch and tip camber (broadleaf default) */
9
+ FoldedVCard: 0,
10
+ /** Two intersecting orthogonal V-cards (conifer needle tufts & dense shrubs) */
11
+ CrossCard: 1,
12
+ /** Three cards arranged at 60-degree star angles (volumetric pine/spruce clusters) */
13
+ TriStarCluster: 2,
14
+ /** Multi-segment curved Cubic Hermite ribbed frond (palms, ferns, weeping boughs) */
15
+ RibbedFrond: 3,
16
+ /** Tight hexagonal/octagonal alpha-bound hull trimming empty corners */
17
+ OctagonalCutoutHull: 4,
18
+ };
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Configuration for phyllotactic leaf/frond placement, card topology, heliotropism, and canopy AO.
3
+ */
4
+ export class FoliageConfig {
5
+ /**
6
+ * @param {Partial<FoliageConfig>} [options]
7
+ * @returns {FoliageConfig}
8
+ */
9
+ static from(options?: Partial<FoliageConfig>): FoliageConfig;
10
+ /**
11
+ * Whether foliage geometry is generated.
12
+ * @type {boolean}
13
+ */
14
+ enabled: boolean;
15
+ /**
16
+ * Leaf cluster card or frond mesh topology.
17
+ * @type {FoliageCardType|number}
18
+ */
19
+ card_type: FoliageCardType | number;
20
+ /**
21
+ * Minimum branch recursion level that carries foliage cards.
22
+ * @type {number}
23
+ */
24
+ attach_min_level: number;
25
+ /**
26
+ * Number of phyllotactic nodes along each qualifying carrier branch.
27
+ * @type {number}
28
+ */
29
+ cards_per_branch: number;
30
+ /**
31
+ * Number of terminal rosette cards clustered at the branch tip (t = 1).
32
+ * @type {number}
33
+ */
34
+ terminal_rosette_count: number;
35
+ /**
36
+ * Bare fraction [0, 0.9] at the base of a carrier branch without leaves.
37
+ * @type {number}
38
+ */
39
+ bare_ratio: number;
40
+ /**
41
+ * Phyllotactic arrangement mode for leaf attachments.
42
+ * @type {PhyllotaxisMode|number}
43
+ */
44
+ phyllotaxis_mode: PhyllotaxisMode | number;
45
+ /**
46
+ * Organs per node when `phyllotaxis_mode === PhyllotaxisMode.Whorled`.
47
+ * @type {number}
48
+ */
49
+ whorl_count: number;
50
+ /**
51
+ * Petiole insertion angle (radians) relative to carrier branch tangent.
52
+ * @type {number}
53
+ */
54
+ insertion_angle: number;
55
+ /**
56
+ * Base width of a leaf cluster card or frond (meters).
57
+ * @type {number}
58
+ */
59
+ card_width: number;
60
+ /**
61
+ * Base length of a leaf cluster card or frond from petiole pivot to tip (meters).
62
+ * @type {number}
63
+ */
64
+ card_length: number;
65
+ /**
66
+ * Relative random variance in card dimensions [0, 0.8].
67
+ * @type {number}
68
+ */
69
+ size_variance: number;
70
+ /**
71
+ * Transverse V-fold dihedral angle (radians) across the midrib.
72
+ * @type {number}
73
+ */
74
+ fold_angle: number;
75
+ /**
76
+ * Midrib arch elevation (meters) at mid-span.
77
+ * @type {number}
78
+ */
79
+ arch_height: number;
80
+ /**
81
+ * Longitudinal tip droop displacement (meters).
82
+ * @type {number}
83
+ */
84
+ camber_droop: number;
85
+ /**
86
+ * Number of longitudinal segments when `card_type === FoliageCardType.RibbedFrond`.
87
+ * @type {number}
88
+ */
89
+ frond_segments: number;
90
+ /**
91
+ * Heliotropic reorientation weight [0, 1] aligning adaxial leaf normals toward sky/canopy exterior.
92
+ * @type {number}
93
+ */
94
+ phototropism: number;
95
+ /**
96
+ * Gravitropic petiole droop weight [-1, 1].
97
+ * @type {number}
98
+ */
99
+ gravitropism: number;
100
+ /**
101
+ * Per-card random angular jitter (radians) to break specular aliasing.
102
+ * @type {number}
103
+ */
104
+ angular_jitter: number;
105
+ /**
106
+ * Hemisphere-safe normal puffing factor [0, 0.45] blending card normals toward canopy exterior.
107
+ * @type {number}
108
+ */
109
+ normal_puffiness: number;
110
+ /**
111
+ * Minimum ambient occlusion brightness in deep crown core [0.1, 1.0].
112
+ * @type {number}
113
+ */
114
+ ao_core_darkening: number;
115
+ /**
116
+ * Per-cluster brightness/tint variation amplitude in vertex colors [0, 0.3].
117
+ * @type {number}
118
+ */
119
+ color_variation: number;
120
+ /**
121
+ * @param {Partial<FoliageConfig>|boolean} [overrides]
122
+ * @returns {this}
123
+ */
124
+ applyOverrides(overrides?: Partial<FoliageConfig> | boolean): this;
125
+ /**
126
+ * @param {FoliageConfig} other
127
+ * @returns {this}
128
+ */
129
+ copy(other: FoliageConfig): this;
130
+ /**
131
+ * @returns {FoliageConfig}
132
+ */
133
+ clone(): FoliageConfig;
134
+ /**
135
+ * @param {FoliageConfig} other
136
+ * @returns {boolean}
137
+ */
138
+ equals(other: FoliageConfig): boolean;
139
+ /**
140
+ * @returns {number}
141
+ */
142
+ hash(): number;
143
+ /**
144
+ * @readonly
145
+ * @type {boolean}
146
+ */
147
+ readonly isFoliageConfig: boolean;
148
+ }
149
+ import { FoliageCardType } from "./FoliageCardType.js";
150
+ import { PhyllotaxisMode } from "./PhyllotaxisMode.js";
151
+ //# sourceMappingURL=FoliageConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoliageConfig.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/FoliageConfig.js"],"names":[],"mappings":"AAMA;;GAEG;AACH;IAqII;;;OAGG;IACH,sBAHW,QAAQ,aAAa,CAAC,GACpB,aAAa,CAMzB;IA5ID;;;OAGG;IACH,SAFU,OAAO,CAEF;IAEf;;;OAGG;IACH,WAFU,eAAe,GAAC,MAAM,CAEQ;IAExC;;;OAGG;IACH,kBAFU,MAAM,CAEK;IAErB;;;OAGG;IACH,kBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,wBAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,YAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,kBAFU,eAAe,GAAC,MAAM,CAEgB;IAEhD;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,iBAFU,MAAM,CAEO;IAEvB;;;OAGG;IACH,YAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,aAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,eAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,YAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,aAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,cAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,cAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,cAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,gBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,kBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,mBAFU,MAAM,CAES;IAEzB;;;OAGG;IACH,iBAFU,MAAM,CAEO;IAYvB;;;OAGG;IACH,2BAHW,QAAQ,aAAa,CAAC,GAAC,OAAO,GAC5B,IAAI,CAiChB;IAED;;;OAGG;IACH,YAHW,aAAa,GACX,IAAI,CA2BhB;IAED;;OAEG;IACH,SAFa,aAAa,CAMzB;IAED;;;OAGG;IACH,cAHW,aAAa,GACX,OAAO,CA2BnB;IAED;;OAEG;IACH,QAFa,MAAM,CAclB;IAGL;;;OAGG;IACH,0BAFU,OAAO,CAEsB;CANtC;gCAjR+B,sBAAsB;gCACtB,sBAAsB"}
@@ -0,0 +1,283 @@
1
+ import { assert } from "../../../core/assert.js";
2
+ import { hash_mix2 } from "../../../core/math/hash/hash_mix2.js";
3
+ import { computeHashFloat } from "../../../core/primitives/numbers/computeHashFloat.js";
4
+ import { FoliageCardType } from "./FoliageCardType.js";
5
+ import { PhyllotaxisMode } from "./PhyllotaxisMode.js";
6
+
7
+ /**
8
+ * Configuration for phyllotactic leaf/frond placement, card topology, heliotropism, and canopy AO.
9
+ */
10
+ export class FoliageConfig {
11
+ /**
12
+ * Whether foliage geometry is generated.
13
+ * @type {boolean}
14
+ */
15
+ enabled = true;
16
+
17
+ /**
18
+ * Leaf cluster card or frond mesh topology.
19
+ * @type {FoliageCardType|number}
20
+ */
21
+ card_type = FoliageCardType.FoldedVCard;
22
+
23
+ /**
24
+ * Minimum branch recursion level that carries foliage cards.
25
+ * @type {number}
26
+ */
27
+ attach_min_level = 2;
28
+
29
+ /**
30
+ * Number of phyllotactic nodes along each qualifying carrier branch.
31
+ * @type {number}
32
+ */
33
+ cards_per_branch = 10;
34
+
35
+ /**
36
+ * Number of terminal rosette cards clustered at the branch tip (t = 1).
37
+ * @type {number}
38
+ */
39
+ terminal_rosette_count = 3;
40
+
41
+ /**
42
+ * Bare fraction [0, 0.9] at the base of a carrier branch without leaves.
43
+ * @type {number}
44
+ */
45
+ bare_ratio = 0.2;
46
+
47
+ /**
48
+ * Phyllotactic arrangement mode for leaf attachments.
49
+ * @type {PhyllotaxisMode|number}
50
+ */
51
+ phyllotaxis_mode = PhyllotaxisMode.SpiralGolden;
52
+
53
+ /**
54
+ * Organs per node when `phyllotaxis_mode === PhyllotaxisMode.Whorled`.
55
+ * @type {number}
56
+ */
57
+ whorl_count = 3;
58
+
59
+ /**
60
+ * Petiole insertion angle (radians) relative to carrier branch tangent.
61
+ * @type {number}
62
+ */
63
+ insertion_angle = 0.85;
64
+
65
+ /**
66
+ * Base width of a leaf cluster card or frond (meters).
67
+ * @type {number}
68
+ */
69
+ card_width = 0.85;
70
+
71
+ /**
72
+ * Base length of a leaf cluster card or frond from petiole pivot to tip (meters).
73
+ * @type {number}
74
+ */
75
+ card_length = 0.95;
76
+
77
+ /**
78
+ * Relative random variance in card dimensions [0, 0.8].
79
+ * @type {number}
80
+ */
81
+ size_variance = 0.2;
82
+
83
+ /**
84
+ * Transverse V-fold dihedral angle (radians) across the midrib.
85
+ * @type {number}
86
+ */
87
+ fold_angle = 0.28;
88
+
89
+ /**
90
+ * Midrib arch elevation (meters) at mid-span.
91
+ * @type {number}
92
+ */
93
+ arch_height = 0.08;
94
+
95
+ /**
96
+ * Longitudinal tip droop displacement (meters).
97
+ * @type {number}
98
+ */
99
+ camber_droop = 0.1;
100
+
101
+ /**
102
+ * Number of longitudinal segments when `card_type === FoliageCardType.RibbedFrond`.
103
+ * @type {number}
104
+ */
105
+ frond_segments = 5;
106
+
107
+ /**
108
+ * Heliotropic reorientation weight [0, 1] aligning adaxial leaf normals toward sky/canopy exterior.
109
+ * @type {number}
110
+ */
111
+ phototropism = 0.6;
112
+
113
+ /**
114
+ * Gravitropic petiole droop weight [-1, 1].
115
+ * @type {number}
116
+ */
117
+ gravitropism = 0.25;
118
+
119
+ /**
120
+ * Per-card random angular jitter (radians) to break specular aliasing.
121
+ * @type {number}
122
+ */
123
+ angular_jitter = 0.25;
124
+
125
+ /**
126
+ * Hemisphere-safe normal puffing factor [0, 0.45] blending card normals toward canopy exterior.
127
+ * @type {number}
128
+ */
129
+ normal_puffiness = 0.32;
130
+
131
+ /**
132
+ * Minimum ambient occlusion brightness in deep crown core [0.1, 1.0].
133
+ * @type {number}
134
+ */
135
+ ao_core_darkening = 0.35;
136
+
137
+ /**
138
+ * Per-cluster brightness/tint variation amplitude in vertex colors [0, 0.3].
139
+ * @type {number}
140
+ */
141
+ color_variation = 0.08;
142
+
143
+ /**
144
+ * @param {Partial<FoliageConfig>} [options]
145
+ * @returns {FoliageConfig}
146
+ */
147
+ static from(options = {}) {
148
+ const r = new FoliageConfig();
149
+ r.applyOverrides(options);
150
+ return r;
151
+ }
152
+
153
+ /**
154
+ * @param {Partial<FoliageConfig>|boolean} [overrides]
155
+ * @returns {this}
156
+ */
157
+ applyOverrides(overrides = {}) {
158
+ if (overrides === null || overrides === undefined) {
159
+ return this;
160
+ }
161
+ if (typeof overrides === "boolean") {
162
+ this.enabled = overrides;
163
+ return this;
164
+ }
165
+ if (overrides.enabled !== undefined) this.enabled = Boolean(overrides.enabled);
166
+ if (overrides.card_type !== undefined) this.card_type = overrides.card_type;
167
+ if (overrides.attach_min_level !== undefined) this.attach_min_level = Math.max(0, overrides.attach_min_level | 0);
168
+ if (overrides.cards_per_branch !== undefined) this.cards_per_branch = Math.max(0, overrides.cards_per_branch | 0);
169
+ if (overrides.terminal_rosette_count !== undefined) this.terminal_rosette_count = Math.max(0, overrides.terminal_rosette_count | 0);
170
+ if (overrides.bare_ratio !== undefined) this.bare_ratio = overrides.bare_ratio;
171
+ if (overrides.phyllotaxis_mode !== undefined) this.phyllotaxis_mode = overrides.phyllotaxis_mode;
172
+ if (overrides.whorl_count !== undefined) this.whorl_count = Math.max(1, overrides.whorl_count | 0);
173
+ if (overrides.insertion_angle !== undefined) this.insertion_angle = overrides.insertion_angle;
174
+ if (overrides.card_width !== undefined) this.card_width = overrides.card_width;
175
+ if (overrides.card_length !== undefined) this.card_length = overrides.card_length;
176
+ if (overrides.size_variance !== undefined) this.size_variance = overrides.size_variance;
177
+ if (overrides.fold_angle !== undefined) this.fold_angle = overrides.fold_angle;
178
+ if (overrides.arch_height !== undefined) this.arch_height = overrides.arch_height;
179
+ if (overrides.camber_droop !== undefined) this.camber_droop = overrides.camber_droop;
180
+ if (overrides.frond_segments !== undefined) this.frond_segments = Math.max(2, overrides.frond_segments | 0);
181
+ if (overrides.phototropism !== undefined) this.phototropism = overrides.phototropism;
182
+ if (overrides.gravitropism !== undefined) this.gravitropism = overrides.gravitropism;
183
+ if (overrides.angular_jitter !== undefined) this.angular_jitter = overrides.angular_jitter;
184
+ if (overrides.normal_puffiness !== undefined) this.normal_puffiness = overrides.normal_puffiness;
185
+ if (overrides.ao_core_darkening !== undefined) this.ao_core_darkening = overrides.ao_core_darkening;
186
+ if (overrides.color_variation !== undefined) this.color_variation = overrides.color_variation;
187
+ return this;
188
+ }
189
+
190
+ /**
191
+ * @param {FoliageConfig} other
192
+ * @returns {this}
193
+ */
194
+ copy(other) {
195
+ assert.defined(other, 'other');
196
+ this.enabled = other.enabled;
197
+ this.card_type = other.card_type;
198
+ this.attach_min_level = other.attach_min_level;
199
+ this.cards_per_branch = other.cards_per_branch;
200
+ this.terminal_rosette_count = other.terminal_rosette_count;
201
+ this.bare_ratio = other.bare_ratio;
202
+ this.phyllotaxis_mode = other.phyllotaxis_mode;
203
+ this.whorl_count = other.whorl_count;
204
+ this.insertion_angle = other.insertion_angle;
205
+ this.card_width = other.card_width;
206
+ this.card_length = other.card_length;
207
+ this.size_variance = other.size_variance;
208
+ this.fold_angle = other.fold_angle;
209
+ this.arch_height = other.arch_height;
210
+ this.camber_droop = other.camber_droop;
211
+ this.frond_segments = other.frond_segments;
212
+ this.phototropism = other.phototropism;
213
+ this.gravitropism = other.gravitropism;
214
+ this.angular_jitter = other.angular_jitter;
215
+ this.normal_puffiness = other.normal_puffiness;
216
+ this.ao_core_darkening = other.ao_core_darkening;
217
+ this.color_variation = other.color_variation;
218
+ return this;
219
+ }
220
+
221
+ /**
222
+ * @returns {FoliageConfig}
223
+ */
224
+ clone() {
225
+ const r = new FoliageConfig();
226
+ r.copy(this);
227
+ return r;
228
+ }
229
+
230
+ /**
231
+ * @param {FoliageConfig} other
232
+ * @returns {boolean}
233
+ */
234
+ equals(other) {
235
+ if (this === other) return true;
236
+ if (!other || !other.isFoliageConfig) return false;
237
+ return this.enabled === other.enabled
238
+ && this.card_type === other.card_type
239
+ && this.attach_min_level === other.attach_min_level
240
+ && this.cards_per_branch === other.cards_per_branch
241
+ && this.terminal_rosette_count === other.terminal_rosette_count
242
+ && this.bare_ratio === other.bare_ratio
243
+ && this.phyllotaxis_mode === other.phyllotaxis_mode
244
+ && this.whorl_count === other.whorl_count
245
+ && this.insertion_angle === other.insertion_angle
246
+ && this.card_width === other.card_width
247
+ && this.card_length === other.card_length
248
+ && this.size_variance === other.size_variance
249
+ && this.fold_angle === other.fold_angle
250
+ && this.arch_height === other.arch_height
251
+ && this.camber_droop === other.camber_droop
252
+ && this.frond_segments === other.frond_segments
253
+ && this.phototropism === other.phototropism
254
+ && this.gravitropism === other.gravitropism
255
+ && this.angular_jitter === other.angular_jitter
256
+ && this.normal_puffiness === other.normal_puffiness
257
+ && this.ao_core_darkening === other.ao_core_darkening
258
+ && this.color_variation === other.color_variation;
259
+ }
260
+
261
+ /**
262
+ * @returns {number}
263
+ */
264
+ hash() {
265
+ let h = hash_mix2(this.enabled ? 1 : 0, this.card_type);
266
+ h = hash_mix2(h, this.attach_min_level);
267
+ h = hash_mix2(h, this.cards_per_branch);
268
+ h = hash_mix2(h, this.terminal_rosette_count);
269
+ h = hash_mix2(h, this.phyllotaxis_mode);
270
+ h = hash_mix2(h, computeHashFloat(this.card_width));
271
+ h = hash_mix2(h, computeHashFloat(this.card_length));
272
+ h = hash_mix2(h, computeHashFloat(this.fold_angle));
273
+ h = hash_mix2(h, computeHashFloat(this.phototropism));
274
+ h = hash_mix2(h, computeHashFloat(this.gravitropism));
275
+ return h;
276
+ }
277
+ }
278
+
279
+ /**
280
+ * @readonly
281
+ * @type {boolean}
282
+ */
283
+ FoliageConfig.prototype.isFoliageConfig = true;