@woosh/meep-engine 3.53.0 → 3.54.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.
- package/package.json +1 -1
- package/src/core/math/noise/worley_noise_2d.d.ts +14 -0
- package/src/core/math/noise/worley_noise_2d.d.ts.map +1 -0
- package/src/core/math/noise/worley_noise_2d.js +74 -0
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts +6 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +363 -325
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts +93 -14
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +322 -183
- package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts +9 -0
- package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js +110 -83
- package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts +42 -0
- package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts.map +1 -0
- package/src/engine/{graphics3/decal/DecalAtlas.js → graphics/texture/atlas/SpriteAtlas.js} +202 -194
- package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts +12 -0
- package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts.map +1 -0
- package/src/engine/graphics/texture/atlas/SpriteAtlasFill.js +30 -0
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +7 -0
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/TextureAtlas.js +11 -1
- package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts +52 -0
- package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -0
- package/src/engine/{graphics3/decal/decal_atlas_border.js → graphics/texture/atlas/sprite_atlas_border.js} +69 -69
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +447 -450
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +9 -22
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +892 -951
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/generation/foliage/FOLIAGE_DESIGN.md +2 -1
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts +4 -3
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/BarkMaterialConfig.js +6 -6
- package/src/generation/foliage/config/FoliageBarkType.d.ts +11 -0
- package/src/generation/foliage/config/FoliageBarkType.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageBarkType.js +16 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +58 -5
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/FoliageMaterialConfig.js +279 -181
- package/src/generation/foliage/index.d.ts +2 -1
- package/src/generation/foliage/index.js +44 -43
- package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -1
- package/src/generation/foliage/material/make_bark_material.js +23 -95
- package/src/generation/foliage/material/make_foliage_material.d.ts +29 -3
- package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
- package/src/generation/foliage/material/make_foliage_material.js +605 -359
- package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -1
- package/src/generation/foliage/mesh/branch_collar_project.js +205 -203
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +15 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +569 -502
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1049 -1047
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +2 -1
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +454 -415
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +870 -837
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -121
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +10 -7
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +206 -179
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1871 -1104
- package/src/shade/playground/foliage_wind/foliage_world.d.ts +6 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
- package/src/shade/playground/foliage_wind/foliage_world.js +602 -593
- package/src/shade/playground/foliage_wind/index.html +260 -254
- package/src/shade/playground/foliage_wind/main.js +275 -263
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +3 -3
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +350 -294
- package/src/shade/renderer/hiz/generate_downsampler_code.d.ts +0 -2
- package/src/shade/renderer/hiz/generate_downsampler_code.d.ts.map +1 -1
- package/src/shade/renderer/hiz/generate_downsampler_code.js +99 -100
- package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts +15 -0
- package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_pick_alignment.js +148 -0
- package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts +28 -0
- package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_plan_reduction_steps.js +58 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +5 -5
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +57 -67
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +3 -3
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +111 -112
- package/src/shade/renderer/hiz/shader_hzb_spd.d.ts +5 -0
- package/src/shade/renderer/hiz/shader_hzb_spd.d.ts.map +1 -0
- package/src/shade/renderer/hiz/shader_hzb_spd.js +160 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +67 -0
- package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts +7 -0
- package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.js +13 -0
- package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts +10 -0
- package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.js +72 -0
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +39 -0
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +90 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +12 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +56 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +31 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +196 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +10 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +163 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts +4 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.js +137 -0
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +4 -3
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts +4 -3
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles_avboit.js +28 -11
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +9 -13
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +25 -20
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +21 -38
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js +62 -62
- package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts +6 -0
- package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.js +19 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js +16 -10
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js +118 -117
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +41 -7
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +162 -58
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +10 -12
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +583 -606
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts +24 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +640 -640
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +113 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +484 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +50 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +60 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +25 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +47 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts +74 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.js +173 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +26 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +83 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts +31 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js +113 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts +121 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +356 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts +16 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +191 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts +16 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts +23 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts.map +1 -0
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.js +1 -1
- package/src/engine/graphics3/decal/DecalAtlasFill.js +0 -32
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +0 -49
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +0 -50
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.js +0 -105
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +0 -80
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.js +0 -51
- package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +0 -39
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +0 -121
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +0 -237
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch_collar_project.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/mesh/branch_collar_project.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,+CA5BW,MAAM,EAAE,GAAC,YAAY,kBACrB,MAAM,YACN,MAAM,EAAE,GAAC,YAAY,mBACrB,MAAM,UACN,MAAM,UACN,MAAM,UACN,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,YACN,MAAM,YACN,MAAM,YACN,MAAM,aACN,MAAM,aACN,MAAM,aACN,MAAM,aACN,MAAM,aACN,MAAM,aACN,MAAM,iBACN,MAAM,eACN,MAAM,gBACN,MAAM,2BACN,MAAM,2BACN,MAAM,uBACN,MAAM,UACN,MAAM,UACN,MAAM,
|
|
1
|
+
{"version":3,"file":"branch_collar_project.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/mesh/branch_collar_project.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,+CA5BW,MAAM,EAAE,GAAC,YAAY,kBACrB,MAAM,YACN,MAAM,EAAE,GAAC,YAAY,mBACrB,MAAM,UACN,MAAM,UACN,MAAM,UACN,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,YACN,MAAM,YACN,MAAM,YACN,MAAM,aACN,MAAM,aACN,MAAM,aACN,MAAM,aACN,MAAM,aACN,MAAM,aACN,MAAM,iBACN,MAAM,eACN,MAAM,gBACN,MAAM,2BACN,MAAM,2BACN,MAAM,uBACN,MAAM,UACN,MAAM,UACN,MAAM,QAmKhB"}
|
|
@@ -1,203 +1,205 @@
|
|
|
1
|
-
import { clamp } from "../../../core/math/clamp.js";
|
|
2
|
-
import { lerp } from "../../../core/math/lerp.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Projects a child branch collar vertex `(ring_x, ring_y, ring_z)` into the parent branch's
|
|
6
|
-
* polygonal frustum in the orthonormal $(\mathbf{T}_p, \hat{\mathbf{u}}, \hat{\mathbf{w}})$ basis,
|
|
7
|
-
* guaranteeing that:
|
|
8
|
-
* 1. Every welded base vertex (`weld_factor === 1`) sits strictly inside the parent polygon's
|
|
9
|
-
* inscribed apothem radius $R_{\text{apothem}}(z) = R_p(z) (1 - \text{flute\_amp}_p) \cos(\pi / M_p)$
|
|
10
|
-
* at the vertex's axial height $z$ (preventing any daylight gap outside polygonal parent facets or tapering segments).
|
|
11
|
-
* 2. Every welded base vertex lands strictly on the emerging $+\hat{\mathbf{u}}$ hemisphere of the
|
|
12
|
-
* parent axis ($q_u > 0$, preventing any backward protrusion through the opposite side of the parent branch).
|
|
13
|
-
* 3. Axial offset $z$ along $\mathbf{T}_p$ is bounded within $[z_{\min}, z_{\max}]$.
|
|
14
|
-
* 4. Outward normals blend smoothly ($C^1$) from the parent cylinder normal to the child tube normal.
|
|
15
|
-
*
|
|
16
|
-
* @param {number[]|Float32Array} out_pos
|
|
17
|
-
* @param {number} out_pos_offset
|
|
18
|
-
* @param {number[]|Float32Array} out_norm
|
|
19
|
-
* @param {number} out_norm_offset
|
|
20
|
-
* @param {number} ring_x flared child ring vertex X
|
|
21
|
-
* @param {number} ring_y flared child ring vertex Y
|
|
22
|
-
* @param {number} ring_z flared child ring vertex Z
|
|
23
|
-
* @param {number} tube_nx outward child tube normal X
|
|
24
|
-
* @param {number} tube_ny outward child tube normal Y
|
|
25
|
-
* @param {number} tube_nz outward child tube normal Z
|
|
26
|
-
* @param {number} child_tx unit child spine tangent X
|
|
27
|
-
* @param {number} child_ty unit child spine tangent Y
|
|
28
|
-
* @param {number} child_tz unit child spine tangent Z
|
|
29
|
-
* @param {number} parent_px parent attachment center X
|
|
30
|
-
* @param {number} parent_py parent attachment center Y
|
|
31
|
-
* @param {number} parent_pz parent attachment center Z
|
|
32
|
-
* @param {number} parent_tx unit parent spine tangent X
|
|
33
|
-
* @param {number} parent_ty unit parent spine tangent Y
|
|
34
|
-
* @param {number} parent_tz unit parent spine tangent Z
|
|
35
|
-
* @param {number} parent_radius parent branch radius at attachment
|
|
36
|
-
* @param {number} weld_factor in [0, 1] (1 at base ring i=0, decaying to 0 across collar rings)
|
|
37
|
-
* @param {number} normal_blend in [0, 1] blend weight toward parent normal
|
|
38
|
-
* @param {number} [parent_radial_segments=8] radial polygon vertex count M_p of parent branch
|
|
39
|
-
* @param {number} [parent_flute_amplitude=0.0] flute amplitude of parent branch
|
|
40
|
-
* @param {number} [parent_taper_slope=0.0] linear radius change dR_p/dz along parent_T
|
|
41
|
-
* @param {number} [z_min=-Infinity] minimum axial offset along parent_T
|
|
42
|
-
* @param {number} [z_max=Infinity] maximum axial offset along parent_T
|
|
43
|
-
*/
|
|
44
|
-
export function branch_collar_project(
|
|
45
|
-
out_pos,
|
|
46
|
-
out_pos_offset,
|
|
47
|
-
out_norm,
|
|
48
|
-
out_norm_offset,
|
|
49
|
-
ring_x, ring_y, ring_z,
|
|
50
|
-
tube_nx, tube_ny, tube_nz,
|
|
51
|
-
child_tx, child_ty, child_tz,
|
|
52
|
-
parent_px, parent_py, parent_pz,
|
|
53
|
-
parent_tx, parent_ty, parent_tz,
|
|
54
|
-
parent_radius,
|
|
55
|
-
weld_factor,
|
|
56
|
-
normal_blend,
|
|
57
|
-
parent_radial_segments = 8,
|
|
58
|
-
parent_flute_amplitude = 0.0,
|
|
59
|
-
parent_taper_slope = 0.0,
|
|
60
|
-
z_min = -Infinity,
|
|
61
|
-
z_max = Infinity
|
|
62
|
-
) {
|
|
63
|
-
const w = clamp(weld_factor, 0.0, 1.0);
|
|
64
|
-
if (w <= 1e-5 || parent_radius <= 1e-5) {
|
|
65
|
-
out_pos[out_pos_offset] = ring_x;
|
|
66
|
-
out_pos[out_pos_offset + 1] = ring_y;
|
|
67
|
-
out_pos[out_pos_offset + 2] = ring_z;
|
|
68
|
-
out_norm[out_norm_offset] = tube_nx;
|
|
69
|
-
out_norm[out_norm_offset + 1] = tube_ny;
|
|
70
|
-
out_norm[out_norm_offset + 2] = tube_nz;
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Polygon apothem factor of parent branch cross-section
|
|
75
|
-
const m_p = Math.max(3, parent_radial_segments | 0);
|
|
76
|
-
const flute_guard = Math.max(0.5, 1.0 - Math.max(0.0, parent_flute_amplitude));
|
|
77
|
-
const apothem_factor = Math.cos(Math.PI / m_p) * flute_guard;
|
|
78
|
-
const seat_ratio = 0.78 * apothem_factor;
|
|
79
|
-
|
|
80
|
-
// Vector from parent axis point to ring vertex
|
|
81
|
-
const dx = ring_x - parent_px;
|
|
82
|
-
const dy = ring_y - parent_py;
|
|
83
|
-
const dz = ring_z - parent_pz;
|
|
84
|
-
|
|
85
|
-
// Axial coordinate z_0 along parent_T and perpendicular radial offset q_0
|
|
86
|
-
const z_0 = dx * parent_tx + dy * parent_ty + dz * parent_tz;
|
|
87
|
-
const qx = dx - z_0 * parent_tx;
|
|
88
|
-
const qy = dy - z_0 * parent_ty;
|
|
89
|
-
const qz = dz - z_0 * parent_tz;
|
|
90
|
-
|
|
91
|
-
// Component of child_T perpendicular to parent_T
|
|
92
|
-
const dot_ct_pt = child_tx * parent_tx + child_ty * parent_ty + child_tz * parent_tz;
|
|
93
|
-
let ux = child_tx - dot_ct_pt * parent_tx;
|
|
94
|
-
let uy = child_ty - dot_ct_pt * parent_ty;
|
|
95
|
-
let uz = child_tz - dot_ct_pt * parent_tz;
|
|
96
|
-
const u_len = Math.sqrt(ux * ux + uy * uy + uz * uz);
|
|
97
|
-
|
|
98
|
-
let unx = 0.0, uny = 0.0, unz = 0.0;
|
|
99
|
-
if (u_len > 1e-5) {
|
|
100
|
-
unx = ux / u_len;
|
|
101
|
-
uny = uy / u_len;
|
|
102
|
-
unz = uz / u_len;
|
|
103
|
-
} else {
|
|
104
|
-
// Fallback orthogonal unit vector when child_T is collinear with parent_T
|
|
105
|
-
const q_len = Math.sqrt(qx * qx + qy * qy + qz * qz);
|
|
106
|
-
if (q_len > 1e-6) {
|
|
107
|
-
unx = qx / q_len;
|
|
108
|
-
uny = qy / q_len;
|
|
109
|
-
unz = qz / q_len;
|
|
110
|
-
} else {
|
|
111
|
-
if (Math.abs(parent_ty) < 0.9) {
|
|
112
|
-
unx = -parent_tz;
|
|
113
|
-
uny = 0.0;
|
|
114
|
-
unz = parent_tx;
|
|
115
|
-
} else {
|
|
116
|
-
unx = 1.0;
|
|
117
|
-
uny = 0.0;
|
|
118
|
-
unz = 0.0;
|
|
119
|
-
}
|
|
120
|
-
const d_p = unx * parent_tx + uny * parent_ty + unz * parent_tz;
|
|
121
|
-
unx -= d_p * parent_tx;
|
|
122
|
-
uny -= d_p * parent_ty;
|
|
123
|
-
unz -= d_p * parent_tz;
|
|
124
|
-
const nl = Math.sqrt(unx * unx + uny * uny + unz * unz) || 1.0;
|
|
125
|
-
unx /= nl;
|
|
126
|
-
uny /= nl;
|
|
127
|
-
unz /= nl;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// Lateral binormal w_hat = parent_T x u_hat
|
|
132
|
-
const wnx = parent_ty * unz - parent_tz * uny;
|
|
133
|
-
const wny = parent_tz * unx - parent_tx * unz;
|
|
134
|
-
const wnz = parent_tx * uny - parent_ty * unx;
|
|
135
|
-
|
|
136
|
-
const q_u = qx * unx + qy * uny + qz * unz;
|
|
137
|
-
const q_w = qx * wnx + qy * wny + qz * wnz;
|
|
138
|
-
|
|
139
|
-
const z_bound_min = Math.max(z_min, -0.95 * parent_radius);
|
|
140
|
-
const z_bound_max = Math.min(z_max, 0.95 * parent_radius);
|
|
141
|
-
const z_proj = z_bound_min <= z_bound_max
|
|
142
|
-
? clamp(z_0, z_bound_min, z_bound_max)
|
|
143
|
-
: clamp(z_0, z_min, z_max);
|
|
144
|
-
|
|
145
|
-
// Evaluate tapered parent radius and inscribed seat radius at z_proj
|
|
146
|
-
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
const
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
out_pos[out_pos_offset
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
let
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
let
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
out_norm[out_norm_offset
|
|
203
|
-
|
|
1
|
+
import { clamp } from "../../../core/math/clamp.js";
|
|
2
|
+
import { lerp } from "../../../core/math/lerp.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Projects a child branch collar vertex `(ring_x, ring_y, ring_z)` into the parent branch's
|
|
6
|
+
* polygonal frustum in the orthonormal $(\mathbf{T}_p, \hat{\mathbf{u}}, \hat{\mathbf{w}})$ basis,
|
|
7
|
+
* guaranteeing that:
|
|
8
|
+
* 1. Every welded base vertex (`weld_factor === 1`) sits strictly inside the parent polygon's
|
|
9
|
+
* inscribed apothem radius $R_{\text{apothem}}(z) = R_p(z) (1 - \text{flute\_amp}_p) \cos(\pi / M_p)$
|
|
10
|
+
* at the vertex's axial height $z$ (preventing any daylight gap outside polygonal parent facets or tapering segments).
|
|
11
|
+
* 2. Every welded base vertex lands strictly on the emerging $+\hat{\mathbf{u}}$ hemisphere of the
|
|
12
|
+
* parent axis ($q_u > 0$, preventing any backward protrusion through the opposite side of the parent branch).
|
|
13
|
+
* 3. Axial offset $z$ along $\mathbf{T}_p$ is bounded within $[z_{\min}, z_{\max}]$.
|
|
14
|
+
* 4. Outward normals blend smoothly ($C^1$) from the parent cylinder normal to the child tube normal.
|
|
15
|
+
*
|
|
16
|
+
* @param {number[]|Float32Array} out_pos
|
|
17
|
+
* @param {number} out_pos_offset
|
|
18
|
+
* @param {number[]|Float32Array} out_norm
|
|
19
|
+
* @param {number} out_norm_offset
|
|
20
|
+
* @param {number} ring_x flared child ring vertex X
|
|
21
|
+
* @param {number} ring_y flared child ring vertex Y
|
|
22
|
+
* @param {number} ring_z flared child ring vertex Z
|
|
23
|
+
* @param {number} tube_nx outward child tube normal X
|
|
24
|
+
* @param {number} tube_ny outward child tube normal Y
|
|
25
|
+
* @param {number} tube_nz outward child tube normal Z
|
|
26
|
+
* @param {number} child_tx unit child spine tangent X
|
|
27
|
+
* @param {number} child_ty unit child spine tangent Y
|
|
28
|
+
* @param {number} child_tz unit child spine tangent Z
|
|
29
|
+
* @param {number} parent_px parent attachment center X
|
|
30
|
+
* @param {number} parent_py parent attachment center Y
|
|
31
|
+
* @param {number} parent_pz parent attachment center Z
|
|
32
|
+
* @param {number} parent_tx unit parent spine tangent X
|
|
33
|
+
* @param {number} parent_ty unit parent spine tangent Y
|
|
34
|
+
* @param {number} parent_tz unit parent spine tangent Z
|
|
35
|
+
* @param {number} parent_radius parent branch radius at attachment
|
|
36
|
+
* @param {number} weld_factor in [0, 1] (1 at base ring i=0, decaying to 0 across collar rings)
|
|
37
|
+
* @param {number} normal_blend in [0, 1] blend weight toward parent normal
|
|
38
|
+
* @param {number} [parent_radial_segments=8] radial polygon vertex count M_p of parent branch
|
|
39
|
+
* @param {number} [parent_flute_amplitude=0.0] flute amplitude of parent branch
|
|
40
|
+
* @param {number} [parent_taper_slope=0.0] linear radius change dR_p/dz along parent_T
|
|
41
|
+
* @param {number} [z_min=-Infinity] minimum axial offset along parent_T
|
|
42
|
+
* @param {number} [z_max=Infinity] maximum axial offset along parent_T
|
|
43
|
+
*/
|
|
44
|
+
export function branch_collar_project(
|
|
45
|
+
out_pos,
|
|
46
|
+
out_pos_offset,
|
|
47
|
+
out_norm,
|
|
48
|
+
out_norm_offset,
|
|
49
|
+
ring_x, ring_y, ring_z,
|
|
50
|
+
tube_nx, tube_ny, tube_nz,
|
|
51
|
+
child_tx, child_ty, child_tz,
|
|
52
|
+
parent_px, parent_py, parent_pz,
|
|
53
|
+
parent_tx, parent_ty, parent_tz,
|
|
54
|
+
parent_radius,
|
|
55
|
+
weld_factor,
|
|
56
|
+
normal_blend,
|
|
57
|
+
parent_radial_segments = 8,
|
|
58
|
+
parent_flute_amplitude = 0.0,
|
|
59
|
+
parent_taper_slope = 0.0,
|
|
60
|
+
z_min = -Infinity,
|
|
61
|
+
z_max = Infinity
|
|
62
|
+
) {
|
|
63
|
+
const w = clamp(weld_factor, 0.0, 1.0);
|
|
64
|
+
if (w <= 1e-5 || parent_radius <= 1e-5) {
|
|
65
|
+
out_pos[out_pos_offset] = ring_x;
|
|
66
|
+
out_pos[out_pos_offset + 1] = ring_y;
|
|
67
|
+
out_pos[out_pos_offset + 2] = ring_z;
|
|
68
|
+
out_norm[out_norm_offset] = tube_nx;
|
|
69
|
+
out_norm[out_norm_offset + 1] = tube_ny;
|
|
70
|
+
out_norm[out_norm_offset + 2] = tube_nz;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Polygon apothem factor of parent branch cross-section
|
|
75
|
+
const m_p = Math.max(3, parent_radial_segments | 0);
|
|
76
|
+
const flute_guard = Math.max(0.5, 1.0 - Math.max(0.0, parent_flute_amplitude));
|
|
77
|
+
const apothem_factor = Math.cos(Math.PI / m_p) * flute_guard;
|
|
78
|
+
const seat_ratio = 0.78 * apothem_factor;
|
|
79
|
+
|
|
80
|
+
// Vector from parent axis point to ring vertex
|
|
81
|
+
const dx = ring_x - parent_px;
|
|
82
|
+
const dy = ring_y - parent_py;
|
|
83
|
+
const dz = ring_z - parent_pz;
|
|
84
|
+
|
|
85
|
+
// Axial coordinate z_0 along parent_T and perpendicular radial offset q_0
|
|
86
|
+
const z_0 = dx * parent_tx + dy * parent_ty + dz * parent_tz;
|
|
87
|
+
const qx = dx - z_0 * parent_tx;
|
|
88
|
+
const qy = dy - z_0 * parent_ty;
|
|
89
|
+
const qz = dz - z_0 * parent_tz;
|
|
90
|
+
|
|
91
|
+
// Component of child_T perpendicular to parent_T
|
|
92
|
+
const dot_ct_pt = child_tx * parent_tx + child_ty * parent_ty + child_tz * parent_tz;
|
|
93
|
+
let ux = child_tx - dot_ct_pt * parent_tx;
|
|
94
|
+
let uy = child_ty - dot_ct_pt * parent_ty;
|
|
95
|
+
let uz = child_tz - dot_ct_pt * parent_tz;
|
|
96
|
+
const u_len = Math.sqrt(ux * ux + uy * uy + uz * uz);
|
|
97
|
+
|
|
98
|
+
let unx = 0.0, uny = 0.0, unz = 0.0;
|
|
99
|
+
if (u_len > 1e-5) {
|
|
100
|
+
unx = ux / u_len;
|
|
101
|
+
uny = uy / u_len;
|
|
102
|
+
unz = uz / u_len;
|
|
103
|
+
} else {
|
|
104
|
+
// Fallback orthogonal unit vector when child_T is collinear with parent_T
|
|
105
|
+
const q_len = Math.sqrt(qx * qx + qy * qy + qz * qz);
|
|
106
|
+
if (q_len > 1e-6) {
|
|
107
|
+
unx = qx / q_len;
|
|
108
|
+
uny = qy / q_len;
|
|
109
|
+
unz = qz / q_len;
|
|
110
|
+
} else {
|
|
111
|
+
if (Math.abs(parent_ty) < 0.9) {
|
|
112
|
+
unx = -parent_tz;
|
|
113
|
+
uny = 0.0;
|
|
114
|
+
unz = parent_tx;
|
|
115
|
+
} else {
|
|
116
|
+
unx = 1.0;
|
|
117
|
+
uny = 0.0;
|
|
118
|
+
unz = 0.0;
|
|
119
|
+
}
|
|
120
|
+
const d_p = unx * parent_tx + uny * parent_ty + unz * parent_tz;
|
|
121
|
+
unx -= d_p * parent_tx;
|
|
122
|
+
uny -= d_p * parent_ty;
|
|
123
|
+
unz -= d_p * parent_tz;
|
|
124
|
+
const nl = Math.sqrt(unx * unx + uny * uny + unz * unz) || 1.0;
|
|
125
|
+
unx /= nl;
|
|
126
|
+
uny /= nl;
|
|
127
|
+
unz /= nl;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Lateral binormal w_hat = parent_T x u_hat
|
|
132
|
+
const wnx = parent_ty * unz - parent_tz * uny;
|
|
133
|
+
const wny = parent_tz * unx - parent_tx * unz;
|
|
134
|
+
const wnz = parent_tx * uny - parent_ty * unx;
|
|
135
|
+
|
|
136
|
+
const q_u = qx * unx + qy * uny + qz * unz;
|
|
137
|
+
const q_w = qx * wnx + qy * wny + qz * wnz;
|
|
138
|
+
|
|
139
|
+
const z_bound_min = Math.max(z_min, -0.95 * parent_radius);
|
|
140
|
+
const z_bound_max = Math.min(z_max, 0.95 * parent_radius);
|
|
141
|
+
const z_proj = z_bound_min <= z_bound_max
|
|
142
|
+
? clamp(z_0, z_bound_min, z_bound_max)
|
|
143
|
+
: clamp(z_0, z_min, z_max);
|
|
144
|
+
|
|
145
|
+
// Evaluate tapered parent radius and inscribed seat radius at z_proj,
|
|
146
|
+
// ensuring conservative containment even when z_proj extends past the segment endpoint
|
|
147
|
+
const taper_delta = Math.min(0.0, z_proj * parent_taper_slope);
|
|
148
|
+
const r_parent_at_z = Math.max(0.10 * parent_radius, parent_radius + taper_delta);
|
|
149
|
+
const r_seat = r_parent_at_z * seat_ratio;
|
|
150
|
+
|
|
151
|
+
const q_w_proj = clamp(q_w, -0.78 * r_seat, 0.78 * r_seat);
|
|
152
|
+
const q_u_max = Math.sqrt(Math.max(0.0, r_seat * r_seat - q_w_proj * q_w_proj));
|
|
153
|
+
const s_u = clamp(q_u / Math.max(1e-5, r_parent_at_z), -1.0, 1.0);
|
|
154
|
+
const q_u_proj = q_u_max * (0.90 + 0.08 * s_u);
|
|
155
|
+
|
|
156
|
+
const proj_x = parent_px + z_proj * parent_tx + q_u_proj * unx + q_w_proj * wnx;
|
|
157
|
+
const proj_y = parent_py + z_proj * parent_ty + q_u_proj * uny + q_w_proj * wny;
|
|
158
|
+
const proj_z = parent_pz + z_proj * parent_tz + q_u_proj * unz + q_w_proj * wnz;
|
|
159
|
+
|
|
160
|
+
const final_x = lerp(ring_x, proj_x, w);
|
|
161
|
+
const final_y = lerp(ring_y, proj_y, w);
|
|
162
|
+
const final_z = lerp(ring_z, proj_z, w);
|
|
163
|
+
|
|
164
|
+
out_pos[out_pos_offset] = final_x;
|
|
165
|
+
out_pos[out_pos_offset + 1] = final_y;
|
|
166
|
+
out_pos[out_pos_offset + 2] = final_z;
|
|
167
|
+
|
|
168
|
+
// Compute parent cylinder outward normal at final position
|
|
169
|
+
const fdx = final_x - parent_px;
|
|
170
|
+
const fdy = final_y - parent_py;
|
|
171
|
+
const fdz = final_z - parent_pz;
|
|
172
|
+
const f_dot = fdx * parent_tx + fdy * parent_ty + fdz * parent_tz;
|
|
173
|
+
let pnx = fdx - f_dot * parent_tx;
|
|
174
|
+
let pny = fdy - f_dot * parent_ty;
|
|
175
|
+
let pnz = fdz - f_dot * parent_tz;
|
|
176
|
+
const pn_len = Math.sqrt(pnx * pnx + pny * pny + pnz * pnz);
|
|
177
|
+
if (pn_len > 1e-6) {
|
|
178
|
+
pnx /= pn_len;
|
|
179
|
+
pny /= pn_len;
|
|
180
|
+
pnz /= pn_len;
|
|
181
|
+
} else {
|
|
182
|
+
pnx = tube_nx;
|
|
183
|
+
pny = tube_ny;
|
|
184
|
+
pnz = tube_nz;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const nb = clamp(w * normal_blend, 0.0, 1.0);
|
|
188
|
+
let nx = lerp(tube_nx, pnx, nb);
|
|
189
|
+
let ny = lerp(tube_ny, pny, nb);
|
|
190
|
+
let nz = lerp(tube_nz, pnz, nb);
|
|
191
|
+
const n_len = Math.sqrt(nx * nx + ny * ny + nz * nz);
|
|
192
|
+
if (n_len > 1e-8) {
|
|
193
|
+
nx /= n_len;
|
|
194
|
+
ny /= n_len;
|
|
195
|
+
nz /= n_len;
|
|
196
|
+
} else {
|
|
197
|
+
nx = tube_nx;
|
|
198
|
+
ny = tube_ny;
|
|
199
|
+
nz = tube_nz;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
out_norm[out_norm_offset] = nx;
|
|
203
|
+
out_norm[out_norm_offset + 1] = ny;
|
|
204
|
+
out_norm[out_norm_offset + 2] = nz;
|
|
205
|
+
}
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
* @property {Float32Array} phases `count` per-card wind phase in [0, 1)
|
|
13
13
|
* @property {Float32Array} branch_sway `count` parent branch sway weight in [0, 1]
|
|
14
14
|
* @property {Float32Array} color_jitter `count` per-card luminance/tint jitter in [-1, 1]
|
|
15
|
+
* @property {Float32Array} maturities `count` per-card ontogenetic leaf maturity in [0, 1] (0 = juvenile tip, 1 = mature base)
|
|
16
|
+
* @property {Float32Array} sun_exposure `count` per-card canopy solar irradiance exposure in [0, 1]
|
|
17
|
+
* @property {Uint8Array} variant_indices `count` assigned foliage atlas variant index in `[0, variant_count - 1]`
|
|
15
18
|
* @property {Uint16Array} joints `count * 2` `[j_primary, j_parent]`
|
|
16
19
|
* @property {Float32Array} weights `count * 2` `[w_primary, w_parent]`
|
|
17
20
|
*/
|
|
@@ -67,6 +70,18 @@ export type FoliageAttachmentSet = {
|
|
|
67
70
|
* `count` per-card luminance/tint jitter in [-1, 1]
|
|
68
71
|
*/
|
|
69
72
|
color_jitter: Float32Array;
|
|
73
|
+
/**
|
|
74
|
+
* `count` per-card ontogenetic leaf maturity in [0, 1] (0 = juvenile tip, 1 = mature base)
|
|
75
|
+
*/
|
|
76
|
+
maturities: Float32Array;
|
|
77
|
+
/**
|
|
78
|
+
* `count` per-card canopy solar irradiance exposure in [0, 1]
|
|
79
|
+
*/
|
|
80
|
+
sun_exposure: Float32Array;
|
|
81
|
+
/**
|
|
82
|
+
* `count` assigned foliage atlas variant index in `[0, variant_count - 1]`
|
|
83
|
+
*/
|
|
84
|
+
variant_indices: Uint8Array;
|
|
70
85
|
/**
|
|
71
86
|
* `count * 2` `[j_primary, j_parent]`
|
|
72
87
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foliage_collect_attachments.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/mesh/foliage_collect_attachments.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"foliage_collect_attachments.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/mesh/foliage_collect_attachments.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;GAMG;AACH,sDAJW,OAAO,6BAA6B,EAAE,YAAY,WAClD,iBAAiB,GACf,oBAAoB,CAsgBhC;;;;;;;;WA5hBa,MAAM;;;;eACN,YAAY;;;;aACZ,YAAY;;;;QACZ,YAAY;;;;WACZ,YAAY;;;;YACZ,YAAY;;;;WACZ,YAAY;;;;YACZ,YAAY;;;;iBACZ,YAAY;;;;kBACZ,YAAY;;;;gBACZ,YAAY;;;;kBACZ,YAAY;;;;qBACZ,UAAU;;;;YACV,WAAW;;;;aACX,YAAY;;kCAhCQ,gCAAgC"}
|