@zephyr3d/scene 0.7.1 → 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/animation.js +0 -18
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +200 -3
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/ik/ccd_solver.js +371 -0
- package/dist/animation/ik/ccd_solver.js.map +1 -0
- package/dist/animation/ik/fabrik_solver.js +398 -0
- package/dist/animation/ik/fabrik_solver.js.map +1 -0
- package/dist/animation/ik/ik_angle_constraint.js +181 -0
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -0
- package/dist/animation/ik/ik_chain.js +163 -0
- package/dist/animation/ik/ik_chain.js.map +1 -0
- package/dist/animation/ik/ik_constraint.js +25 -0
- package/dist/animation/ik/ik_constraint.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +128 -0
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -0
- package/dist/animation/ik/ik_solver.js +48 -0
- package/dist/animation/ik/ik_solver.js.map +1 -0
- package/dist/animation/ik/ik_track.js +96 -0
- package/dist/animation/ik/ik_track.js.map +1 -0
- package/dist/animation/ik/ik_utils.js +191 -0
- package/dist/animation/ik/ik_utils.js.map +1 -0
- package/dist/animation/ik/two_bone_ik_solver.js +331 -0
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -0
- package/dist/animation/ik_modifier.js +61 -0
- package/dist/animation/ik_modifier.js.map +1 -0
- package/dist/animation/ik_postprocessor.js +71 -0
- package/dist/animation/ik_postprocessor.js.map +1 -0
- package/dist/animation/manual_transform_processor.js +156 -0
- package/dist/animation/manual_transform_processor.js.map +1 -0
- package/dist/animation/skeleton.js +55 -51
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +38 -0
- package/dist/animation/skeleton_modifier.js.map +1 -0
- package/dist/animation/skeleton_postprocessor.js +50 -0
- package/dist/animation/skeleton_postprocessor.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +503 -0
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -0
- 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/animation/spring/spring_chain.js +103 -0
- package/dist/animation/spring/spring_chain.js.map +1 -0
- package/dist/animation/spring/spring_collider.js +247 -0
- package/dist/animation/spring/spring_collider.js.map +1 -0
- package/dist/animation/spring/spring_constraint.js +21 -0
- package/dist/animation/spring/spring_constraint.js.map +1 -0
- package/dist/animation/spring/spring_particle.js +20 -0
- package/dist/animation/spring/spring_particle.js.map +1 -0
- package/dist/animation/spring/spring_system.js +526 -0
- package/dist/animation/spring/spring_system.js.map +1 -0
- package/dist/animation/spring_modifier.js +45 -0
- package/dist/animation/spring_modifier.js.map +1 -0
- package/dist/animation/spring_postprocessor.js +54 -0
- package/dist/animation/spring_postprocessor.js.map +1 -0
- package/dist/app/screen.js +1 -1
- package/dist/app/screen.js.map +1 -1
- package/dist/asset/model.js +10 -6
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/perspectivecamera.js +3 -3
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +1400 -4
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +66 -4
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +20 -17
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/shader/helper.js +5 -3
- package/dist/material/shader/helper.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/scene/mesh.js +15 -23
- package/dist/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +24 -23
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +62 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +1 -1
- package/package.json +3 -3
- 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
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { SkeletonModifier } from './skeleton_modifier.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Skeleton modifier for IK solvers.
|
|
5
|
+
*
|
|
6
|
+
* Integrates IK solving into the skeleton post-processing pipeline.
|
|
7
|
+
* The IK solver is executed each frame and results are blended with the base animation.
|
|
8
|
+
*
|
|
9
|
+
* @public
|
|
10
|
+
*/ class IKModifier extends SkeletonModifier {
|
|
11
|
+
_solver;
|
|
12
|
+
_target;
|
|
13
|
+
/**
|
|
14
|
+
* Create an IK post-processor.
|
|
15
|
+
*
|
|
16
|
+
* @param solver - The IK solver to integrate
|
|
17
|
+
* @param target - Target position for the end effector
|
|
18
|
+
* @param weight - Blend weight [0-1] (default: 1.0)
|
|
19
|
+
*/ constructor(solver, target, weight = 1.0){
|
|
20
|
+
super(weight);
|
|
21
|
+
this._solver = solver;
|
|
22
|
+
this._target = target.clone();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the IK solver.
|
|
26
|
+
*/ get solver() {
|
|
27
|
+
return this._solver;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get the current target position.
|
|
31
|
+
*/ get target() {
|
|
32
|
+
return this._target.clone();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Set the target position for the end effector.
|
|
36
|
+
*
|
|
37
|
+
* @param target - New target position (will be cloned)
|
|
38
|
+
*/ setTarget(target) {
|
|
39
|
+
this._target.set(target);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Apply IK solving to skeleton joints.
|
|
43
|
+
*/ apply(_skeleton, _deltaTime) {
|
|
44
|
+
if (!this._enabled || this._weight <= 0) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Solve IK
|
|
48
|
+
this._solver.solve(this._target);
|
|
49
|
+
// Apply to nodes with blending
|
|
50
|
+
this._solver.applyToNodes(this._weight);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Reset the IK solver to initial state.
|
|
54
|
+
*/ reset() {
|
|
55
|
+
// IK solvers typically don't need explicit reset
|
|
56
|
+
// as they solve based on current joint positions
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export { IKModifier };
|
|
61
|
+
//# sourceMappingURL=ik_modifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ik_modifier.js","sources":["../../src/animation/ik_modifier.ts"],"sourcesContent":["import { SkeletonModifier } from './skeleton_modifier';\r\nimport type { Skeleton } from './skeleton';\r\nimport type { IKSolver } from './ik/ik_solver';\r\nimport type { Vector3 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Skeleton modifier for IK solvers.\r\n *\r\n * Integrates IK solving into the skeleton post-processing pipeline.\r\n * The IK solver is executed each frame and results are blended with the base animation.\r\n *\r\n * @public\r\n */\r\nexport class IKModifier<Solver extends IKSolver = IKSolver> extends SkeletonModifier {\r\n private _solver: Solver;\r\n private _target: Vector3;\r\n\r\n /**\r\n * Create an IK post-processor.\r\n *\r\n * @param solver - The IK solver to integrate\r\n * @param target - Target position for the end effector\r\n * @param weight - Blend weight [0-1] (default: 1.0)\r\n */\r\n constructor(solver: Solver, target: Vector3, weight: number = 1.0) {\r\n super(weight);\r\n this._solver = solver;\r\n this._target = target.clone();\r\n }\r\n\r\n /**\r\n * Get the IK solver.\r\n */\r\n get solver(): Solver {\r\n return this._solver;\r\n }\r\n\r\n /**\r\n * Get the current target position.\r\n */\r\n get target(): Vector3 {\r\n return this._target.clone();\r\n }\r\n\r\n /**\r\n * Set the target position for the end effector.\r\n *\r\n * @param target - New target position (will be cloned)\r\n */\r\n setTarget(target: Vector3): void {\r\n this._target.set(target);\r\n }\r\n\r\n /**\r\n * Apply IK solving to skeleton joints.\r\n */\r\n apply(_skeleton: Skeleton, _deltaTime: number): void {\r\n if (!this._enabled || this._weight <= 0) {\r\n return;\r\n }\r\n\r\n // Solve IK\r\n this._solver.solve(this._target);\r\n\r\n // Apply to nodes with blending\r\n this._solver.applyToNodes(this._weight);\r\n }\r\n\r\n /**\r\n * Reset the IK solver to initial state.\r\n */\r\n reset(): void {\r\n // IK solvers typically don't need explicit reset\r\n // as they solve based on current joint positions\r\n }\r\n}\r\n"],"names":["IKModifier","SkeletonModifier","_solver","_target","solver","target","weight","clone","setTarget","set","apply","_skeleton","_deltaTime","_enabled","_weight","solve","applyToNodes","reset"],"mappings":";;AAKA;;;;;;;IAQO,MAAMA,UAAuDC,SAAAA,gBAAAA,CAAAA;IAC1DC,OAAgB;IAChBC,OAAiB;AAEzB;;;;;;AAMC,MACD,YAAYC,MAAc,EAAEC,MAAe,EAAEC,MAAAA,GAAiB,GAAG,CAAE;AACjE,QAAA,KAAK,CAACA,MAAAA,CAAAA;QACN,IAAI,CAACJ,OAAO,GAAGE,MAAAA;AACf,QAAA,IAAI,CAACD,OAAO,GAAGE,MAAAA,CAAOE,KAAK,EAAA;AAC7B;AAEA;;AAEC,MACD,IAAIH,MAAiB,GAAA;QACnB,OAAO,IAAI,CAACF,OAAO;AACrB;AAEA;;AAEC,MACD,IAAIG,MAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAACF,OAAO,CAACI,KAAK,EAAA;AAC3B;AAEA;;;;MAKAC,SAAAA,CAAUH,MAAe,EAAQ;AAC/B,QAAA,IAAI,CAACF,OAAO,CAACM,GAAG,CAACJ,MAAAA,CAAAA;AACnB;AAEA;;AAEC,MACDK,KAAMC,CAAAA,SAAmB,EAAEC,UAAkB,EAAQ;QACnD,IAAI,CAAC,IAAI,CAACC,QAAQ,IAAI,IAAI,CAACC,OAAO,IAAI,CAAG,EAAA;AACvC,YAAA;AACF;;AAGA,QAAA,IAAI,CAACZ,OAAO,CAACa,KAAK,CAAC,IAAI,CAACZ,OAAO,CAAA;;AAG/B,QAAA,IAAI,CAACD,OAAO,CAACc,YAAY,CAAC,IAAI,CAACF,OAAO,CAAA;AACxC;AAEA;;AAEC,MACDG,KAAc,GAAA;;;AAGd;AACF;;;;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { SkeletonPostProcessor } from './skeleton_postprocessor.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Post-processor wrapper for IK solvers.
|
|
5
|
+
*
|
|
6
|
+
* Integrates IK solving into the skeleton post-processing pipeline.
|
|
7
|
+
* The IK solver is executed each frame and results are blended with the base animation.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const ikChain = new IKChain([joint1, joint2, joint3]);
|
|
12
|
+
* const ikSolver = new FABRIKSolver(ikChain);
|
|
13
|
+
* const targetPos = new Vector3(1, 2, 3);
|
|
14
|
+
* const processor = new IKPostProcessor(ikSolver, targetPos, 1.0);
|
|
15
|
+
* skeleton.addPostProcessor(processor);
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @public
|
|
19
|
+
*/ class IKPostProcessor extends SkeletonPostProcessor {
|
|
20
|
+
_solver;
|
|
21
|
+
_target;
|
|
22
|
+
/**
|
|
23
|
+
* Create an IK post-processor.
|
|
24
|
+
*
|
|
25
|
+
* @param solver - The IK solver to integrate
|
|
26
|
+
* @param target - Target position for the end effector
|
|
27
|
+
* @param weight - Blend weight [0-1] (default: 1.0)
|
|
28
|
+
* @param priority - Priority for ordering (default: 50)
|
|
29
|
+
*/ constructor(solver, target, weight = 1.0, priority = 50){
|
|
30
|
+
super(weight, priority);
|
|
31
|
+
this._solver = solver;
|
|
32
|
+
this._target = target.clone();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the IK solver.
|
|
36
|
+
*/ get solver() {
|
|
37
|
+
return this._solver;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the current target position.
|
|
41
|
+
*/ get target() {
|
|
42
|
+
return this._target.clone();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Set the target position for the end effector.
|
|
46
|
+
*
|
|
47
|
+
* @param target - New target position (will be cloned)
|
|
48
|
+
*/ setTarget(target) {
|
|
49
|
+
this._target.set(target);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Apply IK solving to skeleton joints.
|
|
53
|
+
*/ apply(_skeleton, _deltaTime) {
|
|
54
|
+
if (!this._enabled || this._weight <= 0) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Solve IK
|
|
58
|
+
this._solver.solve(this._target);
|
|
59
|
+
// Apply to nodes with blending
|
|
60
|
+
this._solver.applyToNodes(this._weight);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Reset the IK solver to initial state.
|
|
64
|
+
*/ reset() {
|
|
65
|
+
// IK solvers typically don't need explicit reset
|
|
66
|
+
// as they solve based on current joint positions
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { IKPostProcessor };
|
|
71
|
+
//# sourceMappingURL=ik_postprocessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ik_postprocessor.js","sources":["../../src/animation/ik_postprocessor.ts"],"sourcesContent":["import { SkeletonPostProcessor } from './skeleton_postprocessor';\r\nimport type { Skeleton } from './skeleton';\r\nimport type { IKSolver } from './ik/ik_solver';\r\nimport type { Vector3 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Post-processor wrapper for IK solvers.\r\n *\r\n * Integrates IK solving into the skeleton post-processing pipeline.\r\n * The IK solver is executed each frame and results are blended with the base animation.\r\n *\r\n * @example\r\n * ```typescript\r\n * const ikChain = new IKChain([joint1, joint2, joint3]);\r\n * const ikSolver = new FABRIKSolver(ikChain);\r\n * const targetPos = new Vector3(1, 2, 3);\r\n * const processor = new IKPostProcessor(ikSolver, targetPos, 1.0);\r\n * skeleton.addPostProcessor(processor);\r\n * ```\r\n *\r\n * @public\r\n */\r\nexport class IKPostProcessor<Solver extends IKSolver = IKSolver> extends SkeletonPostProcessor {\r\n private _solver: Solver;\r\n private _target: Vector3;\r\n\r\n /**\r\n * Create an IK post-processor.\r\n *\r\n * @param solver - The IK solver to integrate\r\n * @param target - Target position for the end effector\r\n * @param weight - Blend weight [0-1] (default: 1.0)\r\n * @param priority - Priority for ordering (default: 50)\r\n */\r\n constructor(solver: Solver, target: Vector3, weight: number = 1.0, priority: number = 50) {\r\n super(weight, priority);\r\n this._solver = solver;\r\n this._target = target.clone();\r\n }\r\n\r\n /**\r\n * Get the IK solver.\r\n */\r\n get solver(): Solver {\r\n return this._solver;\r\n }\r\n\r\n /**\r\n * Get the current target position.\r\n */\r\n get target(): Vector3 {\r\n return this._target.clone();\r\n }\r\n\r\n /**\r\n * Set the target position for the end effector.\r\n *\r\n * @param target - New target position (will be cloned)\r\n */\r\n setTarget(target: Vector3): void {\r\n this._target.set(target);\r\n }\r\n\r\n /**\r\n * Apply IK solving to skeleton joints.\r\n */\r\n apply(_skeleton: Skeleton, _deltaTime: number): void {\r\n if (!this._enabled || this._weight <= 0) {\r\n return;\r\n }\r\n\r\n // Solve IK\r\n this._solver.solve(this._target);\r\n\r\n // Apply to nodes with blending\r\n this._solver.applyToNodes(this._weight);\r\n }\r\n\r\n /**\r\n * Reset the IK solver to initial state.\r\n */\r\n reset(): void {\r\n // IK solvers typically don't need explicit reset\r\n // as they solve based on current joint positions\r\n }\r\n}\r\n"],"names":["IKPostProcessor","SkeletonPostProcessor","_solver","_target","solver","target","weight","priority","clone","setTarget","set","apply","_skeleton","_deltaTime","_enabled","_weight","solve","applyToNodes","reset"],"mappings":";;AAKA;;;;;;;;;;;;;;;;IAiBO,MAAMA,eAA4DC,SAAAA,qBAAAA,CAAAA;IAC/DC,OAAgB;IAChBC,OAAiB;AAEzB;;;;;;;MAQA,WAAA,CAAYC,MAAc,EAAEC,MAAe,EAAEC,SAAiB,GAAG,EAAEC,QAAmB,GAAA,EAAE,CAAE;AACxF,QAAA,KAAK,CAACD,MAAQC,EAAAA,QAAAA,CAAAA;QACd,IAAI,CAACL,OAAO,GAAGE,MAAAA;AACf,QAAA,IAAI,CAACD,OAAO,GAAGE,MAAAA,CAAOG,KAAK,EAAA;AAC7B;AAEA;;AAEC,MACD,IAAIJ,MAAiB,GAAA;QACnB,OAAO,IAAI,CAACF,OAAO;AACrB;AAEA;;AAEC,MACD,IAAIG,MAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAACF,OAAO,CAACK,KAAK,EAAA;AAC3B;AAEA;;;;MAKAC,SAAAA,CAAUJ,MAAe,EAAQ;AAC/B,QAAA,IAAI,CAACF,OAAO,CAACO,GAAG,CAACL,MAAAA,CAAAA;AACnB;AAEA;;AAEC,MACDM,KAAMC,CAAAA,SAAmB,EAAEC,UAAkB,EAAQ;QACnD,IAAI,CAAC,IAAI,CAACC,QAAQ,IAAI,IAAI,CAACC,OAAO,IAAI,CAAG,EAAA;AACvC,YAAA;AACF;;AAGA,QAAA,IAAI,CAACb,OAAO,CAACc,KAAK,CAAC,IAAI,CAACb,OAAO,CAAA;;AAG/B,QAAA,IAAI,CAACD,OAAO,CAACe,YAAY,CAAC,IAAI,CAACF,OAAO,CAAA;AACxC;AAEA;;AAEC,MACDG,KAAc,GAAA;;;AAGd;AACF;;;;"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Vector3, Quaternion } from '@zephyr3d/base';
|
|
2
|
+
import { SkeletonPostProcessor } from './skeleton_postprocessor.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Post-processor for manual joint transform control.
|
|
6
|
+
*
|
|
7
|
+
* Allows setting custom transforms for specific joints that blend with
|
|
8
|
+
* the base animation/bind pose layer.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const processor = new ManualTransformProcessor();
|
|
13
|
+
* processor.setJointPosition(5, new Vector3(1, 2, 3));
|
|
14
|
+
* processor.setJointRotation(5, Quaternion.fromEuler(0, Math.PI / 2, 0));
|
|
15
|
+
* skeleton.addPostProcessor(processor);
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @public
|
|
19
|
+
*/ class ManualTransformProcessor extends SkeletonPostProcessor {
|
|
20
|
+
/** Map of joint index to transform overrides */ _overrides;
|
|
21
|
+
constructor(weight = 1.0, priority = 100){
|
|
22
|
+
super(weight, priority);
|
|
23
|
+
this._overrides = new Map();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Set position override for a joint.
|
|
27
|
+
*
|
|
28
|
+
* @param jointIndex - Index of the joint in the skeleton
|
|
29
|
+
* @param position - New local position (will be cloned)
|
|
30
|
+
*/ setJointPosition(jointIndex, position) {
|
|
31
|
+
let override = this._overrides.get(jointIndex);
|
|
32
|
+
if (!override) {
|
|
33
|
+
override = {};
|
|
34
|
+
this._overrides.set(jointIndex, override);
|
|
35
|
+
}
|
|
36
|
+
override.position = position.clone();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Set rotation override for a joint.
|
|
40
|
+
*
|
|
41
|
+
* @param jointIndex - Index of the joint in the skeleton
|
|
42
|
+
* @param rotation - New local rotation (will be cloned)
|
|
43
|
+
*/ setJointRotation(jointIndex, rotation) {
|
|
44
|
+
let override = this._overrides.get(jointIndex);
|
|
45
|
+
if (!override) {
|
|
46
|
+
override = {};
|
|
47
|
+
this._overrides.set(jointIndex, override);
|
|
48
|
+
}
|
|
49
|
+
override.rotation = rotation.clone();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Set scale override for a joint.
|
|
53
|
+
*
|
|
54
|
+
* @param jointIndex - Index of the joint in the skeleton
|
|
55
|
+
* @param scale - New local scale (will be cloned)
|
|
56
|
+
*/ setJointScale(jointIndex, scale) {
|
|
57
|
+
let override = this._overrides.get(jointIndex);
|
|
58
|
+
if (!override) {
|
|
59
|
+
override = {};
|
|
60
|
+
this._overrides.set(jointIndex, override);
|
|
61
|
+
}
|
|
62
|
+
override.scale = scale.clone();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Set full transform override for a joint.
|
|
66
|
+
*
|
|
67
|
+
* @param jointIndex - Index of the joint in the skeleton
|
|
68
|
+
* @param position - New local position (optional)
|
|
69
|
+
* @param rotation - New local rotation (optional)
|
|
70
|
+
* @param scale - New local scale (optional)
|
|
71
|
+
*/ setJointTransform(jointIndex, position, rotation, scale) {
|
|
72
|
+
const override = {};
|
|
73
|
+
if (position) {
|
|
74
|
+
override.position = position.clone();
|
|
75
|
+
}
|
|
76
|
+
if (rotation) {
|
|
77
|
+
override.rotation = rotation.clone();
|
|
78
|
+
}
|
|
79
|
+
if (scale) {
|
|
80
|
+
override.scale = scale.clone();
|
|
81
|
+
}
|
|
82
|
+
this._overrides.set(jointIndex, override);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Clear override for a specific joint.
|
|
86
|
+
*
|
|
87
|
+
* @param jointIndex - Index of the joint to clear
|
|
88
|
+
*/ clearJoint(jointIndex) {
|
|
89
|
+
this._overrides.delete(jointIndex);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Clear all joint overrides.
|
|
93
|
+
*/ clearAll() {
|
|
94
|
+
this._overrides.clear();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if a joint has any overrides.
|
|
98
|
+
*
|
|
99
|
+
* @param jointIndex - Index of the joint to check
|
|
100
|
+
* @returns True if the joint has overrides
|
|
101
|
+
*/ hasOverride(jointIndex) {
|
|
102
|
+
return this._overrides.has(jointIndex);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get the number of joints with overrides.
|
|
106
|
+
*/ get overrideCount() {
|
|
107
|
+
return this._overrides.size;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Apply manual transform overrides to skeleton joints.
|
|
111
|
+
*/ apply(skeleton, _deltaTime) {
|
|
112
|
+
if (!this._enabled || this._overrides.size === 0 || this._weight <= 0) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const joints = skeleton.joints;
|
|
116
|
+
const weight = this._weight;
|
|
117
|
+
this._overrides.forEach((override, jointIndex)=>{
|
|
118
|
+
if (jointIndex < 0 || jointIndex >= joints.length) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const joint = joints[jointIndex];
|
|
122
|
+
// Blend position
|
|
123
|
+
if (override.position) {
|
|
124
|
+
if (weight >= 1) {
|
|
125
|
+
joint.position = override.position;
|
|
126
|
+
} else {
|
|
127
|
+
joint.position = Vector3.combine(joint.position, override.position, weight, 1 - weight);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Blend rotation
|
|
131
|
+
if (override.rotation) {
|
|
132
|
+
if (weight >= 1) {
|
|
133
|
+
joint.rotation = override.rotation;
|
|
134
|
+
} else {
|
|
135
|
+
joint.rotation = Quaternion.slerp(joint.rotation, override.rotation, weight);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Blend scale
|
|
139
|
+
if (override.scale) {
|
|
140
|
+
if (weight >= 1) {
|
|
141
|
+
joint.scale = override.scale;
|
|
142
|
+
} else {
|
|
143
|
+
joint.scale = Vector3.combine(joint.scale, override.scale, weight, 1 - weight);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Reset the processor (clears all overrides).
|
|
150
|
+
*/ reset() {
|
|
151
|
+
this._overrides.clear();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export { ManualTransformProcessor };
|
|
156
|
+
//# sourceMappingURL=manual_transform_processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual_transform_processor.js","sources":["../../src/animation/manual_transform_processor.ts"],"sourcesContent":["import { Vector3, Quaternion } from '@zephyr3d/base';\r\nimport { SkeletonPostProcessor } from './skeleton_postprocessor';\r\nimport type { Skeleton } from './skeleton';\r\n\r\n/**\r\n * Manual transform override for specific joints.\r\n *\r\n * Stores position, rotation, and scale overrides for joints and blends them\r\n * with the base animation layer.\r\n */\r\ninterface JointOverride {\r\n position?: Vector3;\r\n rotation?: Quaternion;\r\n scale?: Vector3;\r\n}\r\n\r\n/**\r\n * Post-processor for manual joint transform control.\r\n *\r\n * Allows setting custom transforms for specific joints that blend with\r\n * the base animation/bind pose layer.\r\n *\r\n * @example\r\n * ```typescript\r\n * const processor = new ManualTransformProcessor();\r\n * processor.setJointPosition(5, new Vector3(1, 2, 3));\r\n * processor.setJointRotation(5, Quaternion.fromEuler(0, Math.PI / 2, 0));\r\n * skeleton.addPostProcessor(processor);\r\n * ```\r\n *\r\n * @public\r\n */\r\nexport class ManualTransformProcessor extends SkeletonPostProcessor {\r\n /** Map of joint index to transform overrides */\r\n private _overrides: Map<number, JointOverride>;\r\n\r\n constructor(weight: number = 1.0, priority: number = 100) {\r\n super(weight, priority);\r\n this._overrides = new Map();\r\n }\r\n\r\n /**\r\n * Set position override for a joint.\r\n *\r\n * @param jointIndex - Index of the joint in the skeleton\r\n * @param position - New local position (will be cloned)\r\n */\r\n setJointPosition(jointIndex: number, position: Vector3): void {\r\n let override = this._overrides.get(jointIndex);\r\n if (!override) {\r\n override = {};\r\n this._overrides.set(jointIndex, override);\r\n }\r\n override.position = position.clone();\r\n }\r\n\r\n /**\r\n * Set rotation override for a joint.\r\n *\r\n * @param jointIndex - Index of the joint in the skeleton\r\n * @param rotation - New local rotation (will be cloned)\r\n */\r\n setJointRotation(jointIndex: number, rotation: Quaternion): void {\r\n let override = this._overrides.get(jointIndex);\r\n if (!override) {\r\n override = {};\r\n this._overrides.set(jointIndex, override);\r\n }\r\n override.rotation = rotation.clone();\r\n }\r\n\r\n /**\r\n * Set scale override for a joint.\r\n *\r\n * @param jointIndex - Index of the joint in the skeleton\r\n * @param scale - New local scale (will be cloned)\r\n */\r\n setJointScale(jointIndex: number, scale: Vector3): void {\r\n let override = this._overrides.get(jointIndex);\r\n if (!override) {\r\n override = {};\r\n this._overrides.set(jointIndex, override);\r\n }\r\n override.scale = scale.clone();\r\n }\r\n\r\n /**\r\n * Set full transform override for a joint.\r\n *\r\n * @param jointIndex - Index of the joint in the skeleton\r\n * @param position - New local position (optional)\r\n * @param rotation - New local rotation (optional)\r\n * @param scale - New local scale (optional)\r\n */\r\n setJointTransform(jointIndex: number, position?: Vector3, rotation?: Quaternion, scale?: Vector3): void {\r\n const override: JointOverride = {};\r\n if (position) {\r\n override.position = position.clone();\r\n }\r\n if (rotation) {\r\n override.rotation = rotation.clone();\r\n }\r\n if (scale) {\r\n override.scale = scale.clone();\r\n }\r\n this._overrides.set(jointIndex, override);\r\n }\r\n\r\n /**\r\n * Clear override for a specific joint.\r\n *\r\n * @param jointIndex - Index of the joint to clear\r\n */\r\n clearJoint(jointIndex: number): void {\r\n this._overrides.delete(jointIndex);\r\n }\r\n\r\n /**\r\n * Clear all joint overrides.\r\n */\r\n clearAll(): void {\r\n this._overrides.clear();\r\n }\r\n\r\n /**\r\n * Check if a joint has any overrides.\r\n *\r\n * @param jointIndex - Index of the joint to check\r\n * @returns True if the joint has overrides\r\n */\r\n hasOverride(jointIndex: number): boolean {\r\n return this._overrides.has(jointIndex);\r\n }\r\n\r\n /**\r\n * Get the number of joints with overrides.\r\n */\r\n get overrideCount(): number {\r\n return this._overrides.size;\r\n }\r\n\r\n /**\r\n * Apply manual transform overrides to skeleton joints.\r\n */\r\n apply(skeleton: Skeleton, _deltaTime: number): void {\r\n if (!this._enabled || this._overrides.size === 0 || this._weight <= 0) {\r\n return;\r\n }\r\n\r\n const joints = skeleton.joints;\r\n const weight = this._weight;\r\n\r\n this._overrides.forEach((override, jointIndex) => {\r\n if (jointIndex < 0 || jointIndex >= joints.length) {\r\n return;\r\n }\r\n\r\n const joint = joints[jointIndex];\r\n\r\n // Blend position\r\n if (override.position) {\r\n if (weight >= 1) {\r\n joint.position = override.position;\r\n } else {\r\n joint.position = Vector3.combine(joint.position, override.position, weight, 1 - weight);\r\n }\r\n }\r\n\r\n // Blend rotation\r\n if (override.rotation) {\r\n if (weight >= 1) {\r\n joint.rotation = override.rotation;\r\n } else {\r\n joint.rotation = Quaternion.slerp(joint.rotation, override.rotation, weight);\r\n }\r\n }\r\n\r\n // Blend scale\r\n if (override.scale) {\r\n if (weight >= 1) {\r\n joint.scale = override.scale;\r\n } else {\r\n joint.scale = Vector3.combine(joint.scale, override.scale, weight, 1 - weight);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reset the processor (clears all overrides).\r\n */\r\n reset(): void {\r\n this._overrides.clear();\r\n }\r\n}\r\n"],"names":["ManualTransformProcessor","SkeletonPostProcessor","weight","priority","_overrides","Map","setJointPosition","jointIndex","position","override","get","set","clone","setJointRotation","rotation","setJointScale","scale","setJointTransform","clearJoint","delete","clearAll","clear","hasOverride","has","overrideCount","size","apply","skeleton","_deltaTime","_enabled","_weight","joints","forEach","length","joint","Vector3","combine","Quaternion","slerp","reset"],"mappings":"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"}
|
|
@@ -32,42 +32,32 @@ const tmpV3 = new Vector3();
|
|
|
32
32
|
/** @internal */ _id;
|
|
33
33
|
/** @internal */ _joints;
|
|
34
34
|
/** @internal */ _inverseBindMatrices;
|
|
35
|
-
/** @internal */
|
|
35
|
+
/** @internal */ _bindPose;
|
|
36
36
|
/** @internal */ _jointMatrices;
|
|
37
|
-
/** @internal */ _jointTransforms;
|
|
38
37
|
/** @internal */ _jointOffsets;
|
|
39
38
|
/** @internal */ _jointMatrixArray;
|
|
40
39
|
/** @internal */ _jointTexture;
|
|
41
40
|
/** @internal */ _playing;
|
|
41
|
+
/** @internal */ _modifiers;
|
|
42
|
+
/** @internal */ _lastUpdateTime;
|
|
42
43
|
/**
|
|
43
44
|
* Create a skeleton instance.
|
|
44
45
|
*
|
|
45
46
|
* @param joints - Joint scene nodes (one per joint), ordered to match skin data.
|
|
46
47
|
* @param inverseBindMatrices - Inverse bind matrices for each joint.
|
|
47
48
|
* @param bindPoseMatrices - Bind pose matrices for each joint (model-space).
|
|
48
|
-
*/ constructor(joints, inverseBindMatrices,
|
|
49
|
+
*/ constructor(joints, inverseBindMatrices, bindPose){
|
|
49
50
|
super();
|
|
50
51
|
this._id = randomUUID();
|
|
51
52
|
this._joints = joints;
|
|
52
53
|
this._inverseBindMatrices = inverseBindMatrices;
|
|
53
|
-
this.
|
|
54
|
+
this._bindPose = bindPose;
|
|
54
55
|
this._jointTexture = new DRef();
|
|
55
56
|
this._playing = false;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
this._joints[i].rotation = jointTransforms[i].rotation;
|
|
61
|
-
this._joints[i].position = jointTransforms[i].position;
|
|
62
|
-
}
|
|
63
|
-
} else {
|
|
64
|
-
this._jointTransforms = this._joints.map((joint)=>({
|
|
65
|
-
scale: joint.scale.clone(),
|
|
66
|
-
rotation: joint.rotation.clone(),
|
|
67
|
-
position: joint.position.clone()
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
this.updateJointMatrices();
|
|
57
|
+
this._modifiers = [];
|
|
58
|
+
this._lastUpdateTime = 0;
|
|
59
|
+
this.computeBindPose();
|
|
60
|
+
this.updateJointMatrices(0);
|
|
71
61
|
Skeleton._registry.set(this._id, new DWeakRef(this));
|
|
72
62
|
}
|
|
73
63
|
/**
|
|
@@ -87,14 +77,11 @@ const tmpV3 = new Vector3();
|
|
|
87
77
|
/** @internal */ get joints() {
|
|
88
78
|
return this._joints;
|
|
89
79
|
}
|
|
90
|
-
/** @internal */ get jointTransforms() {
|
|
91
|
-
return this._jointTransforms;
|
|
92
|
-
}
|
|
93
80
|
/** @internal */ get inverseBindMatrices() {
|
|
94
81
|
return this._inverseBindMatrices;
|
|
95
82
|
}
|
|
96
|
-
/** @internal */ get
|
|
97
|
-
return this.
|
|
83
|
+
/** @internal */ get bindPose() {
|
|
84
|
+
return this._bindPose;
|
|
98
85
|
}
|
|
99
86
|
/** @internal */ get playing() {
|
|
100
87
|
return this._playing;
|
|
@@ -124,6 +111,20 @@ const tmpV3 = new Vector3();
|
|
|
124
111
|
return this._jointTexture.get();
|
|
125
112
|
}
|
|
126
113
|
/**
|
|
114
|
+
* Get joint index by joint node
|
|
115
|
+
* @param joint - joint node
|
|
116
|
+
* @returns The index of the joint
|
|
117
|
+
*/ getJointIndex(joint) {
|
|
118
|
+
return this._joints.indexOf(joint);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get joint index by joint name
|
|
122
|
+
* @param jointName - joint name
|
|
123
|
+
* @returns The index of the joint
|
|
124
|
+
*/ getJointIndexByName(jointName) {
|
|
125
|
+
return this._joints.findIndex((joint)=>joint.name === jointName);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
127
128
|
* Update joint matrices from either provided transforms or the joints' world matrices.
|
|
128
129
|
*
|
|
129
130
|
* - Lazily creates the joint texture and its backing arrays on first call.
|
|
@@ -138,7 +139,8 @@ const tmpV3 = new Vector3();
|
|
|
138
139
|
* @param jointTransforms - Optional per-joint transforms to use instead of node world matrices.
|
|
139
140
|
* @param worldMatrix - Optional world-to-model transform applied before inverse bind.
|
|
140
141
|
* @internal
|
|
141
|
-
*/ updateJointMatrices(
|
|
142
|
+
*/ updateJointMatrices(deltaTime) {
|
|
143
|
+
this.applyModifiers(deltaTime);
|
|
142
144
|
if (!this._jointTexture.get()) {
|
|
143
145
|
this._createJointTexture();
|
|
144
146
|
}
|
|
@@ -150,48 +152,50 @@ const tmpV3 = new Vector3();
|
|
|
150
152
|
this._jointOffsets[0] = this._joints.length - this._jointOffsets[0] + 2;
|
|
151
153
|
}
|
|
152
154
|
for(let i = 0; i < this._joints.length; i++){
|
|
153
|
-
|
|
154
|
-
const jointTransform = jointTransforms ? jointTransforms[i] : this._joints[i].worldMatrix;
|
|
155
|
-
if (worldMatrix) {
|
|
156
|
-
Matrix4x4.multiplyAffine(worldMatrix, jointTransform, mat);
|
|
157
|
-
Matrix4x4.multiply(mat, this._inverseBindMatrices[i], mat);
|
|
158
|
-
} else {
|
|
159
|
-
Matrix4x4.multiply(jointTransform, this._inverseBindMatrices[i], mat);
|
|
160
|
-
}
|
|
155
|
+
Matrix4x4.multiply(this._joints[i].worldMatrix, this._inverseBindMatrices[i], this._jointMatrices[i + this._jointOffsets[0] - 1]);
|
|
161
156
|
}
|
|
162
157
|
}
|
|
163
158
|
/**
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
* - Fills the "current" ring buffer slot with bind pose transforms.
|
|
167
|
-
* - Uploads the entire matrix array to the GPU texture.
|
|
159
|
+
* Reset skeleton to bind pose
|
|
168
160
|
*
|
|
169
|
-
* @param model - The model node whose world matrix provides the reference space.
|
|
170
161
|
* @internal
|
|
171
|
-
*/ computeBindPose(
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
162
|
+
*/ computeBindPose() {
|
|
163
|
+
for(let i = 0; i < this._joints.length; i++){
|
|
164
|
+
const joint = this._joints[i];
|
|
165
|
+
const bindpose = this._bindPose[i];
|
|
166
|
+
joint.position.set(bindpose.position);
|
|
167
|
+
joint.rotation.set(bindpose.rotation);
|
|
168
|
+
joint.scale.set(bindpose.scale);
|
|
169
|
+
}
|
|
176
170
|
}
|
|
177
171
|
/**
|
|
178
172
|
* Compute current joint matrices from the nodes and upload them to the joint texture.
|
|
179
173
|
*
|
|
180
174
|
* @internal
|
|
181
|
-
*/
|
|
182
|
-
this.updateJointMatrices();
|
|
175
|
+
*/ apply(deltaTime) {
|
|
176
|
+
this.updateJointMatrices(deltaTime);
|
|
183
177
|
const tex = this.jointTexture;
|
|
184
178
|
tex.update(this._jointMatrixArray, 0, 0, tex.width, tex.height);
|
|
185
179
|
}
|
|
186
180
|
/**
|
|
187
|
-
* Apply
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
181
|
+
* Apply all enabled modifiers.
|
|
182
|
+
*
|
|
183
|
+
* Modifiers are applied after the base animation/bind pose layer,
|
|
184
|
+
* allowing procedural modifications like IK, spring physics, or manual overrides.
|
|
191
185
|
*
|
|
186
|
+
* @param deltaTime - Time elapsed since last frame (in seconds)
|
|
192
187
|
* @internal
|
|
193
|
-
*/
|
|
194
|
-
this.
|
|
188
|
+
*/ applyModifiers(deltaTime) {
|
|
189
|
+
for (const modifier of this._modifiers){
|
|
190
|
+
modifier.apply(this, deltaTime);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get all modifiers attached to this skeleton.
|
|
195
|
+
*
|
|
196
|
+
* @public
|
|
197
|
+
*/ get modifiers() {
|
|
198
|
+
return this._modifiers;
|
|
195
199
|
}
|
|
196
200
|
/**
|
|
197
201
|
* Reset all meshes to an unskinned state and clear animated bounds.
|