@woosh/meep-engine 3.53.0 → 3.55.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 (249) hide show
  1. package/package.json +1 -1
  2. package/src/core/math/noise/worley_noise_2d.d.ts +14 -0
  3. package/src/core/math/noise/worley_noise_2d.d.ts.map +1 -0
  4. package/src/core/math/noise/worley_noise_2d.js +74 -0
  5. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts +6 -1
  6. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
  7. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +363 -325
  8. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts +93 -14
  9. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
  10. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +322 -183
  11. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts +9 -0
  12. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts.map +1 -1
  13. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js +110 -83
  14. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts +42 -0
  15. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts.map +1 -0
  16. package/src/engine/{graphics3/decal/DecalAtlas.js → graphics/texture/atlas/SpriteAtlas.js} +202 -194
  17. package/src/engine/{graphics3/decal/DecalAtlasFill.d.ts → graphics/texture/atlas/SpriteAtlasFill.d.ts} +4 -4
  18. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts.map +1 -0
  19. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.js +30 -0
  20. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +7 -0
  21. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  22. package/src/engine/graphics/texture/atlas/TextureAtlas.js +11 -1
  23. package/src/engine/{graphics3/decal/decal_atlas_border.d.ts → graphics/texture/atlas/sprite_atlas_border.d.ts} +12 -12
  24. package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -0
  25. package/src/engine/{graphics3/decal/decal_atlas_border.js → graphics/texture/atlas/sprite_atlas_border.js} +69 -69
  26. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  27. package/src/engine/graphics3/DecalSystem.js +447 -450
  28. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +9 -22
  29. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  30. package/src/engine/graphics3/GPUParticleEmitterSystem.js +892 -951
  31. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  32. package/src/generation/foliage/FOLIAGE_DESIGN.md +2 -1
  33. package/src/generation/foliage/config/BarkMaterialConfig.d.ts +4 -3
  34. package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -1
  35. package/src/generation/foliage/config/BarkMaterialConfig.js +6 -6
  36. package/src/generation/foliage/config/FoliageBarkType.d.ts +11 -0
  37. package/src/generation/foliage/config/FoliageBarkType.d.ts.map +1 -0
  38. package/src/generation/foliage/config/FoliageBarkType.js +16 -0
  39. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +58 -5
  40. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -1
  41. package/src/generation/foliage/config/FoliageMaterialConfig.js +279 -181
  42. package/src/generation/foliage/index.d.ts +2 -1
  43. package/src/generation/foliage/index.js +44 -43
  44. package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -1
  45. package/src/generation/foliage/material/make_bark_material.js +23 -95
  46. package/src/generation/foliage/material/make_foliage_material.d.ts +29 -3
  47. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
  48. package/src/generation/foliage/material/make_foliage_material.js +605 -359
  49. package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -1
  50. package/src/generation/foliage/mesh/branch_collar_project.js +205 -203
  51. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +15 -0
  52. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
  53. package/src/generation/foliage/mesh/foliage_collect_attachments.js +569 -502
  54. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
  55. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1049 -1047
  56. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +2 -1
  57. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
  58. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +454 -415
  59. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
  60. package/src/generation/foliage/presets/make_tree_species_preset.js +870 -837
  61. package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -121
  62. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +10 -7
  63. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -1
  64. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +206 -179
  65. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
  66. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1871 -1104
  67. package/src/shade/RENDERER_CONTRACT.md +5 -2
  68. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts.map +1 -1
  69. package/src/shade/device/SHADE_DEVICE_FLOOR.js +2 -0
  70. package/src/shade/playground/foliage_wind/foliage_world.d.ts +6 -0
  71. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  72. package/src/shade/playground/foliage_wind/foliage_world.js +602 -593
  73. package/src/shade/playground/foliage_wind/index.html +260 -254
  74. package/src/shade/playground/foliage_wind/main.js +275 -263
  75. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  76. package/src/shade/renderer/Renderer.js +1 -1
  77. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  78. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  79. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  80. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  81. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  82. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1 -1
  83. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +3 -3
  84. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  85. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +350 -294
  86. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts +0 -2
  87. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts.map +1 -1
  88. package/src/shade/renderer/hiz/generate_downsampler_code.js +99 -100
  89. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts +15 -0
  90. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -0
  91. package/src/shade/renderer/hiz/hzb_pick_alignment.js +148 -0
  92. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts +28 -0
  93. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts.map +1 -0
  94. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.js +58 -0
  95. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +5 -5
  96. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  97. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +57 -67
  98. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +3 -3
  99. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  100. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +111 -112
  101. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts +5 -0
  102. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts.map +1 -0
  103. package/src/shade/renderer/hiz/shader_hzb_spd.js +160 -0
  104. package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
  105. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  106. package/src/shade/renderer/light/GPULightCollection.js +67 -0
  107. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts +7 -0
  108. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts.map +1 -0
  109. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.js +13 -0
  110. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts +10 -0
  111. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts.map +1 -0
  112. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.js +72 -0
  113. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +39 -0
  114. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -0
  115. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +90 -0
  116. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +12 -0
  117. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -0
  118. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +56 -0
  119. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +31 -0
  120. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -0
  121. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +196 -0
  122. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +10 -0
  123. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -0
  124. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +163 -0
  125. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts +4 -0
  126. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts.map +1 -0
  127. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.js +137 -0
  128. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  129. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  130. package/src/shade/renderer/particles/GPUParticleSystem.js +4 -3
  131. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +4 -3
  132. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  133. package/src/shade/renderer/particles/graph_particles_avboit.js +28 -11
  134. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +9 -13
  135. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
  136. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +25 -20
  137. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  138. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +21 -38
  139. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.d.ts.map +1 -1
  140. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +154 -147
  141. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +2 -1
  142. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  143. package/src/shade/renderer/postprocess/gtao/GTAO.js +5 -1
  144. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts +8 -0
  145. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts.map +1 -1
  146. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js +10 -1
  147. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  148. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +5 -0
  149. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts +22 -0
  150. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts.map +1 -0
  151. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.js +33 -0
  152. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts +22 -0
  153. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts.map +1 -0
  154. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.js +56 -0
  155. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts +13 -0
  156. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts.map +1 -0
  157. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.js +42 -0
  158. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts +2 -1
  159. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  160. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +382 -357
  161. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  162. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +414 -410
  163. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  164. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -7
  165. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.d.ts.map +1 -1
  166. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js +62 -62
  167. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts +6 -0
  168. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts.map +1 -0
  169. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.js +19 -0
  170. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.d.ts.map +1 -1
  171. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js +16 -10
  172. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.d.ts.map +1 -1
  173. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js +118 -117
  174. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +41 -7
  175. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
  176. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +162 -58
  177. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -1
  178. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +10 -12
  179. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  180. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +583 -606
  181. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +1 -1
  182. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +640 -640
  183. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +113 -0
  184. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -0
  185. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +484 -0
  186. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +50 -0
  187. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -0
  188. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +60 -0
  189. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +25 -0
  190. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -0
  191. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +47 -0
  192. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts +74 -0
  193. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts.map +1 -0
  194. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.js +173 -0
  195. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +26 -0
  196. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -0
  197. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +83 -0
  198. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts +36 -0
  199. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts.map +1 -0
  200. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js +129 -0
  201. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts +121 -0
  202. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -0
  203. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +370 -0
  204. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts +16 -0
  205. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -0
  206. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +191 -0
  207. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  208. package/src/shade/renderer/wind/GPUSceneWind.js +1 -1
  209. package/src/engine/graphics3/decal/DecalAtlas.d.ts +0 -43
  210. package/src/engine/graphics3/decal/DecalAtlas.d.ts.map +0 -1
  211. package/src/engine/graphics3/decal/DecalAtlasFill.d.ts.map +0 -1
  212. package/src/engine/graphics3/decal/DecalAtlasFill.js +0 -32
  213. package/src/engine/graphics3/decal/decal_atlas_border.d.ts.map +0 -1
  214. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts +0 -26
  215. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts.map +0 -1
  216. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.js +0 -268
  217. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts +0 -3
  218. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts.map +0 -1
  219. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.js +0 -32
  220. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts +0 -17
  221. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +0 -1
  222. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +0 -98
  223. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts +0 -23
  224. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts.map +0 -1
  225. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.js +0 -118
  226. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +0 -15
  227. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +0 -1
  228. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +0 -49
  229. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +0 -17
  230. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +0 -1
  231. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +0 -50
  232. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts +0 -35
  233. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts.map +0 -1
  234. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.js +0 -105
  235. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +0 -35
  236. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +0 -1
  237. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +0 -80
  238. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts +0 -10
  239. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts.map +0 -1
  240. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.js +0 -51
  241. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +0 -28
  242. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +0 -1
  243. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +0 -39
  244. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +0 -48
  245. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +0 -1
  246. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +0 -121
  247. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts +0 -28
  248. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts.map +0 -1
  249. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +0 -237
@@ -1,179 +1,206 @@
1
- import { clamp } from "../../../core/math/clamp.js";
2
- import { lerp } from "../../../core/math/lerp.js";
3
- import { TreeSpeciesConfig } from "../config/TreeSpeciesConfig.js";
4
-
5
- /**
6
- * Computes and blends botanical Pipe Model Theory (Shinozaki et al. 1964; Leonardo da Vinci / Murray's law)
7
- * cross-sectional radii $R_p^\alpha = \sum R_i^\alpha$ bottom-up across `skeleton.graph`,
8
- * blending with the parametric `radius_profile` curves according to `config.crown.pipe_model_weight`.
9
- *
10
- * Also guarantees monotonic non-increasing radii along each branch from base to tip and updates
11
- * each node's {@link Transform64} scale and `skeleton.branch_base_radius`.
12
- *
13
- * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
14
- * @param {TreeSpeciesConfig|Object} [config]
15
- */
16
- export function tree_skeleton_compute_pipe_radii(skeleton, config = new TreeSpeciesConfig()) {
17
- const species = config && config.isTreeSpeciesConfig ? config : TreeSpeciesConfig.from(config);
18
- const graph = skeleton.graph;
19
- const vertex_count = skeleton.node_count;
20
- if (vertex_count === 0) {
21
- return;
22
- }
23
-
24
- const alpha = clamp(species.crown.pipe_model_exponent ?? 2.3, 1.5, 3.5);
25
- const inv_alpha = 1.0 / alpha;
26
- const pipe_weight = clamp(species.crown.pipe_model_weight ?? 0.65, 0.0, 1.0);
27
-
28
- const param_radii = new Float32Array(vertex_count);
29
- const pipe_radii = new Float32Array(vertex_count);
30
-
31
- for (let v = 0; v < vertex_count; v++) {
32
- param_radii[v] = Math.max(0.001, skeleton.node_read_radius(v));
33
- }
34
-
35
- // Nodes are allocated in topological pre-order (parents before children),
36
- // so iterating from vertex_count - 1 down to 0 is a valid reverse topological (post-order) pass.
37
- for (let v = vertex_count - 1; v >= 0; v--) {
38
- const container = graph.getNodeContainer(v);
39
- const level = skeleton.node_level(v);
40
- const lvl_cfg = species.levels[Math.min(level, Math.max(0, species.levels.length - 1))];
41
- const seg_count = Math.max(1, lvl_cfg ? lvl_cfg.segments : 4);
42
-
43
- const r_param = param_radii[v];
44
- const r_min_tip = Math.max(0.002, r_param * 0.22);
45
-
46
- if (container === undefined) {
47
- pipe_radii[v] = r_param;
48
- continue;
49
- }
50
-
51
- const edges = container.getEdges();
52
- let sum_pow = 0.0;
53
- let spine_out_count = 0;
54
-
55
- for (let i = 0; i < edges.length; i++) {
56
- const edge = edges[i];
57
- if (edge.isDirectedAwayFrom(v)) {
58
- const u = edge.other(v);
59
- const child_r = pipe_radii[u] > 0 ? pipe_radii[u] : param_radii[u];
60
- if (skeleton.node_in_segment(u) >= 0) {
61
- sum_pow += Math.pow(child_r, alpha);
62
- spine_out_count++;
63
- } else {
64
- // Lateral branch attachment link
65
- sum_pow += 0.2 * Math.pow(child_r, alpha);
66
- }
67
- }
68
- }
69
-
70
- if (spine_out_count === 0) {
71
- // Terminal tip node of a branch
72
- pipe_radii[v] = r_param;
73
- } else {
74
- // Add small per-internode vascular leaf-supply increment so unbranched internodes still taper smoothly
75
- const internode_supply = Math.pow(r_min_tip, alpha) / seg_count;
76
- pipe_radii[v] = Math.pow(sum_pow + internode_supply, inv_alpha);
77
- }
78
- }
79
-
80
- // Normalize per branch root against its parametric base radius so Leonardo/Murray area-preserving ratios
81
- // hold across all forks while preserving species-configured branch/trunk base thickness ratios.
82
- for (let v = 0; v < vertex_count; v++) {
83
- const b = skeleton.node_branch_id(v);
84
- const root_v = skeleton.branch_root_vertex[b];
85
- const root_pipe = pipe_radii[root_v];
86
- const root_param = param_radii[root_v];
87
- const pipe_scale = root_pipe > 1e-6 ? (root_param / root_pipe) : 1.0;
88
-
89
- const scaled_pipe = pipe_radii[v] * pipe_scale;
90
- const blended = lerp(param_radii[v], scaled_pipe, pipe_weight);
91
- skeleton.node_write_radius(v, Math.max(0.0015, blended));
92
- }
93
-
94
- // Forward pass (0 .. V-1): enforce child radius <= parent radius across every directed edge in `skeleton.graph`
95
- for (let v = 0; v < vertex_count; v++) {
96
- const container = graph.getNodeContainer(v);
97
- if (container === undefined) {
98
- continue;
99
- }
100
- const r_parent = skeleton.node_read_radius(v);
101
- const parent_branch = skeleton.node_branch_id(v);
102
- const edges = container.getEdges();
103
-
104
- for (let i = 0; i < edges.length; i++) {
105
- const edge = edges[i];
106
- if (edge.isDirectedAwayFrom(v)) {
107
- const u = edge.other(v);
108
- const child_branch = skeleton.node_branch_id(u);
109
- const r_child = skeleton.node_read_radius(u);
110
- const max_allowed = child_branch === parent_branch ? r_parent : r_parent * 0.78;
111
- if (r_child > max_allowed) {
112
- skeleton.node_write_radius(u, max_allowed);
113
- }
114
- }
115
- }
116
- }
117
-
118
- // Branch-level pass: ensure every child branch's base radius is <= 0.78 * interpolated parent radius
119
- // at `parent_attach_t` along `parent_edge` (accounting for parent segment taper between pv0 and pv1),
120
- // and maintain monotonic non-increasing radii along the child branch spine.
121
- const branch_nodes = [];
122
- const branch_edges = [];
123
- for (let b = 1; b < skeleton.branch_count; b++) {
124
- const pe = skeleton.branch_parent_edge[b];
125
- if (pe < 0) continue;
126
-
127
- const pv0 = skeleton.segment_v0(pe);
128
- const pv1 = skeleton.segment_v1(pe);
129
- const pt0 = skeleton.node_t_norm(pv0);
130
- const pt1 = skeleton.node_t_norm(pv1);
131
- const pt = skeleton.branch_parent_attach_t[b];
132
- const local_u = clamp((pt - pt0) / Math.max(1e-5, pt1 - pt0), 0.0, 1.0);
133
-
134
- const pr0 = skeleton.node_read_radius(pv0);
135
- const pr1 = skeleton.node_read_radius(pv1);
136
- const parent_r_at_attach = lerp(pr0, pr1, local_u);
137
- const max_base_r = parent_r_at_attach * 0.78;
138
-
139
- skeleton.collect_branch_chain(b, branch_nodes, branch_edges);
140
- if (branch_nodes.length === 0) continue;
141
-
142
- const root_v = branch_nodes[0];
143
- if (skeleton.node_branch_id(root_v) !== b) continue;
144
-
145
- const cur_base_r = skeleton.node_read_radius(root_v);
146
- if (cur_base_r > max_base_r && cur_base_r > 1e-6) {
147
- const scale = max_base_r / cur_base_r;
148
- for (let i = 0; i < branch_nodes.length; i++) {
149
- const nv = branch_nodes[i];
150
- if (skeleton.node_branch_id(nv) === b) {
151
- skeleton.node_write_radius(
152
- nv,
153
- Math.min(max_base_r, Math.max(0.0005, skeleton.node_read_radius(nv) * scale))
154
- );
155
- }
156
- }
157
- }
158
-
159
- // Guarantee monotonic taper along the branch
160
- let prev_r = skeleton.node_read_radius(branch_nodes[0]);
161
- for (let i = 1; i < branch_nodes.length; i++) {
162
- const nv = branch_nodes[i];
163
- const nr = skeleton.node_read_radius(nv);
164
- if (nr > prev_r) {
165
- skeleton.node_write_radius(nv, prev_r);
166
- } else {
167
- prev_r = nr;
168
- }
169
- }
170
- }
171
-
172
- // Synchronize branch_base_radius table with updated root node radii
173
- for (let b = 0; b < skeleton.branch_count; b++) {
174
- const root_v = skeleton.branch_root_vertex[b];
175
- if (root_v >= 0 && root_v < vertex_count) {
176
- skeleton.branch_base_radius[b] = skeleton.node_read_radius(root_v);
177
- }
178
- }
179
- }
1
+ import { clamp } from "../../../core/math/clamp.js";
2
+ import { lerp } from "../../../core/math/lerp.js";
3
+ import { TreeSpeciesConfig } from "../config/TreeSpeciesConfig.js";
4
+
5
+ /**
6
+ * Enforces Da Vinci's pipe-model cross-sectional area conservation across a `TreeSkeleton`
7
+ * in a bottom-up post-order pass:
8
+ *
9
+ * $$r_{\text{parent}}^\alpha = \sum_{k} r_{\text{child}, k}^\alpha$$
10
+ *
11
+ * Blended with each node's initial parametric taper radius via `pipe_model_weight`, while
12
+ * preserving boundary conditions at both the branch base ($t = 0$) and terminal shoot apex ($t = 1$)
13
+ * so neither trunk nor branch tips inflate into blunt stubs.
14
+ *
15
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
16
+ * @param {TreeSpeciesConfig} [config]
17
+ * @returns {import("./TreeSkeleton.js").TreeSkeleton}
18
+ */
19
+ export function tree_skeleton_compute_pipe_radii(
20
+ skeleton,
21
+ config = new TreeSpeciesConfig()
22
+ ) {
23
+ const species = config && config.isTreeSpeciesConfig ? config : TreeSpeciesConfig.from(config);
24
+ const n = skeleton.node_count;
25
+ const seg_count = skeleton.segment_count;
26
+ const branch_count = skeleton.branch_count;
27
+ if (n === 0) return skeleton;
28
+
29
+ const exp = clamp(species.crown.pipe_model_exponent ?? 2.05, 1.3, 3.0);
30
+ const inv_exp = 1.0 / exp;
31
+ const w_blend = clamp(species.crown.pipe_model_weight ?? 0.65, 0.0, 1.0);
32
+
33
+ // Save initial parametric radii and their alpha-power cross-sectional areas
34
+ const param_radii = new Float32Array(n);
35
+ const param_area = new Float64Array(n);
36
+ for (let v = 0; v < n; v++) {
37
+ const r = Math.max(0.0005, skeleton.node_read_radius(v));
38
+ param_radii[v] = r;
39
+ param_area[v] = Math.pow(r, exp);
40
+ }
41
+
42
+ // Map each lateral child branch to the parent segment it attaches to
43
+ /** @type {Map<number, number[]>} */
44
+ const edge_lateral_branches = new Map();
45
+ for (let b = 1; b < branch_count; b++) {
46
+ const p_edge = skeleton.branch_parent_edge[b];
47
+ if (p_edge >= 0 && p_edge < seg_count) {
48
+ let list = edge_lateral_branches.get(p_edge);
49
+ if (list === undefined) {
50
+ list = [];
51
+ edge_lateral_branches.set(p_edge, list);
52
+ }
53
+ list.push(b);
54
+ }
55
+ }
56
+
57
+ // Track accumulated alpha-area at each vertex
58
+ const pipe_area = new Float64Array(n);
59
+ // Track how many outgoing segments originate at each vertex (for shared-vertex bifurcations)
60
+ const outgoing_seg_count = new Int32Array(n);
61
+ const outgoing_seg_area = new Float64Array(n);
62
+ for (let s = 0; s < seg_count; s++) {
63
+ const v0 = skeleton.segment_v0(s);
64
+ if (v0 >= 0 && v0 < n) {
65
+ outgoing_seg_count[v0]++;
66
+ }
67
+ }
68
+
69
+ const branch_nodes = [];
70
+ const branch_edges = [];
71
+
72
+ // Process branches in reverse order (twigs -> boughs -> trunk) because parent_id < child_id
73
+ for (let b = branch_count - 1; b >= 0; b--) {
74
+ skeleton.collect_branch_chain(b, branch_nodes, branch_edges);
75
+ const m = branch_nodes.length;
76
+ if (m === 0) continue;
77
+
78
+ const root_v = branch_nodes[0];
79
+ const tip_v = branch_nodes[m - 1];
80
+
81
+ // 1. Anchor terminal tip vertex to its parametric bud/shoot area (plus any shared-vertex fork children)
82
+ let tip_area = param_area[tip_v];
83
+ if (outgoing_seg_count[tip_v] > 0 && outgoing_seg_area[tip_v] > tip_area) {
84
+ tip_area = outgoing_seg_area[tip_v];
85
+ }
86
+ pipe_area[tip_v] = tip_area;
87
+
88
+ // 2. Accumulate backward from tip to base along branch b's spine segments
89
+ for (let i = branch_edges.length - 1; i >= 0; i--) {
90
+ const e_id = branch_edges[i];
91
+ const v0 = branch_nodes[i];
92
+ const v1 = branch_nodes[i + 1];
93
+
94
+ // Telescoping parametric area differential along this internode segment
95
+ // (reproduces exact basal flare and continuous bole/shoot taper between junctions)
96
+ const min_step = Math.pow(param_radii[v1] * 0.08, exp);
97
+ const param_diff = Math.max(min_step, param_area[v0] - param_area[v1]);
98
+
99
+ // Sum cross-sectional area demand of lateral child branches attached to segment e_id
100
+ let lateral_demand = 0.0;
101
+ const child_branches = edge_lateral_branches.get(e_id);
102
+ if (child_branches !== undefined) {
103
+ for (let k = 0; k < child_branches.length; k++) {
104
+ const cb = child_branches[k];
105
+ const c_root = skeleton.branch_root_vertex[cb];
106
+ if (c_root >= 0 && c_root < n && c_root !== v0) {
107
+ const c_level = skeleton.branch_level[cb];
108
+ const lateral_weight = c_level === skeleton.branch_level[b] ? 0.75 : 0.08;
109
+ lateral_demand += lateral_weight * pipe_area[c_root];
110
+ }
111
+ }
112
+ }
113
+
114
+ const seg_upstream_area = pipe_area[v1] + param_diff + lateral_demand;
115
+ outgoing_seg_area[v0] += seg_upstream_area;
116
+
117
+ // If v0 is a shared bifurcation node with multiple outgoing segments, sum all outgoing segment areas
118
+ pipe_area[v0] = Math.max(seg_upstream_area, outgoing_seg_area[v0]);
119
+ }
120
+
121
+ // 3. Normalize branch b's pipe_area profile so both tip (t=1) and base (t=0) boundary conditions
122
+ // are respected while preserving all intermediate Da Vinci junction step-downs
123
+ const a_raw_tip = pipe_area[tip_v];
124
+ const a_raw_root = pipe_area[root_v];
125
+ const a_target_tip = param_area[tip_v];
126
+ // Allow shared-vertex multi-segment forks to exceed single-stem param_area[root_v] when needed
127
+ const a_target_root = outgoing_seg_count[root_v] > 1
128
+ ? Math.max(param_area[root_v], outgoing_seg_area[root_v])
129
+ : Math.max(a_target_tip * 1.05, param_area[root_v]);
130
+
131
+ const raw_span = a_raw_root - a_raw_tip;
132
+ const target_span = Math.max(0.0, a_target_root - a_target_tip);
133
+
134
+ for (let i = 0; i < m; i++) {
135
+ const v = branch_nodes[i];
136
+ let a_norm;
137
+ if (raw_span > 1e-12) {
138
+ const u_area = clamp((pipe_area[v] - a_raw_tip) / raw_span, 0.0, 1.0);
139
+ a_norm = a_target_tip + u_area * target_span;
140
+ } else {
141
+ a_norm = param_area[v];
142
+ }
143
+
144
+ // Preserve strict fork area dominance at shared multi-segment vertices
145
+ if (outgoing_seg_count[v] > 1 && outgoing_seg_area[v] > a_norm) {
146
+ a_norm = outgoing_seg_area[v];
147
+ }
148
+
149
+ pipe_area[v] = a_norm;
150
+ }
151
+ }
152
+
153
+ // Convert normalized pipe areas back to radii and blend with parametric radii
154
+ for (let v = 0; v < n; v++) {
155
+ const pipe_r = Math.pow(Math.max(1e-12, pipe_area[v]), inv_exp);
156
+ const blended = lerp(param_radii[v], pipe_r, w_blend);
157
+ skeleton.node_write_radius(v, blended);
158
+ }
159
+
160
+ // Enforce strict child-to-parent radius bound at every lateral branch attachment
161
+ // and monotonically non-increasing radii along each branch chain
162
+ for (let b = 0; b < branch_count; b++) {
163
+ skeleton.collect_branch_chain(b, branch_nodes, branch_edges);
164
+ const m = branch_nodes.length;
165
+ if (m === 0) continue;
166
+
167
+ const root_v = branch_nodes[0];
168
+ let max_allowed = skeleton.node_read_radius(root_v);
169
+
170
+ if (b > 0) {
171
+ const p_edge = skeleton.branch_parent_edge[b];
172
+ const attach_t = skeleton.branch_parent_attach_t[b];
173
+ if (p_edge >= 0 && p_edge < seg_count) {
174
+ const pv0 = skeleton.segment_v0(p_edge);
175
+ const pv1 = skeleton.segment_v1(p_edge);
176
+ const pt0 = skeleton.node_t_norm(pv0);
177
+ const pt1 = skeleton.node_t_norm(pv1);
178
+ const local_u = clamp((attach_t - pt0) / Math.max(1e-5, pt1 - pt0), 0.0, 1.0);
179
+ const pr0 = skeleton.node_read_radius(pv0);
180
+ const pr1 = skeleton.node_read_radius(pv1);
181
+ const parent_r = lerp(pr0, pr1, local_u);
182
+ const cap_r = parent_r * 0.82;
183
+ if (max_allowed > cap_r) {
184
+ const scale = cap_r / Math.max(1e-6, max_allowed);
185
+ for (let i = 0; i < m; i++) {
186
+ const v = branch_nodes[i];
187
+ skeleton.node_write_radius(v, skeleton.node_read_radius(v) * scale);
188
+ }
189
+ max_allowed = cap_r;
190
+ }
191
+ }
192
+ }
193
+
194
+ // Ensure monotonic non-increasing radius from branch root to branch tip
195
+ let prev_r = skeleton.node_read_radius(root_v);
196
+ skeleton.branch_base_radius[b] = prev_r;
197
+ for (let i = 1; i < m; i++) {
198
+ const v = branch_nodes[i];
199
+ const cur_r = Math.min(prev_r, skeleton.node_read_radius(v));
200
+ skeleton.node_write_radius(v, cur_r);
201
+ prev_r = cur_r;
202
+ }
203
+ }
204
+
205
+ return skeleton;
206
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"tree_skeleton_grow.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/tree_skeleton_grow.js"],"names":[],"mappings":"AAuIA;;;;;;;;;;;;;GAaG;AACH,4CAJW,iBAAiB,MAAO,QACxB,YAAY,GACV,YAAY,CA47BxB;kCAtkCiC,gCAAgC;6BACrC,mBAAmB"}
1
+ {"version":3,"file":"tree_skeleton_grow.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/tree_skeleton_grow.js"],"names":[],"mappings":"AAsOA;;;;;;;;;;;;;GAaG;AACH,4CAJW,iBAAiB,MAAO,QACxB,YAAY,GACV,YAAY,CA4lDxB;kCAn0DiC,gCAAgC;6BACrC,mBAAmB"}