@woosh/meep-engine 3.51.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/playground/tonemap_sdr/README.md +5 -3
- package/src/shade/renderer/Renderer.d.ts +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +88 -31
- package/src/shade/renderer/ShadeToneMappingMode.d.ts +3 -2
- package/src/shade/renderer/ShadeToneMappingMode.js +15 -4
- 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/deferred/tonemap/TonemapAces2Tables.d.ts +38 -0
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.js +97 -0
- package/src/shade/renderer/deferred/{TonemapDisplaySettings.d.ts → tonemap/TonemapDisplaySettings.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/TonemapDisplaySettings.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{TonemapDisplaySettings.js → tonemap/TonemapDisplaySettings.js} +5 -5
- package/src/shade/renderer/deferred/{shader_tonemap_HDR.d.ts → tonemap/shader_tonemap_HDR.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR.js → tonemap/shader_tonemap_HDR.js} +9 -9
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts +17 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.js +101 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.d.ts → tonemap/shader_tonemap_HDR_none.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.js → tonemap/shader_tonemap_HDR_none.js} +6 -6
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.d.ts → tonemap/shader_tonemap_HDR_pbr_neutral.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.js → tonemap/shader_tonemap_HDR_pbr_neutral.js} +8 -8
- package/src/shade/renderer/deferred/{shader_tonemap_LDR.d.ts → tonemap/shader_tonemap_LDR.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR.js → tonemap/shader_tonemap_LDR.js} +10 -10
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts +10 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.js +77 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.d.ts → tonemap/shader_tonemap_LDR_none.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.js → tonemap/shader_tonemap_LDR_none.js} +7 -7
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.d.ts → tonemap/shader_tonemap_LDR_pbr_neutral.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.js → tonemap/shader_tonemap_LDR_pbr_neutral.js} +8 -8
- 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 +10 -3
- 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 +8 -1
- 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/forcing/GPUFluidForcing.d.ts +6 -6
- 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 +8 -1
- 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/fluid/query/GPUFluidQueries.d.ts +1 -1
- 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/loader/gltf/tiny-gltf.d.ts +1 -1
- 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/nss/NSS.d.ts +1 -1
- 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/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +160 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +5 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +15 -5
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts +41 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.js +692 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.js +446 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +68 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +32 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +163 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +10 -3
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +12 -4
- 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
- package/src/shade/renderer/deferred/TonemapDisplaySettings.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +0 -1
|
@@ -11,22 +11,27 @@
|
|
|
11
11
|
* Per-axis dirty bits live in a single dirty u32 (atomicOr to set,
|
|
12
12
|
* atomicLoad in resolve, atomicStore(0) to clear).
|
|
13
13
|
*
|
|
14
|
-
* Layout in u32 indices (slot stride =
|
|
15
|
-
* tail padding
|
|
14
|
+
* Layout in u32 indices (slot stride = 32 u32s = 128 bytes — 11 u32s of
|
|
15
|
+
* tail padding give the slot a power-of-two stride so addressing is a
|
|
16
16
|
* shift, not a multiply):
|
|
17
17
|
*
|
|
18
|
-
* [0..3] translation.xyz (3 atomic<u32>, f32 bitcast)
|
|
19
|
-
* [3..7] rotation.xyzw (4 atomic<u32>, f32 bitcast)
|
|
20
|
-
* [7..10] scale.xyz (3 atomic<u32>, f32 bitcast)
|
|
18
|
+
* [0..3] translation.xyz (3 atomic<u32>, f32 bitcast, weighted delta from rest)
|
|
19
|
+
* [3..7] rotation.xyzw (4 atomic<u32>, f32 bitcast, weighted delta from rest)
|
|
20
|
+
* [7..10] scale.xyz (3 atomic<u32>, f32 bitcast, weighted delta from rest)
|
|
21
21
|
* [10] dirty_mask (atomic<u32>, see flag bits below)
|
|
22
22
|
* [11..15] rest_rotation.xyzw (4 atomic<u32>, f32 bitcast)
|
|
23
|
-
* [15]
|
|
23
|
+
* [15..18] rest_translation.xyz (3 atomic<u32>, f32 bitcast)
|
|
24
|
+
* [18..21] rest_scale.xyz (3 atomic<u32>, f32 bitcast)
|
|
25
|
+
* [21..32] padding
|
|
24
26
|
*
|
|
25
|
-
* `rest_rotation`
|
|
26
|
-
* target's rest
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* `rest_rotation`, `rest_translation`, and `rest_scale` are not sums.
|
|
28
|
+
* Every contribution stores its target's rest value there, whatever its
|
|
29
|
+
* weight, and the resolve adds the accumulated delta to the rest value:
|
|
30
|
+
* V_final = V_rest + sum(w_i * (V_i - V_rest))
|
|
31
|
+
* Because every clip accumulates a delta from rest, normal blending
|
|
32
|
+
* (weights summing to 1), fade-to-rest (single clip with weight < 1),
|
|
33
|
+
* and additive layering (any number of extra clips on top of a base pose)
|
|
34
|
+
* all use the exact same equation with zero runtime mode flags.
|
|
30
35
|
*
|
|
31
36
|
* `dirty_mask` bit layout:
|
|
32
37
|
* bits 0–2: translation x/y/z written this frame
|
|
@@ -42,7 +47,7 @@
|
|
|
42
47
|
*/
|
|
43
48
|
/**
|
|
44
49
|
* u32-stride per pose-accumulator slot. Picked to be a power of two so
|
|
45
|
-
* `row <<
|
|
50
|
+
* `row << 5` works as the slot offset. 21 u32s are used, 11 are padding.
|
|
46
51
|
* @type {number}
|
|
47
52
|
*/
|
|
48
53
|
export const POSE_ACCUMULATOR_STRIDE: number;
|
|
@@ -59,6 +64,8 @@ export const POSE_ACCUMULATOR_OFFSET_ROTATION: 3;
|
|
|
59
64
|
export const POSE_ACCUMULATOR_OFFSET_SCALE: 7;
|
|
60
65
|
export const POSE_ACCUMULATOR_OFFSET_DIRTY: 10;
|
|
61
66
|
export const POSE_ACCUMULATOR_OFFSET_REST_ROTATION: 11;
|
|
67
|
+
export const POSE_ACCUMULATOR_OFFSET_REST_TRANSLATION: 15;
|
|
68
|
+
export const POSE_ACCUMULATOR_OFFSET_REST_SCALE: 18;
|
|
62
69
|
/**
|
|
63
70
|
* Dirty-mask bit layout. Per-axis for T/S, single bit for R.
|
|
64
71
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"POSE_ACCUMULATOR_LAYOUT.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"POSE_ACCUMULATOR_LAYOUT.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH;;;;GAIG;AACH,sCAFU,MAAM,CAE0B;AAE1C;;;;;GAKG;AACH,0CAFU,MAAM,CAEuD;AAEvE,gDAAgD;AAChD,oDAAqD;AACrD,iDAAkD;AAClD,8CAA+C;AAC/C,+CAAgD;AAChD,uDAAwD;AACxD,0DAA2D;AAC3D,oDAAqD;AAErD;;GAEG;AACH,mCAAoC;AACpC,mCAAoC;AACpC,mCAAoC;AACpC,kCAAmC;AACnC,mCAAoC;AACpC,mCAAoC;AACpC,mCAAoC"}
|
|
@@ -11,22 +11,27 @@
|
|
|
11
11
|
* Per-axis dirty bits live in a single dirty u32 (atomicOr to set,
|
|
12
12
|
* atomicLoad in resolve, atomicStore(0) to clear).
|
|
13
13
|
*
|
|
14
|
-
* Layout in u32 indices (slot stride =
|
|
15
|
-
* tail padding
|
|
14
|
+
* Layout in u32 indices (slot stride = 32 u32s = 128 bytes — 11 u32s of
|
|
15
|
+
* tail padding give the slot a power-of-two stride so addressing is a
|
|
16
16
|
* shift, not a multiply):
|
|
17
17
|
*
|
|
18
|
-
* [0..3] translation.xyz (3 atomic<u32>, f32 bitcast)
|
|
19
|
-
* [3..7] rotation.xyzw (4 atomic<u32>, f32 bitcast)
|
|
20
|
-
* [7..10] scale.xyz (3 atomic<u32>, f32 bitcast)
|
|
18
|
+
* [0..3] translation.xyz (3 atomic<u32>, f32 bitcast, weighted delta from rest)
|
|
19
|
+
* [3..7] rotation.xyzw (4 atomic<u32>, f32 bitcast, weighted delta from rest)
|
|
20
|
+
* [7..10] scale.xyz (3 atomic<u32>, f32 bitcast, weighted delta from rest)
|
|
21
21
|
* [10] dirty_mask (atomic<u32>, see flag bits below)
|
|
22
22
|
* [11..15] rest_rotation.xyzw (4 atomic<u32>, f32 bitcast)
|
|
23
|
-
* [15]
|
|
23
|
+
* [15..18] rest_translation.xyz (3 atomic<u32>, f32 bitcast)
|
|
24
|
+
* [18..21] rest_scale.xyz (3 atomic<u32>, f32 bitcast)
|
|
25
|
+
* [21..32] padding
|
|
24
26
|
*
|
|
25
|
-
* `rest_rotation`
|
|
26
|
-
* target's rest
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* `rest_rotation`, `rest_translation`, and `rest_scale` are not sums.
|
|
28
|
+
* Every contribution stores its target's rest value there, whatever its
|
|
29
|
+
* weight, and the resolve adds the accumulated delta to the rest value:
|
|
30
|
+
* V_final = V_rest + sum(w_i * (V_i - V_rest))
|
|
31
|
+
* Because every clip accumulates a delta from rest, normal blending
|
|
32
|
+
* (weights summing to 1), fade-to-rest (single clip with weight < 1),
|
|
33
|
+
* and additive layering (any number of extra clips on top of a base pose)
|
|
34
|
+
* all use the exact same equation with zero runtime mode flags.
|
|
30
35
|
*
|
|
31
36
|
* `dirty_mask` bit layout:
|
|
32
37
|
* bits 0–2: translation x/y/z written this frame
|
|
@@ -43,10 +48,10 @@
|
|
|
43
48
|
|
|
44
49
|
/**
|
|
45
50
|
* u32-stride per pose-accumulator slot. Picked to be a power of two so
|
|
46
|
-
* `row <<
|
|
51
|
+
* `row << 5` works as the slot offset. 21 u32s are used, 11 are padding.
|
|
47
52
|
* @type {number}
|
|
48
53
|
*/
|
|
49
|
-
export const POSE_ACCUMULATOR_STRIDE =
|
|
54
|
+
export const POSE_ACCUMULATOR_STRIDE = 32;
|
|
50
55
|
|
|
51
56
|
/**
|
|
52
57
|
* Byte size of one slot. Convenience for buffer-size math; the GPU
|
|
@@ -62,6 +67,8 @@ export const POSE_ACCUMULATOR_OFFSET_ROTATION = 3;
|
|
|
62
67
|
export const POSE_ACCUMULATOR_OFFSET_SCALE = 7;
|
|
63
68
|
export const POSE_ACCUMULATOR_OFFSET_DIRTY = 10;
|
|
64
69
|
export const POSE_ACCUMULATOR_OFFSET_REST_ROTATION = 11;
|
|
70
|
+
export const POSE_ACCUMULATOR_OFFSET_REST_TRANSLATION = 15;
|
|
71
|
+
export const POSE_ACCUMULATOR_OFFSET_REST_SCALE = 18;
|
|
65
72
|
|
|
66
73
|
/**
|
|
67
74
|
* Dirty-mask bit layout. Per-axis for T/S, single bit for R.
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @typedef {import("../../../engine/ecs/transform/Transform64.js").Transform64} Transform64
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {import("./ShadeAnimationChannel.js").ShadeAnimationChannel} ShadeAnimationChannel
|
|
6
|
-
*/
|
|
7
1
|
/**
|
|
8
2
|
* A bundle of {@link ShadeAnimationChannel}s sharing one playback
|
|
9
3
|
* clock — the GPU-driven equivalent of an animation "clip". Each
|
|
@@ -32,6 +26,39 @@ export class ShadeAnimationClip {
|
|
|
32
26
|
name?: string;
|
|
33
27
|
channels: ShadeAnimationChannel[];
|
|
34
28
|
}): ShadeAnimationClip;
|
|
29
|
+
/**
|
|
30
|
+
* Build a rest-anchored additive clip by extracting the motion delta of `source_clip`
|
|
31
|
+
* relative to `reference_clip` sampled at `reference_time`, rebased onto each target's
|
|
32
|
+
* rest pose (`rest_of`).
|
|
33
|
+
*
|
|
34
|
+
* Because the runtime pose pipeline accumulates rest-anchored deltas
|
|
35
|
+
* (`V_final = V_rest + sum(w_i * (V_i(t) - V_rest))`), rebasing `source_clip` so that
|
|
36
|
+
* its delta from `V_rest` equals its authored delta from `V_ref` requires zero runtime
|
|
37
|
+
* flags or shader branches:
|
|
38
|
+
* - Translation: `T_rebased(t) = T_rest + (T_src(t) - T_ref)`
|
|
39
|
+
* - Scale: `S_rebased(t) = S_rest + (S_src(t) - S_ref)`
|
|
40
|
+
* - Rotation: `R_rebased(t) = (R_rest * R_ref^-1) * R_src(t)`, sign-canonicalised
|
|
41
|
+
* against `R_rest` via {@link quat3_canonicalize_sign_run}
|
|
42
|
+
*
|
|
43
|
+
* Any per-axis curve or rotation channel whose delta from `V_ref` is constant zero across
|
|
44
|
+
* the clip is automatically stripped. This means an upper-body gesture exported as a
|
|
45
|
+
* full-body clip where the lower body stands still at the reference frame automatically
|
|
46
|
+
* drops all lower-body bindings without needing a bone mask.
|
|
47
|
+
*
|
|
48
|
+
* @param {ShadeAnimationClip} source_clip
|
|
49
|
+
* @param {object} [options]
|
|
50
|
+
* @param {ShadeAnimationClip} [options.reference_clip=source_clip] clip to sample the reference pose from
|
|
51
|
+
* @param {number} [options.reference_time] time within `reference_clip` (defaults to `reference_clip.start_time`)
|
|
52
|
+
* @param {function(number): (Transform64|undefined)} [options.rest_of] target node rest transform lookup
|
|
53
|
+
* @param {string} [options.name] optional name for the resulting clip
|
|
54
|
+
* @returns {ShadeAnimationClip}
|
|
55
|
+
*/
|
|
56
|
+
static from_additive(source_clip: ShadeAnimationClip, { reference_clip, reference_time, rest_of, name, }?: {
|
|
57
|
+
reference_clip?: ShadeAnimationClip;
|
|
58
|
+
reference_time?: number;
|
|
59
|
+
rest_of?: (arg0: number) => (Transform64 | undefined);
|
|
60
|
+
name?: string;
|
|
61
|
+
}): ShadeAnimationClip;
|
|
35
62
|
/**
|
|
36
63
|
* Human-readable name. Optional; empty by default.
|
|
37
64
|
*
|
|
@@ -134,6 +161,6 @@ export class ShadeAnimationClip {
|
|
|
134
161
|
*/
|
|
135
162
|
readonly isShadeAnimationClip: boolean;
|
|
136
163
|
}
|
|
137
|
-
|
|
138
|
-
|
|
164
|
+
import { ShadeAnimationChannel } from "./ShadeAnimationChannel.js";
|
|
165
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
139
166
|
//# sourceMappingURL=ShadeAnimationClip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShadeAnimationClip.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/ShadeAnimationClip.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ShadeAnimationClip.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/ShadeAnimationClip.js"],"names":[],"mappings":"AA6TA;;;;;;;;;;;;;;;;;;GAkBG;AACH;IA+DI;;;OAGG;IACH,gCAHW;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;KAAE,GAClD,kBAAkB,CAU9B;IAyGD;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,kCARW,kBAAkB;QAEW,cAAc,GAA3C,kBAAkB;QACD,cAAc,GAA/B,MAAM;QAC8C,OAAO,UAAlD,MAAM,KAAG,CAAC,WAAW,GAAC,SAAS,CAAC;QACxB,IAAI,GAArB,MAAM;QACJ,kBAAkB,CAiG9B;IA5SD;;;;OAIG;IACH,MAFU,MAAM,CAEN;IAEV;;;;;;OAMG;IACH,UAFU,qBAAqB,EAAE,CAEnB;IAEd;;;;;OAKG;IACH,yBAWC;IAED;;;;;OAKG;IACH,uBAWC;IAED;;OAEG;IACH,uBAEC;IAgBD;;;;;;;;;;;;;;OAcG;IACH,YAFW,kBAAkB,QAY5B;IAED;;;;;OAKG;IACH,SAFa,kBAAkB,CAM9B;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAHW,MAAM,uBACG,MAAM,KAAG,WAAW,QAYvC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,0BAHoB,MAAM,KAAG,CAAC,WAAW,GAAC,SAAS,CAAC,QAcnD;IA+HL;;;OAGG;IACH,+BAFU,OAAO,CAEgC;CANhD;sCAxnBqC,4BAA4B;4BAFtC,8CAA8C"}
|
|
@@ -1,12 +1,319 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { quat3_canonicalize_sign_run } from "../../../core/geom/3d/quaternion/quat3_canonicalize_sign_run.js";
|
|
3
|
+
import { AnimationCurve } from "../../../engine/animation/curve/AnimationCurve.js";
|
|
4
|
+
import { animation_curve_optimize } from "../../../engine/animation/curve/animation_curve_optimize.js";
|
|
5
|
+
import { Keyframe } from "../../../engine/animation/curve/Keyframe.js";
|
|
6
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
7
|
+
import { Node3DProperty } from "../object_property/Node3DProperty.js";
|
|
8
|
+
import { ShadeAnimationChannel } from "./ShadeAnimationChannel.js";
|
|
9
|
+
|
|
10
|
+
const ADDITIVE_EPSILON = 1e-5;
|
|
11
|
+
const DEFAULT_REST = new Transform64();
|
|
2
12
|
|
|
3
13
|
/**
|
|
4
|
-
* @
|
|
14
|
+
* @param {AnimationCurve} curve
|
|
15
|
+
* @param {number} expected_value
|
|
16
|
+
* @returns {boolean}
|
|
17
|
+
*/
|
|
18
|
+
function is_curve_constant_at(curve, expected_value) {
|
|
19
|
+
const keys = curve.keys;
|
|
20
|
+
for (let i = 0; i < keys.length; i++) {
|
|
21
|
+
const k = keys[i];
|
|
22
|
+
if (Math.abs(k.value - expected_value) > ADDITIVE_EPSILON) return false;
|
|
23
|
+
if (Math.abs(k.inTangent) > ADDITIVE_EPSILON) return false;
|
|
24
|
+
if (Math.abs(k.outTangent) > ADDITIVE_EPSILON) return false;
|
|
25
|
+
}
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Clone a scalar curve and shift every keyframe's value by `offset`.
|
|
31
|
+
* Returns `undefined` when the resulting curve is constant at `rest_value`.
|
|
32
|
+
*
|
|
33
|
+
* @param {AnimationCurve|undefined} curve
|
|
34
|
+
* @param {number} offset
|
|
35
|
+
* @param {number} rest_value
|
|
36
|
+
* @returns {AnimationCurve|undefined}
|
|
5
37
|
*/
|
|
38
|
+
function rebase_scalar_curve(curve, offset, rest_value) {
|
|
39
|
+
if (curve === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const rebased = curve.clone();
|
|
44
|
+
if (offset !== 0) {
|
|
45
|
+
const keys = rebased.keys;
|
|
46
|
+
for (let i = 0; i < keys.length; i++) {
|
|
47
|
+
keys[i].value += offset;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (is_curve_constant_at(rebased, rest_value)) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
animation_curve_optimize(rebased);
|
|
56
|
+
return rebased;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Collect sorted unique keyframe timestamps across a rotation channel's curves,
|
|
61
|
+
* and check whether all four curves are present with identical timestamps.
|
|
62
|
+
*
|
|
63
|
+
* @param {import("./ShadeAnimationChannel.js").ChannelCurves} curves
|
|
64
|
+
* @returns {{ aligned: boolean, times: number[] }}
|
|
65
|
+
*/
|
|
66
|
+
function collect_rotation_times(curves) {
|
|
67
|
+
const present = [];
|
|
68
|
+
if (curves.x !== undefined) present.push(curves.x);
|
|
69
|
+
if (curves.y !== undefined) present.push(curves.y);
|
|
70
|
+
if (curves.z !== undefined) present.push(curves.z);
|
|
71
|
+
if (curves.w !== undefined) present.push(curves.w);
|
|
72
|
+
|
|
73
|
+
if (present.length === 0) {
|
|
74
|
+
return { aligned: true, times: [] };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const first_keys = present[0].keys;
|
|
78
|
+
const n = first_keys.length;
|
|
79
|
+
let aligned = true;
|
|
80
|
+
for (let c = 1; c < present.length; c++) {
|
|
81
|
+
if (present[c].keys.length !== n) {
|
|
82
|
+
aligned = false;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (aligned) {
|
|
88
|
+
const times = new Array(n);
|
|
89
|
+
for (let i = 0; i < n; i++) {
|
|
90
|
+
const t = first_keys[i].time;
|
|
91
|
+
for (let c = 1; c < present.length; c++) {
|
|
92
|
+
if (present[c].keys[i].time !== t) {
|
|
93
|
+
aligned = false;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (!aligned) break;
|
|
98
|
+
times[i] = t;
|
|
99
|
+
}
|
|
100
|
+
if (aligned) {
|
|
101
|
+
return { aligned: true, times };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const time_set = new Set();
|
|
106
|
+
for (let c = 0; c < present.length; c++) {
|
|
107
|
+
const keys = present[c].keys;
|
|
108
|
+
for (let i = 0; i < keys.length; i++) {
|
|
109
|
+
time_set.add(keys[i].time);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const times = Array.from(time_set);
|
|
114
|
+
times.sort((a, b) => a - b);
|
|
115
|
+
return { aligned: false, times };
|
|
116
|
+
}
|
|
6
117
|
|
|
7
118
|
/**
|
|
8
|
-
*
|
|
119
|
+
* Hamilton product `q * v` written into `out` at `offset`.
|
|
120
|
+
*
|
|
121
|
+
* @param {Float64Array} out
|
|
122
|
+
* @param {number} offset
|
|
123
|
+
* @param {number} qx
|
|
124
|
+
* @param {number} qy
|
|
125
|
+
* @param {number} qz
|
|
126
|
+
* @param {number} qw
|
|
127
|
+
* @param {number} vx
|
|
128
|
+
* @param {number} vy
|
|
129
|
+
* @param {number} vz
|
|
130
|
+
* @param {number} vw
|
|
9
131
|
*/
|
|
132
|
+
function quat_mul_into(out, offset, qx, qy, qz, qw, vx, vy, vz, vw) {
|
|
133
|
+
out[offset + 0] = qw * vx + qx * vw + qy * vz - qz * vy;
|
|
134
|
+
out[offset + 1] = qw * vy - qx * vz + qy * vw + qz * vx;
|
|
135
|
+
out[offset + 2] = qw * vz + qx * vy - qy * vx + qz * vw;
|
|
136
|
+
out[offset + 3] = qw * vw - qx * vx - qy * vy - qz * vz;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Rebase a rotation channel from its reference orientation `ref_pose` onto `rest`.
|
|
141
|
+
* Returns `undefined` when the rebased rotation is constant at `rest`.
|
|
142
|
+
*
|
|
143
|
+
* @param {ShadeAnimationChannel} channel
|
|
144
|
+
* @param {Transform64} ref_pose
|
|
145
|
+
* @param {Transform64} rest
|
|
146
|
+
* @returns {ShadeAnimationChannel|undefined}
|
|
147
|
+
*/
|
|
148
|
+
function rebase_rotation_channel(channel, ref_pose, rest) {
|
|
149
|
+
const curves = channel.curves;
|
|
150
|
+
const { aligned, times } = collect_rotation_times(curves);
|
|
151
|
+
const key_count = times.length;
|
|
152
|
+
if (key_count === 0) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const rest_rx = rest.rotation_x;
|
|
157
|
+
const rest_ry = rest.rotation_y;
|
|
158
|
+
const rest_rz = rest.rotation_z;
|
|
159
|
+
const rest_rw = rest.rotation_w;
|
|
160
|
+
|
|
161
|
+
const ref_rx = ref_pose.rotation_x;
|
|
162
|
+
const ref_ry = ref_pose.rotation_y;
|
|
163
|
+
const ref_rz = ref_pose.rotation_z;
|
|
164
|
+
const ref_rw = ref_pose.rotation_w;
|
|
165
|
+
|
|
166
|
+
// Q_shift = R_rest * (R_ref)^-1, where (R_ref)^-1 = (-ref_rx, -ref_ry, -ref_rz, ref_rw).
|
|
167
|
+
// Left-multiplying R_src(t) = R_ref * delta_R(t) by Q_shift yields R_rest * delta_R(t).
|
|
168
|
+
let sx = rest_rw * (-ref_rx) + rest_rx * ref_rw + rest_ry * (-ref_rz) - rest_rz * (-ref_ry);
|
|
169
|
+
let sy = rest_rw * (-ref_ry) - rest_rx * (-ref_rz) + rest_ry * ref_rw + rest_rz * (-ref_rx);
|
|
170
|
+
let sz = rest_rw * (-ref_rz) + rest_rx * (-ref_ry) - rest_ry * (-ref_rx) + rest_rz * ref_rw;
|
|
171
|
+
let sw = rest_rw * ref_rw - rest_rx * (-ref_rx) - rest_ry * (-ref_ry) - rest_rz * (-ref_rz);
|
|
172
|
+
const s_len = Math.hypot(sx, sy, sz, sw);
|
|
173
|
+
if (s_len > 0) {
|
|
174
|
+
sx /= s_len;
|
|
175
|
+
sy /= s_len;
|
|
176
|
+
sz /= s_len;
|
|
177
|
+
sw /= s_len;
|
|
178
|
+
} else {
|
|
179
|
+
sx = 0;
|
|
180
|
+
sy = 0;
|
|
181
|
+
sz = 0;
|
|
182
|
+
sw = 1;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Each keyframe block holds 12 floats: [inTangent(4), value(4), outTangent(4)].
|
|
186
|
+
const blocks = new Float64Array(key_count * 12);
|
|
187
|
+
|
|
188
|
+
if (aligned) {
|
|
189
|
+
const kx = curves.x !== undefined ? curves.x.keys : undefined;
|
|
190
|
+
const ky = curves.y !== undefined ? curves.y.keys : undefined;
|
|
191
|
+
const kz = curves.z !== undefined ? curves.z.keys : undefined;
|
|
192
|
+
const kw = curves.w !== undefined ? curves.w.keys : undefined;
|
|
193
|
+
|
|
194
|
+
for (let k = 0; k < key_count; k++) {
|
|
195
|
+
const base = k * 12;
|
|
196
|
+
const ix = kx !== undefined ? kx[k].inTangent : 0;
|
|
197
|
+
const iy = ky !== undefined ? ky[k].inTangent : 0;
|
|
198
|
+
const iz = kz !== undefined ? kz[k].inTangent : 0;
|
|
199
|
+
const iw = kw !== undefined ? kw[k].inTangent : 0;
|
|
200
|
+
|
|
201
|
+
const vx = kx !== undefined ? kx[k].value : 0;
|
|
202
|
+
const vy = ky !== undefined ? ky[k].value : 0;
|
|
203
|
+
const vz = kz !== undefined ? kz[k].value : 0;
|
|
204
|
+
const vw = kw !== undefined ? kw[k].value : 1;
|
|
205
|
+
|
|
206
|
+
const ox = kx !== undefined ? kx[k].outTangent : 0;
|
|
207
|
+
const oy = ky !== undefined ? ky[k].outTangent : 0;
|
|
208
|
+
const oz = kz !== undefined ? kz[k].outTangent : 0;
|
|
209
|
+
const ow = kw !== undefined ? kw[k].outTangent : 0;
|
|
210
|
+
|
|
211
|
+
quat_mul_into(blocks, base + 0, sx, sy, sz, sw, ix, iy, iz, iw);
|
|
212
|
+
quat_mul_into(blocks, base + 4, sx, sy, sz, sw, vx, vy, vz, vw);
|
|
213
|
+
quat_mul_into(blocks, base + 8, sx, sy, sz, sw, ox, oy, oz, ow);
|
|
214
|
+
|
|
215
|
+
const v_len = Math.hypot(blocks[base + 4], blocks[base + 5], blocks[base + 6], blocks[base + 7]);
|
|
216
|
+
if (v_len > 0 && Math.abs(v_len - 1) > 1e-6) {
|
|
217
|
+
const inv = 1 / v_len;
|
|
218
|
+
for (let j = 0; j < 12; j++) {
|
|
219
|
+
blocks[base + j] *= inv;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
} else {
|
|
224
|
+
const cx = curves.x;
|
|
225
|
+
const cy = curves.y;
|
|
226
|
+
const cz = curves.z;
|
|
227
|
+
const cw = curves.w;
|
|
228
|
+
|
|
229
|
+
for (let k = 0; k < key_count; k++) {
|
|
230
|
+
const t = times[k];
|
|
231
|
+
const base = k * 12;
|
|
232
|
+
const vx = cx !== undefined ? cx.evaluate(t) : 0;
|
|
233
|
+
const vy = cy !== undefined ? cy.evaluate(t) : 0;
|
|
234
|
+
const vz = cz !== undefined ? cz.evaluate(t) : 0;
|
|
235
|
+
const vw = cw !== undefined ? cw.evaluate(t) : 1;
|
|
236
|
+
|
|
237
|
+
quat_mul_into(blocks, base + 4, sx, sy, sz, sw, vx, vy, vz, vw);
|
|
238
|
+
const v_len = Math.hypot(blocks[base + 4], blocks[base + 5], blocks[base + 6], blocks[base + 7]);
|
|
239
|
+
if (v_len > 0) {
|
|
240
|
+
const inv = 1 / v_len;
|
|
241
|
+
blocks[base + 4] *= inv;
|
|
242
|
+
blocks[base + 5] *= inv;
|
|
243
|
+
blocks[base + 6] *= inv;
|
|
244
|
+
blocks[base + 7] *= inv;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
quat3_canonicalize_sign_run(blocks, key_count, 12, 4, {
|
|
250
|
+
x: rest_rx,
|
|
251
|
+
y: rest_ry,
|
|
252
|
+
z: rest_rz,
|
|
253
|
+
w: rest_rw,
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
let is_constant_rest = true;
|
|
257
|
+
for (let k = 0; k < key_count; k++) {
|
|
258
|
+
const base = k * 12;
|
|
259
|
+
if (
|
|
260
|
+
Math.abs(blocks[base + 4] - rest_rx) > ADDITIVE_EPSILON ||
|
|
261
|
+
Math.abs(blocks[base + 5] - rest_ry) > ADDITIVE_EPSILON ||
|
|
262
|
+
Math.abs(blocks[base + 6] - rest_rz) > ADDITIVE_EPSILON ||
|
|
263
|
+
Math.abs(blocks[base + 7] - rest_rw) > ADDITIVE_EPSILON ||
|
|
264
|
+
Math.abs(blocks[base + 0]) > ADDITIVE_EPSILON ||
|
|
265
|
+
Math.abs(blocks[base + 1]) > ADDITIVE_EPSILON ||
|
|
266
|
+
Math.abs(blocks[base + 2]) > ADDITIVE_EPSILON ||
|
|
267
|
+
Math.abs(blocks[base + 3]) > ADDITIVE_EPSILON ||
|
|
268
|
+
Math.abs(blocks[base + 8]) > ADDITIVE_EPSILON ||
|
|
269
|
+
Math.abs(blocks[base + 9]) > ADDITIVE_EPSILON ||
|
|
270
|
+
Math.abs(blocks[base + 10]) > ADDITIVE_EPSILON ||
|
|
271
|
+
Math.abs(blocks[base + 11]) > ADDITIVE_EPSILON
|
|
272
|
+
) {
|
|
273
|
+
is_constant_rest = false;
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
if (is_constant_rest) {
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
const keys_x = new Array(key_count);
|
|
283
|
+
const keys_y = new Array(key_count);
|
|
284
|
+
const keys_z = new Array(key_count);
|
|
285
|
+
const keys_w = new Array(key_count);
|
|
286
|
+
|
|
287
|
+
for (let k = 0; k < key_count; k++) {
|
|
288
|
+
const t = times[k];
|
|
289
|
+
const base = k * 12;
|
|
290
|
+
keys_x[k] = Keyframe.from(t, blocks[base + 4], blocks[base + 0], blocks[base + 8]);
|
|
291
|
+
keys_y[k] = Keyframe.from(t, blocks[base + 5], blocks[base + 1], blocks[base + 9]);
|
|
292
|
+
keys_z[k] = Keyframe.from(t, blocks[base + 6], blocks[base + 2], blocks[base + 10]);
|
|
293
|
+
keys_w[k] = Keyframe.from(t, blocks[base + 7], blocks[base + 3], blocks[base + 11]);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
const rx_curve = AnimationCurve.from(keys_x);
|
|
297
|
+
const ry_curve = AnimationCurve.from(keys_y);
|
|
298
|
+
const rz_curve = AnimationCurve.from(keys_z);
|
|
299
|
+
const rw_curve = AnimationCurve.from(keys_w);
|
|
300
|
+
|
|
301
|
+
animation_curve_optimize(rx_curve);
|
|
302
|
+
animation_curve_optimize(ry_curve);
|
|
303
|
+
animation_curve_optimize(rz_curve);
|
|
304
|
+
animation_curve_optimize(rw_curve);
|
|
305
|
+
|
|
306
|
+
return ShadeAnimationChannel.from({
|
|
307
|
+
target: channel.target,
|
|
308
|
+
property: Node3DProperty.Rotation,
|
|
309
|
+
curves: {
|
|
310
|
+
x: rx_curve,
|
|
311
|
+
y: ry_curve,
|
|
312
|
+
z: rz_curve,
|
|
313
|
+
w: rw_curve,
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
}
|
|
10
317
|
|
|
11
318
|
/**
|
|
12
319
|
* A bundle of {@link ShadeAnimationChannel}s sharing one playback
|
|
@@ -206,6 +513,130 @@ export class ShadeAnimationClip {
|
|
|
206
513
|
}
|
|
207
514
|
this.channels = kept;
|
|
208
515
|
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Build a rest-anchored additive clip by extracting the motion delta of `source_clip`
|
|
519
|
+
* relative to `reference_clip` sampled at `reference_time`, rebased onto each target's
|
|
520
|
+
* rest pose (`rest_of`).
|
|
521
|
+
*
|
|
522
|
+
* Because the runtime pose pipeline accumulates rest-anchored deltas
|
|
523
|
+
* (`V_final = V_rest + sum(w_i * (V_i(t) - V_rest))`), rebasing `source_clip` so that
|
|
524
|
+
* its delta from `V_rest` equals its authored delta from `V_ref` requires zero runtime
|
|
525
|
+
* flags or shader branches:
|
|
526
|
+
* - Translation: `T_rebased(t) = T_rest + (T_src(t) - T_ref)`
|
|
527
|
+
* - Scale: `S_rebased(t) = S_rest + (S_src(t) - S_ref)`
|
|
528
|
+
* - Rotation: `R_rebased(t) = (R_rest * R_ref^-1) * R_src(t)`, sign-canonicalised
|
|
529
|
+
* against `R_rest` via {@link quat3_canonicalize_sign_run}
|
|
530
|
+
*
|
|
531
|
+
* Any per-axis curve or rotation channel whose delta from `V_ref` is constant zero across
|
|
532
|
+
* the clip is automatically stripped. This means an upper-body gesture exported as a
|
|
533
|
+
* full-body clip where the lower body stands still at the reference frame automatically
|
|
534
|
+
* drops all lower-body bindings without needing a bone mask.
|
|
535
|
+
*
|
|
536
|
+
* @param {ShadeAnimationClip} source_clip
|
|
537
|
+
* @param {object} [options]
|
|
538
|
+
* @param {ShadeAnimationClip} [options.reference_clip=source_clip] clip to sample the reference pose from
|
|
539
|
+
* @param {number} [options.reference_time] time within `reference_clip` (defaults to `reference_clip.start_time`)
|
|
540
|
+
* @param {function(number): (Transform64|undefined)} [options.rest_of] target node rest transform lookup
|
|
541
|
+
* @param {string} [options.name] optional name for the resulting clip
|
|
542
|
+
* @returns {ShadeAnimationClip}
|
|
543
|
+
*/
|
|
544
|
+
static from_additive(
|
|
545
|
+
source_clip,
|
|
546
|
+
{
|
|
547
|
+
reference_clip = source_clip,
|
|
548
|
+
reference_time,
|
|
549
|
+
rest_of,
|
|
550
|
+
name,
|
|
551
|
+
} = {}
|
|
552
|
+
) {
|
|
553
|
+
assert.defined(source_clip, 'source_clip');
|
|
554
|
+
assert.equal(source_clip.isShadeAnimationClip, true, 'source_clip.isShadeAnimationClip !== true');
|
|
555
|
+
assert.defined(reference_clip, 'reference_clip');
|
|
556
|
+
assert.equal(reference_clip.isShadeAnimationClip, true, 'reference_clip.isShadeAnimationClip !== true');
|
|
557
|
+
|
|
558
|
+
const ref_time = reference_time !== undefined ? reference_time : reference_clip.start_time;
|
|
559
|
+
|
|
560
|
+
/** @type {Map<number, { rest: Transform64, ref: Transform64 }>} */
|
|
561
|
+
const poses_by_target = new Map();
|
|
562
|
+
|
|
563
|
+
const src_channels = source_clip.channels;
|
|
564
|
+
for (let i = 0; i < src_channels.length; i++) {
|
|
565
|
+
const target = src_channels[i].target;
|
|
566
|
+
if (!poses_by_target.has(target)) {
|
|
567
|
+
const rest = (rest_of !== undefined ? rest_of(target) : undefined) ?? DEFAULT_REST;
|
|
568
|
+
const ref = new Transform64();
|
|
569
|
+
ref.copy(rest);
|
|
570
|
+
poses_by_target.set(target, { rest, ref });
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
const ref_channels = reference_clip.channels;
|
|
575
|
+
for (let i = 0; i < ref_channels.length; i++) {
|
|
576
|
+
const ref_ch = ref_channels[i];
|
|
577
|
+
const entry = poses_by_target.get(ref_ch.target);
|
|
578
|
+
if (entry !== undefined) {
|
|
579
|
+
ref_ch.apply(ref_time, entry.ref);
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
const out_channels = [];
|
|
584
|
+
|
|
585
|
+
for (let i = 0; i < src_channels.length; i++) {
|
|
586
|
+
const ch = src_channels[i];
|
|
587
|
+
const { rest, ref } = poses_by_target.get(ch.target);
|
|
588
|
+
|
|
589
|
+
switch (ch.property) {
|
|
590
|
+
case Node3DProperty.Translation: {
|
|
591
|
+
const curves = ch.curves;
|
|
592
|
+
const x = rebase_scalar_curve(curves.x, rest.translation_x - ref.translation_x, rest.translation_x);
|
|
593
|
+
const y = rebase_scalar_curve(curves.y, rest.translation_y - ref.translation_y, rest.translation_y);
|
|
594
|
+
const z = rebase_scalar_curve(curves.z, rest.translation_z - ref.translation_z, rest.translation_z);
|
|
595
|
+
|
|
596
|
+
if (x !== undefined || y !== undefined || z !== undefined) {
|
|
597
|
+
out_channels.push(ShadeAnimationChannel.from({
|
|
598
|
+
target: ch.target,
|
|
599
|
+
property: Node3DProperty.Translation,
|
|
600
|
+
curves: { x, y, z },
|
|
601
|
+
}));
|
|
602
|
+
}
|
|
603
|
+
break;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
case Node3DProperty.Scale: {
|
|
607
|
+
const curves = ch.curves;
|
|
608
|
+
const x = rebase_scalar_curve(curves.x, rest.scale_x - ref.scale_x, rest.scale_x);
|
|
609
|
+
const y = rebase_scalar_curve(curves.y, rest.scale_y - ref.scale_y, rest.scale_y);
|
|
610
|
+
const z = rebase_scalar_curve(curves.z, rest.scale_z - ref.scale_z, rest.scale_z);
|
|
611
|
+
|
|
612
|
+
if (x !== undefined || y !== undefined || z !== undefined) {
|
|
613
|
+
out_channels.push(ShadeAnimationChannel.from({
|
|
614
|
+
target: ch.target,
|
|
615
|
+
property: Node3DProperty.Scale,
|
|
616
|
+
curves: { x, y, z },
|
|
617
|
+
}));
|
|
618
|
+
}
|
|
619
|
+
break;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
case Node3DProperty.Rotation: {
|
|
623
|
+
const rebased_rot = rebase_rotation_channel(ch, ref, rest);
|
|
624
|
+
if (rebased_rot !== undefined) {
|
|
625
|
+
out_channels.push(rebased_rot);
|
|
626
|
+
}
|
|
627
|
+
break;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
default:
|
|
631
|
+
break;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
const result = new ShadeAnimationClip();
|
|
636
|
+
result.name = name !== undefined ? name : `${source_clip.name}_additive`;
|
|
637
|
+
result.channels = out_channels;
|
|
638
|
+
return result;
|
|
639
|
+
}
|
|
209
640
|
}
|
|
210
641
|
|
|
211
642
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_pose_accumulator.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/chunk_pose_accumulator.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_pose_accumulator.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/chunk_pose_accumulator.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;GAgBG;AACH,qCAFU,SAAS,CA8GgB;0BAjJT,iCAAiC"}
|