@zephyr3d/scene 0.9.25 → 0.9.27
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 +92 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
- package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
- package/dist/animation/joint_dynamics/controller.js +7 -5
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -4
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/skeleton.js +79 -25
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/spring/multi_chain_spring_system.js +577 -179
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +4 -3
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
- package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
- package/dist/animation/spring/spring_particle.js +2 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +11 -3
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +10 -0
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/engine.js +53 -43
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptingsystem.js +119 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +3 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +284 -67
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/zhair/zhair_format.js +288 -0
- package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
- package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
- package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
- package/dist/asset/model.js +184 -69
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +268 -44
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +3 -1
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +9044 -5139
- package/dist/index.js +17 -6
- package/dist/index.js.map +1 -1
- package/dist/material/eye.js +932 -0
- package/dist/material/eye.js.map +1 -0
- package/dist/material/hair.js +917 -0
- package/dist/material/hair.js.map +1 -0
- package/dist/material/hairstrand.js +842 -0
- package/dist/material/hairstrand.js.map +1 -0
- package/dist/material/hairstrand_data.js +162 -0
- package/dist/material/hairstrand_data.js.map +1 -0
- package/dist/material/lambert.js +5 -2
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +48 -10
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +120 -19
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +5 -4
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +106 -19
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +4 -4
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +48 -11
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mtoon.js +6 -5
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrblueprint.js +146 -28
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrblueprint_instance.js +501 -0
- package/dist/material/pbrblueprint_instance.js.map +1 -0
- package/dist/material/pbrmr.js +15 -16
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/shader/helper.js +734 -23
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +55 -0
- package/dist/material/shader/terrain_blend.js.map +1 -0
- package/dist/material/skin.js +192 -32
- package/dist/material/skin.js.map +1 -1
- package/dist/material/spriteblueprint.js +16 -1
- package/dist/material/spriteblueprint.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +86 -23
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/water.js +2059 -72
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +167 -7
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/coloradjust.js +2 -1
- package/dist/posteffect/coloradjust.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +2 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +3 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +664 -56
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +46 -44
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +368 -69
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +16 -9
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +121 -36
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +44 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +8 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +156 -5
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cull_visitor.js +20 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +36 -2
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +26 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +3 -2
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +6 -3
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +57 -15
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +130 -20
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +6 -3
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/oit.js +29 -0
- package/dist/render/oit.js.map +1 -0
- package/dist/render/render_queue.js +39 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +4 -0
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +1 -0
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +2 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +379 -10
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/shadow_mask_pass.js +73 -8
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/sky.js +166 -126
- package/dist/render/sky.js.map +1 -1
- package/dist/render/underwater.js +624 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/water_caustics.js +1380 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/weightedblended_oit.js +3 -2
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +8 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +4 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/hair.js +963 -0
- package/dist/scene/hair.js.map +1 -0
- package/dist/scene/light.js +5 -1
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +481 -47
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +3 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +3 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +6 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +3 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +6 -1
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +3 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +6 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/texture_cache.js +309 -0
- package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
- package/dist/scene/water.js +546 -4
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/diffusion.js +54 -0
- package/dist/shaders/diffusion.js.map +1 -0
- package/dist/shaders/shadow.js +33 -21
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/temporal.js +71 -33
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +22 -19
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +56 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +546 -0
- package/dist/shadow/dom.js.map +1 -0
- package/dist/shadow/pcf_opt.js +3 -5
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/receiver_bias.js +41 -0
- package/dist/shadow/receiver_bias.js.map +1 -0
- package/dist/shadow/shader.js +20 -60
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +89 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +1 -1
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +150 -37
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/shape.js +11 -2
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +50 -9
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +112 -2
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +142 -49
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +490 -25
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +898 -4
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +434 -101
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +401 -5
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +186 -26
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +26 -5
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/hair.js +1141 -0
- package/dist/utility/serialization/scene/hair.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +84 -4
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1867 -166
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +231 -14
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +141 -7
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +4 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +4 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +4 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1105 -21
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +9 -8
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/values.js +49 -2
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/render/rendergraph/frame_graph_context.js +0 -41
- package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
- package/dist/shaders/ssgi.js +0 -63
- package/dist/shaders/ssgi.js.map +0 -1
- package/dist/shaders/ssgi_reprojection.js +0 -118
- package/dist/shaders/ssgi_reprojection.js.map +0 -1
|
@@ -13,6 +13,13 @@ import { FixedGeometryCacheTrack } from '../../../animation/fixed_geometry_cache
|
|
|
13
13
|
import { BoundingBox } from '../../bounding_volume.js';
|
|
14
14
|
import { PCAGeometryCacheTrack } from '../../../animation/pca_geometry_cache_track.js';
|
|
15
15
|
import { Skeleton, SkeletonRig, SkinBinding } from '../../../animation/skeleton.js';
|
|
16
|
+
import { SpringModifier } from '../../../animation/spring_modifier.js';
|
|
17
|
+
import { createSpringParticle } from '../../../animation/spring/spring_particle.js';
|
|
18
|
+
import { createSpringConstraint } from '../../../animation/spring/spring_constraint.js';
|
|
19
|
+
import { SpringChain } from '../../../animation/spring/spring_chain.js';
|
|
20
|
+
import { SpringSystem } from '../../../animation/spring/spring_system.js';
|
|
21
|
+
import { MultiChainSpringSystem } from '../../../animation/spring/multi_chain_spring_system.js';
|
|
22
|
+
import { createPlaneCollider, createCapsuleCollider, createSphereCollider } from '../../../animation/spring/spring_collider.js';
|
|
16
23
|
import '@zephyr3d/device';
|
|
17
24
|
import '../../../animation/joint_dynamics/collision.js';
|
|
18
25
|
import '../../../animation/joint_dynamics/solver.js';
|
|
@@ -30,7 +37,10 @@ import '../../../material/unlit.js';
|
|
|
30
37
|
import '../../../material/particle.js';
|
|
31
38
|
import '../../../material/subsurfaceprofile.js';
|
|
32
39
|
import '../../../material/skin.js';
|
|
40
|
+
import '../../../material/eye.js';
|
|
33
41
|
import '../../../material/meshmaterial.js';
|
|
42
|
+
import '../../../material/hair.js';
|
|
43
|
+
import '../../../material/hairstrand.js';
|
|
34
44
|
import '../../../material/grassmaterial.js';
|
|
35
45
|
import '../../../material/terrain-cm.js';
|
|
36
46
|
import '../../../material/pbrmr.js';
|
|
@@ -55,6 +65,7 @@ import '../../../scene/meshdrawable.js';
|
|
|
55
65
|
import '../../../scene/basesprite.js';
|
|
56
66
|
import '../../../material/msdf_text.js';
|
|
57
67
|
import '../../../scene/water.js';
|
|
68
|
+
import '../../../scene/hair.js';
|
|
58
69
|
import '../../../scene/particlesys.js';
|
|
59
70
|
import '../../../scene/batchgroup.js';
|
|
60
71
|
import '../../../scene/terrain-cm/terrain-cm.js';
|
|
@@ -62,6 +73,7 @@ import '../../../scene/terrain-cm/grass.js';
|
|
|
62
73
|
import '../../../scene/raycast_visitor.js';
|
|
63
74
|
|
|
64
75
|
const jointDynamicsModifierSkeletons = new WeakMap();
|
|
76
|
+
const springModifierSkeletons = new WeakMap();
|
|
65
77
|
function encodeSkeletonBindPose(bindPose) {
|
|
66
78
|
return uint8ArrayToBase64(new Uint8Array(new Float32Array([
|
|
67
79
|
...bindPose.position,
|
|
@@ -77,6 +89,29 @@ function decodeSkeletonBindPose(encoded) {
|
|
|
77
89
|
scale: new Vector3(data[7], data[8], data[9])
|
|
78
90
|
};
|
|
79
91
|
}
|
|
92
|
+
function encodeSkeletonPose(pose) {
|
|
93
|
+
const values = pose.flatMap((transform)=>[
|
|
94
|
+
...transform.position,
|
|
95
|
+
...transform.rotation,
|
|
96
|
+
...transform.scale
|
|
97
|
+
]);
|
|
98
|
+
return uint8ArrayToBase64(new Uint8Array(new Float32Array(values).buffer));
|
|
99
|
+
}
|
|
100
|
+
function decodeSkeletonPose(encoded, jointCount) {
|
|
101
|
+
const data = new Float32Array(base64ToUint8Array(encoded).buffer);
|
|
102
|
+
if (data.length !== jointCount * 10) {
|
|
103
|
+
throw new Error('Invalid serialized skeleton pose');
|
|
104
|
+
}
|
|
105
|
+
const pose = [];
|
|
106
|
+
for(let i = 0; i < jointCount; i++){
|
|
107
|
+
pose.push({
|
|
108
|
+
position: new Vector3(data[i * 10 + 0], data[i * 10 + 1], data[i * 10 + 2]),
|
|
109
|
+
rotation: new Quaternion(data[i * 10 + 3], data[i * 10 + 4], data[i * 10 + 5], data[i * 10 + 6]),
|
|
110
|
+
scale: new Vector3(data[i * 10 + 7], data[i * 10 + 8], data[i * 10 + 9])
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return pose;
|
|
114
|
+
}
|
|
80
115
|
function vectorToArray(value) {
|
|
81
116
|
return [
|
|
82
117
|
value.x,
|
|
@@ -87,6 +122,216 @@ function vectorToArray(value) {
|
|
|
87
122
|
function vectorFromArray(value, defaultValue = Vector3.zero()) {
|
|
88
123
|
return Array.isArray(value) ? new Vector3(value[0] ?? 0, value[1] ?? 0, value[2] ?? 0) : defaultValue.clone();
|
|
89
124
|
}
|
|
125
|
+
function quaternionToArray(value) {
|
|
126
|
+
return [
|
|
127
|
+
value.x,
|
|
128
|
+
value.y,
|
|
129
|
+
value.z,
|
|
130
|
+
value.w
|
|
131
|
+
];
|
|
132
|
+
}
|
|
133
|
+
function quaternionFromArray(value) {
|
|
134
|
+
return Array.isArray(value) ? new Quaternion(value[0] ?? 0, value[1] ?? 0, value[2] ?? 0, value[3] ?? 1) : undefined;
|
|
135
|
+
}
|
|
136
|
+
function serializeSpringChain(chain) {
|
|
137
|
+
return {
|
|
138
|
+
particles: chain.particles.map((particle)=>({
|
|
139
|
+
...particle.node ? {
|
|
140
|
+
node: particle.node.persistentId
|
|
141
|
+
} : {},
|
|
142
|
+
...particle.anchorNode ? {
|
|
143
|
+
anchorNode: particle.anchorNode.persistentId
|
|
144
|
+
} : {},
|
|
145
|
+
...particle.anchorOffset ? {
|
|
146
|
+
anchorOffset: vectorToArray(particle.anchorOffset)
|
|
147
|
+
} : {},
|
|
148
|
+
originalPosition: vectorToArray(particle.originalPosition),
|
|
149
|
+
...particle.originalRotation ? {
|
|
150
|
+
originalRotation: quaternionToArray(particle.originalRotation)
|
|
151
|
+
} : {},
|
|
152
|
+
mass: particle.mass,
|
|
153
|
+
damping: particle.damping,
|
|
154
|
+
fixed: particle.fixed
|
|
155
|
+
})),
|
|
156
|
+
constraints: chain.constraints.map((constraint)=>({
|
|
157
|
+
particleA: constraint.particleA,
|
|
158
|
+
particleB: constraint.particleB,
|
|
159
|
+
restLength: constraint.restLength,
|
|
160
|
+
stiffness: constraint.stiffness,
|
|
161
|
+
compliance: constraint.compliance
|
|
162
|
+
}))
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function deserializeSpringChain(ctx, data) {
|
|
166
|
+
const chain = new SpringChain();
|
|
167
|
+
for (const item of data.particles ?? []){
|
|
168
|
+
const node = findSerializedNode(ctx, item.node);
|
|
169
|
+
const anchorNode = findSerializedNode(ctx, item.anchorNode);
|
|
170
|
+
if (item.node && !node || item.anchorNode && !anchorNode) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
const position = node ? new Vector3(node.worldMatrix.m03, node.worldMatrix.m13, node.worldMatrix.m23) : vectorFromArray(item.originalPosition);
|
|
174
|
+
let originalRotation = quaternionFromArray(item.originalRotation);
|
|
175
|
+
if (node) {
|
|
176
|
+
originalRotation = new Quaternion();
|
|
177
|
+
node.worldMatrix.decompose(null, originalRotation, null);
|
|
178
|
+
}
|
|
179
|
+
chain.addParticle(createSpringParticle(position, {
|
|
180
|
+
mass: item.mass,
|
|
181
|
+
damping: item.damping,
|
|
182
|
+
fixed: item.fixed,
|
|
183
|
+
node: node ?? undefined,
|
|
184
|
+
anchorNode: anchorNode ?? undefined,
|
|
185
|
+
anchorOffset: item.anchorOffset ? vectorFromArray(item.anchorOffset) : undefined,
|
|
186
|
+
originalRotation
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
for (const item of data.constraints ?? []){
|
|
190
|
+
if (item.particleA < 0 || item.particleB < 0 || item.particleA >= chain.particles.length || item.particleB >= chain.particles.length) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
chain.addConstraint(createSpringConstraint(item.particleA, item.particleB, item.restLength, item.stiffness, item.compliance));
|
|
194
|
+
}
|
|
195
|
+
return chain.particles.length > 0 ? chain : null;
|
|
196
|
+
}
|
|
197
|
+
function serializeSpringCollider(collider) {
|
|
198
|
+
switch(collider.type){
|
|
199
|
+
case 'sphere':
|
|
200
|
+
{
|
|
201
|
+
const sphere = collider;
|
|
202
|
+
return {
|
|
203
|
+
type: 'sphere',
|
|
204
|
+
...sphere.node ? {
|
|
205
|
+
node: sphere.node.persistentId
|
|
206
|
+
} : {},
|
|
207
|
+
enabled: sphere.enabled,
|
|
208
|
+
center: vectorToArray(sphere.center),
|
|
209
|
+
radius: sphere.radius,
|
|
210
|
+
...sphere.localRadius !== undefined ? {
|
|
211
|
+
localRadius: sphere.localRadius
|
|
212
|
+
} : {},
|
|
213
|
+
...sphere.localRadiusScaleRef !== undefined ? {
|
|
214
|
+
localRadiusScaleRef: sphere.localRadiusScaleRef
|
|
215
|
+
} : {},
|
|
216
|
+
...sphere.localOffset ? {
|
|
217
|
+
localOffset: vectorToArray(sphere.localOffset)
|
|
218
|
+
} : {}
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
case 'capsule':
|
|
222
|
+
{
|
|
223
|
+
const capsule = collider;
|
|
224
|
+
return {
|
|
225
|
+
type: 'capsule',
|
|
226
|
+
...capsule.node ? {
|
|
227
|
+
node: capsule.node.persistentId
|
|
228
|
+
} : {},
|
|
229
|
+
enabled: capsule.enabled,
|
|
230
|
+
start: vectorToArray(capsule.start),
|
|
231
|
+
end: vectorToArray(capsule.end),
|
|
232
|
+
radius: capsule.radius,
|
|
233
|
+
...capsule.localRadius !== undefined ? {
|
|
234
|
+
localRadius: capsule.localRadius
|
|
235
|
+
} : {},
|
|
236
|
+
...capsule.localRadiusScaleRef !== undefined ? {
|
|
237
|
+
localRadiusScaleRef: capsule.localRadiusScaleRef
|
|
238
|
+
} : {},
|
|
239
|
+
...capsule.localStartOffset ? {
|
|
240
|
+
localStartOffset: vectorToArray(capsule.localStartOffset)
|
|
241
|
+
} : {},
|
|
242
|
+
...capsule.localEndOffset ? {
|
|
243
|
+
localEndOffset: vectorToArray(capsule.localEndOffset)
|
|
244
|
+
} : {}
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
case 'plane':
|
|
248
|
+
{
|
|
249
|
+
const plane = collider;
|
|
250
|
+
return {
|
|
251
|
+
type: 'plane',
|
|
252
|
+
...plane.node ? {
|
|
253
|
+
node: plane.node.persistentId
|
|
254
|
+
} : {},
|
|
255
|
+
enabled: plane.enabled,
|
|
256
|
+
point: vectorToArray(plane.point),
|
|
257
|
+
normal: vectorToArray(plane.normal),
|
|
258
|
+
...plane.localPointOffset ? {
|
|
259
|
+
localPointOffset: vectorToArray(plane.localPointOffset)
|
|
260
|
+
} : {},
|
|
261
|
+
...plane.localNormal ? {
|
|
262
|
+
localNormal: vectorToArray(plane.localNormal)
|
|
263
|
+
} : {}
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
function restoreSpringColliderRadiusScale(collider, data) {
|
|
269
|
+
const createdScaleRef = collider.localRadiusScaleRef;
|
|
270
|
+
if (data.localRadiusScaleRef !== undefined) {
|
|
271
|
+
collider.localRadiusScaleRef = data.localRadiusScaleRef;
|
|
272
|
+
} else if (data.localRadius !== undefined && createdScaleRef !== undefined && Number.isFinite(data.localRadius) && Number.isFinite(data.radius) && Math.abs(data.radius) > 1e-6) {
|
|
273
|
+
// Older serialized modifiers omitted the authored scale reference. Recover it
|
|
274
|
+
// from the stored world radius and the node scale captured by the constructor.
|
|
275
|
+
const inferredScaleRef = data.localRadius * createdScaleRef / data.radius;
|
|
276
|
+
if (Number.isFinite(inferredScaleRef) && Math.abs(inferredScaleRef) > 1e-6) {
|
|
277
|
+
collider.localRadiusScaleRef = Math.abs(inferredScaleRef);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
collider.radius = data.radius;
|
|
281
|
+
}
|
|
282
|
+
function deserializeSpringCollider(ctx, data) {
|
|
283
|
+
const node = findSerializedNode(ctx, data.node);
|
|
284
|
+
if (data.node && !node) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
let collider;
|
|
288
|
+
switch(data.type){
|
|
289
|
+
case 'sphere':
|
|
290
|
+
{
|
|
291
|
+
const sphere = createSphereCollider(node && data.localOffset ? vectorFromArray(data.localOffset) : vectorFromArray(data.center), node ? data.localRadius ?? data.radius : data.radius, node ?? undefined);
|
|
292
|
+
restoreSpringColliderRadiusScale(sphere, data);
|
|
293
|
+
collider = sphere;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
case 'capsule':
|
|
297
|
+
{
|
|
298
|
+
const capsule = createCapsuleCollider(node && data.localStartOffset ? vectorFromArray(data.localStartOffset) : vectorFromArray(data.start), node && data.localEndOffset ? vectorFromArray(data.localEndOffset) : vectorFromArray(data.end), node ? data.localRadius ?? data.radius : data.radius, node ?? undefined);
|
|
299
|
+
restoreSpringColliderRadiusScale(capsule, data);
|
|
300
|
+
collider = capsule;
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
case 'plane':
|
|
304
|
+
collider = createPlaneCollider(node && data.localPointOffset ? vectorFromArray(data.localPointOffset) : vectorFromArray(data.point), node && data.localNormal ? vectorFromArray(data.localNormal) : vectorFromArray(data.normal), node ?? undefined);
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
collider.enabled = data.enabled;
|
|
308
|
+
return collider;
|
|
309
|
+
}
|
|
310
|
+
function getSpringSystemOptions(system) {
|
|
311
|
+
return {
|
|
312
|
+
iterations: system.iterations,
|
|
313
|
+
gravity: vectorToArray(system.gravity),
|
|
314
|
+
wind: vectorToArray(system.wind),
|
|
315
|
+
enableInertialForces: system.enableInertialForces,
|
|
316
|
+
centrifugalScale: system.centrifugalScale,
|
|
317
|
+
coriolisScale: system.coriolisScale,
|
|
318
|
+
solver: system.solver,
|
|
319
|
+
poseFollow: system.poseFollow,
|
|
320
|
+
poseFollowRoot: system.poseFollowRoot,
|
|
321
|
+
poseFollowTip: system.poseFollowTip,
|
|
322
|
+
poseFollowExponent: system.poseFollowExponent,
|
|
323
|
+
maxPoseOffset: system.maxPoseOffset,
|
|
324
|
+
maxPoseOffsetRoot: system.maxPoseOffsetRoot,
|
|
325
|
+
maxPoseOffsetTip: system.maxPoseOffsetTip
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
function deserializeSpringSystemOptions(options) {
|
|
329
|
+
return {
|
|
330
|
+
...options,
|
|
331
|
+
gravity: vectorFromArray(options.gravity, new Vector3(0, -9.8, 0)),
|
|
332
|
+
wind: vectorFromArray(options.wind)
|
|
333
|
+
};
|
|
334
|
+
}
|
|
90
335
|
function serializeScalarCurve(value) {
|
|
91
336
|
return {
|
|
92
337
|
mode: value.mode,
|
|
@@ -197,6 +442,12 @@ function setJointDynamicsModifierSkeleton(modifier, skeleton) {
|
|
|
197
442
|
function getJointDynamicsModifierSkeleton(modifier) {
|
|
198
443
|
return jointDynamicsModifierSkeletons.get(modifier) ?? null;
|
|
199
444
|
}
|
|
445
|
+
/** @internal */ function setSpringModifierSkeleton(modifier, skeleton) {
|
|
446
|
+
springModifierSkeletons.set(modifier, skeleton);
|
|
447
|
+
}
|
|
448
|
+
/** @internal */ function getSpringModifierSkeleton(modifier) {
|
|
449
|
+
return springModifierSkeletons.get(modifier) ?? null;
|
|
450
|
+
}
|
|
200
451
|
const jointDynamicsPropOptions = {
|
|
201
452
|
group: 'Joint Dynamics'
|
|
202
453
|
};
|
|
@@ -394,6 +645,135 @@ function createJointDynamicsCurveProp(name, key, label, description) {
|
|
|
394
645
|
}
|
|
395
646
|
};
|
|
396
647
|
*/ }
|
|
648
|
+
/** @internal */ function getSpringModifierClass() {
|
|
649
|
+
return {
|
|
650
|
+
ctor: SpringModifier,
|
|
651
|
+
name: 'SpringModifier',
|
|
652
|
+
createFunc (ctx, init) {
|
|
653
|
+
const skeleton = ctx.findSkeletonRigById(init.skeleton) ?? ctx.findSkeletonById(init.skeleton)?.rig ?? null;
|
|
654
|
+
if (!skeleton || !Array.isArray(init.chains) || init.chains.length === 0) {
|
|
655
|
+
return {
|
|
656
|
+
obj: null,
|
|
657
|
+
loadProps: false
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
const chains = init.chains.map((chain)=>deserializeSpringChain(ctx, chain));
|
|
661
|
+
if (chains.some((chain)=>!chain)) {
|
|
662
|
+
return {
|
|
663
|
+
obj: null,
|
|
664
|
+
loadProps: false
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
const options = deserializeSpringSystemOptions(init.options);
|
|
668
|
+
let system;
|
|
669
|
+
if (init.systemType === 'single') {
|
|
670
|
+
system = new SpringSystem(chains[0], options);
|
|
671
|
+
} else {
|
|
672
|
+
const multiChainSystem = new MultiChainSpringSystem(options);
|
|
673
|
+
for (const chain of chains){
|
|
674
|
+
multiChainSystem.addChain(chain);
|
|
675
|
+
}
|
|
676
|
+
for (const constraint of init.interChainConstraints ?? []){
|
|
677
|
+
if (constraint.chainAIndex < 0 || constraint.chainBIndex < 0 || constraint.chainAIndex >= chains.length || constraint.chainBIndex >= chains.length) {
|
|
678
|
+
continue;
|
|
679
|
+
}
|
|
680
|
+
multiChainSystem.addInterChainConstraint({
|
|
681
|
+
...constraint,
|
|
682
|
+
lambda: 0
|
|
683
|
+
});
|
|
684
|
+
}
|
|
685
|
+
system = multiChainSystem;
|
|
686
|
+
}
|
|
687
|
+
for (const colliderData of init.colliders ?? []){
|
|
688
|
+
const collider = deserializeSpringCollider(ctx, colliderData);
|
|
689
|
+
if (collider) {
|
|
690
|
+
system.addCollider(collider);
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
const modifier = new SpringModifier(system, init.weight ?? 1);
|
|
694
|
+
modifier.sourceId = init.sourceId ?? '';
|
|
695
|
+
modifier.enabled = init.enabled ?? true;
|
|
696
|
+
setSpringModifierSkeleton(modifier, skeleton);
|
|
697
|
+
return {
|
|
698
|
+
obj: modifier,
|
|
699
|
+
loadProps: false
|
|
700
|
+
};
|
|
701
|
+
},
|
|
702
|
+
getInitParams (obj) {
|
|
703
|
+
const skeleton = getSpringModifierSkeleton(obj);
|
|
704
|
+
const system = obj.springSystem;
|
|
705
|
+
const isMultiChain = system instanceof MultiChainSpringSystem;
|
|
706
|
+
if (!isMultiChain && !(system instanceof SpringSystem)) {
|
|
707
|
+
throw new Error('Serialize SpringModifier failed: Unsupported spring system type');
|
|
708
|
+
}
|
|
709
|
+
const chains = isMultiChain ? system.chains : [
|
|
710
|
+
system.chain
|
|
711
|
+
];
|
|
712
|
+
const init = {
|
|
713
|
+
skeleton: skeleton?.persistentId ?? '',
|
|
714
|
+
sourceId: obj.sourceId,
|
|
715
|
+
systemType: isMultiChain ? 'multi' : 'single',
|
|
716
|
+
options: getSpringSystemOptions(system),
|
|
717
|
+
chains: chains.map(serializeSpringChain),
|
|
718
|
+
...isMultiChain ? {
|
|
719
|
+
interChainConstraints: system.interChainConstraints.map(({ lambda: _lambda, ...constraint })=>constraint)
|
|
720
|
+
} : {},
|
|
721
|
+
colliders: system.colliders.map(serializeSpringCollider),
|
|
722
|
+
enabled: obj.enabled,
|
|
723
|
+
weight: obj.weight
|
|
724
|
+
};
|
|
725
|
+
return init;
|
|
726
|
+
},
|
|
727
|
+
getProps () {
|
|
728
|
+
return defineProps([
|
|
729
|
+
{
|
|
730
|
+
name: 'Commands',
|
|
731
|
+
description: 'Reset spring modifier state',
|
|
732
|
+
type: 'command',
|
|
733
|
+
command () {
|
|
734
|
+
this.reset();
|
|
735
|
+
return false;
|
|
736
|
+
},
|
|
737
|
+
get (value) {
|
|
738
|
+
value.str[0] = 'Reset';
|
|
739
|
+
}
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
name: 'Enabled',
|
|
743
|
+
description: 'Whether this spring modifier is active',
|
|
744
|
+
type: 'bool',
|
|
745
|
+
isPersistent () {
|
|
746
|
+
return false;
|
|
747
|
+
},
|
|
748
|
+
get (value) {
|
|
749
|
+
value.bool[0] = this.enabled;
|
|
750
|
+
},
|
|
751
|
+
set (value) {
|
|
752
|
+
this.enabled = value.bool[0];
|
|
753
|
+
}
|
|
754
|
+
},
|
|
755
|
+
{
|
|
756
|
+
name: 'Weight',
|
|
757
|
+
description: 'Physics blend weight. 0 uses animation only, 1 uses full spring physics',
|
|
758
|
+
type: 'float',
|
|
759
|
+
options: {
|
|
760
|
+
minValue: 0,
|
|
761
|
+
maxValue: 1
|
|
762
|
+
},
|
|
763
|
+
isPersistent () {
|
|
764
|
+
return false;
|
|
765
|
+
},
|
|
766
|
+
get (value) {
|
|
767
|
+
value.num[0] = this.weight;
|
|
768
|
+
},
|
|
769
|
+
set (value) {
|
|
770
|
+
this.weight = value.num[0];
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
]);
|
|
774
|
+
}
|
|
775
|
+
};
|
|
776
|
+
}
|
|
397
777
|
/** @internal */ function getJointDynamicsModifierClass() {
|
|
398
778
|
return {
|
|
399
779
|
ctor: JointDynamicsModifier,
|
|
@@ -410,9 +790,15 @@ function createJointDynamicsCurveProp(name, key, label, description) {
|
|
|
410
790
|
const chains = (init.chains ?? []).map((chain)=>{
|
|
411
791
|
const start = findSerializedNode(ctx, chain.start);
|
|
412
792
|
const end = findSerializedNode(ctx, chain.end);
|
|
793
|
+
const startAnchor = findSerializedNode(ctx, chain.startAnchor);
|
|
794
|
+
const endAnchor = findSerializedNode(ctx, chain.endAnchor);
|
|
413
795
|
return start && end ? {
|
|
414
796
|
start,
|
|
415
|
-
end
|
|
797
|
+
end,
|
|
798
|
+
startAnchor: startAnchor ?? undefined,
|
|
799
|
+
endAnchor: endAnchor ?? undefined,
|
|
800
|
+
startAnchorOffset: chain.startAnchorOffset ? vectorFromArray(chain.startAnchorOffset) : undefined,
|
|
801
|
+
endAnchorOffset: chain.endAnchorOffset ? vectorFromArray(chain.endAnchorOffset) : undefined
|
|
416
802
|
} : null;
|
|
417
803
|
}).filter((chain)=>{
|
|
418
804
|
return !!chain && chain.start.isParentOf(chain.end);
|
|
@@ -488,7 +874,11 @@ function createJointDynamicsCurveProp(name, key, label, description) {
|
|
|
488
874
|
systemRoot: chainConfig.systemRoot.persistentId,
|
|
489
875
|
chains: chainConfig.chains.map((chain)=>({
|
|
490
876
|
start: chain.start.persistentId,
|
|
491
|
-
end: chain.end.persistentId
|
|
877
|
+
end: chain.end.persistentId,
|
|
878
|
+
startAnchor: chain.startAnchor?.persistentId,
|
|
879
|
+
endAnchor: chain.endAnchor?.persistentId,
|
|
880
|
+
startAnchorOffset: chain.startAnchorOffset ? vectorToArray(chain.startAnchorOffset) : undefined,
|
|
881
|
+
endAnchorOffset: chain.endAnchorOffset ? vectorToArray(chain.endAnchorOffset) : undefined
|
|
492
882
|
})),
|
|
493
883
|
controllerConfig: serializeControllerConfig(controllerConfig),
|
|
494
884
|
colliders: obj.jointDynamicsSystem.getColliderSnapshots().map((item)=>({
|
|
@@ -1457,6 +1847,7 @@ function getPCAGeometryCacheTrackClass() {
|
|
|
1457
1847
|
const inverseBindMatricesArray = new Float32Array(base64ToUint8Array(init.inverseBindMatrices).buffer);
|
|
1458
1848
|
const bindPoseArray = new Float32Array(base64ToUint8Array(init.bindPose ?? init.bindPoseMatrices).buffer);
|
|
1459
1849
|
const rootBindPose = init.rootBindPose ? decodeSkeletonBindPose(init.rootBindPose) : undefined;
|
|
1850
|
+
const retargetPose = init.retargetPose ? decodeSkeletonPose(init.retargetPose, joints.length) : undefined;
|
|
1460
1851
|
const inverseBindMatrices = [];
|
|
1461
1852
|
const bindPose = [];
|
|
1462
1853
|
for(let i = 0; i < joints.length; i++){
|
|
@@ -1482,7 +1873,8 @@ function getPCAGeometryCacheTrackClass() {
|
|
|
1482
1873
|
if (!rig) {
|
|
1483
1874
|
rig = new SkeletonRig(joints, bindPose, {
|
|
1484
1875
|
rootJoint,
|
|
1485
|
-
rootBindPose
|
|
1876
|
+
rootBindPose,
|
|
1877
|
+
retargetPose
|
|
1486
1878
|
});
|
|
1487
1879
|
ctx.animationSet.rigs.push(new DRef(rig));
|
|
1488
1880
|
}
|
|
@@ -1514,6 +1906,7 @@ function getPCAGeometryCacheTrackClass() {
|
|
|
1514
1906
|
rootBindPose: encodeSkeletonBindPose(obj.rig.rootBindPose),
|
|
1515
1907
|
inverseBindMatrices: uint8ArrayToBase64(new Uint8Array(new Float32Array(inverseBindMatrices).buffer)),
|
|
1516
1908
|
bindPose: uint8ArrayToBase64(new Uint8Array(new Float32Array(bindPose).buffer)),
|
|
1909
|
+
retargetPose: obj.rig.hasRetargetPose ? encodeSkeletonPose(obj.rig.retargetPose) : undefined,
|
|
1517
1910
|
id: obj.persistentId
|
|
1518
1911
|
};
|
|
1519
1912
|
},
|
|
@@ -1556,9 +1949,11 @@ function getPCAGeometryCacheTrackClass() {
|
|
|
1556
1949
|
});
|
|
1557
1950
|
}
|
|
1558
1951
|
}
|
|
1952
|
+
const retargetPose = init.retargetPose ? decodeSkeletonPose(init.retargetPose, joints.length) : undefined;
|
|
1559
1953
|
const rig = new SkeletonRig(joints, bindPose, {
|
|
1560
1954
|
rootJoint,
|
|
1561
|
-
rootBindPose
|
|
1955
|
+
rootBindPose,
|
|
1956
|
+
retargetPose
|
|
1562
1957
|
});
|
|
1563
1958
|
rig.persistentId = init.id;
|
|
1564
1959
|
return {
|
|
@@ -1580,6 +1975,7 @@ function getPCAGeometryCacheTrackClass() {
|
|
|
1580
1975
|
rootJoint: obj.rootJoint?.persistentId ?? '',
|
|
1581
1976
|
rootBindPose: encodeSkeletonBindPose(obj.rootBindPose),
|
|
1582
1977
|
bindPose: uint8ArrayToBase64(new Uint8Array(new Float32Array(bindPose).buffer)),
|
|
1978
|
+
retargetPose: obj.hasRetargetPose ? encodeSkeletonPose(obj.retargetPose) : undefined,
|
|
1583
1979
|
id: obj.persistentId
|
|
1584
1980
|
};
|
|
1585
1981
|
},
|
|
@@ -1792,5 +2188,5 @@ function getPCAGeometryCacheTrackClass() {
|
|
|
1792
2188
|
};
|
|
1793
2189
|
}
|
|
1794
2190
|
|
|
1795
|
-
export { getAnimationClass, getFixedGeometryCacheTrackClass, getInterpolatorClass, getInterpolatorScalarClass, getJointDynamicsModifierClass, getJointDynamicsModifierSkeleton, getMorphTargetGroupTrackClass, getMorphTrackClass, getNodeEulerRotationTrackClass, getNodeRotationTrackClass, getNodeScaleTrackClass, getNodeTranslationTrackClass, getPCAGeometryCacheTrackClass, getPropTrackClass, getSkeletonClass, getSkeletonRigClass, getSkinBindingClass, setJointDynamicsModifierSkeleton };
|
|
2191
|
+
export { getAnimationClass, getFixedGeometryCacheTrackClass, getInterpolatorClass, getInterpolatorScalarClass, getJointDynamicsModifierClass, getJointDynamicsModifierSkeleton, getMorphTargetGroupTrackClass, getMorphTrackClass, getNodeEulerRotationTrackClass, getNodeRotationTrackClass, getNodeScaleTrackClass, getNodeTranslationTrackClass, getPCAGeometryCacheTrackClass, getPropTrackClass, getSkeletonClass, getSkeletonRigClass, getSkinBindingClass, getSpringModifierClass, getSpringModifierSkeleton, setJointDynamicsModifierSkeleton, setSpringModifierSkeleton };
|
|
1796
2192
|
//# sourceMappingURL=animation.js.map
|