@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
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { chunk_mat4_extract_scale } from "../../shader/chunk/geometry/mat4/chunk_mat4_extract_scale.js";
|
|
2
|
+
import { chunk_build_orthonormal_matrix_n } from "../../shader/chunk/geometry/normal/chunk_build_orthonormal_matrix_n.js";
|
|
3
|
+
import { chunk_quat_from_axis_angle } from "../../shader/chunk/geometry/quaternion/chunk_quat_from_axis_angle.js";
|
|
4
|
+
import { chunk_quat_multiply } from "../../shader/chunk/geometry/quaternion/chunk_quat_multiply.js";
|
|
5
|
+
import { QUAT_IDENTITY_DEFINITION } from "../../shader/chunk/geometry/quaternion/QUAT_IDENTITY_DEFINITION.js";
|
|
6
|
+
import { chunk_pow2 } from "../../shader/chunk/math/chunk_pow2.js";
|
|
7
|
+
import { chunk_v3_safe_rcp } from "../../shader/chunk/math/chunk_safe_rcp.js";
|
|
8
|
+
import { EPSILON_DECLARATION } from "../../shader/chunk/math/EPSILON_DECLARATION.js";
|
|
9
|
+
import { GOLDEN_ANGLE_DECLARATION } from "../../shader/chunk/math/GOLDEN_ANGLE_DECLARATION.js";
|
|
10
|
+
import { PI_DECLARATION } from "../../shader/chunk/math/PI_DECLARATION.js";
|
|
11
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
12
|
+
import { ANIMATION_FOLIAGE_JOINT_STRUCT } from "../ANIMATION_FOLIAGE_JOINT_STRUCT.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Aeroelastic foliage bone step and local pose composition.
|
|
16
|
+
*
|
|
17
|
+
* - `foliage_wind_to_model(wind_ws, root_global)`: projects a world-space fluid velocity (m/s)
|
|
18
|
+
* onto the unit local axes of the tree root's world matrix (`mat4_extract_scale` + `v3_safe_rcp`),
|
|
19
|
+
* preserving metric wind speed regardless of node scale.
|
|
20
|
+
* - `foliage_wind_step(joint, wind_model, dt)`: evaluates cross-flow aerodynamic drag torque and
|
|
21
|
+
* Strouhal vortex-shedding oscillation around the bone's rest `branch_axis` (using
|
|
22
|
+
* `build_orthonormal_matrix_n` when flow is axial), soft-saturates the target deflection to
|
|
23
|
+
* `joint.max_angle`, and advances the bone's 2nd-order damped spring-damper state with an
|
|
24
|
+
* unconditionally stable implicit Euler step.
|
|
25
|
+
* - `foliage_wind_local_rotation(rest_rotation, angular_displacement)`: composes the bone's
|
|
26
|
+
* rest quaternion with the axis-angle deflection (`quat_from_axis_angle` + `quat_multiply`).
|
|
27
|
+
*
|
|
28
|
+
* @type {CodeChunk}
|
|
29
|
+
*/
|
|
30
|
+
export const chunk_foliage_wind_step = CodeChunk.from(
|
|
31
|
+
//language=WGSL
|
|
32
|
+
`
|
|
33
|
+
struct FoliageWindStepResult {
|
|
34
|
+
angular_displacement: vec3<f32>,
|
|
35
|
+
angular_velocity: vec3<f32>,
|
|
36
|
+
flutter_phase: f32,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
fn foliage_wind_to_model(wind_ws: vec3<f32>, root_global: mat4x4<f32>) -> vec3<f32> {
|
|
40
|
+
let inv_scale = v3_safe_rcp(mat4_extract_scale(root_global));
|
|
41
|
+
return vec3<f32>(
|
|
42
|
+
dot(wind_ws, root_global[0].xyz),
|
|
43
|
+
dot(wind_ws, root_global[1].xyz),
|
|
44
|
+
dot(wind_ws, root_global[2].xyz),
|
|
45
|
+
) * inv_scale;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
fn foliage_wind_step(
|
|
49
|
+
joint: ${ANIMATION_FOLIAGE_JOINT_STRUCT.wgsl_ref},
|
|
50
|
+
wind_model: vec3<f32>,
|
|
51
|
+
dt: f32,
|
|
52
|
+
) -> FoliageWindStepResult {
|
|
53
|
+
var theta_new = joint.angular_displacement;
|
|
54
|
+
var vel_new = joint.angular_velocity;
|
|
55
|
+
var phase_new = joint.flutter_phase;
|
|
56
|
+
|
|
57
|
+
if (joint.compliance > 0.0 && dt > 0.0) {
|
|
58
|
+
let axis = joint.branch_axis;
|
|
59
|
+
let wind_speed = length(wind_model);
|
|
60
|
+
let omega = max(joint.natural_frequency, 0.1);
|
|
61
|
+
|
|
62
|
+
// Strouhal vortex-shedding phase advance, wrapped to [0, 2π)
|
|
63
|
+
let tau = 2.0 * PI;
|
|
64
|
+
phase_new = phase_new + omega * (1.0 + 0.22 * wind_speed) * dt;
|
|
65
|
+
phase_new = phase_new - floor(phase_new / tau) * tau;
|
|
66
|
+
|
|
67
|
+
// Cross-flow aerodynamic drag torque: bends branch toward local fluid flow
|
|
68
|
+
let cross_drag = cross(axis, wind_model);
|
|
69
|
+
let drag_torque = cross_drag * (joint.compliance * (0.5 + 0.5 * wind_speed));
|
|
70
|
+
|
|
71
|
+
// Turbulent vortex-shedding oscillation (streamwise buffeting + cross-wind lift)
|
|
72
|
+
var vortex_torque = vec3<f32>(0.0);
|
|
73
|
+
if (wind_speed > EPSILON && joint.turbulence > 0.0) {
|
|
74
|
+
let drag_len = length(cross_drag);
|
|
75
|
+
var e1: vec3<f32>;
|
|
76
|
+
var e2: vec3<f32>;
|
|
77
|
+
if (drag_len > EPSILON) {
|
|
78
|
+
e1 = cross_drag / drag_len;
|
|
79
|
+
e2 = cross(axis, e1);
|
|
80
|
+
} else {
|
|
81
|
+
let basis = build_orthonormal_matrix_n(axis);
|
|
82
|
+
e1 = basis[0];
|
|
83
|
+
e2 = basis[1];
|
|
84
|
+
}
|
|
85
|
+
let vortex_amp = joint.turbulence * min(
|
|
86
|
+
wind_speed * joint.compliance * (0.6 + 0.25 * wind_speed),
|
|
87
|
+
0.45 * joint.max_angle,
|
|
88
|
+
);
|
|
89
|
+
vortex_torque = vortex_amp * (
|
|
90
|
+
sin(phase_new) * e1 +
|
|
91
|
+
0.65 * cos(GOLDEN_ANGLE * phase_new + 1.1) * e2
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
let theta_raw = drag_torque + vortex_torque;
|
|
96
|
+
let raw_len = length(theta_raw);
|
|
97
|
+
let max_ang = max(joint.max_angle, 1e-3);
|
|
98
|
+
var theta_target = theta_raw;
|
|
99
|
+
if (raw_len > EPSILON) {
|
|
100
|
+
// Asymptotic soft saturation so extreme fluid impulses bend smoothly up to max_angle
|
|
101
|
+
theta_target = theta_raw * (max_ang / (max_ang + raw_len));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Unconditionally stable implicit 2nd-order damped spring-damper step
|
|
105
|
+
let zeta = max(joint.damping_ratio, 0.05);
|
|
106
|
+
let k = pow2(omega);
|
|
107
|
+
let c = 2.0 * zeta * omega;
|
|
108
|
+
let denom = 1.0 + c * dt + k * pow2(dt);
|
|
109
|
+
|
|
110
|
+
vel_new = (vel_new + k * dt * (theta_target - theta_new)) / denom;
|
|
111
|
+
theta_new = theta_new + vel_new * dt;
|
|
112
|
+
|
|
113
|
+
let new_len = length(theta_new);
|
|
114
|
+
if (new_len > max_ang) {
|
|
115
|
+
theta_new = theta_new * (max_ang / new_len);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return FoliageWindStepResult(theta_new, vel_new, phase_new);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
fn foliage_wind_local_rotation(rest_rotation: vec4<f32>, angular_displacement: vec3<f32>) -> vec4<f32> {
|
|
123
|
+
let angle = length(angular_displacement);
|
|
124
|
+
var q_delta = QUAT_IDENTITY;
|
|
125
|
+
if (angle > EPSILON) {
|
|
126
|
+
q_delta = quat_from_axis_angle(angular_displacement / angle, angle);
|
|
127
|
+
}
|
|
128
|
+
return quat_multiply(rest_rotation, q_delta);
|
|
129
|
+
}
|
|
130
|
+
`, [
|
|
131
|
+
ANIMATION_FOLIAGE_JOINT_STRUCT.declaration_chunk,
|
|
132
|
+
PI_DECLARATION,
|
|
133
|
+
GOLDEN_ANGLE_DECLARATION,
|
|
134
|
+
EPSILON_DECLARATION,
|
|
135
|
+
QUAT_IDENTITY_DEFINITION,
|
|
136
|
+
chunk_pow2,
|
|
137
|
+
chunk_v3_safe_rcp,
|
|
138
|
+
chunk_mat4_extract_scale,
|
|
139
|
+
chunk_build_orthonormal_matrix_n,
|
|
140
|
+
chunk_quat_from_axis_angle,
|
|
141
|
+
chunk_quat_multiply,
|
|
142
|
+
]
|
|
143
|
+
);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workgroup size for the GPU foliage fluid wind bone pass.
|
|
3
|
+
* Paired with `animation_foliage_joints.dispatch_group_count(WORKGROUP_SIZE)`.
|
|
4
|
+
*/
|
|
5
|
+
export const WORKGROUP_SIZE: 64;
|
|
6
|
+
/**
|
|
7
|
+
* Compute shader that evaluates aeroelastic foliage bones (`animation_foliage_joints`) against
|
|
8
|
+
* the scene's 3D fluid dynamics wind field (`GPUSceneWind` / `wind_field_sample`), steps each
|
|
9
|
+
* bone's 2nd-order damped spring-damper state (`chunk_foliage_wind_step`), and atomic-adds
|
|
10
|
+
* weighted local rotations into `pose_accumulator` ahead of `shader_animation_pose_resolve`.
|
|
11
|
+
*/
|
|
12
|
+
export const shader_foliage_wind_apply: ComputeShader;
|
|
13
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
14
|
+
//# sourceMappingURL=shader_foliage_wind_apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_foliage_wind_apply.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,gCAAiC;AAoFjC;;;;;GAKG;AACH,sDAIG;8BA/G2B,+BAA+B"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { GPU_DATABASE_NULL } from "../../buffer/table/GPU_DATABASE_NULL.js";
|
|
2
|
+
import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
|
|
3
|
+
import { chunk_mat4_extract_position } from "../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
|
|
4
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
5
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
import { atomic_u32, f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
8
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
9
|
+
import { chunk_wind_field_sample } from "../../wind/chunk_wind_field_sample.js";
|
|
10
|
+
import { wind_field_add_resources } from "../../wind/wind_field_add_resources.js";
|
|
11
|
+
import { ANIMATION_DATABASE_SPEC } from "../ANIMATION_DATABASE_SPEC.js";
|
|
12
|
+
import { chunk_pose_accumulator } from "../chunk_pose_accumulator.js";
|
|
13
|
+
import { chunk_foliage_wind_step } from "./chunk_foliage_wind_step.js";
|
|
14
|
+
|
|
15
|
+
const JOINT_TABLE = ANIMATION_DATABASE_SPEC.get('animation_foliage_joints');
|
|
16
|
+
const RIG_TABLE = ANIMATION_DATABASE_SPEC.get('animation_foliage_rigs');
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Workgroup size for the GPU foliage fluid wind bone pass.
|
|
20
|
+
* Paired with `animation_foliage_joints.dispatch_group_count(WORKGROUP_SIZE)`.
|
|
21
|
+
*/
|
|
22
|
+
export const WORKGROUP_SIZE = 64;
|
|
23
|
+
|
|
24
|
+
const PG_PREFIX = JOINT_TABLE.page_iterator_symbol_prefix(WORKGROUP_SIZE, true);
|
|
25
|
+
|
|
26
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
27
|
+
|
|
28
|
+
resources.setImmediate("dt", f32);
|
|
29
|
+
|
|
30
|
+
wind_field_add_resources(
|
|
31
|
+
resources.createGroup()
|
|
32
|
+
.addStorageBuffer('scene_database', WebGPUArray.from(u32), false)
|
|
33
|
+
.addStorageBuffer('animation_database', WebGPUArray.from(u32), true)
|
|
34
|
+
.addStorageBuffer('pose_accumulator', WebGPUArray.from(atomic_u32), true)
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const body = CodeChunk.from(
|
|
38
|
+
//language=WGSL
|
|
39
|
+
`
|
|
40
|
+
@compute @workgroup_size(${WORKGROUP_SIZE}, 1, 1)
|
|
41
|
+
fn main(
|
|
42
|
+
@builtin(workgroup_id) wg_id: vec3<u32>,
|
|
43
|
+
@builtin(local_invocation_index) local_id: u32,
|
|
44
|
+
) {
|
|
45
|
+
if !${PG_PREFIX}_setup(&animation_database, wg_id.x, local_id) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
let slot_in_page = ${PG_PREFIX}_slot_in_page(local_id);
|
|
50
|
+
|
|
51
|
+
if slot_in_page >= ${PG_PREFIX}_ELEMENTS_PER_PAGE {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if !${PG_PREFIX}_is_occupied(slot_in_page) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
let joint = ${PG_PREFIX}_read(&animation_database, slot_in_page);
|
|
59
|
+
|
|
60
|
+
if joint.node == ${GPU_DATABASE_NULL}u {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let rig = ${RIG_TABLE.marshalling_method_read_rw}(&animation_database, joint.rig);
|
|
65
|
+
|
|
66
|
+
if rig.root_node == ${GPU_DATABASE_NULL}u || rig.weight <= 0.0 {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
let joint_node = scene_read_node(&scene_database, joint.node);
|
|
71
|
+
let root_node = scene_read_node(&scene_database, rig.root_node);
|
|
72
|
+
|
|
73
|
+
// Sample 3D fluid velocity (m/s) at the bone's world position and project into the tree root's model frame
|
|
74
|
+
let pos_ws = mat4_extract_position(joint_node.global);
|
|
75
|
+
let wind_ws = wind_field_sample(pos_ws);
|
|
76
|
+
let wind_model = foliage_wind_to_model(wind_ws, root_node.global);
|
|
77
|
+
|
|
78
|
+
let stepped = foliage_wind_step(joint, wind_model, dt);
|
|
79
|
+
|
|
80
|
+
if joint.compliance > 0.0 && dt > 0.0 {
|
|
81
|
+
let joint_row = ${PG_PREFIX}_slot_to_index(slot_in_page);
|
|
82
|
+
${JOINT_TABLE.marshalling_method_write_field('angular_displacement')}(&animation_database, joint_row, stepped.angular_displacement);
|
|
83
|
+
${JOINT_TABLE.marshalling_method_write_field('angular_velocity')}(&animation_database, joint_row, stepped.angular_velocity);
|
|
84
|
+
${JOINT_TABLE.marshalling_method_write_field('flutter_phase')}(&animation_database, joint_row, stepped.flutter_phase);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
let q_local = foliage_wind_local_rotation(joint.rest_rotation, stepped.angular_displacement);
|
|
88
|
+
let w = rig.weight;
|
|
89
|
+
|
|
90
|
+
pose_accumulator_add_rotation(joint.node, q_local * w, 0xFu, w, joint.rest_rotation);
|
|
91
|
+
}
|
|
92
|
+
`, [
|
|
93
|
+
JOINT_TABLE.chunk_iterate(WORKGROUP_SIZE, true),
|
|
94
|
+
JOINT_TABLE.wgsl_gen_write_field_code('angular_displacement'),
|
|
95
|
+
JOINT_TABLE.wgsl_gen_write_field_code('angular_velocity'),
|
|
96
|
+
JOINT_TABLE.wgsl_gen_write_field_code('flutter_phase'),
|
|
97
|
+
RIG_TABLE.chunk_read_rw,
|
|
98
|
+
chunk_scene_database_access,
|
|
99
|
+
chunk_mat4_extract_position,
|
|
100
|
+
chunk_wind_field_sample,
|
|
101
|
+
chunk_foliage_wind_step,
|
|
102
|
+
chunk_pose_accumulator,
|
|
103
|
+
]
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Compute shader that evaluates aeroelastic foliage bones (`animation_foliage_joints`) against
|
|
108
|
+
* the scene's 3D fluid dynamics wind field (`GPUSceneWind` / `wind_field_sample`), steps each
|
|
109
|
+
* bone's 2nd-order damped spring-damper state (`chunk_foliage_wind_step`), and atomic-adds
|
|
110
|
+
* weighted local rotations into `pose_accumulator` ahead of `shader_animation_pose_resolve`.
|
|
111
|
+
*/
|
|
112
|
+
export const shader_foliage_wind_apply = ComputeShader.from({
|
|
113
|
+
label: "Animation/FoliageWindApply",
|
|
114
|
+
body,
|
|
115
|
+
resources,
|
|
116
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pose_evaluate_local.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/pose/pose_evaluate_local.js"],"names":[],"mappings":"AAqDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,iEALW,MAAM,gCAEN,cAAc,
|
|
1
|
+
{"version":3,"file":"pose_evaluate_local.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/pose/pose_evaluate_local.js"],"names":[],"mappings":"AAqDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,iEALW,MAAM,gCAEN,cAAc,eAgKxB;oCA3PY,OAAO,6BAA6B,EAAE,qBAAqB"}
|
|
@@ -118,6 +118,19 @@ export function pose_evaluate_local(result, target, rest, playbacks) {
|
|
|
118
118
|
|
|
119
119
|
let dirty = 0;
|
|
120
120
|
|
|
121
|
+
const rest_tx = rest.translation_x;
|
|
122
|
+
const rest_ty = rest.translation_y;
|
|
123
|
+
const rest_tz = rest.translation_z;
|
|
124
|
+
|
|
125
|
+
const rest_rx = rest.rotation_x;
|
|
126
|
+
const rest_ry = rest.rotation_y;
|
|
127
|
+
const rest_rz = rest.rotation_z;
|
|
128
|
+
const rest_rw = rest.rotation_w;
|
|
129
|
+
|
|
130
|
+
const rest_sx = rest.scale_x;
|
|
131
|
+
const rest_sy = rest.scale_y;
|
|
132
|
+
const rest_sz = rest.scale_z;
|
|
133
|
+
|
|
121
134
|
for (let p = 0; p < playbacks.length; p++) {
|
|
122
135
|
const playback = playbacks[p];
|
|
123
136
|
const index = playback.channel_index;
|
|
@@ -152,15 +165,15 @@ export function pose_evaluate_local(result, target, rest, playbacks) {
|
|
|
152
165
|
switch (channel.property) {
|
|
153
166
|
case Node3DProperty.Translation: {
|
|
154
167
|
if (curves.x !== undefined) {
|
|
155
|
-
SUM_TRANSLATION[0] += curves.x.evaluate(time) * weight;
|
|
168
|
+
SUM_TRANSLATION[0] += (curves.x.evaluate(time) - rest_tx) * weight;
|
|
156
169
|
dirty |= DIRTY_TX;
|
|
157
170
|
}
|
|
158
171
|
if (curves.y !== undefined) {
|
|
159
|
-
SUM_TRANSLATION[1] += curves.y.evaluate(time) * weight;
|
|
172
|
+
SUM_TRANSLATION[1] += (curves.y.evaluate(time) - rest_ty) * weight;
|
|
160
173
|
dirty |= DIRTY_TY;
|
|
161
174
|
}
|
|
162
175
|
if (curves.z !== undefined) {
|
|
163
|
-
SUM_TRANSLATION[2] += curves.z.evaluate(time) * weight;
|
|
176
|
+
SUM_TRANSLATION[2] += (curves.z.evaluate(time) - rest_tz) * weight;
|
|
164
177
|
dirty |= DIRTY_TZ;
|
|
165
178
|
}
|
|
166
179
|
break;
|
|
@@ -175,10 +188,10 @@ export function pose_evaluate_local(result, target, rest, playbacks) {
|
|
|
175
188
|
const qz = curves.z !== undefined ? curves.z.evaluate(time) : 0;
|
|
176
189
|
const qw = curves.w !== undefined ? curves.w.evaluate(time) : 1;
|
|
177
190
|
|
|
178
|
-
SUM_ROTATION[0] += qx * weight;
|
|
179
|
-
SUM_ROTATION[1] += qy * weight;
|
|
180
|
-
SUM_ROTATION[2] += qz * weight;
|
|
181
|
-
SUM_ROTATION[3] += qw * weight;
|
|
191
|
+
SUM_ROTATION[0] += (qx - rest_rx) * weight;
|
|
192
|
+
SUM_ROTATION[1] += (qy - rest_ry) * weight;
|
|
193
|
+
SUM_ROTATION[2] += (qz - rest_rz) * weight;
|
|
194
|
+
SUM_ROTATION[3] += (qw - rest_rw) * weight;
|
|
182
195
|
|
|
183
196
|
dirty |= DIRTY_R;
|
|
184
197
|
break;
|
|
@@ -186,15 +199,15 @@ export function pose_evaluate_local(result, target, rest, playbacks) {
|
|
|
186
199
|
|
|
187
200
|
case Node3DProperty.Scale: {
|
|
188
201
|
if (curves.x !== undefined) {
|
|
189
|
-
SUM_SCALE[0] += curves.x.evaluate(time) * weight;
|
|
202
|
+
SUM_SCALE[0] += (curves.x.evaluate(time) - rest_sx) * weight;
|
|
190
203
|
dirty |= DIRTY_SX;
|
|
191
204
|
}
|
|
192
205
|
if (curves.y !== undefined) {
|
|
193
|
-
SUM_SCALE[1] += curves.y.evaluate(time) * weight;
|
|
206
|
+
SUM_SCALE[1] += (curves.y.evaluate(time) - rest_sy) * weight;
|
|
194
207
|
dirty |= DIRTY_SY;
|
|
195
208
|
}
|
|
196
209
|
if (curves.z !== undefined) {
|
|
197
|
-
SUM_SCALE[2] += curves.z.evaluate(time) * weight;
|
|
210
|
+
SUM_SCALE[2] += (curves.z.evaluate(time) - rest_sz) * weight;
|
|
198
211
|
dirty |= DIRTY_SZ;
|
|
199
212
|
}
|
|
200
213
|
break;
|
|
@@ -207,29 +220,26 @@ export function pose_evaluate_local(result, target, rest, playbacks) {
|
|
|
207
220
|
}
|
|
208
221
|
|
|
209
222
|
result.setTranslation(
|
|
210
|
-
(dirty & DIRTY_TX) !== 0 ? SUM_TRANSLATION[0] :
|
|
211
|
-
(dirty & DIRTY_TY) !== 0 ? SUM_TRANSLATION[1] :
|
|
212
|
-
(dirty & DIRTY_TZ) !== 0 ? SUM_TRANSLATION[2] :
|
|
223
|
+
(dirty & DIRTY_TX) !== 0 ? rest_tx + SUM_TRANSLATION[0] : rest_tx,
|
|
224
|
+
(dirty & DIRTY_TY) !== 0 ? rest_ty + SUM_TRANSLATION[1] : rest_ty,
|
|
225
|
+
(dirty & DIRTY_TZ) !== 0 ? rest_tz + SUM_TRANSLATION[2] : rest_tz,
|
|
213
226
|
);
|
|
214
227
|
|
|
215
228
|
result.setScale(
|
|
216
|
-
(dirty & DIRTY_SX) !== 0 ? SUM_SCALE[0] :
|
|
217
|
-
(dirty & DIRTY_SY) !== 0 ? SUM_SCALE[1] :
|
|
218
|
-
(dirty & DIRTY_SZ) !== 0 ? SUM_SCALE[2] :
|
|
229
|
+
(dirty & DIRTY_SX) !== 0 ? rest_sx + SUM_SCALE[0] : rest_sx,
|
|
230
|
+
(dirty & DIRTY_SY) !== 0 ? rest_sy + SUM_SCALE[1] : rest_sy,
|
|
231
|
+
(dirty & DIRTY_SZ) !== 0 ? rest_sz + SUM_SCALE[2] : rest_sz,
|
|
219
232
|
);
|
|
220
233
|
|
|
221
234
|
if ((dirty & DIRTY_R) !== 0) {
|
|
222
|
-
const x = SUM_ROTATION[0];
|
|
223
|
-
const y = SUM_ROTATION[1];
|
|
224
|
-
const z = SUM_ROTATION[2];
|
|
225
|
-
const w = SUM_ROTATION[3];
|
|
226
|
-
|
|
227
|
-
//
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
// exactly. The answer is the rest pose: the GPU writes the rest rotation every
|
|
231
|
-
// contribution carried from its binding, which was taken from this same rest when the clip
|
|
232
|
-
// bound the target.
|
|
235
|
+
const x = rest_rx + SUM_ROTATION[0];
|
|
236
|
+
const y = rest_ry + SUM_ROTATION[1];
|
|
237
|
+
const z = rest_rz + SUM_ROTATION[2];
|
|
238
|
+
const w = rest_rw + SUM_ROTATION[3];
|
|
239
|
+
|
|
240
|
+
// Reconstruct `rest_r + sum(w_i * (q_i - rest_r))` and normalise. If the
|
|
241
|
+
// reconstructed vector cancels to zero length (e.g. an antipodal contribution
|
|
242
|
+
// at weight 1), fall back to `rest_r` to match the GPU resolve shader.
|
|
233
243
|
const length = Math.sqrt(x * x + y * y + z * z + w * w);
|
|
234
244
|
|
|
235
245
|
if (length > 0) {
|
|
@@ -237,10 +247,10 @@ export function pose_evaluate_local(result, target, rest, playbacks) {
|
|
|
237
247
|
|
|
238
248
|
result.setRotation(x * scale, y * scale, z * scale, w * scale);
|
|
239
249
|
} else {
|
|
240
|
-
result.setRotation(
|
|
250
|
+
result.setRotation(rest_rx, rest_ry, rest_rz, rest_rw);
|
|
241
251
|
}
|
|
242
252
|
} else {
|
|
243
|
-
result.setRotation(
|
|
253
|
+
result.setRotation(rest_rx, rest_ry, rest_rz, rest_rw);
|
|
244
254
|
}
|
|
245
255
|
|
|
246
256
|
return result;
|
|
@@ -63,24 +63,27 @@ fn main(
|
|
|
63
63
|
// ── Translation ───────────────────────────────────────────────
|
|
64
64
|
if (dirty & POSE_DIRTY_T_MASK) != 0u {
|
|
65
65
|
let t_base = slot_base + POSE_OFFSET_TRANSLATION;
|
|
66
|
+
let rest_t_base = slot_base + POSE_OFFSET_REST_TRANSLATION;
|
|
66
67
|
// Per-axis: only overwrite the channels that actually had a
|
|
67
|
-
// contribution.
|
|
68
|
-
//
|
|
69
|
-
// sibling-axis race that the old direct writer already
|
|
70
|
-
// tolerated still applies (two threads writing different
|
|
71
|
-
// axes of the same node), but we now have at most one resolve
|
|
72
|
-
// thread per row, so it never triggers here.
|
|
68
|
+
// contribution. Reconstruct rest_t + delta_t on each dirty
|
|
69
|
+
// axis and leave undirty axes untouched.
|
|
73
70
|
var t = scene_read_node_rw(&scene_database, row).local_translation;
|
|
74
71
|
if (dirty & POSE_DIRTY_TX) != 0u {
|
|
75
|
-
|
|
72
|
+
let delta_x = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 0u]));
|
|
73
|
+
let rest_x = bitcast<f32>(atomicLoad(&pose_accumulator[rest_t_base + 0u]));
|
|
74
|
+
t.x = rest_x + delta_x;
|
|
76
75
|
atomicStore(&pose_accumulator[t_base + 0u], 0u);
|
|
77
76
|
}
|
|
78
77
|
if (dirty & POSE_DIRTY_TY) != 0u {
|
|
79
|
-
|
|
78
|
+
let delta_y = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 1u]));
|
|
79
|
+
let rest_y = bitcast<f32>(atomicLoad(&pose_accumulator[rest_t_base + 1u]));
|
|
80
|
+
t.y = rest_y + delta_y;
|
|
80
81
|
atomicStore(&pose_accumulator[t_base + 1u], 0u);
|
|
81
82
|
}
|
|
82
83
|
if (dirty & POSE_DIRTY_TZ) != 0u {
|
|
83
|
-
|
|
84
|
+
let delta_z = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 2u]));
|
|
85
|
+
let rest_z = bitcast<f32>(atomicLoad(&pose_accumulator[rest_t_base + 2u]));
|
|
86
|
+
t.z = rest_z + delta_z;
|
|
84
87
|
atomicStore(&pose_accumulator[t_base + 2u], 0u);
|
|
85
88
|
}
|
|
86
89
|
scene_write_node_local_translation(&scene_database, row, t);
|
|
@@ -89,7 +92,7 @@ fn main(
|
|
|
89
92
|
// ── Rotation ──────────────────────────────────────────────────
|
|
90
93
|
if (dirty & POSE_DIRTY_R) != 0u {
|
|
91
94
|
let r_base = slot_base + POSE_OFFSET_ROTATION;
|
|
92
|
-
let
|
|
95
|
+
let delta = vec4<f32>(
|
|
93
96
|
bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 0u])),
|
|
94
97
|
bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 1u])),
|
|
95
98
|
bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 2u])),
|
|
@@ -99,33 +102,23 @@ fn main(
|
|
|
99
102
|
atomicStore(&pose_accumulator[r_base + 1u], 0u);
|
|
100
103
|
atomicStore(&pose_accumulator[r_base + 2u], 0u);
|
|
101
104
|
atomicStore(&pose_accumulator[r_base + 3u], 0u);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
// that clip's last pose, not the rest. The answer is the rest
|
|
117
|
-
// rotation, which every contribution carried into the slot from
|
|
118
|
-
// its binding — what the CPU twin (\`pose_evaluate_local\`) gives.
|
|
105
|
+
|
|
106
|
+
let rest_base = slot_base + POSE_OFFSET_REST_ROTATION;
|
|
107
|
+
let rest = vec4<f32>(
|
|
108
|
+
bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 0u])),
|
|
109
|
+
bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 1u])),
|
|
110
|
+
bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 2u])),
|
|
111
|
+
bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 3u])),
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
// Reconstruct rest + sum(w_i * (q_i - rest)) and normalise once
|
|
115
|
+
// after every contributor has been folded in. If the reconstructed
|
|
116
|
+
// vector cancels to zero length (e.g. an antipodal contribution at
|
|
117
|
+
// weight 1), fall back to rest to avoid NaN propagation.
|
|
118
|
+
let r = rest + delta;
|
|
119
119
|
if length(r) > 0.0 {
|
|
120
120
|
scene_write_node_local_rotation(&scene_database, row, normalize(r));
|
|
121
121
|
} else {
|
|
122
|
-
let rest_base = slot_base + POSE_OFFSET_REST_ROTATION;
|
|
123
|
-
let rest = vec4<f32>(
|
|
124
|
-
bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 0u])),
|
|
125
|
-
bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 1u])),
|
|
126
|
-
bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 2u])),
|
|
127
|
-
bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 3u])),
|
|
128
|
-
);
|
|
129
122
|
scene_write_node_local_rotation(&scene_database, row, rest);
|
|
130
123
|
}
|
|
131
124
|
}
|
|
@@ -133,17 +126,24 @@ fn main(
|
|
|
133
126
|
// ── Scale ─────────────────────────────────────────────────────
|
|
134
127
|
if (dirty & POSE_DIRTY_S_MASK) != 0u {
|
|
135
128
|
let s_base = slot_base + POSE_OFFSET_SCALE;
|
|
129
|
+
let rest_s_base = slot_base + POSE_OFFSET_REST_SCALE;
|
|
136
130
|
var s = scene_read_node_rw(&scene_database, row).local_scale;
|
|
137
131
|
if (dirty & POSE_DIRTY_SX) != 0u {
|
|
138
|
-
|
|
132
|
+
let delta_x = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 0u]));
|
|
133
|
+
let rest_x = bitcast<f32>(atomicLoad(&pose_accumulator[rest_s_base + 0u]));
|
|
134
|
+
s.x = rest_x + delta_x;
|
|
139
135
|
atomicStore(&pose_accumulator[s_base + 0u], 0u);
|
|
140
136
|
}
|
|
141
137
|
if (dirty & POSE_DIRTY_SY) != 0u {
|
|
142
|
-
|
|
138
|
+
let delta_y = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 1u]));
|
|
139
|
+
let rest_y = bitcast<f32>(atomicLoad(&pose_accumulator[rest_s_base + 1u]));
|
|
140
|
+
s.y = rest_y + delta_y;
|
|
143
141
|
atomicStore(&pose_accumulator[s_base + 1u], 0u);
|
|
144
142
|
}
|
|
145
143
|
if (dirty & POSE_DIRTY_SZ) != 0u {
|
|
146
|
-
|
|
144
|
+
let delta_z = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 2u]));
|
|
145
|
+
let rest_z = bitcast<f32>(atomicLoad(&pose_accumulator[rest_s_base + 2u]));
|
|
146
|
+
s.z = rest_z + delta_z;
|
|
147
147
|
atomicStore(&pose_accumulator[s_base + 2u], 0u);
|
|
148
148
|
}
|
|
149
149
|
scene_write_node_local_scale(&scene_database, row, s);
|
|
@@ -108,8 +108,8 @@ const MESHLET_STRIDE_BYTES = MESHLET_METADATA_STRUCT.aligned_size;
|
|
|
108
108
|
* manager. Resolution happens at upload time via
|
|
109
109
|
* `animation_manager.get_skin_matrix_offset(skin_id)`.
|
|
110
110
|
*/
|
|
111
|
-
export class GPUMeshSkinningContext {
|
|
112
|
-
|
|
111
|
+
export class GPUMeshSkinningContext {
|
|
112
|
+
|
|
113
113
|
/** @type {GPUDevice} */
|
|
114
114
|
#device;
|
|
115
115
|
|
|
@@ -59,6 +59,13 @@ export class RenderExtension {
|
|
|
59
59
|
* @param {FrameContext} frame
|
|
60
60
|
*/
|
|
61
61
|
record(frame: FrameContext): void;
|
|
62
|
+
/**
|
|
63
|
+
* Offer the pipelines this extension's passes dispatch or draw with — see
|
|
64
|
+
* {@link PipelineEnquiry}.
|
|
65
|
+
*
|
|
66
|
+
* @param {import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} enquiry
|
|
67
|
+
*/
|
|
68
|
+
enquirePipelines(enquiry: import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry): void;
|
|
62
69
|
}
|
|
63
70
|
export type FrameContext = import("./FrameContext.js").FrameContext;
|
|
64
71
|
import { FramePhase } from "./FramePhase.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderExtension.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/extension/RenderExtension.js"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;;;;;;;;;;;;;;GAeG;AACH;IACI;;;;;;;;;;OAUG;IACH,MAFU,MAAM,CAEN;IAEV;;OAEG;IACH,OAFU,UAAU,CAEiB;IAErC;;;;;;;;;;;;OAYG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;;;;;;;OASG;IACH,cAFW,YAAY,QAGtB;CACJ;
|
|
1
|
+
{"version":3,"file":"RenderExtension.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/extension/RenderExtension.js"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;;;;;;;;;;;;;;GAeG;AACH;IACI;;;;;;;;;;OAUG;IACH,MAFU,MAAM,CAEN;IAEV;;OAEG;IACH,OAFU,UAAU,CAEiB;IAErC;;;;;;;;;;;;OAYG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;;;;;;;OASG;IACH,cAFW,YAAY,QAGtB;IAED;;;;;OAKG;IACH,0BAFW,OAAO,0CAA0C,EAAE,eAAe,QAG5E;CACJ;2BA1EY,OAAO,mBAAmB,EAAE,YAAY;2BAH1B,iBAAiB"}
|
|
@@ -66,4 +66,13 @@ export class RenderExtension {
|
|
|
66
66
|
*/
|
|
67
67
|
record(frame) {
|
|
68
68
|
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Offer the pipelines this extension's passes dispatch or draw with — see
|
|
72
|
+
* {@link PipelineEnquiry}.
|
|
73
|
+
*
|
|
74
|
+
* @param {import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} enquiry
|
|
75
|
+
*/
|
|
76
|
+
enquirePipelines(enquiry) {
|
|
77
|
+
}
|
|
69
78
|
}
|
|
@@ -36,6 +36,12 @@ export class RenderExtensionRegistry {
|
|
|
36
36
|
* @returns {number} how many extensions are registered on `phase`
|
|
37
37
|
*/
|
|
38
38
|
count(phase: FramePhase): number;
|
|
39
|
+
/**
|
|
40
|
+
* Offer the pipelines of every registered extension, in phase and resolved order.
|
|
41
|
+
*
|
|
42
|
+
* @param {import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} enquiry
|
|
43
|
+
*/
|
|
44
|
+
enquirePipelines(enquiry: import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry): void;
|
|
39
45
|
/**
|
|
40
46
|
* Record every extension registered on `frame.phase`, in resolved order, each inside a graph
|
|
41
47
|
* scope named after it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderExtensionRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/extension/RenderExtensionRegistry.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AACH;IAqBI;;;;;;;;;OASG;IACH,iDAcC;IAED;;;;;;OAMG;IACH,oCAFa,OAAO,CAsBnB;IAED;;;OAGG;IACH,aAHW,UAAU,GACR,MAAM,CAOlB;IAED;;;;;;;;;OASG;IACH,+BA0CC;;CACJ;
|
|
1
|
+
{"version":3,"file":"RenderExtensionRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/extension/RenderExtensionRegistry.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AACH;IAqBI;;;;;;;;;OASG;IACH,iDAcC;IAED;;;;;;OAMG;IACH,oCAFa,OAAO,CAsBnB;IAED;;;OAGG;IACH,aAHW,UAAU,GACR,MAAM,CAOlB;IAED;;;;OAIG;IACH,0BAFW,OAAO,0CAA0C,EAAE,eAAe,QAU5E;IAED;;;;;;;;;OASG;IACH,+BA0CC;;CACJ;2BA/K4C,iBAAiB"}
|
|
@@ -106,6 +106,21 @@ export class RenderExtensionRegistry {
|
|
|
106
106
|
return this.#resolved[phase].length;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Offer the pipelines of every registered extension, in phase and resolved order.
|
|
111
|
+
*
|
|
112
|
+
* @param {import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} enquiry
|
|
113
|
+
*/
|
|
114
|
+
enquirePipelines(enquiry) {
|
|
115
|
+
for (let phase = 0; phase < PHASE_COUNT; phase++) {
|
|
116
|
+
const extensions = this.#resolved[phase];
|
|
117
|
+
|
|
118
|
+
for (let i = 0; i < extensions.length; i++) {
|
|
119
|
+
extensions[i].enquirePipelines?.(enquiry);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
109
124
|
/**
|
|
110
125
|
* Record every extension registered on `frame.phase`, in resolved order, each inside a graph
|
|
111
126
|
* scope named after it.
|
|
@@ -131,6 +131,13 @@ export const GPU_FLUID_CASCADE_GROWTH_EXPONENT_LIMIT: number;
|
|
|
131
131
|
* solve's inputs live in retained records, and several steps may be recorded into one graph.
|
|
132
132
|
*/
|
|
133
133
|
export class GPUFluidCascade {
|
|
134
|
+
/**
|
|
135
|
+
* Offer the compute pipelines a cascade's step, scroll fill, and child restriction dispatch —
|
|
136
|
+
* see {@link PipelineEnquiry}.
|
|
137
|
+
*
|
|
138
|
+
* @param {import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} enquiry
|
|
139
|
+
*/
|
|
140
|
+
static enquirePipelines(enquiry: import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry): void;
|
|
134
141
|
/**
|
|
135
142
|
* @param {object} record
|
|
136
143
|
* @param {*} _resources
|