@zephyr3d/scene 0.9.26 → 0.10.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/README.md +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +146 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +300 -56
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +177 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +178 -200
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +30475 -19865
- package/dist/index.js +67 -12
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/hairstrand.js +235 -235
- package/dist/material/hairstrand.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +362 -300
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +223 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +733 -190
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +2009 -201
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +668 -63
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +48 -50
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +34 -15
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +40 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +328 -62
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +26 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +53 -53
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +8 -13
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +268 -136
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +113 -28
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +23 -9
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/oit.js +11 -11
- package/dist/render/oit.js.map +1 -1
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +198 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +14 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +15 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +585 -59
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +524 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +1195 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +36 -36
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +997 -96
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +40 -87
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +42 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +87 -49
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +36 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +77 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +140 -279
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +2473 -114
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +97 -109
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
|
@@ -7,6 +7,7 @@ import { NodeScaleTrack } from './scaletrack.js';
|
|
|
7
7
|
import { MorphTargetGroupTrack } from './morphtargetgrouptrack.js';
|
|
8
8
|
import { HumanoidBodyRig } from './skeleton.js';
|
|
9
9
|
import { createSkeletalMaskedAnimationClip } from './animationmask.js';
|
|
10
|
+
import { GpuAnimationDriver } from './gpu_animation_driver.js';
|
|
10
11
|
|
|
11
12
|
let nextAnimationPlaybackId = 1;
|
|
12
13
|
/**
|
|
@@ -236,6 +237,8 @@ function cloneInterpolator(src) {
|
|
|
236
237
|
function createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint, translationRotation, translationScale, translationCorrection, translationAxisLocks, rotationCorrection) {
|
|
237
238
|
const si = srcSkeleton.joints.indexOf(srcJoint);
|
|
238
239
|
const di = dstSkeleton.joints.indexOf(dstJoint);
|
|
240
|
+
const srcReferencePose = srcSkeleton.retargetPose[si];
|
|
241
|
+
const dstReferencePose = dstSkeleton.retargetPose[di];
|
|
239
242
|
const srcBindPose = srcSkeleton.bindPose[si];
|
|
240
243
|
const dstBindPose = dstSkeleton.bindPose[di];
|
|
241
244
|
const srcLen = srcBindPose.position.magnitude;
|
|
@@ -244,10 +247,10 @@ function createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint,
|
|
|
244
247
|
dstNode: dstJoint,
|
|
245
248
|
dstJointIndex: di,
|
|
246
249
|
srcNode: srcJoint,
|
|
247
|
-
srcBindRotInv: Quaternion.inverse(
|
|
248
|
-
dstBindRot:
|
|
250
|
+
srcBindRotInv: Quaternion.inverse(srcReferencePose.rotation),
|
|
251
|
+
dstBindRot: dstReferencePose.rotation.clone(),
|
|
249
252
|
rotationCorrection,
|
|
250
|
-
srcBindPos:
|
|
253
|
+
srcBindPos: srcReferencePose.position.clone(),
|
|
251
254
|
dstBindPos: dstBindPose.position.clone(),
|
|
252
255
|
translationScale: translationScale ?? (srcLen > 1e-6 ? dstLen / srcLen : 1),
|
|
253
256
|
translationRotation,
|
|
@@ -275,15 +278,14 @@ function getBindPosition(skeleton, joint) {
|
|
|
275
278
|
const index = skeleton.joints.indexOf(joint);
|
|
276
279
|
return index >= 0 ? skeleton.bindPose[index].position : null;
|
|
277
280
|
}
|
|
278
|
-
function
|
|
281
|
+
function getSkeletonLocalReferenceTransform(skeleton, node, jointSet, cache) {
|
|
279
282
|
let transform = cache.get(node);
|
|
280
283
|
if (!transform) {
|
|
281
|
-
const
|
|
282
|
-
const
|
|
283
|
-
const rotation = bindPose.rotation.clone();
|
|
284
|
+
const position = getRigBindPoseForNode(skeleton, node).position.clone();
|
|
285
|
+
const rotation = getRigReferencePoseForNode(skeleton, node).rotation.clone();
|
|
284
286
|
const parent = node.parent;
|
|
285
287
|
if (parent && jointSet.has(parent)) {
|
|
286
|
-
const parentTransform =
|
|
288
|
+
const parentTransform = getSkeletonLocalReferenceTransform(skeleton, parent, jointSet, cache);
|
|
287
289
|
parentTransform.rotation.transform(position, position);
|
|
288
290
|
position.addBy(parentTransform.position);
|
|
289
291
|
Quaternion.multiply(parentTransform.rotation, rotation, rotation);
|
|
@@ -345,7 +347,7 @@ function getHumanoidLateralXSign(skeleton) {
|
|
|
345
347
|
if (!left || !right || !jointSet.has(left) || !jointSet.has(right)) {
|
|
346
348
|
continue;
|
|
347
349
|
}
|
|
348
|
-
const dx =
|
|
350
|
+
const dx = getSkeletonLocalReferenceTransform(skeleton, left, jointSet, cache).position.x - getSkeletonLocalReferenceTransform(skeleton, right, jointSet, cache).position.x;
|
|
349
351
|
if (Math.abs(dx) > 1e-5) {
|
|
350
352
|
score += dx;
|
|
351
353
|
weight++;
|
|
@@ -381,7 +383,7 @@ function getHumanoidForwardZSign(skeleton) {
|
|
|
381
383
|
if (!foot || !toes || !jointSet.has(foot) || !jointSet.has(toes)) {
|
|
382
384
|
continue;
|
|
383
385
|
}
|
|
384
|
-
const dz =
|
|
386
|
+
const dz = getSkeletonLocalReferenceTransform(skeleton, toes, jointSet, cache).position.z - getSkeletonLocalReferenceTransform(skeleton, foot, jointSet, cache).position.z;
|
|
385
387
|
if (Math.abs(dz) > 1e-5) {
|
|
386
388
|
score += dz;
|
|
387
389
|
weight++;
|
|
@@ -420,6 +422,13 @@ function getHumanoidRotationCorrection(srcSkeleton, dstSkeleton, srcSignSkeleton
|
|
|
420
422
|
z: determinant * axisZSign
|
|
421
423
|
};
|
|
422
424
|
}
|
|
425
|
+
function getRigReferencePoseForNode(skeleton, node) {
|
|
426
|
+
return skeleton.getRetargetPoseForJoint(node) ?? (node === skeleton.rootJoint ? skeleton.rootBindPose : {
|
|
427
|
+
position: node.position,
|
|
428
|
+
rotation: node.rotation,
|
|
429
|
+
scale: node.scale
|
|
430
|
+
});
|
|
431
|
+
}
|
|
423
432
|
function getRigBindPoseForNode(skeleton, node) {
|
|
424
433
|
return skeleton.getBindPoseForJoint(node) ?? (node === skeleton.rootJoint ? skeleton.rootBindPose : {
|
|
425
434
|
position: node.position,
|
|
@@ -463,11 +472,36 @@ function getHumanoidRootMotionScale(srcSkeleton, dstSkeleton) {
|
|
|
463
472
|
function findTranslationTrack(tracks) {
|
|
464
473
|
return tracks?.find((track)=>track instanceof NodeTranslationTrack) ?? null;
|
|
465
474
|
}
|
|
466
|
-
function
|
|
475
|
+
function isTranslationTrackAnimated(track) {
|
|
476
|
+
const inputs = track.interpolator.inputs;
|
|
477
|
+
const outputs = track.interpolator.outputs;
|
|
478
|
+
const cubic = track.interpolator.mode === 'cubicspline';
|
|
479
|
+
const stride = cubic ? 9 : 3;
|
|
480
|
+
const valueOffset = cubic ? 3 : 0;
|
|
481
|
+
if (inputs.length < 2) {
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
const first = [
|
|
485
|
+
outputs[valueOffset],
|
|
486
|
+
outputs[valueOffset + 1],
|
|
487
|
+
outputs[valueOffset + 2]
|
|
488
|
+
];
|
|
489
|
+
let maxValue = Math.max(1, Math.abs(first[0]), Math.abs(first[1]), Math.abs(first[2]));
|
|
490
|
+
let maxDelta = 0;
|
|
491
|
+
for(let i = 1; i < inputs.length; i++){
|
|
492
|
+
const base = i * stride + valueOffset;
|
|
493
|
+
for(let axis = 0; axis < 3; axis++){
|
|
494
|
+
maxValue = Math.max(maxValue, Math.abs(outputs[base + axis]));
|
|
495
|
+
maxDelta = Math.max(maxDelta, Math.abs(outputs[base + axis] - first[axis]));
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
return maxDelta > maxValue * 1e-5;
|
|
499
|
+
}
|
|
500
|
+
function findAncestorTranslationTrack(clip, node, modelRoot, animatedOnly = false) {
|
|
467
501
|
let current = node.parent;
|
|
468
502
|
while(current){
|
|
469
503
|
const track = findTranslationTrack(clip.tracks.get(current));
|
|
470
|
-
if (track) {
|
|
504
|
+
if (track && (!animatedOnly || isTranslationTrackAnimated(track))) {
|
|
471
505
|
return {
|
|
472
506
|
node: current,
|
|
473
507
|
track
|
|
@@ -667,18 +701,20 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
667
701
|
const remapsByDstNode = new Map();
|
|
668
702
|
const srcJointSet = new Set(srcSkeleton.joints);
|
|
669
703
|
const dstJointSet = new Set(dstSkeleton.joints);
|
|
670
|
-
const
|
|
671
|
-
const
|
|
704
|
+
const srcReferenceRotByNode = new Map();
|
|
705
|
+
const srcBaseRotByNode = new Map();
|
|
706
|
+
const dstReferenceRotByNode = new Map();
|
|
672
707
|
const srcRotationTrackByNode = new Map();
|
|
673
708
|
for(let i = 0; i < srcSkeleton.joints.length; i++){
|
|
674
709
|
const joint = srcSkeleton.joints[i];
|
|
675
|
-
|
|
710
|
+
srcReferenceRotByNode.set(joint, srcSkeleton.retargetPose[i].rotation);
|
|
711
|
+
srcBaseRotByNode.set(joint, srcSkeleton.bindPose[i].rotation);
|
|
676
712
|
const track = findRotationTrack(sourceClip.tracks.get(joint));
|
|
677
713
|
srcRotationTrackByNode.set(joint, track);
|
|
678
714
|
collectTrackTimes(track, times);
|
|
679
715
|
}
|
|
680
716
|
for(let i = 0; i < dstSkeleton.joints.length; i++){
|
|
681
|
-
|
|
717
|
+
dstReferenceRotByNode.set(dstSkeleton.joints[i], dstSkeleton.retargetPose[i].rotation);
|
|
682
718
|
}
|
|
683
719
|
for (const remap of remaps){
|
|
684
720
|
const track = findRotationTrack(sourceClip.tracks.get(remap.srcNode));
|
|
@@ -705,7 +741,7 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
705
741
|
function getSrcBindWorldRot(node) {
|
|
706
742
|
let rot = srcBindWorldRots.get(node);
|
|
707
743
|
if (!rot) {
|
|
708
|
-
rot = (
|
|
744
|
+
rot = (srcReferenceRotByNode.get(node) ?? Quaternion.identity()).clone();
|
|
709
745
|
const parent = node.parent;
|
|
710
746
|
if (parent && srcJointSet.has(parent)) {
|
|
711
747
|
Quaternion.multiply(getSrcBindWorldRot(parent), rot, rot);
|
|
@@ -719,7 +755,7 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
719
755
|
function getDstBindWorldRot(node) {
|
|
720
756
|
let rot = dstBindWorldRots.get(node);
|
|
721
757
|
if (!rot) {
|
|
722
|
-
rot = (
|
|
758
|
+
rot = (dstReferenceRotByNode.get(node) ?? Quaternion.identity()).clone();
|
|
723
759
|
const parent = node.parent;
|
|
724
760
|
if (parent && dstJointSet.has(parent)) {
|
|
725
761
|
Quaternion.multiply(getDstBindWorldRot(parent), rot, rot);
|
|
@@ -738,7 +774,7 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
738
774
|
}
|
|
739
775
|
const parent = node.parent;
|
|
740
776
|
const parentWorldRot = parent && srcJointSet.has(parent) ? getSrcAnimWorldRot(parent, time) : null;
|
|
741
|
-
sampleRotationTrack(srcRotationTrackByNode.get(node) ?? null, time,
|
|
777
|
+
sampleRotationTrack(srcRotationTrackByNode.get(node) ?? null, time, srcBaseRotByNode.get(node) ?? Quaternion.identity(), tmpLocalRot);
|
|
742
778
|
if (parentWorldRot) {
|
|
743
779
|
Quaternion.multiply(parentWorldRot, tmpLocalRot, rot);
|
|
744
780
|
} else {
|
|
@@ -776,7 +812,7 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
776
812
|
}
|
|
777
813
|
let rot = dstAnimWorldRots.get(parent);
|
|
778
814
|
if (!rot) {
|
|
779
|
-
rot = (
|
|
815
|
+
rot = (dstReferenceRotByNode.get(parent) ?? Quaternion.identity()).clone();
|
|
780
816
|
const parentWorldRot = getDstParentAnimWorldRot(parent, time);
|
|
781
817
|
if (parentWorldRot) {
|
|
782
818
|
Quaternion.multiply(parentWorldRot, rot, rot);
|
|
@@ -802,7 +838,7 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
802
838
|
}
|
|
803
839
|
}
|
|
804
840
|
for (const remap of remaps){
|
|
805
|
-
if (!rotationTracksByRemap.get(remap)) {
|
|
841
|
+
if (!rotationTracksByRemap.get(remap) && !srcSkeleton.hasRetargetPose && !dstSkeleton.hasRetargetPose) {
|
|
806
842
|
continue;
|
|
807
843
|
}
|
|
808
844
|
const outputs = new Float32Array(outputsByRemap.get(remap));
|
|
@@ -849,6 +885,8 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
849
885
|
* game clock instead of running on real time.
|
|
850
886
|
* @internal
|
|
851
887
|
*/ _timelineTickers;
|
|
888
|
+
_gpuAnimation;
|
|
889
|
+
_gpuDriver;
|
|
852
890
|
/**
|
|
853
891
|
* Create an AnimationSet controlling the provided model.
|
|
854
892
|
*
|
|
@@ -864,6 +902,40 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
864
902
|
this._skeletons = [];
|
|
865
903
|
this._rigs = [];
|
|
866
904
|
this._timelineTickers = new Set();
|
|
905
|
+
this._gpuAnimation = false;
|
|
906
|
+
this._gpuDriver = null;
|
|
907
|
+
}
|
|
908
|
+
/**
|
|
909
|
+
* Whether skeletal animation may be played from baked poses, evaluated on the GPU where
|
|
910
|
+
* supported. Default false.
|
|
911
|
+
*
|
|
912
|
+
* @remarks
|
|
913
|
+
* Playback, events and the playback API stay the same. While exactly one clip is active, animating
|
|
914
|
+
* only the joints of the model, the joint nodes are left alone and the skinned meshes are posed by
|
|
915
|
+
* {@link AnimationBankTrack}s instead: clips are baked once per model and shared by all its
|
|
916
|
+
* instances, the poses are evaluated in a compute pass on WebGPU, and the meshes stay batchable.
|
|
917
|
+
*
|
|
918
|
+
* Frames that do not meet those conditions are posed on the regular path, without a visible jump:
|
|
919
|
+
* cross fades and other blends of clips, skeleton modifiers such as IK and joint dynamics, GPU
|
|
920
|
+
* cloth, and nodes attached below joints (which follow the joint nodes). In the editor, outside
|
|
921
|
+
* of play mode, animation always takes the regular path.
|
|
922
|
+
*
|
|
923
|
+
* Since joint nodes are not moved while baked poses are played, code reading joint transforms sees
|
|
924
|
+
* them as they were when the baked poses took over.
|
|
925
|
+
*/ get gpuAnimation() {
|
|
926
|
+
return this._gpuAnimation;
|
|
927
|
+
}
|
|
928
|
+
set gpuAnimation(val) {
|
|
929
|
+
if (val !== this._gpuAnimation) {
|
|
930
|
+
this._gpuAnimation = val;
|
|
931
|
+
if (!val) {
|
|
932
|
+
this._gpuDriver?.dispose();
|
|
933
|
+
this._gpuDriver = null;
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
/** Whether the skinned meshes are currently posed from baked poses, see {@link gpuAnimation} */ get isPlayingOnGpu() {
|
|
938
|
+
return !!this._gpuDriver?.active;
|
|
867
939
|
}
|
|
868
940
|
/**
|
|
869
941
|
* Register a callback advanced by {@link update} using the same delta time as the animations.
|
|
@@ -1076,6 +1148,21 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
1076
1148
|
}
|
|
1077
1149
|
}
|
|
1078
1150
|
});
|
|
1151
|
+
if (this._gpuAnimation) {
|
|
1152
|
+
let clip = null;
|
|
1153
|
+
let time = 0;
|
|
1154
|
+
if (this._activeAnimations.size === 1) {
|
|
1155
|
+
const [[k, v]] = this._activeAnimations;
|
|
1156
|
+
clip = k;
|
|
1157
|
+
time = v.currentTime;
|
|
1158
|
+
}
|
|
1159
|
+
this._gpuDriver ??= new GpuAnimationDriver(this);
|
|
1160
|
+
if (this._gpuDriver.update(clip, time)) {
|
|
1161
|
+
// Bank tracks pose the skinned meshes: no joint node to pose, no palette to write
|
|
1162
|
+
this._timelineTickers.forEach((ticker)=>ticker(deltaInSeconds));
|
|
1163
|
+
return;
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1079
1166
|
// Update tracks
|
|
1080
1167
|
this._activeTracks.forEach((v, k)=>{
|
|
1081
1168
|
v.forEach((alltracks)=>{
|
|
@@ -1632,6 +1719,7 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
1632
1719
|
const options = typeof targetNameOrOptions === 'string' ? copyOptions ?? {} : targetNameOrOptions ?? {};
|
|
1633
1720
|
const destName = typeof targetNameOrOptions === 'string' ? targetNameOrOptions : options.targetName ?? animationName;
|
|
1634
1721
|
const rootMotion = options.rootMotion ?? 'scaled';
|
|
1722
|
+
const hipsTranslation = options.hipsTranslation ?? 'scaled';
|
|
1635
1723
|
const jointTranslations = options.jointTranslations ?? 'skip';
|
|
1636
1724
|
const sourceClip = sourceSet.get(animationName);
|
|
1637
1725
|
if (!sourceClip) {
|
|
@@ -1731,16 +1819,19 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
1731
1819
|
const dstHipsNode = dstSkeleton.humanoidJointMapping.body[HumanoidBodyRig.Hips];
|
|
1732
1820
|
const srcRootNode = srcSkeleton.rootJoint ?? srcHipsNode;
|
|
1733
1821
|
const dstRootNode = dstSkeleton.rootJoint ?? dstHipsNode;
|
|
1822
|
+
const hasSeparateHips = srcRootNode !== srcHipsNode && dstRootNode !== dstHipsNode;
|
|
1734
1823
|
const srcRootRot = computeParentChainRotation(srcRootNode, sourceSet.model, srcSkeleton);
|
|
1735
1824
|
const dstRootRot = computeParentChainRotation(dstRootNode, this._model, dstSkeleton);
|
|
1736
|
-
const
|
|
1737
|
-
const
|
|
1738
|
-
const
|
|
1739
|
-
const srcMotionTrack = srcRootTranslationTrack ?? srcAncestorTranslationTrackInfo?.track ??
|
|
1740
|
-
const srcMotionNode = srcRootTranslationTrack ? srcRootNode : srcAncestorTranslationTrackInfo ? srcAncestorTranslationTrackInfo.node :
|
|
1825
|
+
const rootTrackCandidate = findTranslationTrack(sourceClip.tracks.get(srcRootNode));
|
|
1826
|
+
const srcRootTranslationTrack = rootTrackCandidate && (!hasSeparateHips || isTranslationTrackAnimated(rootTrackCandidate)) ? rootTrackCandidate : null;
|
|
1827
|
+
const srcAncestorTranslationTrackInfo = !srcRootTranslationTrack ? findAncestorTranslationTrack(sourceClip, srcRootNode, sourceSet.model, hasSeparateHips) : null;
|
|
1828
|
+
const srcMotionTrack = srcRootTranslationTrack ?? srcAncestorTranslationTrackInfo?.track ?? null;
|
|
1829
|
+
const srcMotionNode = srcRootTranslationTrack ? srcRootNode : srcAncestorTranslationTrackInfo ? srcAncestorTranslationTrackInfo.node : null;
|
|
1741
1830
|
const srcMotionParentRot = srcMotionNode ? computeParentChainRotation(srcMotionNode, sourceSet.model, srcSkeleton) : srcRootRot;
|
|
1742
1831
|
const rootTranslationRotation = Quaternion.multiply(Quaternion.inverse(dstRootRot), srcMotionParentRot);
|
|
1743
|
-
const
|
|
1832
|
+
const resolveTranslationScale = (mode)=>typeof mode === 'number' ? mode : mode === 'none' ? 1 : getHumanoidRootMotionScale(srcSkeleton, dstSkeleton);
|
|
1833
|
+
const rootTranslationScale = rootMotion === 'scaled' ? resolveTranslationScale(options.rootMotionScale) : 1;
|
|
1834
|
+
const hipsTranslationScale = hipsTranslation === 'scaled' ? resolveTranslationScale(options.hipsTranslationScale) : 1;
|
|
1744
1835
|
const jointRemaps = [];
|
|
1745
1836
|
const jointRemapsByDstSkeleton = new Map([
|
|
1746
1837
|
[
|
|
@@ -1842,9 +1933,14 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
1842
1933
|
if (rootMotion === 'locked') {
|
|
1843
1934
|
dstRootTrack = createConstantTranslationTrack(dstRootBindPose.position);
|
|
1844
1935
|
} else if (srcMotionTrack && srcMotionNode) {
|
|
1845
|
-
const srcMotionBindPose =
|
|
1846
|
-
const
|
|
1936
|
+
const srcMotionBindPose = getRigReferencePoseForNode(srcSkeleton, srcMotionNode);
|
|
1937
|
+
const rootMotionAxisLocks = options.lockRootMotionAxes ?? (hasSeparateHips ? {
|
|
1938
|
+
y: true
|
|
1939
|
+
} : undefined);
|
|
1940
|
+
const rootRemap = createTranslationRetargetRemap(srcMotionNode, dstRootNode, srcMotionBindPose.position, dstRootBindPose.position, dstSkeleton.joints.indexOf(dstRootNode), rootTranslationScale, rootTranslationRotation, humanoidRotationCorrection ?? undefined, rootMotionAxisLocks, humanoidRotationCorrection ?? undefined);
|
|
1847
1941
|
dstRootTrack = retargetTranslationTrack(srcMotionTrack, rootRemap);
|
|
1942
|
+
} else {
|
|
1943
|
+
dstRootTrack = createConstantTranslationTrack(dstRootBindPose.position);
|
|
1848
1944
|
}
|
|
1849
1945
|
if (dstRootTrack) {
|
|
1850
1946
|
dstRootTrack.name = srcMotionTrack?.name ?? 'translation';
|
|
@@ -1853,6 +1949,24 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
1853
1949
|
dstClip.addTrack(dstRootNode, dstRootTrack);
|
|
1854
1950
|
}
|
|
1855
1951
|
}
|
|
1952
|
+
if (hasSeparateHips && hipsTranslation !== 'none') {
|
|
1953
|
+
const srcHipsTrack = findTranslationTrack(sourceClip.tracks.get(srcHipsNode)) ?? (srcSkeleton.hasRetargetPose ? createConstantTranslationTrack(getRigBindPoseForNode(srcSkeleton, srcHipsNode).position) : null);
|
|
1954
|
+
const dstHipsBindPose = getRigBindPoseForNode(dstSkeleton, dstHipsNode);
|
|
1955
|
+
let dstHipsTrack = null;
|
|
1956
|
+
if (hipsTranslation === 'locked') {
|
|
1957
|
+
dstHipsTrack = createConstantTranslationTrack(dstHipsBindPose.position);
|
|
1958
|
+
} else if (srcHipsTrack) {
|
|
1959
|
+
const srcHipsReferencePose = getRigReferencePoseForNode(srcSkeleton, srcHipsNode);
|
|
1960
|
+
const hipsRemap = createTranslationRetargetRemap(srcHipsNode, dstHipsNode, srcHipsReferencePose.position, dstHipsBindPose.position, dstSkeleton.joints.indexOf(dstHipsNode), hipsTranslationScale, undefined, humanoidRotationCorrection ?? undefined, undefined, humanoidRotationCorrection ?? undefined);
|
|
1961
|
+
dstHipsTrack = retargetTranslationTrack(srcHipsTrack, hipsRemap);
|
|
1962
|
+
}
|
|
1963
|
+
if (dstHipsTrack) {
|
|
1964
|
+
dstHipsTrack.name = srcHipsTrack?.name ?? 'translation';
|
|
1965
|
+
dstHipsTrack.target = dstHipsNode.persistentId;
|
|
1966
|
+
dstHipsTrack.jointIndex = dstSkeleton.joints.indexOf(dstHipsNode);
|
|
1967
|
+
dstClip.addTrack(dstHipsNode, dstHipsTrack);
|
|
1968
|
+
}
|
|
1969
|
+
}
|
|
1856
1970
|
for (const [srcNode, srcRemaps] of jointRemapsBySrcNode){
|
|
1857
1971
|
const srcTracks = sourceClip.tracks.get(srcNode);
|
|
1858
1972
|
if (!srcTracks) {
|
|
@@ -1865,7 +1979,7 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
1865
1979
|
if (srcTrack instanceof NodeRotationTrack || srcTrack instanceof NodeEulerRotationTrack) {
|
|
1866
1980
|
continue;
|
|
1867
1981
|
} else if (srcTrack instanceof NodeTranslationTrack) {
|
|
1868
|
-
if (srcNode === srcRootNode || srcTrack === srcMotionTrack || jointTranslations !== 'preserve') {
|
|
1982
|
+
if (srcNode === srcRootNode || hasSeparateHips && srcNode === srcHipsNode || srcTrack === srcMotionTrack || jointTranslations !== 'preserve') {
|
|
1869
1983
|
continue;
|
|
1870
1984
|
}
|
|
1871
1985
|
dstTrack = retargetTranslationTrack(srcTrack, remap);
|
|
@@ -2062,6 +2176,8 @@ function bakeHumanoidRotationTracks(sourceClip, srcSkeleton, dstSkeleton, srcRoo
|
|
|
2062
2176
|
* - Clears active animations, tracks, and skeleton references.
|
|
2063
2177
|
*/ onDispose() {
|
|
2064
2178
|
super.onDispose();
|
|
2179
|
+
this._gpuDriver?.dispose();
|
|
2180
|
+
this._gpuDriver = null;
|
|
2065
2181
|
for(const k in this._animations){
|
|
2066
2182
|
this._animations[k].dispose();
|
|
2067
2183
|
}
|