@zephyr3d/scene 0.8.0 → 0.8.1
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/dist/animation/animationset.js +198 -1
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/ik/ccd_solver.js +3 -4
- package/dist/animation/ik/ccd_solver.js.map +1 -1
- package/dist/animation/ik/fabrik_solver.js +3 -4
- package/dist/animation/ik/fabrik_solver.js.map +1 -1
- package/dist/animation/ik/ik_pole_constraint.js +7 -2
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/ik/ik_utils.js +0 -79
- package/dist/animation/ik/ik_utils.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +3 -4
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/spring/spring_bone.js +240 -0
- package/dist/animation/spring/spring_bone.js.map +1 -0
- package/dist/animation/spring/spring_bone_collider.js +198 -0
- package/dist/animation/spring/spring_bone_collider.js.map +1 -0
- package/dist/animation/spring/spring_bone_constraint.js +170 -0
- package/dist/animation/spring/spring_bone_constraint.js.map +1 -0
- package/dist/animation/spring/spring_bone_system.js +328 -0
- package/dist/animation/spring/spring_bone_system.js.map +1 -0
- package/dist/asset/model.js +2 -2
- package/dist/index.d.ts +15 -0
- package/dist/material/mixins/pbr/common.js +20 -17
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/render/gpu_picking.js +100 -0
- package/dist/render/gpu_picking.js.map +1 -0
- package/dist/render/rendergraph/device_pool_allocator.js +41 -0
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -0
- package/dist/render/rendergraph/executor.js +146 -0
- package/dist/render/rendergraph/executor.js.map +1 -0
- package/dist/render/rendergraph/forward_plus_builder.js +414 -0
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +306 -0
- package/dist/render/rendergraph/rendergraph.js.map +1 -0
- package/dist/render/rendergraph/types.js +57 -0
- package/dist/render/rendergraph/types.js.map +1 -0
- package/dist/render/sky_motion_vector.js +85 -0
- package/dist/render/sky_motion_vector.js.map +1 -0
- package/dist/utility/serialization/scene/animation.js +3 -3
- package/dist/utility/serialization/scene/node.js +1 -1
- package/package.json +2 -2
- package/dist/animation/ik/ik_chain_builder.js +0 -68
- package/dist/animation/ik/ik_chain_builder.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
- package/dist/src/animation/animation.js +0 -127
- package/dist/src/animation/animation.js.map +0 -1
- package/dist/src/animation/animationset.js +0 -255
- package/dist/src/animation/animationset.js.map +0 -1
- package/dist/src/animation/animationtrack.js +0 -34
- package/dist/src/animation/animationtrack.js.map +0 -1
- package/dist/src/animation/eulerrotationtrack.js +0 -52
- package/dist/src/animation/eulerrotationtrack.js.map +0 -1
- package/dist/src/animation/morphtarget.js +0 -93
- package/dist/src/animation/morphtarget.js.map +0 -1
- package/dist/src/animation/morphtrack.js +0 -70
- package/dist/src/animation/morphtrack.js.map +0 -1
- package/dist/src/animation/proptrack.js +0 -161
- package/dist/src/animation/proptrack.js.map +0 -1
- package/dist/src/animation/rotationtrack.js +0 -51
- package/dist/src/animation/rotationtrack.js.map +0 -1
- package/dist/src/animation/scaletrack.js +0 -50
- package/dist/src/animation/scaletrack.js.map +0 -1
- package/dist/src/animation/skeleton.js +0 -204
- package/dist/src/animation/skeleton.js.map +0 -1
- package/dist/src/animation/translationtrack.js +0 -50
- package/dist/src/animation/translationtrack.js.map +0 -1
- package/dist/src/app/app.js +0 -129
- package/dist/src/app/app.js.map +0 -1
- package/dist/src/app/inputmgr.js +0 -267
- package/dist/src/app/inputmgr.js.map +0 -1
- package/dist/src/asset/assetmanager.js +0 -404
- package/dist/src/asset/assetmanager.js.map +0 -1
- package/dist/src/asset/builtin.js +0 -337
- package/dist/src/asset/builtin.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds.js +0 -470
- package/dist/src/asset/loaders/dds/dds.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
- package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/helpers.js +0 -327
- package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/src/asset/loaders/hdr/hdr.js +0 -180
- package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
- package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
- package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
- package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
- package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
- package/dist/src/asset/loaders/loader.js +0 -45
- package/dist/src/asset/loaders/loader.js.map +0 -1
- package/dist/src/asset/model.js +0 -414
- package/dist/src/asset/model.js.map +0 -1
- package/dist/src/blitter/bilateralblur.js +0 -221
- package/dist/src/blitter/bilateralblur.js.map +0 -1
- package/dist/src/blitter/blitter.js +0 -390
- package/dist/src/blitter/blitter.js.map +0 -1
- package/dist/src/blitter/box.js +0 -118
- package/dist/src/blitter/box.js.map +0 -1
- package/dist/src/blitter/copy.js +0 -22
- package/dist/src/blitter/copy.js.map +0 -1
- package/dist/src/blitter/gaussianblur.js +0 -228
- package/dist/src/blitter/gaussianblur.js.map +0 -1
- package/dist/src/camera/base.js +0 -92
- package/dist/src/camera/base.js.map +0 -1
- package/dist/src/camera/camera.js +0 -1005
- package/dist/src/camera/camera.js.map +0 -1
- package/dist/src/camera/fps.js +0 -238
- package/dist/src/camera/fps.js.map +0 -1
- package/dist/src/camera/orbit.js +0 -245
- package/dist/src/camera/orbit.js.map +0 -1
- package/dist/src/camera/orthocamera.js +0 -167
- package/dist/src/camera/orthocamera.js.map +0 -1
- package/dist/src/camera/perspectivecamera.js +0 -141
- package/dist/src/camera/perspectivecamera.js.map +0 -1
- package/dist/src/index.js +0 -120
- package/dist/src/index.js.map +0 -1
- package/dist/src/material/blinn.js +0 -81
- package/dist/src/material/blinn.js.map +0 -1
- package/dist/src/material/grassmaterial.js +0 -113
- package/dist/src/material/grassmaterial.js.map +0 -1
- package/dist/src/material/lambert.js +0 -92
- package/dist/src/material/lambert.js.map +0 -1
- package/dist/src/material/material.js +0 -301
- package/dist/src/material/material.js.map +0 -1
- package/dist/src/material/meshmaterial.js +0 -704
- package/dist/src/material/meshmaterial.js.map +0 -1
- package/dist/src/material/mixins/albedocolor.js +0 -76
- package/dist/src/material/mixins/albedocolor.js.map +0 -1
- package/dist/src/material/mixins/foliage.js +0 -47
- package/dist/src/material/mixins/foliage.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
- package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
- package/dist/src/material/mixins/lit.js +0 -476
- package/dist/src/material/mixins/lit.js.map +0 -1
- package/dist/src/material/mixins/pbr/common.js +0 -918
- package/dist/src/material/mixins/pbr/common.js.map +0 -1
- package/dist/src/material/mixins/texture.js +0 -172
- package/dist/src/material/mixins/texture.js.map +0 -1
- package/dist/src/material/mixins/vertexcolor.js +0 -56
- package/dist/src/material/mixins/vertexcolor.js.map +0 -1
- package/dist/src/material/particle.js +0 -178
- package/dist/src/material/particle.js.map +0 -1
- package/dist/src/material/pbrmr.js +0 -97
- package/dist/src/material/pbrmr.js.map +0 -1
- package/dist/src/material/pbrsg.js +0 -97
- package/dist/src/material/pbrsg.js.map +0 -1
- package/dist/src/material/shader/helper.js +0 -1209
- package/dist/src/material/shader/helper.js.map +0 -1
- package/dist/src/material/terrain-cm.js +0 -606
- package/dist/src/material/terrain-cm.js.map +0 -1
- package/dist/src/material/terrainmaterial.js +0 -375
- package/dist/src/material/terrainmaterial.js.map +0 -1
- package/dist/src/material/unlit.js +0 -41
- package/dist/src/material/unlit.js.map +0 -1
- package/dist/src/material/water.js +0 -417
- package/dist/src/material/water.js.map +0 -1
- package/dist/src/posteffect/bloom.js +0 -361
- package/dist/src/posteffect/bloom.js.map +0 -1
- package/dist/src/posteffect/compositor.js +0 -226
- package/dist/src/posteffect/compositor.js.map +0 -1
- package/dist/src/posteffect/fxaa.js +0 -273
- package/dist/src/posteffect/fxaa.js.map +0 -1
- package/dist/src/posteffect/grayscale.js +0 -69
- package/dist/src/posteffect/grayscale.js.map +0 -1
- package/dist/src/posteffect/motionblur.js +0 -96
- package/dist/src/posteffect/motionblur.js.map +0 -1
- package/dist/src/posteffect/posteffect.js +0 -126
- package/dist/src/posteffect/posteffect.js.map +0 -1
- package/dist/src/posteffect/sao.js +0 -324
- package/dist/src/posteffect/sao.js.map +0 -1
- package/dist/src/posteffect/ssr.js +0 -489
- package/dist/src/posteffect/ssr.js.map +0 -1
- package/dist/src/posteffect/taa.js +0 -172
- package/dist/src/posteffect/taa.js.map +0 -1
- package/dist/src/posteffect/tonemap.js +0 -94
- package/dist/src/posteffect/tonemap.js.map +0 -1
- package/dist/src/render/abuffer_oit.js +0 -361
- package/dist/src/render/abuffer_oit.js.map +0 -1
- package/dist/src/render/clipmap.js +0 -851
- package/dist/src/render/clipmap.js.map +0 -1
- package/dist/src/render/cluster_light.js +0 -333
- package/dist/src/render/cluster_light.js.map +0 -1
- package/dist/src/render/cull_visitor.js +0 -187
- package/dist/src/render/cull_visitor.js.map +0 -1
- package/dist/src/render/depthpass.js +0 -68
- package/dist/src/render/depthpass.js.map +0 -1
- package/dist/src/render/drawable_mixin.js +0 -227
- package/dist/src/render/drawable_mixin.js.map +0 -1
- package/dist/src/render/envlight.js +0 -463
- package/dist/src/render/envlight.js.map +0 -1
- package/dist/src/render/fbm_wavegenerator.js +0 -251
- package/dist/src/render/fbm_wavegenerator.js.map +0 -1
- package/dist/src/render/fft_wavegenerator.js +0 -1006
- package/dist/src/render/fft_wavegenerator.js.map +0 -1
- package/dist/src/render/fullscreenquad.js +0 -38
- package/dist/src/render/fullscreenquad.js.map +0 -1
- package/dist/src/render/gerstner_wavegenerator.js +0 -314
- package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
- package/dist/src/render/globalbindgroup_allocator.js +0 -60
- package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
- package/dist/src/render/hzb.js +0 -273
- package/dist/src/render/hzb.js.map +0 -1
- package/dist/src/render/lightpass.js +0 -172
- package/dist/src/render/lightpass.js.map +0 -1
- package/dist/src/render/objectcolorpass.js +0 -51
- package/dist/src/render/objectcolorpass.js.map +0 -1
- package/dist/src/render/primitive.js +0 -364
- package/dist/src/render/primitive.js.map +0 -1
- package/dist/src/render/render_queue.js +0 -467
- package/dist/src/render/render_queue.js.map +0 -1
- package/dist/src/render/renderbundle_wrapper.js +0 -152
- package/dist/src/render/renderbundle_wrapper.js.map +0 -1
- package/dist/src/render/renderer.js +0 -455
- package/dist/src/render/renderer.js.map +0 -1
- package/dist/src/render/renderpass.js +0 -200
- package/dist/src/render/renderpass.js.map +0 -1
- package/dist/src/render/shadowmap_pass.js +0 -56
- package/dist/src/render/shadowmap_pass.js.map +0 -1
- package/dist/src/render/sky.js +0 -1103
- package/dist/src/render/sky.js.map +0 -1
- package/dist/src/render/weightedblended_oit.js +0 -168
- package/dist/src/render/weightedblended_oit.js.map +0 -1
- package/dist/src/scene/batchgroup.js +0 -162
- package/dist/src/scene/batchgroup.js.map +0 -1
- package/dist/src/scene/environment.js +0 -209
- package/dist/src/scene/environment.js.map +0 -1
- package/dist/src/scene/graph_node.js +0 -72
- package/dist/src/scene/graph_node.js.map +0 -1
- package/dist/src/scene/light.js +0 -416
- package/dist/src/scene/light.js.map +0 -1
- package/dist/src/scene/mesh.js +0 -341
- package/dist/src/scene/mesh.js.map +0 -1
- package/dist/src/scene/octree.js +0 -649
- package/dist/src/scene/octree.js.map +0 -1
- package/dist/src/scene/particlesys.js +0 -738
- package/dist/src/scene/particlesys.js.map +0 -1
- package/dist/src/scene/raycast_visitor.js +0 -103
- package/dist/src/scene/raycast_visitor.js.map +0 -1
- package/dist/src/scene/scene.js +0 -284
- package/dist/src/scene/scene.js.map +0 -1
- package/dist/src/scene/scene_node.js +0 -732
- package/dist/src/scene/scene_node.js.map +0 -1
- package/dist/src/scene/terrain/grass.js +0 -278
- package/dist/src/scene/terrain/grass.js.map +0 -1
- package/dist/src/scene/terrain/heightfield.js +0 -475
- package/dist/src/scene/terrain/heightfield.js.map +0 -1
- package/dist/src/scene/terrain/patch.js +0 -530
- package/dist/src/scene/terrain/patch.js.map +0 -1
- package/dist/src/scene/terrain/quadtree.js +0 -461
- package/dist/src/scene/terrain/quadtree.js.map +0 -1
- package/dist/src/scene/terrain/terrain.js +0 -246
- package/dist/src/scene/terrain/terrain.js.map +0 -1
- package/dist/src/scene/terrain-cm/grass.js +0 -594
- package/dist/src/scene/terrain-cm/grass.js.map +0 -1
- package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
- package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
- package/dist/src/scene/water.js +0 -374
- package/dist/src/scene/water.js.map +0 -1
- package/dist/src/shaders/atmosphere.js +0 -957
- package/dist/src/shaders/atmosphere.js.map +0 -1
- package/dist/src/shaders/fog.js +0 -112
- package/dist/src/shaders/fog.js.map +0 -1
- package/dist/src/shaders/misc.js +0 -266
- package/dist/src/shaders/misc.js.map +0 -1
- package/dist/src/shaders/noise.js +0 -222
- package/dist/src/shaders/noise.js.map +0 -1
- package/dist/src/shaders/pbr.js +0 -51
- package/dist/src/shaders/pbr.js.map +0 -1
- package/dist/src/shaders/shadow.js +0 -636
- package/dist/src/shaders/shadow.js.map +0 -1
- package/dist/src/shaders/ssr.js +0 -490
- package/dist/src/shaders/ssr.js.map +0 -1
- package/dist/src/shaders/temporal.js +0 -215
- package/dist/src/shaders/temporal.js.map +0 -1
- package/dist/src/shaders/water.js +0 -756
- package/dist/src/shaders/water.js.map +0 -1
- package/dist/src/shadow/esm.js +0 -237
- package/dist/src/shadow/esm.js.map +0 -1
- package/dist/src/shadow/pcf_opt.js +0 -181
- package/dist/src/shadow/pcf_opt.js.map +0 -1
- package/dist/src/shadow/pcf_pd.js +0 -189
- package/dist/src/shadow/pcf_pd.js.map +0 -1
- package/dist/src/shadow/shader.js +0 -37
- package/dist/src/shadow/shader.js.map +0 -1
- package/dist/src/shadow/shadow_impl.js +0 -15
- package/dist/src/shadow/shadow_impl.js.map +0 -1
- package/dist/src/shadow/shadowmapper.js +0 -790
- package/dist/src/shadow/shadowmapper.js.map +0 -1
- package/dist/src/shadow/ssm.js +0 -159
- package/dist/src/shadow/ssm.js.map +0 -1
- package/dist/src/shadow/vsm.js +0 -297
- package/dist/src/shadow/vsm.js.map +0 -1
- package/dist/src/shapes/box.js +0 -386
- package/dist/src/shapes/box.js.map +0 -1
- package/dist/src/shapes/cylinder.js +0 -125
- package/dist/src/shapes/cylinder.js.map +0 -1
- package/dist/src/shapes/plane.js +0 -88
- package/dist/src/shapes/plane.js.map +0 -1
- package/dist/src/shapes/shape.js +0 -87
- package/dist/src/shapes/shape.js.map +0 -1
- package/dist/src/shapes/sphere.js +0 -114
- package/dist/src/shapes/sphere.js.map +0 -1
- package/dist/src/shapes/tetrahedron.js +0 -188
- package/dist/src/shapes/tetrahedron.js.map +0 -1
- package/dist/src/shapes/torus.js +0 -111
- package/dist/src/shapes/torus.js.map +0 -1
- package/dist/src/utility/aabbtree.js +0 -400
- package/dist/src/utility/aabbtree.js.map +0 -1
- package/dist/src/utility/bounding_volume.js +0 -29
- package/dist/src/utility/bounding_volume.js.map +0 -1
- package/dist/src/utility/debug.js +0 -28
- package/dist/src/utility/debug.js.map +0 -1
- package/dist/src/utility/draco/decoder.js +0 -116
- package/dist/src/utility/draco/decoder.js.map +0 -1
- package/dist/src/utility/misc.js +0 -105
- package/dist/src/utility/misc.js.map +0 -1
- package/dist/src/utility/panorama.js +0 -163
- package/dist/src/utility/panorama.js.map +0 -1
- package/dist/src/utility/pmrem.js +0 -354
- package/dist/src/utility/pmrem.js.map +0 -1
- package/dist/src/utility/rendermipmap.js +0 -115
- package/dist/src/utility/rendermipmap.js.map +0 -1
- package/dist/src/utility/serialization/json.js +0 -402
- package/dist/src/utility/serialization/json.js.map +0 -1
- package/dist/src/utility/serialization/manager.js +0 -623
- package/dist/src/utility/serialization/manager.js.map +0 -1
- package/dist/src/utility/serialization/scene/animation.js +0 -248
- package/dist/src/utility/serialization/scene/animation.js.map +0 -1
- package/dist/src/utility/serialization/scene/batch.js +0 -59
- package/dist/src/utility/serialization/scene/batch.js.map +0 -1
- package/dist/src/utility/serialization/scene/camera.js +0 -790
- package/dist/src/utility/serialization/scene/camera.js.map +0 -1
- package/dist/src/utility/serialization/scene/common.js +0 -222
- package/dist/src/utility/serialization/scene/common.js.map +0 -1
- package/dist/src/utility/serialization/scene/light.js +0 -575
- package/dist/src/utility/serialization/scene/light.js.map +0 -1
- package/dist/src/utility/serialization/scene/material.js +0 -1111
- package/dist/src/utility/serialization/scene/material.js.map +0 -1
- package/dist/src/utility/serialization/scene/mesh.js +0 -148
- package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
- package/dist/src/utility/serialization/scene/misc.js +0 -39
- package/dist/src/utility/serialization/scene/misc.js.map +0 -1
- package/dist/src/utility/serialization/scene/node.js +0 -451
- package/dist/src/utility/serialization/scene/node.js.map +0 -1
- package/dist/src/utility/serialization/scene/particle.js +0 -425
- package/dist/src/utility/serialization/scene/particle.js.map +0 -1
- package/dist/src/utility/serialization/scene/primitive.js +0 -692
- package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
- package/dist/src/utility/serialization/scene/scene.js +0 -704
- package/dist/src/utility/serialization/scene/scene.js.map +0 -1
- package/dist/src/utility/serialization/scene/terrain.js +0 -488
- package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
- package/dist/src/utility/serialization/scene/water.js +0 -465
- package/dist/src/utility/serialization/scene/water.js.map +0 -1
- package/dist/src/utility/shprojector.js +0 -297
- package/dist/src/utility/shprojector.js.map +0 -1
- package/dist/src/utility/textures/ggxlut.js +0 -213
- package/dist/src/utility/textures/ggxlut.js.map +0 -1
- package/dist/src/utility/textures/gradientnoise.js +0 -62
- package/dist/src/utility/textures/gradientnoise.js.map +0 -1
- package/dist/src/utility/textures/randomnoise.js +0 -41
- package/dist/src/utility/textures/randomnoise.js.map +0 -1
- package/dist/src/values.js +0 -162
- package/dist/src/values.js.map +0 -1
- package/dist/utility/blueprint/material/common.js +0 -7
- package/dist/utility/blueprint/material/common.js.map +0 -1
- package/dist/utility/serialization/blueprint/constants.js +0 -255
- package/dist/utility/serialization/blueprint/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/constants.js +0 -203
- package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/texture.js +0 -165
- package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"morphtarget.js","sources":["../../../src/animation/morphtarget.ts"],"sourcesContent":["import { PBArrayTypeInfo, PBPrimitiveType, PBPrimitiveTypeInfo, PBStructTypeInfo } from '@zephyr3d/device';\r\nimport { Application } from '../app/app';\r\nimport type { AssetSubMeshData } from '../asset';\r\nimport {\r\n MAX_MORPH_ATTRIBUTES,\r\n MAX_MORPH_TARGETS,\r\n MORPH_ATTRIBUTE_VECTOR_COUNT,\r\n MORPH_WEIGHTS_VECTOR_COUNT\r\n} from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\n\r\nexport function processMorphData(subMesh: AssetSubMeshData, morphWeights: number[]) {\r\n const device = Application.instance.device;\r\n const numTargets = subMesh.numTargets;\r\n if (numTargets === 0) {\r\n return;\r\n }\r\n const attributes = Object.getOwnPropertyNames(subMesh.targets);\r\n const numVertices = subMesh.primitive.get().getNumVertices();\r\n const weightsAndOffsets = new Float32Array(4 + MAX_MORPH_TARGETS + MAX_MORPH_ATTRIBUTES);\r\n for (let i = 0; i < numTargets; i++) {\r\n weightsAndOffsets[4 + i] = morphWeights?.[i] ?? 0;\r\n }\r\n const textureSize = Math.ceil(Math.sqrt(numVertices * attributes.length * numTargets));\r\n if (textureSize > device.getDeviceCaps().textureCaps.maxTextureSize) {\r\n // TODO: reduce morph attributes\r\n throw new Error(`Morph target data too large`);\r\n }\r\n weightsAndOffsets[0] = textureSize;\r\n weightsAndOffsets[1] = textureSize;\r\n weightsAndOffsets[2] = numVertices;\r\n weightsAndOffsets[3] = numTargets;\r\n let offset = 0;\r\n const textureData = new Float32Array(textureSize * textureSize * 4);\r\n for (let attrib = 0; attrib < MAX_MORPH_ATTRIBUTES; attrib++) {\r\n const index = attributes.indexOf(String(attrib));\r\n if (index < 0) {\r\n weightsAndOffsets[4 + MAX_MORPH_TARGETS + attrib] = -1;\r\n continue;\r\n }\r\n weightsAndOffsets[4 + MAX_MORPH_TARGETS + attrib] = offset >> 2;\r\n const info = subMesh.targets[attrib];\r\n if (info.data.length !== numTargets) {\r\n console.error(`Invalid morph target data`);\r\n return;\r\n }\r\n for (let t = 0; t < numTargets; t++) {\r\n const data = info.data[t];\r\n for (let i = 0; i < numVertices; i++) {\r\n for (let j = 0; j < 4; j++) {\r\n textureData[offset++] = j < info.numComponents ? data[i * info.numComponents + j] : 1;\r\n }\r\n }\r\n }\r\n }\r\n const morphTexture = device.createTexture2D('rgba32f', textureSize, textureSize, {\r\n samplerOptions: {\r\n minFilter: 'nearest',\r\n magFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n });\r\n morphTexture.update(textureData, 0, 0, textureSize, textureSize);\r\n const bufferType = new PBStructTypeInfo('dummy', 'std140', [\r\n {\r\n name: ShaderHelper.getMorphInfoUniformName(),\r\n type: new PBArrayTypeInfo(\r\n new PBPrimitiveTypeInfo(PBPrimitiveType.F32VEC4),\r\n 1 + MORPH_WEIGHTS_VECTOR_COUNT + MORPH_ATTRIBUTE_VECTOR_COUNT\r\n )\r\n }\r\n ]);\r\n const morphUniformBuffer = device.createStructuredBuffer(\r\n bufferType,\r\n {\r\n usage: 'uniform'\r\n },\r\n weightsAndOffsets\r\n );\r\n const morphBoundingBox = new BoundingBox();\r\n calculateMorphBoundingBox(\r\n morphBoundingBox,\r\n subMesh.targetBox,\r\n weightsAndOffsets.subarray(4, 4 + MAX_MORPH_TARGETS),\r\n numTargets\r\n );\r\n const meshAABB = subMesh.mesh.getBoundingVolume().toAABB();\r\n morphBoundingBox.minPoint.addBy(meshAABB.minPoint);\r\n morphBoundingBox.maxPoint.addBy(meshAABB.maxPoint);\r\n\r\n subMesh.mesh.setMorphData(morphTexture);\r\n subMesh.mesh.setMorphInfo(morphUniformBuffer);\r\n subMesh.mesh.setAnimatedBoundingBox(morphBoundingBox);\r\n}\r\n\r\n/** @internal */\r\nexport function calculateMorphBoundingBox(\r\n morphBoundingBox: BoundingBox,\r\n keyframeBoundingBox: BoundingBox[],\r\n weights: Float32Array,\r\n numTargets: number\r\n) {\r\n morphBoundingBox.minPoint.setXYZ(0, 0, 0);\r\n morphBoundingBox.maxPoint.setXYZ(0, 0, 0);\r\n for (let i = 0; i < numTargets; i++) {\r\n const weight = weights[i];\r\n const keyframeBox = keyframeBoundingBox[i];\r\n morphBoundingBox.minPoint.x += keyframeBox.minPoint.x * weight;\r\n morphBoundingBox.minPoint.y += keyframeBox.minPoint.y * weight;\r\n morphBoundingBox.minPoint.y += keyframeBox.minPoint.z * weight;\r\n morphBoundingBox.maxPoint.x += keyframeBox.maxPoint.x * weight;\r\n morphBoundingBox.maxPoint.y += keyframeBox.maxPoint.y * weight;\r\n morphBoundingBox.maxPoint.y += keyframeBox.maxPoint.z * weight;\r\n }\r\n}\r\n"],"names":["processMorphData","subMesh","morphWeights","device","Application","instance","numTargets","attributes","Object","getOwnPropertyNames","targets","numVertices","primitive","get","getNumVertices","weightsAndOffsets","Float32Array","MAX_MORPH_TARGETS","MAX_MORPH_ATTRIBUTES","i","textureSize","Math","ceil","sqrt","length","getDeviceCaps","textureCaps","maxTextureSize","Error","offset","textureData","attrib","index","indexOf","String","info","data","console","error","t","j","numComponents","morphTexture","createTexture2D","samplerOptions","minFilter","magFilter","mipFilter","update","bufferType","PBStructTypeInfo","name","ShaderHelper","getMorphInfoUniformName","type","PBArrayTypeInfo","PBPrimitiveTypeInfo","PBPrimitiveType","F32VEC4","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_VECTOR_COUNT","morphUniformBuffer","createStructuredBuffer","usage","morphBoundingBox","BoundingBox","calculateMorphBoundingBox","targetBox","subarray","meshAABB","mesh","getBoundingVolume","toAABB","minPoint","addBy","maxPoint","setMorphData","setMorphInfo","setAnimatedBoundingBox","keyframeBoundingBox","weights","setXYZ","weight","keyframeBox","x","y","z"],"mappings":"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"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { AnimationTrack } from './animationtrack.js';
|
|
2
|
-
import { BoundingBox } from '../utility/bounding_volume.js';
|
|
3
|
-
import { MAX_MORPH_TARGETS } from '../values.js';
|
|
4
|
-
import { calculateMorphBoundingBox } from './morphtarget.js';
|
|
5
|
-
import { Vector3 } from '@zephyr3d/base';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Morph target track
|
|
9
|
-
* @public
|
|
10
|
-
*/ class MorphTargetTrack extends AnimationTrack {
|
|
11
|
-
_state;
|
|
12
|
-
_originBox;
|
|
13
|
-
_boundingBox;
|
|
14
|
-
_defaultWeights;
|
|
15
|
-
_interpolator;
|
|
16
|
-
/**
|
|
17
|
-
* Create an instance of MorphTargetTrack
|
|
18
|
-
*/ constructor(assetTrack, subMesh, embedded){
|
|
19
|
-
super(embedded);
|
|
20
|
-
this._interpolator = assetTrack.interpolator;
|
|
21
|
-
this._state = {
|
|
22
|
-
numTargets: assetTrack.interpolator.stride,
|
|
23
|
-
boundingBox: new BoundingBox(),
|
|
24
|
-
weights: new Float32Array(MAX_MORPH_TARGETS)
|
|
25
|
-
};
|
|
26
|
-
this._boundingBox = subMesh.targetBox;
|
|
27
|
-
this._originBox = subMesh.mesh.getBoundingVolume().toAABB();
|
|
28
|
-
this._defaultWeights = assetTrack.defaultMorphWeights ?? Array.from({
|
|
29
|
-
length: this._state.numTargets
|
|
30
|
-
}).map(()=>0);
|
|
31
|
-
}
|
|
32
|
-
calculateState(target, currentTime) {
|
|
33
|
-
this._interpolator.interpolate(currentTime, this._state.weights);
|
|
34
|
-
calculateMorphBoundingBox(this._state.boundingBox, this._boundingBox, this._state.weights, this._state.numTargets);
|
|
35
|
-
return this._state;
|
|
36
|
-
}
|
|
37
|
-
applyState(node, state) {
|
|
38
|
-
node.getMorphInfo().bufferSubData(4 * 4, state.weights);
|
|
39
|
-
state.boundingBox.minPoint.addBy(this._originBox.minPoint);
|
|
40
|
-
state.boundingBox.maxPoint.addBy(this._originBox.maxPoint);
|
|
41
|
-
node.setAnimatedBoundingBox(state.boundingBox);
|
|
42
|
-
}
|
|
43
|
-
mixState(a, b, t) {
|
|
44
|
-
const state = {
|
|
45
|
-
weights: new Float32Array(a.numTargets),
|
|
46
|
-
boundingBox: new BoundingBox(),
|
|
47
|
-
numTargets: a.numTargets
|
|
48
|
-
};
|
|
49
|
-
for(let i = 0; i < a.numTargets; i++){
|
|
50
|
-
state.weights[i] = a.weights[i] + (b.weights[i] - a.weights[i]) * t;
|
|
51
|
-
state.boundingBox.minPoint = Vector3.min(a.boundingBox.minPoint, b.boundingBox.minPoint);
|
|
52
|
-
state.boundingBox.maxPoint = Vector3.max(a.boundingBox.maxPoint, b.boundingBox.maxPoint);
|
|
53
|
-
}
|
|
54
|
-
return state;
|
|
55
|
-
}
|
|
56
|
-
getBlendId() {
|
|
57
|
-
return 'node-morph';
|
|
58
|
-
}
|
|
59
|
-
getDuration() {
|
|
60
|
-
return this._interpolator.maxTime;
|
|
61
|
-
}
|
|
62
|
-
reset(node) {
|
|
63
|
-
// apply default weights
|
|
64
|
-
this._state.weights.set(this._defaultWeights);
|
|
65
|
-
this.applyState(node, this._state);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export { MorphTargetTrack };
|
|
70
|
-
//# sourceMappingURL=morphtrack.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"morphtrack.js","sources":["../../../src/animation/morphtrack.ts"],"sourcesContent":["import { AnimationTrack } from './animationtrack';\nimport type { Mesh, SceneNode } from '../scene';\nimport type { AssetAnimationTrack, AssetSubMeshData } from '../asset';\nimport { BoundingBox } from '../utility/bounding_volume';\nimport { MAX_MORPH_TARGETS } from '../values';\nimport { calculateMorphBoundingBox } from './morphtarget';\nimport type { AABB, Interpolator } from '@zephyr3d/base';\nimport { Vector3 } from '@zephyr3d/base';\n\n/** Morph animation state */\nexport type MorphState = {\n numTargets: number;\n weights: Float32Array<ArrayBuffer>;\n boundingBox: BoundingBox;\n};\n\n/**\n * Morph target track\n * @public\n */\nexport class MorphTargetTrack extends AnimationTrack<MorphState> {\n private readonly _state: MorphState;\n private readonly _originBox: AABB;\n private readonly _boundingBox: BoundingBox[];\n private readonly _defaultWeights: number[];\n private readonly _interpolator: Interpolator;\n /**\n * Create an instance of MorphTargetTrack\n */\n constructor(assetTrack: AssetAnimationTrack, subMesh: AssetSubMeshData, embedded?: boolean) {\n super(embedded);\n this._interpolator = assetTrack.interpolator;\n this._state = {\n numTargets: assetTrack.interpolator.stride,\n boundingBox: new BoundingBox(),\n weights: new Float32Array(MAX_MORPH_TARGETS)\n };\n this._boundingBox = subMesh.targetBox;\n this._originBox = subMesh.mesh.getBoundingVolume().toAABB();\n this._defaultWeights =\n assetTrack.defaultMorphWeights ?? Array.from({ length: this._state.numTargets }).map(() => 0);\n }\n calculateState(target: object, currentTime: number): MorphState {\n this._interpolator.interpolate(currentTime, this._state.weights);\n calculateMorphBoundingBox(\n this._state.boundingBox,\n this._boundingBox,\n this._state.weights,\n this._state.numTargets\n );\n return this._state;\n }\n applyState(node: SceneNode, state: MorphState) {\n (node as Mesh).getMorphInfo().bufferSubData(4 * 4, state.weights);\n state.boundingBox.minPoint.addBy(this._originBox.minPoint);\n state.boundingBox.maxPoint.addBy(this._originBox.maxPoint);\n (node as Mesh).setAnimatedBoundingBox(state.boundingBox);\n }\n mixState(a: MorphState, b: MorphState, t: number): MorphState {\n const state: MorphState = {\n weights: new Float32Array(a.numTargets),\n boundingBox: new BoundingBox(),\n numTargets: a.numTargets\n };\n for (let i = 0; i < a.numTargets; i++) {\n state.weights[i] = a.weights[i] + (b.weights[i] - a.weights[i]) * t;\n state.boundingBox.minPoint = Vector3.min(a.boundingBox.minPoint, b.boundingBox.minPoint);\n state.boundingBox.maxPoint = Vector3.max(a.boundingBox.maxPoint, b.boundingBox.maxPoint);\n }\n return state;\n }\n getBlendId(): unknown {\n return 'node-morph';\n }\n getDuration(): number {\n return this._interpolator.maxTime;\n }\n reset(node: SceneNode) {\n // apply default weights\n this._state.weights.set(this._defaultWeights);\n this.applyState(node, this._state);\n }\n}\n"],"names":["MorphTargetTrack","AnimationTrack","_state","_originBox","_boundingBox","_defaultWeights","_interpolator","assetTrack","subMesh","embedded","interpolator","numTargets","stride","boundingBox","BoundingBox","weights","Float32Array","MAX_MORPH_TARGETS","targetBox","mesh","getBoundingVolume","toAABB","defaultMorphWeights","Array","from","length","map","calculateState","target","currentTime","interpolate","calculateMorphBoundingBox","applyState","node","state","getMorphInfo","bufferSubData","minPoint","addBy","maxPoint","setAnimatedBoundingBox","mixState","a","b","t","i","Vector3","min","max","getBlendId","getDuration","maxTime","reset","set"],"mappings":"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"}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { AnimationTrack } from './animationtrack.js';
|
|
2
|
-
import { Interpolator } from '@zephyr3d/base';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Translate animation track
|
|
6
|
-
* @public
|
|
7
|
-
*/ class PropertyTrack extends AnimationTrack {
|
|
8
|
-
_state;
|
|
9
|
-
_stateAlpha;
|
|
10
|
-
_target;
|
|
11
|
-
_prop;
|
|
12
|
-
_count;
|
|
13
|
-
_interpolator;
|
|
14
|
-
_interpolatorAlpha;
|
|
15
|
-
/**
|
|
16
|
-
* Create an instance of TranslationTrack from keyframe values
|
|
17
|
-
* @param prop - Property to be animated
|
|
18
|
-
*/ constructor(prop, value, embedded){
|
|
19
|
-
super(embedded);
|
|
20
|
-
this._prop = prop;
|
|
21
|
-
this._target = '';
|
|
22
|
-
this._state = {
|
|
23
|
-
num: [
|
|
24
|
-
0,
|
|
25
|
-
0,
|
|
26
|
-
0,
|
|
27
|
-
0
|
|
28
|
-
]
|
|
29
|
-
};
|
|
30
|
-
this._stateAlpha = null;
|
|
31
|
-
this._interpolator = null;
|
|
32
|
-
this._interpolatorAlpha = null;
|
|
33
|
-
if (value) {
|
|
34
|
-
this._state.num = value.slice();
|
|
35
|
-
}
|
|
36
|
-
switch(this._prop.type){
|
|
37
|
-
case 'float':
|
|
38
|
-
this._count = 1;
|
|
39
|
-
this._interpolator = new Interpolator('cubicspline-natural', 'number', new Float32Array([
|
|
40
|
-
0,
|
|
41
|
-
1
|
|
42
|
-
]), new Float32Array([
|
|
43
|
-
this._state.num[0],
|
|
44
|
-
this._state.num[0]
|
|
45
|
-
]));
|
|
46
|
-
break;
|
|
47
|
-
case 'vec2':
|
|
48
|
-
this._count = 2;
|
|
49
|
-
this._interpolator = new Interpolator('cubicspline-natural', 'vec2', new Float32Array([
|
|
50
|
-
0,
|
|
51
|
-
1
|
|
52
|
-
]), new Float32Array([
|
|
53
|
-
...this._state.num.slice(0, 2),
|
|
54
|
-
...this._state.num.slice(0, 2)
|
|
55
|
-
]));
|
|
56
|
-
break;
|
|
57
|
-
case 'rgb':
|
|
58
|
-
case 'vec3':
|
|
59
|
-
this._count = 3;
|
|
60
|
-
this._interpolator = new Interpolator('cubicspline-natural', 'vec3', new Float32Array([
|
|
61
|
-
0,
|
|
62
|
-
1
|
|
63
|
-
]), new Float32Array([
|
|
64
|
-
...this._state.num.slice(0, 3),
|
|
65
|
-
...this._state.num.slice(0, 3)
|
|
66
|
-
]));
|
|
67
|
-
break;
|
|
68
|
-
case 'vec4':
|
|
69
|
-
this._count = 4;
|
|
70
|
-
this._interpolator = new Interpolator('cubicspline-natural', 'vec4', new Float32Array([
|
|
71
|
-
0,
|
|
72
|
-
1
|
|
73
|
-
]), new Float32Array([
|
|
74
|
-
...this._state.num.slice(0, 4),
|
|
75
|
-
...this._state.num.slice(0, 4)
|
|
76
|
-
]));
|
|
77
|
-
break;
|
|
78
|
-
case 'rgba':
|
|
79
|
-
this._count = 4;
|
|
80
|
-
this._interpolator = new Interpolator('linear', 'vec3', new Float32Array([
|
|
81
|
-
0,
|
|
82
|
-
1
|
|
83
|
-
]), new Float32Array([
|
|
84
|
-
...this._state.num.slice(0, 3),
|
|
85
|
-
...this._state.num.slice(0, 3)
|
|
86
|
-
]));
|
|
87
|
-
this._interpolatorAlpha = new Interpolator('linear', 'number', new Float32Array([
|
|
88
|
-
0,
|
|
89
|
-
1
|
|
90
|
-
]), new Float32Array([
|
|
91
|
-
this._state.num[3],
|
|
92
|
-
this._state.num[3]
|
|
93
|
-
]));
|
|
94
|
-
this._stateAlpha = {
|
|
95
|
-
num: [
|
|
96
|
-
this._state.num[3]
|
|
97
|
-
]
|
|
98
|
-
};
|
|
99
|
-
break;
|
|
100
|
-
default:
|
|
101
|
-
throw new Error(`Property '${this._prop.name}' cannot be animated`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
get target() {
|
|
105
|
-
return this._target;
|
|
106
|
-
}
|
|
107
|
-
set target(val) {
|
|
108
|
-
this._target = val;
|
|
109
|
-
}
|
|
110
|
-
get interpolator() {
|
|
111
|
-
return this._interpolator;
|
|
112
|
-
}
|
|
113
|
-
set interpolator(interpolator) {
|
|
114
|
-
this._interpolator = interpolator;
|
|
115
|
-
}
|
|
116
|
-
get interpolatorAlpha() {
|
|
117
|
-
return this._interpolatorAlpha;
|
|
118
|
-
}
|
|
119
|
-
set interpolatorAlpha(interpolator) {
|
|
120
|
-
this._interpolatorAlpha = interpolator ?? null;
|
|
121
|
-
if (!this._stateAlpha && this._interpolatorAlpha) {
|
|
122
|
-
this._stateAlpha = {
|
|
123
|
-
num: [
|
|
124
|
-
0
|
|
125
|
-
]
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
calculateState(target, currentTime) {
|
|
130
|
-
this._interpolator.interpolate(currentTime, this._state.num);
|
|
131
|
-
if (this._interpolatorAlpha) {
|
|
132
|
-
this._interpolatorAlpha.interpolate(currentTime, this._stateAlpha.num);
|
|
133
|
-
this._state.num[3] = this._stateAlpha.num[0];
|
|
134
|
-
}
|
|
135
|
-
return this._state;
|
|
136
|
-
}
|
|
137
|
-
applyState(target, state) {
|
|
138
|
-
this._prop.set.call(target, state);
|
|
139
|
-
}
|
|
140
|
-
mixState(a, b, t) {
|
|
141
|
-
const v = [];
|
|
142
|
-
for(let i = 0; i < this._count; i++){
|
|
143
|
-
v[i] = a.num[i] + t * (b.num[i] - a.num[i]);
|
|
144
|
-
}
|
|
145
|
-
return {
|
|
146
|
-
num: v
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
getBlendId() {
|
|
150
|
-
return this._prop;
|
|
151
|
-
}
|
|
152
|
-
getDuration() {
|
|
153
|
-
return this._interpolator.maxTime;
|
|
154
|
-
}
|
|
155
|
-
getProp() {
|
|
156
|
-
return this._prop;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export { PropertyTrack };
|
|
161
|
-
//# sourceMappingURL=proptrack.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proptrack.js","sources":["../../../src/animation/proptrack.ts"],"sourcesContent":["import { AnimationTrack } from './animationtrack';\r\nimport type { PropertyAccessor, PropertyValue } from '../utility';\r\nimport { Interpolator } from '@zephyr3d/base';\r\n\r\n/**\r\n * Translate animation track\r\n * @public\r\n */\r\nexport class PropertyTrack extends AnimationTrack<PropertyValue> {\r\n private readonly _state: PropertyValue;\r\n private _stateAlpha: PropertyValue;\r\n private _target: string;\r\n private readonly _prop: PropertyAccessor;\r\n private readonly _count: number;\r\n private _interpolator: Interpolator;\r\n private _interpolatorAlpha: Interpolator;\r\n /**\r\n * Create an instance of TranslationTrack from keyframe values\r\n * @param prop - Property to be animated\r\n */\r\n constructor(prop: PropertyAccessor, value?: number[], embedded?: boolean) {\r\n super(embedded);\r\n this._prop = prop;\r\n this._target = '';\r\n this._state = { num: [0, 0, 0, 0] };\r\n this._stateAlpha = null;\r\n this._interpolator = null;\r\n this._interpolatorAlpha = null;\r\n if (value) {\r\n this._state.num = value.slice();\r\n }\r\n switch (this._prop.type) {\r\n case 'float':\r\n this._count = 1;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'number',\r\n new Float32Array([0, 1]),\r\n new Float32Array([this._state.num[0], this._state.num[0]])\r\n );\r\n break;\r\n case 'vec2':\r\n this._count = 2;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'vec2',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 2), ...this._state.num.slice(0, 2)])\r\n );\r\n break;\r\n case 'rgb':\r\n case 'vec3':\r\n this._count = 3;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'vec3',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 3), ...this._state.num.slice(0, 3)])\r\n );\r\n break;\r\n case 'vec4':\r\n this._count = 4;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'vec4',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 4), ...this._state.num.slice(0, 4)])\r\n );\r\n break;\r\n case 'rgba':\r\n this._count = 4;\r\n this._interpolator = new Interpolator(\r\n 'linear',\r\n 'vec3',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 3), ...this._state.num.slice(0, 3)])\r\n );\r\n this._interpolatorAlpha = new Interpolator(\r\n 'linear',\r\n 'number',\r\n new Float32Array([0, 1]),\r\n new Float32Array([this._state.num[3], this._state.num[3]])\r\n );\r\n this._stateAlpha = { num: [this._state.num[3]] };\r\n break;\r\n default:\r\n throw new Error(`Property '${this._prop.name}' cannot be animated`);\r\n }\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n set target(val: string) {\r\n this._target = val;\r\n }\r\n get interpolator() {\r\n return this._interpolator;\r\n }\r\n set interpolator(interpolator: Interpolator) {\r\n this._interpolator = interpolator;\r\n }\r\n get interpolatorAlpha() {\r\n return this._interpolatorAlpha;\r\n }\r\n set interpolatorAlpha(interpolator: Interpolator) {\r\n this._interpolatorAlpha = interpolator ?? null;\r\n if (!this._stateAlpha && this._interpolatorAlpha) {\r\n this._stateAlpha = { num: [0] };\r\n }\r\n }\r\n calculateState(target: unknown, currentTime: number): PropertyValue {\r\n this._interpolator.interpolate(currentTime, this._state.num);\r\n if (this._interpolatorAlpha) {\r\n this._interpolatorAlpha.interpolate(currentTime, this._stateAlpha.num);\r\n this._state.num[3] = this._stateAlpha.num[0];\r\n }\r\n return this._state;\r\n }\r\n applyState(target: object, state: PropertyValue) {\r\n this._prop.set.call(target, state);\r\n }\r\n mixState(a: PropertyValue, b: PropertyValue, t: number): PropertyValue {\r\n const v: number[] = [];\r\n for (let i = 0; i < this._count; i++) {\r\n v[i] = a.num[i] + t * (b.num[i] - a.num[i]);\r\n }\r\n return { num: v };\r\n }\r\n getBlendId(): unknown {\r\n return this._prop;\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n getProp(): PropertyAccessor {\r\n return this._prop;\r\n }\r\n}\r\n"],"names":["PropertyTrack","AnimationTrack","_state","_stateAlpha","_target","_prop","_count","_interpolator","_interpolatorAlpha","prop","value","embedded","num","slice","type","Interpolator","Float32Array","Error","name","target","val","interpolator","interpolatorAlpha","calculateState","currentTime","interpolate","applyState","state","set","call","mixState","a","b","t","v","i","getBlendId","getDuration","maxTime","getProp"],"mappings":"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"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Interpolator, Quaternion } from '@zephyr3d/base';
|
|
2
|
-
import { AnimationTrack } from './animationtrack.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Rotation animation track
|
|
6
|
-
* @public
|
|
7
|
-
*/ class NodeRotationTrack extends AnimationTrack {
|
|
8
|
-
_state;
|
|
9
|
-
_interpolator;
|
|
10
|
-
constructor(modeOrInterpolator, keyFramesOrEmbedded, embedded){
|
|
11
|
-
if (modeOrInterpolator instanceof Interpolator) {
|
|
12
|
-
if (modeOrInterpolator.target !== 'quat') {
|
|
13
|
-
throw new Error(`RotationTrack(): interpolator target must be 'quat'`);
|
|
14
|
-
}
|
|
15
|
-
super(keyFramesOrEmbedded ?? false);
|
|
16
|
-
this._interpolator = modeOrInterpolator;
|
|
17
|
-
} else {
|
|
18
|
-
const keyFrames = keyFramesOrEmbedded;
|
|
19
|
-
const inputs = new Float32Array(keyFrames.map((val)=>val.time));
|
|
20
|
-
const outputs = new Float32Array(keyFrames.length * 4);
|
|
21
|
-
for(let i = 0; i < keyFrames.length; i++){
|
|
22
|
-
outputs[i * 4 + 0] = keyFrames[i].value.x;
|
|
23
|
-
outputs[i * 4 + 1] = keyFrames[i].value.y;
|
|
24
|
-
outputs[i * 4 + 2] = keyFrames[i].value.z;
|
|
25
|
-
outputs[i * 4 + 3] = keyFrames[i].value.w;
|
|
26
|
-
}
|
|
27
|
-
super(embedded ?? false);
|
|
28
|
-
this._interpolator = new Interpolator(modeOrInterpolator, 'quat', inputs, outputs);
|
|
29
|
-
}
|
|
30
|
-
this._state = new Quaternion();
|
|
31
|
-
}
|
|
32
|
-
calculateState(target, currentTime) {
|
|
33
|
-
this._interpolator.interpolate(currentTime, this._state);
|
|
34
|
-
return this._state;
|
|
35
|
-
}
|
|
36
|
-
applyState(node, state) {
|
|
37
|
-
node.rotation.set(state);
|
|
38
|
-
}
|
|
39
|
-
mixState(a, b, t) {
|
|
40
|
-
return Quaternion.slerp(a, b, t);
|
|
41
|
-
}
|
|
42
|
-
getBlendId() {
|
|
43
|
-
return 'node-rotation';
|
|
44
|
-
}
|
|
45
|
-
getDuration() {
|
|
46
|
-
return this._interpolator.maxTime;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export { NodeRotationTrack };
|
|
51
|
-
//# sourceMappingURL=rotationtrack.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rotationtrack.js","sources":["../../../src/animation/rotationtrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Quaternion } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\n/**\r\n * Rotation animation track\r\n * @public\r\n */\r\nexport class NodeRotationTrack extends AnimationTrack<Quaternion> {\r\n private readonly _state: Quaternion;\r\n private readonly _interpolator: Interpolator;\r\n /**\r\n * Create an instance of RotationTrack from keyframe values\r\n * @param interpolator - Interpolator object that contains keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(interpolator: Interpolator, embedded?: boolean);\r\n /**\r\n * Create an instance of RotationTrack from keyframe values\r\n * @param mode - The interpolation mode of keyframes\r\n * @param keyFrames - Keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(mode: InterpolationMode, keyFrames: { time: number; value: Quaternion }[], embedded?: boolean);\r\n constructor(\r\n modeOrInterpolator: Interpolator | InterpolationMode,\r\n keyFramesOrEmbedded?: { time: number; value: Quaternion }[] | boolean,\r\n embedded?: boolean\r\n ) {\r\n if (modeOrInterpolator instanceof Interpolator) {\r\n if (modeOrInterpolator.target !== 'quat') {\r\n throw new Error(`RotationTrack(): interpolator target must be 'quat'`);\r\n }\r\n super((keyFramesOrEmbedded as boolean) ?? false);\r\n this._interpolator = modeOrInterpolator;\r\n } else {\r\n const keyFrames = keyFramesOrEmbedded as { time: number; value: Quaternion }[];\r\n const inputs = new Float32Array(keyFrames.map((val) => val.time));\r\n const outputs = new Float32Array(keyFrames.length * 4);\r\n for (let i = 0; i < keyFrames.length; i++) {\r\n outputs[i * 4 + 0] = keyFrames[i].value.x;\r\n outputs[i * 4 + 1] = keyFrames[i].value.y;\r\n outputs[i * 4 + 2] = keyFrames[i].value.z;\r\n outputs[i * 4 + 3] = keyFrames[i].value.w;\r\n }\r\n super(embedded ?? false);\r\n this._interpolator = new Interpolator(modeOrInterpolator, 'quat', inputs, outputs);\r\n }\r\n this._state = new Quaternion();\r\n }\r\n calculateState(target: object, currentTime: number): Quaternion {\r\n this._interpolator.interpolate(currentTime, this._state);\r\n return this._state;\r\n }\r\n applyState(node: SceneNode, state: Quaternion) {\r\n node.rotation.set(state);\r\n }\r\n mixState(a: Quaternion, b: Quaternion, t: number): Quaternion {\r\n return Quaternion.slerp(a, b, t);\r\n }\r\n getBlendId(): unknown {\r\n return 'node-rotation';\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n}\r\n"],"names":["NodeRotationTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","w","Quaternion","calculateState","currentTime","interpolate","applyState","node","state","rotation","set","mixState","a","b","t","slerp","getBlendId","getDuration","maxTime"],"mappings":";;;AAKA;;;IAIO,MAAMA,iBAA0BC,SAAAA,cAAAA,CAAAA;IACpBC,MAAmB;IACnBC,aAA4B;AAc7C,IAAA,WAAA,CACEC,kBAAoD,EACpDC,mBAAqE,EACrEC,QAAkB,CAClB;AACA,QAAA,IAAIF,8BAA8BG,YAAc,EAAA;YAC9C,IAAIH,kBAAAA,CAAmBI,MAAM,KAAK,MAAQ,EAAA;AACxC,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,mDAAmD,CAAC,CAAA;AACvE;YACA,KAAK,CAAC,mBAAoC,IAAA,KAAA,CAAA;YAC1C,IAAI,CAACN,aAAa,GAAGC,kBAAAA;SAChB,MAAA;AACL,YAAA,MAAMM,SAAYL,GAAAA,mBAAAA;YAClB,MAAMM,MAAAA,GAAS,IAAIC,YAAaF,CAAAA,SAAAA,CAAUG,GAAG,CAAC,CAACC,GAAQA,GAAAA,GAAAA,CAAIC,IAAI,CAAA,CAAA;AAC/D,YAAA,MAAMC,OAAU,GAAA,IAAIJ,YAAaF,CAAAA,SAAAA,CAAUO,MAAM,GAAG,CAAA,CAAA;AACpD,YAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIR,SAAUO,CAAAA,MAAM,EAAEC,CAAK,EAAA,CAAA;gBACzCF,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACC,CAAC;gBACzCJ,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACE,CAAC;gBACzCL,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACG,CAAC;gBACzCN,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACI,CAAC;AAC3C;AACA,YAAA,KAAK,CAACjB,QAAY,IAAA,KAAA,CAAA;AAClB,YAAA,IAAI,CAACH,aAAa,GAAG,IAAII,YAAaH,CAAAA,kBAAAA,EAAoB,QAAQO,MAAQK,EAAAA,OAAAA,CAAAA;AAC5E;QACA,IAAI,CAACd,MAAM,GAAG,IAAIsB,UAAAA,EAAAA;AACpB;IACAC,cAAejB,CAAAA,MAAc,EAAEkB,WAAmB,EAAc;QAC9D,IAAI,CAACvB,aAAa,CAACwB,WAAW,CAACD,WAAa,EAAA,IAAI,CAACxB,MAAM,CAAA;QACvD,OAAO,IAAI,CAACA,MAAM;AACpB;IACA0B,UAAWC,CAAAA,IAAe,EAAEC,KAAiB,EAAE;QAC7CD,IAAKE,CAAAA,QAAQ,CAACC,GAAG,CAACF,KAAAA,CAAAA;AACpB;AACAG,IAAAA,QAAAA,CAASC,CAAa,EAAEC,CAAa,EAAEC,CAAS,EAAc;AAC5D,QAAA,OAAOZ,UAAWa,CAAAA,KAAK,CAACH,CAAAA,EAAGC,CAAGC,EAAAA,CAAAA,CAAAA;AAChC;IACAE,UAAsB,GAAA;QACpB,OAAO,eAAA;AACT;IACAC,WAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAACpC,aAAa,CAACqC,OAAO;AACnC;AACF;;;;"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { Interpolator, Vector3 } from '@zephyr3d/base';
|
|
2
|
-
import { AnimationTrack } from './animationtrack.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Scale animation track
|
|
6
|
-
* @public
|
|
7
|
-
*/ class NodeScaleTrack extends AnimationTrack {
|
|
8
|
-
_state;
|
|
9
|
-
_interpolator;
|
|
10
|
-
constructor(modeOrInterpolator, keyFramesOrEmbedded, embedded){
|
|
11
|
-
if (modeOrInterpolator instanceof Interpolator) {
|
|
12
|
-
if (modeOrInterpolator.target !== 'vec3') {
|
|
13
|
-
throw new Error(`ScaleTrack(): interpolator target must be 'vec3'`);
|
|
14
|
-
}
|
|
15
|
-
super(keyFramesOrEmbedded ?? false);
|
|
16
|
-
this._interpolator = modeOrInterpolator;
|
|
17
|
-
} else {
|
|
18
|
-
const keyFrames = keyFramesOrEmbedded;
|
|
19
|
-
const inputs = new Float32Array(keyFrames.map((val)=>val.time));
|
|
20
|
-
const outputs = new Float32Array(keyFrames.length * 3);
|
|
21
|
-
for(let i = 0; i < keyFrames.length; i++){
|
|
22
|
-
outputs[i * 3 + 0] = keyFrames[i].value.x;
|
|
23
|
-
outputs[i * 3 + 1] = keyFrames[i].value.y;
|
|
24
|
-
outputs[i * 3 + 2] = keyFrames[i].value.z;
|
|
25
|
-
}
|
|
26
|
-
super(embedded ?? false);
|
|
27
|
-
this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);
|
|
28
|
-
}
|
|
29
|
-
this._state = new Vector3();
|
|
30
|
-
}
|
|
31
|
-
calculateState(target, currentTime) {
|
|
32
|
-
this._interpolator.interpolate(currentTime, this._state);
|
|
33
|
-
return this._state;
|
|
34
|
-
}
|
|
35
|
-
applyState(node, state) {
|
|
36
|
-
node.scale.set(state);
|
|
37
|
-
}
|
|
38
|
-
mixState(a, b, t) {
|
|
39
|
-
return new Vector3(a.x + t * (b.x - a.x), a.y + t * (b.y - a.y), a.z + t * (b.z - a.z));
|
|
40
|
-
}
|
|
41
|
-
getBlendId() {
|
|
42
|
-
return 'node-scale';
|
|
43
|
-
}
|
|
44
|
-
getDuration() {
|
|
45
|
-
return this._interpolator.maxTime;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export { NodeScaleTrack };
|
|
50
|
-
//# sourceMappingURL=scaletrack.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaletrack.js","sources":["../../../src/animation/scaletrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Vector3 } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\n/**\r\n * Scale animation track\r\n * @public\r\n */\r\nexport class NodeScaleTrack extends AnimationTrack<Vector3> {\r\n private readonly _state: Vector3;\r\n private readonly _interpolator: Interpolator;\r\n /**\r\n * Create an instance of ScaleTrack from keyframe values\r\n * @param interpolator - Interpolator object that contains keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(interpolator: Interpolator, embedded?: boolean);\r\n /**\r\n * Create an instance of ScaleTrack from keyframe values\r\n * @param mode - The interpolation mode of keyframes\r\n * @param keyFrames - Keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(mode: InterpolationMode, keyFrames: { time: number; value: Vector3 }[], embedded?: boolean);\r\n constructor(\r\n modeOrInterpolator?: Interpolator | InterpolationMode,\r\n keyFramesOrEmbedded?: { time: number; value: Vector3 }[] | boolean,\r\n embedded?: boolean\r\n ) {\r\n if (modeOrInterpolator instanceof Interpolator) {\r\n if (modeOrInterpolator.target !== 'vec3') {\r\n throw new Error(`ScaleTrack(): interpolator target must be 'vec3'`);\r\n }\r\n super((keyFramesOrEmbedded as boolean) ?? false);\r\n this._interpolator = modeOrInterpolator;\r\n } else {\r\n const keyFrames = keyFramesOrEmbedded as { time: number; value: Vector3 }[];\r\n const inputs = new Float32Array(keyFrames.map((val) => val.time));\r\n const outputs = new Float32Array(keyFrames.length * 3);\r\n for (let i = 0; i < keyFrames.length; i++) {\r\n outputs[i * 3 + 0] = keyFrames[i].value.x;\r\n outputs[i * 3 + 1] = keyFrames[i].value.y;\r\n outputs[i * 3 + 2] = keyFrames[i].value.z;\r\n }\r\n super(embedded ?? false);\r\n this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);\r\n }\r\n this._state = new Vector3();\r\n }\r\n calculateState(target: object, currentTime: number): Vector3 {\r\n this._interpolator.interpolate(currentTime, this._state);\r\n return this._state;\r\n }\r\n applyState(node: SceneNode, state: Vector3) {\r\n node.scale.set(state);\r\n }\r\n mixState(a: Vector3, b: Vector3, t: number): Vector3 {\r\n return new Vector3(a.x + t * (b.x - a.x), a.y + t * (b.y - a.y), a.z + t * (b.z - a.z));\r\n }\r\n getBlendId(): unknown {\r\n return 'node-scale';\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n}\r\n"],"names":["NodeScaleTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","Vector3","calculateState","currentTime","interpolate","applyState","node","state","scale","set","mixState","a","b","t","getBlendId","getDuration","maxTime"],"mappings":";;;AAKA;;;IAIO,MAAMA,cAAuBC,SAAAA,cAAAA,CAAAA;IACjBC,MAAgB;IAChBC,aAA4B;AAc7C,IAAA,WAAA,CACEC,kBAAqD,EACrDC,mBAAkE,EAClEC,QAAkB,CAClB;AACA,QAAA,IAAIF,8BAA8BG,YAAc,EAAA;YAC9C,IAAIH,kBAAAA,CAAmBI,MAAM,KAAK,MAAQ,EAAA;AACxC,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,gDAAgD,CAAC,CAAA;AACpE;YACA,KAAK,CAAC,mBAAoC,IAAA,KAAA,CAAA;YAC1C,IAAI,CAACN,aAAa,GAAGC,kBAAAA;SAChB,MAAA;AACL,YAAA,MAAMM,SAAYL,GAAAA,mBAAAA;YAClB,MAAMM,MAAAA,GAAS,IAAIC,YAAaF,CAAAA,SAAAA,CAAUG,GAAG,CAAC,CAACC,GAAQA,GAAAA,GAAAA,CAAIC,IAAI,CAAA,CAAA;AAC/D,YAAA,MAAMC,OAAU,GAAA,IAAIJ,YAAaF,CAAAA,SAAAA,CAAUO,MAAM,GAAG,CAAA,CAAA;AACpD,YAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIR,SAAUO,CAAAA,MAAM,EAAEC,CAAK,EAAA,CAAA;gBACzCF,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACC,CAAC;gBACzCJ,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACE,CAAC;gBACzCL,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACG,CAAC;AAC3C;AACA,YAAA,KAAK,CAAChB,QAAY,IAAA,KAAA,CAAA;AAClB,YAAA,IAAI,CAACH,aAAa,GAAG,IAAII,YAAaH,CAAAA,kBAAAA,EAAoB,QAAQO,MAAQK,EAAAA,OAAAA,CAAAA;AAC5E;QACA,IAAI,CAACd,MAAM,GAAG,IAAIqB,OAAAA,EAAAA;AACpB;IACAC,cAAehB,CAAAA,MAAc,EAAEiB,WAAmB,EAAW;QAC3D,IAAI,CAACtB,aAAa,CAACuB,WAAW,CAACD,WAAa,EAAA,IAAI,CAACvB,MAAM,CAAA;QACvD,OAAO,IAAI,CAACA,MAAM;AACpB;IACAyB,UAAWC,CAAAA,IAAe,EAAEC,KAAc,EAAE;QAC1CD,IAAKE,CAAAA,KAAK,CAACC,GAAG,CAACF,KAAAA,CAAAA;AACjB;AACAG,IAAAA,QAAAA,CAASC,CAAU,EAAEC,CAAU,EAAEC,CAAS,EAAW;AACnD,QAAA,OAAO,IAAIZ,OAAQU,CAAAA,CAAAA,CAAEb,CAAC,GAAGe,KAAKD,CAAAA,CAAEd,CAAC,GAAGa,EAAEb,CAAAA,CAAIa,EAAAA,CAAAA,CAAEZ,CAAC,GAAGc,CAAAA,IAAKD,CAAAA,CAAEb,CAAC,GAAGY,CAAAA,CAAEZ,CAAAA,GAAIY,CAAEX,CAAAA,CAAC,GAAGa,CAAAA,IAAKD,CAAEZ,CAAAA,CAAC,GAAGW,CAAAA,CAAEX,CAAC,CAADA,CAAAA;AACtF;IACAc,UAAsB,GAAA;QACpB,OAAO,YAAA;AACT;IACAC,WAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAClC,aAAa,CAACmC,OAAO;AACnC;AACF;;;;"}
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { Vector3, Matrix4x4, nextPowerOf2 } from '@zephyr3d/base';
|
|
2
|
-
import { BoundingBox } from '../utility/bounding_volume.js';
|
|
3
|
-
import { Application } from '../app/app.js';
|
|
4
|
-
|
|
5
|
-
const tmpV0 = new Vector3();
|
|
6
|
-
const tmpV1 = new Vector3();
|
|
7
|
-
const tmpV2 = new Vector3();
|
|
8
|
-
const tmpV3 = new Vector3();
|
|
9
|
-
/**
|
|
10
|
-
* Skeleton for skinned animation
|
|
11
|
-
* @public
|
|
12
|
-
*/ class Skeleton {
|
|
13
|
-
/** @internal */ _meshes;
|
|
14
|
-
/** @internal */ _joints;
|
|
15
|
-
/** @internal */ _inverseBindMatrices;
|
|
16
|
-
/** @internal */ _bindPoseMatrices;
|
|
17
|
-
/** @internal */ _jointMatrices;
|
|
18
|
-
/** @internal */ _jointOffsets;
|
|
19
|
-
/** @internal */ _jointMatrixArray;
|
|
20
|
-
/** @internal */ _jointTexture;
|
|
21
|
-
/**
|
|
22
|
-
* Creates an instance of skeleton
|
|
23
|
-
* @param joints - The joint nodes
|
|
24
|
-
* @param inverseBindMatrices - The inverse binding matrices of the joints
|
|
25
|
-
* @param bindPoseMatrices - The binding pose matrices of the joints
|
|
26
|
-
*/ constructor(joints, inverseBindMatrices, bindPoseMatrices, meshes, bounding){
|
|
27
|
-
this._joints = joints;
|
|
28
|
-
this._inverseBindMatrices = inverseBindMatrices;
|
|
29
|
-
this._bindPoseMatrices = bindPoseMatrices;
|
|
30
|
-
this._jointMatrixArray = null;
|
|
31
|
-
this._jointMatrices = null;
|
|
32
|
-
this._jointOffsets = null;
|
|
33
|
-
this._jointTexture = null;
|
|
34
|
-
this.updateJointMatrices();
|
|
35
|
-
this._meshes = meshes.map((mesh, index)=>{
|
|
36
|
-
return {
|
|
37
|
-
mesh,
|
|
38
|
-
bounding: this.getBoundingInfo(bounding[index]),
|
|
39
|
-
box: new BoundingBox()
|
|
40
|
-
};
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Disposes self
|
|
45
|
-
*/ dispose() {
|
|
46
|
-
this._jointTexture?.dispose();
|
|
47
|
-
this._jointTexture = null;
|
|
48
|
-
this._joints = null;
|
|
49
|
-
this._inverseBindMatrices = null;
|
|
50
|
-
this._bindPoseMatrices = null;
|
|
51
|
-
this._jointMatrices = null;
|
|
52
|
-
this._jointMatrixArray = null;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* The texture that contains the transform matrices of all the joints
|
|
56
|
-
*/ get jointTexture() {
|
|
57
|
-
return this._jointTexture;
|
|
58
|
-
}
|
|
59
|
-
/** @internal */ updateJointMatrices(jointTransforms, worldMatrix) {
|
|
60
|
-
if (!this._jointTexture) {
|
|
61
|
-
this._createJointTexture();
|
|
62
|
-
}
|
|
63
|
-
if (this._jointOffsets[0] === 0) {
|
|
64
|
-
this._jointOffsets[0] = 1;
|
|
65
|
-
this._jointOffsets[1] = 1;
|
|
66
|
-
} else {
|
|
67
|
-
this._jointOffsets[1] = this._jointOffsets[0];
|
|
68
|
-
this._jointOffsets[0] = this._joints.length - this._jointOffsets[0] + 2;
|
|
69
|
-
}
|
|
70
|
-
for(let i = 0; i < this._joints.length; i++){
|
|
71
|
-
const mat = this._jointMatrices[i + this._jointOffsets[0] - 1];
|
|
72
|
-
const jointTransform = jointTransforms ? jointTransforms[i] : this._joints[i].worldMatrix;
|
|
73
|
-
if (worldMatrix) {
|
|
74
|
-
Matrix4x4.multiplyAffine(worldMatrix, jointTransform, jointTransform);
|
|
75
|
-
}
|
|
76
|
-
Matrix4x4.multiply(jointTransform, this._inverseBindMatrices[i], mat);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/** @internal */ computeBindPose(model) {
|
|
80
|
-
this.updateJointMatrices(this._bindPoseMatrices, model.worldMatrix);
|
|
81
|
-
this._jointOffsets[1] = this._jointOffsets[0];
|
|
82
|
-
this._jointTexture.update(this._jointMatrixArray, 0, 0, this._jointTexture.width, this._jointTexture.height);
|
|
83
|
-
}
|
|
84
|
-
/** @internal */ computeJoints() {
|
|
85
|
-
this.updateJointMatrices();
|
|
86
|
-
this._jointTexture.update(this._jointMatrixArray, 0, 0, this._jointTexture.width, this._jointTexture.height);
|
|
87
|
-
}
|
|
88
|
-
/** @internal */ apply() {
|
|
89
|
-
this.computeJoints();
|
|
90
|
-
for (const mesh of this._meshes){
|
|
91
|
-
this.computeBoundingBox(mesh.bounding, mesh.mesh.invWorldMatrix);
|
|
92
|
-
mesh.mesh.setBoneMatrices(this.jointTexture);
|
|
93
|
-
mesh.mesh.setAnimatedBoundingBox(mesh.bounding.boundingBox);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/** @internal */ reset() {
|
|
97
|
-
for (const mesh of this._meshes){
|
|
98
|
-
mesh.mesh.setBoneMatrices(null);
|
|
99
|
-
mesh.mesh.setAnimatedBoundingBox(null);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/** @internal */ computeBoundingBox(info, invWorldMatrix) {
|
|
103
|
-
info.boundingBox.beginExtend();
|
|
104
|
-
for(let i = 0; i < info.boundingVertices.length; i++){
|
|
105
|
-
this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 0] + this._jointOffsets[0] - 1].transformPointAffine(info.boundingVertices[i], tmpV0).scaleBy(info.boundingVertexJointWeights[i * 4 + 0]);
|
|
106
|
-
this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 1] + this._jointOffsets[0] - 1].transformPointAffine(info.boundingVertices[i], tmpV1).scaleBy(info.boundingVertexJointWeights[i * 4 + 1]);
|
|
107
|
-
this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 2] + this._jointOffsets[0] - 1].transformPointAffine(info.boundingVertices[i], tmpV2).scaleBy(info.boundingVertexJointWeights[i * 4 + 2]);
|
|
108
|
-
this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 3] + this._jointOffsets[0] - 1].transformPointAffine(info.boundingVertices[i], tmpV3).scaleBy(info.boundingVertexJointWeights[i * 4 + 3]);
|
|
109
|
-
tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);
|
|
110
|
-
invWorldMatrix.transformPointAffine(tmpV0, tmpV0);
|
|
111
|
-
info.boundingBox.extend(tmpV0);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
/** @internal */ _createJointTexture() {
|
|
115
|
-
const textureWidth = nextPowerOf2(Math.max(4, Math.ceil(Math.sqrt((this._joints.length * 2 + 1) * 4))));
|
|
116
|
-
const device = Application.instance.device;
|
|
117
|
-
this._jointTexture = device.createTexture2D('rgba32f', textureWidth, textureWidth, {
|
|
118
|
-
samplerOptions: {
|
|
119
|
-
magFilter: 'nearest',
|
|
120
|
-
minFilter: 'nearest',
|
|
121
|
-
mipFilter: 'none'
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
this._jointMatrixArray = new Float32Array(textureWidth * textureWidth * 4);
|
|
125
|
-
const buffer = this._jointMatrixArray.buffer;
|
|
126
|
-
this._jointOffsets = new Float32Array(buffer);
|
|
127
|
-
this._jointOffsets[0] = 0;
|
|
128
|
-
this._jointOffsets[1] = 0;
|
|
129
|
-
this._jointMatrices = Array.from({
|
|
130
|
-
length: this._joints.length * 2
|
|
131
|
-
}).map((val, index)=>new Matrix4x4(buffer, (index + 1) * 16 * Float32Array.BYTES_PER_ELEMENT));
|
|
132
|
-
}
|
|
133
|
-
/** @internal */ getBoundingInfo(meshData) {
|
|
134
|
-
const indices = [
|
|
135
|
-
0,
|
|
136
|
-
0,
|
|
137
|
-
0,
|
|
138
|
-
0,
|
|
139
|
-
0,
|
|
140
|
-
0
|
|
141
|
-
];
|
|
142
|
-
let minx = Number.MAX_VALUE;
|
|
143
|
-
let maxx = -Number.MAX_VALUE;
|
|
144
|
-
let miny = Number.MAX_VALUE;
|
|
145
|
-
let maxy = -Number.MAX_VALUE;
|
|
146
|
-
let minz = Number.MAX_VALUE;
|
|
147
|
-
let maxz = -Number.MAX_VALUE;
|
|
148
|
-
const v = meshData.rawPositions;
|
|
149
|
-
const vert = new Vector3();
|
|
150
|
-
const tmpV0 = new Vector3();
|
|
151
|
-
const tmpV1 = new Vector3();
|
|
152
|
-
const tmpV2 = new Vector3();
|
|
153
|
-
const tmpV3 = new Vector3();
|
|
154
|
-
const numVertices = Math.floor(v.length / 3);
|
|
155
|
-
for(let i = 0; i < numVertices; i++){
|
|
156
|
-
vert.setXYZ(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]);
|
|
157
|
-
this._jointMatrices[meshData.rawBlendIndices[i * 4 + 0] + this._jointOffsets[0] - 1].transformPointAffine(vert, tmpV0).scaleBy(meshData.rawJointWeights[i * 4 + 0]);
|
|
158
|
-
this._jointMatrices[meshData.rawBlendIndices[i * 4 + 1] + this._jointOffsets[0] - 1].transformPointAffine(vert, tmpV1).scaleBy(meshData.rawJointWeights[i * 4 + 1]);
|
|
159
|
-
this._jointMatrices[meshData.rawBlendIndices[i * 4 + 2] + this._jointOffsets[0] - 1].transformPointAffine(vert, tmpV2).scaleBy(meshData.rawJointWeights[i * 4 + 2]);
|
|
160
|
-
this._jointMatrices[meshData.rawBlendIndices[i * 4 + 3] + this._jointOffsets[0] - 1].transformPointAffine(vert, tmpV3).scaleBy(meshData.rawJointWeights[i * 4 + 3]);
|
|
161
|
-
tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);
|
|
162
|
-
if (tmpV0.x < minx) {
|
|
163
|
-
minx = tmpV0.x;
|
|
164
|
-
indices[0] = i;
|
|
165
|
-
}
|
|
166
|
-
if (tmpV0.x > maxx) {
|
|
167
|
-
maxx = tmpV0.x;
|
|
168
|
-
indices[1] = i;
|
|
169
|
-
}
|
|
170
|
-
if (tmpV0.y < miny) {
|
|
171
|
-
miny = tmpV0.y;
|
|
172
|
-
indices[2] = i;
|
|
173
|
-
}
|
|
174
|
-
if (tmpV0.y > maxy) {
|
|
175
|
-
maxy = tmpV0.y;
|
|
176
|
-
indices[3] = i;
|
|
177
|
-
}
|
|
178
|
-
if (tmpV0.z < minz) {
|
|
179
|
-
minz = tmpV0.z;
|
|
180
|
-
indices[4] = i;
|
|
181
|
-
}
|
|
182
|
-
if (tmpV0.z > maxz) {
|
|
183
|
-
maxz = tmpV0.z;
|
|
184
|
-
indices[5] = i;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
const info = {
|
|
188
|
-
boundingVertexBlendIndices: new Float32Array(Array.from({
|
|
189
|
-
length: 6 * 4
|
|
190
|
-
}).map((val, index)=>meshData.rawBlendIndices[indices[index >> 2] * 4 + index % 4])),
|
|
191
|
-
boundingVertexJointWeights: new Float32Array(Array.from({
|
|
192
|
-
length: 6 * 4
|
|
193
|
-
}).map((val, index)=>meshData.rawJointWeights[indices[index >> 2] * 4 + index % 4])),
|
|
194
|
-
boundingVertices: Array.from({
|
|
195
|
-
length: 6
|
|
196
|
-
}).map((val, index)=>new Vector3(meshData.rawPositions[indices[index] * 3], meshData.rawPositions[indices[index] * 3 + 1], meshData.rawPositions[indices[index] * 3 + 2])),
|
|
197
|
-
boundingBox: new BoundingBox()
|
|
198
|
-
};
|
|
199
|
-
return info;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
export { Skeleton };
|
|
204
|
-
//# sourceMappingURL=skeleton.js.map
|