@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.
- package/package.json +1 -1
- package/src/engine/ecs/animation/Animation.d.ts +4 -25
- package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
- package/src/engine/ecs/animation/Animation.js +9 -41
- package/src/engine/ecs/ik/IKGoalSystem.d.ts +4 -5
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKGoalSystem.js +4 -6
- package/src/engine/graphics/ecs/mesh/assetTypeByPath.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +9 -22
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +58 -203
- package/src/engine/graphics3/AnimationSystem.d.ts +7 -18
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +62 -243
- package/src/engine/graphics3/FoliageWindSystem.d.ts +67 -0
- package/src/engine/graphics3/FoliageWindSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FoliageWindSystem.js +257 -0
- package/src/engine/graphics3/GPUFluidSystem.d.ts +7 -0
- package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUFluidSystem.js +39 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +19 -5
- package/src/engine/graphics3/animation/AnimationClips.d.ts +107 -13
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
- package/src/engine/graphics3/animation/AnimationClips.js +207 -10
- package/src/engine/graphics3/animation/AnimationClipsSink.d.ts +89 -0
- package/src/engine/graphics3/animation/AnimationClipsSink.d.ts.map +1 -0
- package/src/engine/graphics3/animation/AnimationClipsSink.js +205 -0
- package/src/engine/graphics3/animation/FoliageWindRigs.d.ts +43 -0
- package/src/engine/graphics3/animation/FoliageWindRigs.d.ts.map +1 -0
- package/src/engine/graphics3/animation/FoliageWindRigs.js +69 -0
- package/src/engine/graphics3/animation/write_clip_playback.d.ts +17 -11
- package/src/engine/graphics3/animation/write_clip_playback.d.ts.map +1 -1
- package/src/engine/graphics3/animation/write_clip_playback.js +36 -27
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +8 -6
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +11 -5
- package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts +7 -7
- package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts.map +1 -1
- package/src/engine/graphics3/pose/collect_entity_playbacks.js +14 -15
- package/src/engine/graphics3/prefab/Prefab.d.ts +6 -0
- package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/Prefab.js +169 -162
- package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_compile.js +369 -334
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_instantiate.js +43 -2
- package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +2 -2
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts +2 -3
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ContactProbeSystem.js +2 -4
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +4 -4
- package/src/engine/sound/simulation/README.md +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeField.d.ts +22 -8
- package/src/engine/sound/simulation/probe/bakeProbeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeField.js +60 -15
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +19 -23
- package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +63 -17
- package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_sdf_grid.js +67 -17
- package/src/generation/foliage/FOLIAGE_DESIGN.md +318 -0
- package/src/generation/foliage/FOLIAGE_PLAN.md +198 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +20 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.js +108 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts +86 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeAsset.js +111 -0
- package/src/generation/foliage/asset/TreeLODAsset.d.ts +115 -0
- package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeLODAsset.js +346 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +15 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -0
- package/src/generation/foliage/asset/generate_tree.js +93 -0
- package/src/generation/foliage/asset/place_tree.d.ts +82 -0
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -0
- package/src/generation/foliage/asset/place_tree.js +194 -0
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts +120 -0
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/BarkMaterialConfig.js +250 -0
- package/src/generation/foliage/config/BranchLevelConfig.d.ts +288 -0
- package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/BranchLevelConfig.js +536 -0
- package/src/generation/foliage/config/CrownConfig.d.ts +100 -0
- package/src/generation/foliage/config/CrownConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/CrownConfig.js +186 -0
- package/src/generation/foliage/config/CrownEnvelopeType.d.ts +16 -0
- package/src/generation/foliage/config/CrownEnvelopeType.d.ts.map +1 -0
- package/src/generation/foliage/config/CrownEnvelopeType.js +17 -0
- package/src/generation/foliage/config/FoliageCardType.d.ts +12 -0
- package/src/generation/foliage/config/FoliageCardType.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageCardType.js +18 -0
- package/src/generation/foliage/config/FoliageConfig.d.ts +151 -0
- package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageConfig.js +283 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +90 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.js +181 -0
- package/src/generation/foliage/config/PhyllotaxisMode.d.ts +13 -0
- package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -0
- package/src/generation/foliage/config/PhyllotaxisMode.js +20 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +87 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeLODConfig.js +211 -0
- package/src/generation/foliage/config/TreePreset.d.ts +16 -0
- package/src/generation/foliage/config/TreePreset.d.ts.map +1 -0
- package/src/generation/foliage/config/TreePreset.js +17 -0
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +109 -0
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeSpeciesConfig.js +400 -0
- package/src/generation/foliage/config/TreeWindConfig.d.ts +84 -0
- package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeWindConfig.js +157 -0
- package/src/generation/foliage/index.d.ts +38 -0
- package/src/generation/foliage/index.d.ts.map +1 -0
- package/src/generation/foliage/index.js +43 -0
- package/src/generation/foliage/material/make_bark_material.d.ts +37 -0
- package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -0
- package/src/generation/foliage/material/make_bark_material.js +802 -0
- package/src/generation/foliage/material/make_foliage_material.d.ts +14 -0
- package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -0
- package/src/generation/foliage/material/make_foliage_material.js +359 -0
- package/src/generation/foliage/mesh/branch_collar_project.d.ts +42 -0
- package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -0
- package/src/generation/foliage/mesh/branch_collar_project.js +203 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +35 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts.map +1 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.js +72 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +80 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +502 -0
- package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts +19 -0
- package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.js +150 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts +55 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1047 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +21 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +415 -0
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +13 -0
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -0
- package/src/generation/foliage/presets/make_tree_species_preset.js +837 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +443 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.js +1100 -0
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts +27 -0
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -0
- package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts +32 -0
- package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/spine_frame_double_reflection.js +87 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +33 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +205 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +14 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +179 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +18 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1104 -0
- package/src/shade/playground/additive_blending/index.html +197 -0
- package/src/shade/playground/additive_blending/main.d.ts +2 -0
- package/src/shade/playground/additive_blending/main.d.ts.map +1 -0
- package/src/shade/playground/additive_blending/main.js +529 -0
- package/src/shade/playground/foliage_wind/README.md +18 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts +127 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -0
- package/src/shade/playground/foliage_wind/foliage_world.js +593 -0
- package/src/shade/playground/foliage_wind/index.html +254 -0
- package/src/shade/playground/foliage_wind/main.d.ts +2 -0
- package/src/shade/playground/foliage_wind/main.d.ts.map +1 -0
- package/src/shade/playground/foliage_wind/main.js +263 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +45 -16
- package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +145 -0
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +9 -1
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +53 -1
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts +8 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.js +71 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts +11 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.js +32 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +30 -3
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +532 -79
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +19 -12
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +20 -13
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +35 -8
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationClip.js +433 -2
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +40 -32
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +97 -0
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +161 -0
- package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts +65 -0
- package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/FoliageWindRig.js +89 -0
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts +19 -0
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +143 -0
- package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts +14 -0
- package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js +116 -0
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +39 -29
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +37 -37
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
- package/src/shade/renderer/extension/RenderExtension.d.ts +7 -0
- package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtension.js +9 -0
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +6 -0
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtensionRegistry.js +15 -0
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +7 -0
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.js +15 -0
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +7 -0
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +11 -0
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +51 -48
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -0
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/FluidMacPasses.js +16 -0
- package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +15 -3
- package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +102 -96
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +12 -12
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +12 -12
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +7 -0
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +16 -0
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +7 -0
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
- package/src/shade/renderer/fluid/publish/FluidWindPublish.js +10 -0
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +2 -2
- package/src/shade/renderer/loader/SceneBundle.d.ts +7 -0
- package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
- package/src/shade/renderer/loader/SceneBundle.js +119 -111
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +4 -0
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +6 -5
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +8 -7
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -8
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +3 -1
- 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 +9 -4
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +9 -7
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.js +15 -7
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +6 -4
- package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +3 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +8 -5
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +4 -3
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1 -1
- package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts +9 -0
- package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts.map +1 -0
- package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js +17 -0
- package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts +8 -0
- package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts.map +1 -1
- package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js +28 -20
- package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts +8 -0
- package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts.map +1 -0
- package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js +15 -0
- package/src/shade/renderer/view/chunk_view_mip_bias.d.ts +21 -0
- package/src/shade/renderer/view/chunk_view_mip_bias.d.ts.map +1 -0
- package/src/shade/renderer/view/chunk_view_mip_bias.js +44 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +105 -26
- package/src/engine/graphics/composit/CompositingStages.d.ts +0 -6
- package/src/engine/graphics/composit/CompositingStages.d.ts.map +0 -1
- package/src/engine/graphics/composit/CompositingStages.js +0 -8
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +0 -7
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +0 -24
- package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts +0 -8
- package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.js +0 -17
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +0 -8
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +0 -60
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +0 -7
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +0 -26
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +0 -7
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +0 -23
- package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +0 -7
- package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +0 -1
- package/src/engine/graphics/geometry/instancing/geometry_copy.js +0 -15
- package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts +0 -2
- package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts.map +0 -1
- package/src/engine/graphics/geometry/instancing/rewriteMaterial.js +0 -57
- package/src/engine/graphics/geometry/ribbon/Quad.d.ts +0 -96
- package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/Quad.js +0 -213
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +0 -9
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +0 -12
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +0 -10
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +0 -17
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +0 -10
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +0 -13
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +0 -11
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +0 -24
- package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts +0 -6
- package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/rotateRibbon.js +0 -37
- package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts +0 -9
- package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/updateTipPosition.js +0 -52
- package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts +0 -8
- package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts.map +0 -1
- package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.js +0 -54
- package/src/engine/graphics/render/RenderPassType.d.ts +0 -6
- package/src/engine/graphics/render/RenderPassType.d.ts.map +0 -1
- package/src/engine/graphics/render/RenderPassType.js +0 -8
- package/src/engine/graphics/render/layers/RenderLayer.d.ts +0 -78
- package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayer.js +0 -95
- package/src/engine/graphics/render/layers/RenderLayerManager.d.ts +0 -72
- package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerManager.js +0 -160
- package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts +0 -18
- package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerManagerState.js +0 -48
- package/src/engine/graphics/render/layers/RenderLayerState.d.ts +0 -18
- package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerState.js +0 -27
- package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts +0 -8
- package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerUtils.js +0 -103
- package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts +0 -10
- package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts.map +0 -1
- package/src/engine/graphics/render/make_bvh_visibility_builder.js +0 -64
- package/src/engine/graphics/render/view/CameraViewFlags.d.ts +0 -7
- package/src/engine/graphics/render/view/CameraViewFlags.d.ts.map +0 -1
- package/src/engine/graphics/render/view/CameraViewFlags.js +0 -9
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +0 -143
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +0 -1
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +0 -328
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +0 -39
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +0 -1
- package/src/engine/graphics/render/visibility/VisibilityComputer.js +0 -80
- package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +0 -29
- package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +0 -1
- package/src/engine/graphics/render/visibility/VisibilityFilter.js +0 -37
- package/src/engine/graphics3/animation/write_graph_playback.d.ts +0 -24
- package/src/engine/graphics3/animation/write_graph_playback.d.ts.map +0 -1
- package/src/engine/graphics3/animation/write_graph_playback.js +0 -48
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefab_instantiate.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_instantiate.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prefab_instantiate.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_instantiate.js"],"names":[],"mappings":"AA+CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,2CARW,MAAM,WACN,sBAAsB,QACtB,MAAM;IAEY,SAAS,GAA3B,OAAO;IAEL,cAAc,CA8L1B;AAED;;;;;;;;;;;;;;GAcG;AACH,iDAHW,sBAAsB,YACtB,cAAc,QAqBxB;qBA5RY,OAAO,aAAa,EAAE,MAAM;qCAC5B,OAAO,qCAAqC,EAAE,sBAAsB;+BAJlD,qBAAqB"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
2
|
import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
|
|
3
|
+
import { PI2 } from "../../../core/math/PI2.js";
|
|
4
|
+
import { seededRandom } from "../../../core/math/random/seededRandom.js";
|
|
5
|
+
import { FoliageWindJoint } from "../../../shade/renderer/animation/foliage/FoliageWindJoint.js";
|
|
6
|
+
import { FoliageWindRig } from "../../../shade/renderer/animation/foliage/FoliageWindRig.js";
|
|
3
7
|
import { ShadeAnimationChannel } from "../../../shade/renderer/animation/ShadeAnimationChannel.js";
|
|
4
8
|
import { ShadeAnimationClip } from "../../../shade/renderer/animation/ShadeAnimationClip.js";
|
|
5
9
|
import { SerializationMetadata } from "../../ecs/components/SerializationMetadata.js";
|
|
@@ -13,6 +17,7 @@ import { MeshSkin } from "../../graphics/ecs/mesh-v2/MeshSkin.js";
|
|
|
13
17
|
import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
14
18
|
import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
|
|
15
19
|
import { AnimationClips } from "../animation/AnimationClips.js";
|
|
20
|
+
import { FoliageWindRigs } from "../animation/FoliageWindRigs.js";
|
|
16
21
|
import { PrefabInstance } from "./PrefabInstance.js";
|
|
17
22
|
|
|
18
23
|
/**
|
|
@@ -37,6 +42,7 @@ const COMPONENT_TYPES = [
|
|
|
37
42
|
ParentEntity,
|
|
38
43
|
SerializationMetadata,
|
|
39
44
|
AnimationClips,
|
|
45
|
+
FoliageWindRigs,
|
|
40
46
|
];
|
|
41
47
|
|
|
42
48
|
/**
|
|
@@ -96,6 +102,7 @@ export function prefab_instantiate(prefab, dataset, root, { transient = true } =
|
|
|
96
102
|
const PARENT = dataset.computeComponentTypeIndex(ParentEntity);
|
|
97
103
|
const METADATA = dataset.computeComponentTypeIndex(SerializationMetadata);
|
|
98
104
|
const CLIPS = dataset.computeComponentTypeIndex(AnimationClips);
|
|
105
|
+
const FOLIAGE_RIGS = dataset.computeComponentTypeIndex(FoliageWindRigs);
|
|
99
106
|
|
|
100
107
|
const root_transform = dataset.getComponent(root, Transform64);
|
|
101
108
|
|
|
@@ -231,6 +238,36 @@ export function prefab_instantiate(prefab, dataset, root, { transient = true } =
|
|
|
231
238
|
// then.
|
|
232
239
|
dataset.addComponentToEntityByIndex(root, CLIPS, AnimationClips.from(clips));
|
|
233
240
|
|
|
241
|
+
if (Array.isArray(prefab.foliage_rigs) && prefab.foliage_rigs.length > 0) {
|
|
242
|
+
const tx = root_transform.matrix[12];
|
|
243
|
+
const ty = root_transform.matrix[13];
|
|
244
|
+
const tz = root_transform.matrix[14];
|
|
245
|
+
const pos_hash = Math.imul(Math.round(tx * 100), 73856093)
|
|
246
|
+
^ Math.imul(Math.round(ty * 100), 19349663)
|
|
247
|
+
^ Math.imul(Math.round(tz * 100), 83492791)
|
|
248
|
+
^ root;
|
|
249
|
+
const phase_rng = seededRandom(pos_hash | 0);
|
|
250
|
+
const phase_offset = phase_rng() * PI2;
|
|
251
|
+
|
|
252
|
+
const rigs = prefab.foliage_rigs.map(rig => FoliageWindRig.from({
|
|
253
|
+
name: rig.name,
|
|
254
|
+
root: entities[rig.root],
|
|
255
|
+
weight: rig.weight,
|
|
256
|
+
joints: rig.joints.map(joint => FoliageWindJoint.from({
|
|
257
|
+
target: entities[joint.target],
|
|
258
|
+
branch_axis: joint.branch_axis,
|
|
259
|
+
compliance: joint.compliance,
|
|
260
|
+
natural_frequency: joint.natural_frequency,
|
|
261
|
+
damping_ratio: joint.damping_ratio,
|
|
262
|
+
max_angle: joint.max_angle,
|
|
263
|
+
turbulence: joint.turbulence,
|
|
264
|
+
phase_offset: (joint.phase_offset + phase_offset) % PI2,
|
|
265
|
+
})),
|
|
266
|
+
}));
|
|
267
|
+
|
|
268
|
+
dataset.addComponentToEntityByIndex(root, FOLIAGE_RIGS, FoliageWindRigs.from(rigs));
|
|
269
|
+
}
|
|
270
|
+
|
|
234
271
|
return instance;
|
|
235
272
|
}
|
|
236
273
|
|
|
@@ -253,14 +290,18 @@ export function prefab_instance_destroy(dataset, instance) {
|
|
|
253
290
|
assert.defined(dataset, 'dataset');
|
|
254
291
|
assert.defined(instance, 'instance');
|
|
255
292
|
|
|
293
|
+
const root = instance.root;
|
|
294
|
+
|
|
295
|
+
if (dataset.entityExists(root) && dataset.getComponent(root, FoliageWindRigs) !== undefined) {
|
|
296
|
+
dataset.removeComponentFromEntity(root, FoliageWindRigs);
|
|
297
|
+
}
|
|
298
|
+
|
|
256
299
|
const entities = instance.entities;
|
|
257
300
|
|
|
258
301
|
for (let i = entities.length - 1; i >= 1; i--) {
|
|
259
302
|
dataset.removeEntity(entities[i]);
|
|
260
303
|
}
|
|
261
304
|
|
|
262
|
-
const root = instance.root;
|
|
263
|
-
|
|
264
305
|
if (dataset.entityExists(root) && dataset.getComponent(root, AnimationClips) !== undefined) {
|
|
265
306
|
dataset.removeComponentFromEntity(root, AnimationClips);
|
|
266
307
|
}
|
|
@@ -31,8 +31,8 @@ fn material_surface(s: MaterialSurfaceInput) -> MaterialSurfaceOutput {
|
|
|
31
31
|
// the terrain is an axis-aligned field in its own space: uv is a division, not a mapping
|
|
32
32
|
let terrain_uv = s.position_os.xz * terrain.inv_world_size;
|
|
33
33
|
|
|
34
|
-
let duv_dx = s.position_os_ddx.xz * terrain.inv_world_size;
|
|
35
|
-
let duv_dy = s.position_os_ddy.xz * terrain.inv_world_size;
|
|
34
|
+
let duv_dx = s.position_os_ddx.xz * terrain.inv_world_size * s.gradient_bias.x;
|
|
35
|
+
let duv_dy = s.position_os_ddy.xz * terrain.inv_world_size * s.gradient_bias.y;
|
|
36
36
|
|
|
37
37
|
var ground = terrain_splat_mix(
|
|
38
38
|
layer_diffuse, layer_sampler,
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
export class ContactProbeSystem extends System<any> {
|
|
16
16
|
constructor();
|
|
17
17
|
dependencies: (typeof TransformAttachment | typeof ContactProbe)[];
|
|
18
|
-
components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof
|
|
18
|
+
components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof TransformAttachment> | ResourceAccessSpecification<typeof GPUStateAuthority> | ResourceAccessSpecification<typeof ParentEntity> | ResourceAccessSpecification<typeof AnimationClips> | ResourceAccessSpecification<typeof ContactProbe>)[];
|
|
19
19
|
/**
|
|
20
20
|
* @param {ContactProbe} probe
|
|
21
21
|
* @param {TransformAttachment} attachment
|
|
@@ -37,8 +37,7 @@ import { ContactProbe } from "./ContactProbe.js";
|
|
|
37
37
|
import { Transform64 } from "../../ecs/transform/Transform64.js";
|
|
38
38
|
import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
|
|
39
39
|
import { Collider } from "./Collider.js";
|
|
40
|
-
import { AnimationGraphController } from "../../graphics3/animation/AnimationGraphController.js";
|
|
41
|
-
import { Animation } from "../../ecs/animation/Animation.js";
|
|
42
40
|
import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
|
|
43
41
|
import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
|
|
42
|
+
import { AnimationClips } from "../../graphics3/animation/AnimationClips.js";
|
|
44
43
|
//# sourceMappingURL=ContactProbeSystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactProbeSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/ContactProbeSystem.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ContactProbeSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/ContactProbeSystem.js"],"names":[],"mappings":"AAqEA;;;;;;;;;;;;;GAaG;AACH;;IAEI,mEAAmD;IAEnD,iYAQE;IAyCF;;;;OAIG;IACH,YAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAUhB;IAED;;;;OAIG;IACH,cAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAWhB;IAED,sCA2BC;;CAiKJ;uBAzVsB,qBAAqB;oCAER,uDAAuD;6BAY9D,mBAAmB;4BALzC,oCAAoC;4CAbC,oDAAoD;yBAiBvE,eAAe;kCAhBN,oCAAoC;6BACzC,kCAAkC;+BAYhC,6CAA6C"}
|
|
@@ -5,7 +5,6 @@ import { SphereShape3D } from "../../../core/geom/3d/shape/SphereShape3D.js";
|
|
|
5
5
|
import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
|
|
6
6
|
import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
|
|
7
7
|
import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
|
|
8
|
-
import { Animation } from "../../ecs/animation/Animation.js";
|
|
9
8
|
import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
|
|
10
9
|
import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
|
|
11
10
|
import { parent_entity_model_of } from "../../ecs/parent/parent_entity_model_of.js";
|
|
@@ -19,7 +18,7 @@ import {
|
|
|
19
18
|
TRANSFORM64_SCALE_OFFSET,
|
|
20
19
|
TRANSFORM64_TRANSLATION_OFFSET
|
|
21
20
|
} from "../../ecs/transform/Transform64.js";
|
|
22
|
-
import {
|
|
21
|
+
import { AnimationClips } from "../../graphics3/animation/AnimationClips.js";
|
|
23
22
|
import { collect_entity_playbacks } from "../../graphics3/pose/collect_entity_playbacks.js";
|
|
24
23
|
import { PhysicsSurfacePoint } from "../queries/PhysicsSurfacePoint.js";
|
|
25
24
|
import { Collider } from "./Collider.js";
|
|
@@ -93,8 +92,7 @@ export class ContactProbeSystem extends System {
|
|
|
93
92
|
ResourceAccessSpecification.from(GPUStateAuthority, ResourceAccessKind.Read),
|
|
94
93
|
ResourceAccessSpecification.from(ParentEntity, ResourceAccessKind.Read),
|
|
95
94
|
ResourceAccessSpecification.from(Collider, ResourceAccessKind.Read),
|
|
96
|
-
ResourceAccessSpecification.from(
|
|
97
|
-
ResourceAccessSpecification.from(AnimationGraphController, ResourceAccessKind.Read),
|
|
95
|
+
ResourceAccessSpecification.from(AnimationClips, ResourceAccessKind.Read),
|
|
98
96
|
];
|
|
99
97
|
|
|
100
98
|
/**
|
|
@@ -66,11 +66,11 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
66
66
|
/**
|
|
67
67
|
* @param {FluidComponent} fluid
|
|
68
68
|
*/
|
|
69
|
-
static "__#
|
|
69
|
+
static "__#464@#refresh_masks"(fluid: FluidComponent): void;
|
|
70
70
|
/**
|
|
71
71
|
* @param {FluidComponent} fluid
|
|
72
72
|
*/
|
|
73
|
-
static "__#
|
|
73
|
+
static "__#464@#clear_field"(fluid: FluidComponent): void;
|
|
74
74
|
/**
|
|
75
75
|
* Mark every cell of `fluid` whose centre lies within `inflation` of the
|
|
76
76
|
* posed shape as solid. Iteration is clipped to the shape's world AABB
|
|
@@ -82,7 +82,7 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
82
82
|
* @param {number} inflation world-units SDF threshold
|
|
83
83
|
* @param {Float64Array} point length-3 scratch
|
|
84
84
|
*/
|
|
85
|
-
static "__#
|
|
85
|
+
static "__#464@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
|
|
86
86
|
/**
|
|
87
87
|
* Write the obstacle's translation velocity onto every face of every cell
|
|
88
88
|
* it voxelized — the moving-wall boundary condition. Runs AFTER the mask
|
|
@@ -102,7 +102,7 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
102
102
|
* @param {number} wvy
|
|
103
103
|
* @param {number} wvz
|
|
104
104
|
*/
|
|
105
|
-
static "__#
|
|
105
|
+
static "__#464@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
|
|
106
106
|
constructor();
|
|
107
107
|
dependencies: (typeof FluidObstacle)[];
|
|
108
108
|
components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof FluidObstacle> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof FluidComponent>)[];
|
|
@@ -186,7 +186,7 @@ keep a back-compat shim or migrate callers. Serialization (positions-only) is un
|
|
|
186
186
|
|
|
187
187
|
## As-built (landed)
|
|
188
188
|
|
|
189
|
-
All four stages shipped; `bakeProbeField(index, minSpacing, rayCount, random,
|
|
189
|
+
All four stages shipped; `bakeProbeField({ index, minSpacing, rayCount, random, ... })` now runs
|
|
190
190
|
**SDF grid → portal discovery → cover (portals pre-seeded) → connectivity refinement → reverb** instead of the
|
|
191
191
|
blind grid. The bake REGION is derived from the scene — the occluder hull
|
|
192
192
|
(`AcousticOccluderIndex.computeWorldBounds`) inflated by `2 × minSpacing` on every side — not a caller
|
|
@@ -194,8 +194,8 @@ parameter; a caller wanting a hand-picked region drops to `build_sdf_grid` + `pr
|
|
|
194
194
|
|
|
195
195
|
- **Stage 0** `AcousticOccluderIndex.signedDistanceAt(x,y,z,maxDistance)` — union SDF via the body-AABB BVH +
|
|
196
196
|
per-body `shape.signed_distance_at_point` (negative inside, clamped to `+maxDistance`).
|
|
197
|
-
- **Grid** `build_sdf_grid(index, bounds, minSpacing, sparsenessRatio)` (`probe_sdf_grid.js`) — the SDF voxel
|
|
198
|
-
grid (oversampled 2× below `minSpacing`, capped 256³) is built ONCE and shared by the cover and (implicitly,
|
|
197
|
+
- **Grid** `build_sdf_grid({ index, bounds, minSpacing, sparsenessRatio, oversample, resolutionLimit })` (`probe_sdf_grid.js`) — the SDF voxel
|
|
198
|
+
grid (oversampled 2× below `minSpacing`, capped 256³ by default) is built ONCE and shared by the cover and (implicitly,
|
|
199
199
|
via the same `signedDistanceAt`) portal detection, so the expensive up-to-256³ SDF sweep is paid once. The
|
|
200
200
|
trilinear sampler, gradient-ascent local-max, and claim-sphere helpers live here too.
|
|
201
201
|
- **Stage 1** `probe_place_sdf_cover(grid, {predefined})` — SDF maximal-empty-sphere greedy cover. Erase radius
|
|
@@ -235,7 +235,7 @@ parameter; a caller wanting a hand-picked region drops to `build_sdf_grid` + `pr
|
|
|
235
235
|
- **The grid jitter** added to the old `bakeProbeField` is now moot (no grid) and was removed in the rewrite;
|
|
236
236
|
the cover's gradient-ascended points are already general-position for the Delaunay base.
|
|
237
237
|
|
|
238
|
-
Knobs (all in `
|
|
238
|
+
Knobs (all top-level parameters in `bakeProbeField`, JSDoc'd): `sdfSparsenessRatio`, `sdfOversample`, `sdfResolutionLimit`, `maxRefineFactor`, `corridorReachFactor`,
|
|
239
239
|
`maxRefineRounds`, `detectPortals` (default true), `constrictionFactor`, `portalFloorRatio`. Tests:
|
|
240
240
|
`core/signedDistanceAt.spec.js`, `probe/probe_place_sdf_cover.spec.js`, `probe/probe_refine_connectivity.spec.js`,
|
|
241
241
|
`probe/probe_detect_portals.spec.js`, `probe/probe_densify_portals.spec.js`, the end-to-end
|
|
@@ -141,7 +141,7 @@ import { seededRandom } from "../../../core/math/random/seededRandom.js";
|
|
|
141
141
|
|
|
142
142
|
// OFFLINE: place probes over the scene (the bake region is derived from the occluder hull) and bake each
|
|
143
143
|
// probe's per-band RT60. minSpacing is the density knob (smaller = denser).
|
|
144
|
-
const probes = bakeProbeField(sim.occluderIndex,
|
|
144
|
+
const probes = bakeProbeField({ index: sim.occluderIndex, minSpacing: 8, rayCount: 256, random: seededRandom(1) });
|
|
145
145
|
const json = probes.toJSON(); // serialize, ship as an asset
|
|
146
146
|
|
|
147
147
|
// RUNTIME: an acoustic-owned reverb bus driven by the listener's nearest probe
|
|
@@ -29,16 +29,30 @@
|
|
|
29
29
|
*
|
|
30
30
|
* The `minSpacing` hint drives the initial cover/fit; only connectivity refinement may go finer.
|
|
31
31
|
*
|
|
32
|
-
* @param {
|
|
33
|
-
* @param {
|
|
34
|
-
* @param {number}
|
|
35
|
-
* @param {
|
|
36
|
-
* @param {
|
|
37
|
-
*
|
|
32
|
+
* @param {Object} options
|
|
33
|
+
* @param {AcousticOccluderIndex} options.index the acoustic scene (its occluder hull defines the bake region)
|
|
34
|
+
* @param {number} options.minSpacing target/min probe spacing — the density hint (smaller = denser)
|
|
35
|
+
* @param {number} options.rayCount rays per probe (reverb estimate quality)
|
|
36
|
+
* @param {function():number} options.random seeded RNG (reverb bake)
|
|
37
|
+
* @param {number} [options.sdfSparsenessRatio]
|
|
38
|
+
* @param {number} [options.sdfOversample]
|
|
39
|
+
* @param {number} [options.sdfResolutionLimit]
|
|
40
|
+
* @param {number} [options.maxRefineFactor]
|
|
41
|
+
* @param {number} [options.corridorReachFactor]
|
|
42
|
+
* @param {number} [options.maxRefineRounds]
|
|
43
|
+
* @param {boolean} [options.detectPortals] (default true) toggles the portal discovery + densification stages
|
|
44
|
+
* @param {number} [options.constrictionFactor]
|
|
45
|
+
* @param {number} [options.portalFloorRatio]
|
|
38
46
|
* @returns {AcousticProbeField}
|
|
39
47
|
*/
|
|
40
|
-
export function bakeProbeField(index
|
|
41
|
-
|
|
48
|
+
export function bakeProbeField({ index, minSpacing, rayCount, random, sdfSparsenessRatio, sdfOversample, sdfResolutionLimit, maxRefineFactor, corridorReachFactor, maxRefineRounds, detectPortals, constrictionFactor, portalFloorRatio, }: {
|
|
49
|
+
index: AcousticOccluderIndex;
|
|
50
|
+
minSpacing: number;
|
|
51
|
+
rayCount: number;
|
|
52
|
+
random: () => number;
|
|
53
|
+
sdfSparsenessRatio?: number;
|
|
54
|
+
sdfOversample?: number;
|
|
55
|
+
sdfResolutionLimit?: number;
|
|
42
56
|
maxRefineFactor?: number;
|
|
43
57
|
corridorReachFactor?: number;
|
|
44
58
|
maxRefineRounds?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bakeProbeField.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/bakeProbeField.js"],"names":[],"mappings":"AAoCA
|
|
1
|
+
{"version":3,"file":"bakeProbeField.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/bakeProbeField.js"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH;IAf0C,KAAK;IACpB,UAAU,EAA1B,MAAM;IACU,QAAQ,EAAxB,MAAM;IACqB,MAAM,QAAtB,MAAM;IACA,kBAAkB,GAAnC,MAAM;IACW,aAAa,GAA9B,MAAM;IACW,kBAAkB,GAAnC,MAAM;IACW,eAAe,GAAhC,MAAM;IACW,mBAAmB,GAApC,MAAM;IACW,eAAe,GAAhC,MAAM;IACY,aAAa,GAA/B,OAAO;IACU,kBAAkB,GAAnC,MAAM;IACW,gBAAgB,GAAjC,MAAM;IACJ,kBAAkB,CAyG9B;mCAxLkC,yBAAyB"}
|
|
@@ -65,15 +65,37 @@ const LOBE_SCRATCH = new Float32Array(MAX_LOBES * LOBE_STRIDE);
|
|
|
65
65
|
*
|
|
66
66
|
* The `minSpacing` hint drives the initial cover/fit; only connectivity refinement may go finer.
|
|
67
67
|
*
|
|
68
|
-
* @param {
|
|
69
|
-
* @param {
|
|
70
|
-
* @param {number}
|
|
71
|
-
* @param {
|
|
72
|
-
* @param {
|
|
73
|
-
*
|
|
68
|
+
* @param {Object} options
|
|
69
|
+
* @param {AcousticOccluderIndex} options.index the acoustic scene (its occluder hull defines the bake region)
|
|
70
|
+
* @param {number} options.minSpacing target/min probe spacing — the density hint (smaller = denser)
|
|
71
|
+
* @param {number} options.rayCount rays per probe (reverb estimate quality)
|
|
72
|
+
* @param {function():number} options.random seeded RNG (reverb bake)
|
|
73
|
+
* @param {number} [options.sdfSparsenessRatio]
|
|
74
|
+
* @param {number} [options.sdfOversample]
|
|
75
|
+
* @param {number} [options.sdfResolutionLimit]
|
|
76
|
+
* @param {number} [options.maxRefineFactor]
|
|
77
|
+
* @param {number} [options.corridorReachFactor]
|
|
78
|
+
* @param {number} [options.maxRefineRounds]
|
|
79
|
+
* @param {boolean} [options.detectPortals] (default true) toggles the portal discovery + densification stages
|
|
80
|
+
* @param {number} [options.constrictionFactor]
|
|
81
|
+
* @param {number} [options.portalFloorRatio]
|
|
74
82
|
* @returns {AcousticProbeField}
|
|
75
83
|
*/
|
|
76
|
-
export function bakeProbeField(
|
|
84
|
+
export function bakeProbeField({
|
|
85
|
+
index,
|
|
86
|
+
minSpacing,
|
|
87
|
+
rayCount,
|
|
88
|
+
random,
|
|
89
|
+
sdfSparsenessRatio,
|
|
90
|
+
sdfOversample,
|
|
91
|
+
sdfResolutionLimit,
|
|
92
|
+
maxRefineFactor,
|
|
93
|
+
corridorReachFactor,
|
|
94
|
+
maxRefineRounds = DEFAULT_MAX_REFINE_ROUNDS,
|
|
95
|
+
detectPortals = true,
|
|
96
|
+
constrictionFactor,
|
|
97
|
+
portalFloorRatio,
|
|
98
|
+
}) {
|
|
77
99
|
// Derive the bake region from the scene: the occluder hull + a spacing-scaled margin. No occluders →
|
|
78
100
|
// nothing to cover → an empty field.
|
|
79
101
|
if (index.computeWorldBounds(HULL) === 0) {
|
|
@@ -87,16 +109,26 @@ export function bakeProbeField(index, minSpacing, rayCount, random, options = {}
|
|
|
87
109
|
|
|
88
110
|
// The SDF grid is the expensive part (up to 256³ signedDistanceAt queries); build it once and reuse it for
|
|
89
111
|
// both the provisional and the final cover.
|
|
90
|
-
const grid = build_sdf_grid(
|
|
112
|
+
const grid = build_sdf_grid({
|
|
113
|
+
index,
|
|
114
|
+
bounds,
|
|
115
|
+
minSpacing,
|
|
116
|
+
sparsenessRatio: sdfSparsenessRatio,
|
|
117
|
+
oversample: sdfOversample,
|
|
118
|
+
resolutionLimit: sdfResolutionLimit,
|
|
119
|
+
});
|
|
91
120
|
|
|
92
121
|
// 1. Portal discovery — a provisional cover + visibility resolves the openings (a doorway is sub-voxel, so
|
|
93
122
|
// it is found from the graph's BVH visibility rays, not the grid), then detect each opening's throat.
|
|
94
123
|
const provisional = new AcousticProbeField();
|
|
95
124
|
placeProbes(provisional, probe_place_sdf_cover(grid));
|
|
96
125
|
bakeVisibility(provisional, index);
|
|
97
|
-
const portals =
|
|
126
|
+
const portals = !detectPortals
|
|
98
127
|
? NO_PORTALS
|
|
99
|
-
: probe_detect_portals(provisional, index, minSpacing,
|
|
128
|
+
: probe_detect_portals(provisional, index, minSpacing, {
|
|
129
|
+
constrictionFactor,
|
|
130
|
+
portalFloorRatio,
|
|
131
|
+
});
|
|
100
132
|
|
|
101
133
|
// 2. Final cover — re-place with the portal throats PRE-SEEDED so they carve the SDF (no redundant cover
|
|
102
134
|
// probe lands on them) and lead the probe list (indices [0, portalCount)). Densify the visibility around
|
|
@@ -115,9 +147,11 @@ export function bakeProbeField(index, minSpacing, rayCount, random, options = {}
|
|
|
115
147
|
|
|
116
148
|
// 3. Connectivity refinement — thread bends/throats so a visible probe chain spans every acoustic path.
|
|
117
149
|
// Inserted waypoints append AFTER the cover, so the portals stay at [0, portalCount).
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
150
|
+
for (let round = 0; round < maxRefineRounds; round++) {
|
|
151
|
+
const waypoints = probe_refine_connectivity(index, field, minSpacing, {
|
|
152
|
+
maxRefineFactor,
|
|
153
|
+
corridorReachFactor,
|
|
154
|
+
});
|
|
121
155
|
if (waypoints.length === 0) {
|
|
122
156
|
break;
|
|
123
157
|
}
|
|
@@ -152,14 +186,25 @@ export function bakeProbeField(index, minSpacing, rayCount, random, options = {}
|
|
|
152
186
|
return field;
|
|
153
187
|
}
|
|
154
188
|
|
|
155
|
-
/**
|
|
189
|
+
/**
|
|
190
|
+
* Append a flat `[x,y,z, …]` list of positions to the field as probes.
|
|
191
|
+
*
|
|
192
|
+
* @param {AcousticProbeField} field
|
|
193
|
+
* @param {ArrayLike<number>} positions
|
|
194
|
+
* @returns {void}
|
|
195
|
+
*/
|
|
156
196
|
function placeProbes(field, positions) {
|
|
157
197
|
for (let i = 0; i < positions.length; i += 3) {
|
|
158
198
|
field.setProbePosition(field.size, positions[i], positions[i + 1], positions[i + 2]);
|
|
159
199
|
}
|
|
160
200
|
}
|
|
161
201
|
|
|
162
|
-
/**
|
|
202
|
+
/**
|
|
203
|
+
* The index range `[0, count)` — the indices of the pre-seeded portal probes (placed first).
|
|
204
|
+
*
|
|
205
|
+
* @param {number} count
|
|
206
|
+
* @returns {Uint32Array}
|
|
207
|
+
*/
|
|
163
208
|
function indexRange(count) {
|
|
164
209
|
const out = new Uint32Array(count);
|
|
165
210
|
for (let i = 0; i < count; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bakeProbeReflectors.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/bakeProbeReflectors.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bakeProbeReflectors.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/bakeProbeReflectors.js"],"names":[],"mappings":"AAqCA;;;;;;;;;;;;;GAaG;AACH,qEARW,MAAM,KACN,MAAM,KACN,MAAM,UACN,MAAM,YACN,MAAM,YACN,YAAY,GACV,MAAM,CAsDlB;AAnFD,0BAAoB"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { Ray3 } from "../../../../core/geom/3d/ray/Ray3.js";
|
|
2
2
|
import { sphere_fibonacci_point } from "../../../../core/geom/3d/sphere/sphere_fibonacci_point.js";
|
|
3
|
+
import { v3_add } from "../../../../core/geom/vec3/v3_add.js";
|
|
4
|
+
import { v3_add_array } from "../../../../core/geom/vec3/v3_add_array.js";
|
|
5
|
+
import { v3_dot } from "../../../../core/geom/vec3/v3_dot.js";
|
|
6
|
+
import { v3_length } from "../../../../core/geom/vec3/v3_length.js";
|
|
7
|
+
import { v3_normalize_array } from "../../../../core/geom/vec3/v3_normalize_array.js";
|
|
8
|
+
import { v3_scale_array } from "../../../../core/geom/vec3/v3_scale_array.js";
|
|
9
|
+
import { v3_set } from "../../../../core/geom/vec3/v3_set.js";
|
|
3
10
|
import { RayHit } from "../core/RayHit.js";
|
|
4
11
|
import { LOBE_STRIDE } from "./acoustic_probe_transfer.js";
|
|
5
12
|
|
|
@@ -24,9 +31,7 @@ const RAY = new Ray3();
|
|
|
24
31
|
const HIT = new RayHit();
|
|
25
32
|
const FIB = [0, 0, 0];
|
|
26
33
|
// per-cluster accumulators (summed normal, summed per-band ρ, sample count)
|
|
27
|
-
const
|
|
28
|
-
const C_NY = new Float32Array(MAX_LOBES);
|
|
29
|
-
const C_NZ = new Float32Array(MAX_LOBES);
|
|
34
|
+
const C_NORMAL = new Float32Array(MAX_LOBES * 3);
|
|
30
35
|
const C_RHO = new Float32Array(MAX_LOBES * 3);
|
|
31
36
|
const C_COUNT = new Float32Array(MAX_LOBES);
|
|
32
37
|
|
|
@@ -59,15 +64,14 @@ export function bakeProbeReflectors(index, x, y, z, radius, rayCount, outLobes)
|
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
const nx = HIT.normal[0], ny = HIT.normal[1], nz = HIT.normal[2];
|
|
62
|
-
const a = HIT.material.absorption;
|
|
63
|
-
const r0 = 1 - a[0], r1 = 1 - a[1], r2 = 1 - a[2]; // per-band reflectivity
|
|
64
67
|
|
|
65
68
|
// assign to the first cluster whose mean normal agrees within CLUSTER_COS, else open a new one
|
|
66
69
|
let c = -1;
|
|
67
70
|
for (let k = 0; k < nClusters; k++) {
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
+
const k3 = k * 3;
|
|
72
|
+
const sx = C_NORMAL[k3], sy = C_NORMAL[k3 + 1], sz = C_NORMAL[k3 + 2];
|
|
73
|
+
const slen = v3_length(sx, sy, sz);
|
|
74
|
+
if (slen > 0 && v3_dot(nx, ny, nz, sx, sy, sz) / slen > CLUSTER_COS) {
|
|
71
75
|
c = k;
|
|
72
76
|
break;
|
|
73
77
|
}
|
|
@@ -77,31 +81,23 @@ export function bakeProbeReflectors(index, x, y, z, radius, rayCount, outLobes)
|
|
|
77
81
|
continue; // cluster budget exhausted — drop the extra reflector
|
|
78
82
|
}
|
|
79
83
|
c = nClusters++;
|
|
80
|
-
|
|
81
|
-
C_RHO
|
|
84
|
+
v3_set(C_NORMAL, c * 3, 0, 0, 0);
|
|
85
|
+
v3_set(C_RHO, c * 3, 0, 0, 0);
|
|
82
86
|
C_COUNT[c] = 0;
|
|
83
87
|
}
|
|
84
88
|
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
const a = HIT.material.absorption;
|
|
90
|
+
v3_add_array(C_NORMAL, c * 3, HIT.normal, 0);
|
|
91
|
+
v3_add(C_RHO, c * 3, 1 - a[0], 1 - a[1], 1 - a[2]); // per-band reflectivity
|
|
87
92
|
C_COUNT[c]++;
|
|
88
93
|
}
|
|
89
94
|
|
|
90
95
|
// finalize each cluster into a lobe: unit mean normal + mean reflectivity
|
|
91
96
|
for (let k = 0; k < nClusters; k++) {
|
|
92
|
-
const cnt = C_COUNT[k];
|
|
93
|
-
const sx = C_NX[k], sy = C_NY[k], sz = C_NZ[k];
|
|
94
|
-
const slen = Math.sqrt(sx * sx + sy * sy + sz * sz);
|
|
95
|
-
const inv = slen > 0 ? 1 / slen : 0;
|
|
96
|
-
|
|
97
97
|
const b = k * LOBE_STRIDE;
|
|
98
|
-
outLobes
|
|
99
|
-
outLobes[b + 1] = sy * inv;
|
|
100
|
-
outLobes[b + 2] = sz * inv;
|
|
98
|
+
v3_normalize_array(outLobes, b, C_NORMAL, k * 3);
|
|
101
99
|
outLobes[b + 3] = LOBE_LAMBDA;
|
|
102
|
-
outLobes
|
|
103
|
-
outLobes[b + 5] = C_RHO[k * 3 + 1] / cnt;
|
|
104
|
-
outLobes[b + 6] = C_RHO[k * 3 + 2] / cnt;
|
|
100
|
+
v3_scale_array(outLobes, b + 4, C_RHO, k * 3, 1 / C_COUNT[k]);
|
|
105
101
|
}
|
|
106
102
|
|
|
107
103
|
return nClusters;
|
|
@@ -15,20 +15,48 @@
|
|
|
15
15
|
*/
|
|
16
16
|
/**
|
|
17
17
|
* Build a signed distance field on a voxel grid over `bounds` by sampling
|
|
18
|
-
* {@link AcousticOccluderIndex#signedDistanceAt}. The grid is finer than `minSpacing` (by
|
|
19
|
-
* so it resolves sub-spacing features, and capped at
|
|
18
|
+
* {@link AcousticOccluderIndex#signedDistanceAt}. The grid is finer than `minSpacing` (by `oversample`,
|
|
19
|
+
* default {@link DEFAULT_OVERSAMPLE}) so it resolves sub-spacing features, and capped at `resolutionLimit`³
|
|
20
|
+
* (default {@link DEFAULT_RESOLUTION_LIMIT}³).
|
|
20
21
|
*
|
|
21
|
-
* @param {
|
|
22
|
-
* @param {
|
|
23
|
-
* @param {number}
|
|
24
|
-
* @param {number}
|
|
22
|
+
* @param {Object} options
|
|
23
|
+
* @param {AcousticOccluderIndex} options.index the acoustic scene
|
|
24
|
+
* @param {number[]} options.bounds `[x0,y0,z0,x1,y1,z1]`
|
|
25
|
+
* @param {number} options.minSpacing the probe spacing hint
|
|
26
|
+
* @param {number} [options.sparsenessRatio]
|
|
27
|
+
* @param {number} [options.oversample]
|
|
28
|
+
* @param {number} [options.resolutionLimit]
|
|
25
29
|
* @returns {SdfGrid}
|
|
26
30
|
*/
|
|
27
|
-
export function build_sdf_grid(index
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
export function build_sdf_grid({ index, bounds, minSpacing, sparsenessRatio, oversample, resolutionLimit, }: {
|
|
32
|
+
index: AcousticOccluderIndex;
|
|
33
|
+
bounds: number[];
|
|
34
|
+
minSpacing: number;
|
|
35
|
+
sparsenessRatio?: number;
|
|
36
|
+
oversample?: number;
|
|
37
|
+
resolutionLimit?: number;
|
|
38
|
+
}): SdfGrid;
|
|
39
|
+
/**
|
|
40
|
+
* World position of the (fractional) voxel coordinate `(fx,fy,fz)`, written into `out`.
|
|
41
|
+
*
|
|
42
|
+
* @param {SdfGrid} grid
|
|
43
|
+
* @param {number[]|Float32Array} out `[x,y,z]` written here
|
|
44
|
+
* @param {number} fx
|
|
45
|
+
* @param {number} fy
|
|
46
|
+
* @param {number} fz
|
|
47
|
+
* @returns {void}
|
|
48
|
+
*/
|
|
49
|
+
export function grid_voxel_to_world(grid: SdfGrid, out: number[] | Float32Array, fx: number, fy: number, fz: number): void;
|
|
50
|
+
/**
|
|
51
|
+
* SDF at a WORLD position via trilinear interpolation of the grid (edge-clamped).
|
|
52
|
+
*
|
|
53
|
+
* @param {SdfGrid} grid
|
|
54
|
+
* @param {number} x
|
|
55
|
+
* @param {number} y
|
|
56
|
+
* @param {number} z
|
|
57
|
+
* @returns {number}
|
|
58
|
+
*/
|
|
59
|
+
export function grid_sample_world(grid: SdfGrid, x: number, y: number, z: number): number;
|
|
32
60
|
/**
|
|
33
61
|
* Trilinear sample of the SDF grid at fractional voxel coordinates (edge-clamped).
|
|
34
62
|
*
|
|
@@ -36,22 +64,40 @@ export function grid_sample_world(grid: any, x: any, y: any, z: any): number;
|
|
|
36
64
|
* {@link scs3d_sample_linear} samples — so the interpolation is delegated rather than re-derived here.
|
|
37
65
|
* (Same clamp semantics: clamping the COORDINATE into `[0, res-1]` and clamping the two sample INDICES
|
|
38
66
|
* agree on every input, including out-of-range coordinates, where both collapse to the edge voxel.)
|
|
67
|
+
*
|
|
68
|
+
* @param {SdfGrid} grid
|
|
69
|
+
* @param {number} x
|
|
70
|
+
* @param {number} y
|
|
71
|
+
* @param {number} z
|
|
72
|
+
* @returns {number}
|
|
39
73
|
*/
|
|
40
|
-
export function grid_sample_trilinear(grid:
|
|
74
|
+
export function grid_sample_trilinear(grid: SdfGrid, x: number, y: number, z: number): number;
|
|
41
75
|
/**
|
|
42
76
|
* Gradient-ascend a voxel to the local SDF maximum (the most-open sub-voxel point), written into `out` as a
|
|
43
77
|
* fractional voxel coordinate clamped to within ½ voxel of the start. Central-difference gradient on the
|
|
44
78
|
* trilinearly-sampled SDF; the gradient is not normalised, so steps shrink near the maximum.
|
|
79
|
+
*
|
|
80
|
+
* @param {number[]|Float32Array} out `[fx,fy,fz]` written here
|
|
81
|
+
* @param {SdfGrid} grid
|
|
82
|
+
* @param {number} vx
|
|
83
|
+
* @param {number} vy
|
|
84
|
+
* @param {number} vz
|
|
85
|
+
* @returns {void}
|
|
45
86
|
*/
|
|
46
|
-
export function grid_local_maximum(out:
|
|
87
|
+
export function grid_local_maximum(out: number[] | Float32Array, grid: SdfGrid, vx: number, vy: number, vz: number): void;
|
|
47
88
|
/**
|
|
48
89
|
* Mark every voxel whose centre is within `radius` of the world point `(px,py,pz)` as claimed. O((radius/voxel)³)
|
|
49
90
|
* per call. A degenerate axis (`vs===0`, a zero-extent bake region) claims all its coincident layers.
|
|
91
|
+
*
|
|
92
|
+
* @param {Uint8Array} claimed per-voxel claimed flags (`total` elements)
|
|
93
|
+
* @param {SdfGrid} grid
|
|
94
|
+
* @param {number} px
|
|
95
|
+
* @param {number} py
|
|
96
|
+
* @param {number} pz
|
|
97
|
+
* @param {number} radius
|
|
98
|
+
* @returns {void}
|
|
50
99
|
*/
|
|
51
|
-
export function grid_claim_sphere(claimed:
|
|
52
|
-
export const OVERSAMPLE: 2;
|
|
53
|
-
export const RESOLUTION_LIMIT: 256;
|
|
54
|
-
export const DEFAULT_SPARSENESS_RATIO: 4;
|
|
100
|
+
export function grid_claim_sphere(claimed: Uint8Array, grid: SdfGrid, px: number, py: number, pz: number, radius: number): void;
|
|
55
101
|
/**
|
|
56
102
|
* A signed distance field sampled on a regular voxel grid over a bake region. Shared by the placement cover
|
|
57
103
|
* ({@link probe_place_sdf_cover }) and portal detection ({@link probe_detect_portals }) so the expensive
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe_sdf_grid.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/probe_sdf_grid.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;GAcG;AAEH
|
|
1
|
+
{"version":3,"file":"probe_sdf_grid.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/probe_sdf_grid.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;GAcG;AACH;IAR0C,KAAK;IAClB,MAAM,EAAxB,MAAM,EAAE;IACQ,UAAU,EAA1B,MAAM;IACW,eAAe,GAAhC,MAAM;IACW,UAAU,GAA3B,MAAM;IACW,eAAe,GAAhC,MAAM;IACJ,OAAO,CAsDnB;AAED;;;;;;;;;GASG;AACH,0CAPW,OAAO,OACP,MAAM,EAAE,GAAC,YAAY,MACrB,MAAM,MACN,MAAM,MACN,MAAM,GACJ,IAAI,CAMhB;AAED;;;;;;;;GAQG;AACH,wCANW,OAAO,KACP,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAOlB;AAED;;;;;;;;;;;;;GAaG;AACH,4CANW,OAAO,KACP,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;;GAWG;AACH,wCAPW,MAAM,EAAE,GAAC,YAAY,QACrB,OAAO,MACP,MAAM,MACN,MAAM,MACN,MAAM,GACJ,IAAI,CAuBhB;AAED;;;;;;;;;;;GAWG;AACH,2CARW,UAAU,QACV,OAAO,MACP,MAAM,MACN,MAAM,MACN,MAAM,UACN,MAAM,GACJ,IAAI,CAyBhB;;;;;;;;;;SAvMa,YAAY;QACZ,MAAM;QAAgB,MAAM;;;;QAAgB,MAAM;;;;aAClD,MAAM;;;;WAA6B,MAAM;QACzC,MAAM;QAAgB,MAAM;;;;QAAgB,MAAM;QAClD,MAAM;QAAgB,MAAM;;;;QAAgB,MAAM;SAClD,MAAM;SAAiB,MAAM;;;;SAAiB,MAAM;gBACpD,MAAM;;;;gBAAwB,MAAM;;;;oBACpC,MAAM"}
|