three.js MMDAnimationHelper
MMD 资源的动画助手。
MMDAnimationHelper 处理由 MMDLoader 加载的 MMD 资产的动画,具有 IK、Grant 和 Physics 等 MMD 特殊功能。它在内部使用了 CCDIKSolver 和 MMDPhysics。
代码示例
// Instantiate a helper
const helper = new MMDAnimationHelper();
// Load MMD resources and add to helper
new MMDLoader().loadWithAnimation(
'models/mmd/miku.pmd',
'models/mmd/dance.vmd',
function ( mmd ) {
helper.add( mmd.mesh, {
animation: mmd.animation,
physics: true
} );
scene.add( mmd.mesh );
new THREE.AudioLoader().load(
'audios/mmd/song.mp3',
function ( buffer ) {
const listener = new THREE.AudioListener();
const audio = new THREE.Audio( listener ).setBuffer( buffer );
listener.position.z = 1;
scene.add( audio );
scene.add( listener );
}
);
}
);
function render() {
helper.update( clock.getDelta() );
renderer.render( scene, camera );
}
例子
webgl_loader_mmd
webgl_loader_mmd_pose
webgl_loader_mmd_audio
Constructor
MMDAnimationHelper( params : Object )
params — (可选)
- sync - 添加对象的动画时长是否同步。默认为真。
- afterglow - 默认值为 0.0。
- resetPhysicsOnLoop - 默认为真。
- pmxAnimation - 如果设置为 true,助手将遵循复杂且昂贵的 PMX 动画系统。仅当您的 PMX 模型动画效果不佳时才尝试此选项。默认为假。
创建一个新的 MMDAnimationHelper。
属性
.audio : Audio
添加到助手的音频。
.camera : Camera
添加到助手的相机。
.meshes : Array
添加到助手的 SkinnedMesh 数组。
.objects : WeakMap
一个 WeakMap,其中包含在帮助程序中用于添加到帮助程序的对象的动画内容。例如,您可以使用“helper.objects.get(mesh).mixer”为添加的 SkinnedMesh 访问 AnimationMixer
.onBeforePhysics : Function
在 SkinnedMesh 的物理计算之前立即执行的可选回调。此函数与 SkinnedMesh 一起调用。
方法
.add ( object : Object3D, params : Object ) : MMDAnimationHelper
object — SkinnedMesh、相机或音频参数 — (可选)
animation - 设置为对象的 AnimationClip 或 AnimationClip 数组。仅适用于 SkinnedMesh 和 Camera。默认是未定义的。
physics - 仅适用于 SkinnedMesh。一个标志是否打开物理。默认为真。
warmup - 只对 SkinnedMesh 和物理是真实的。物理参数。默认值为 60。
unitStep - 只对 SkinnedMesh 和物理是真实的。物理参数。默认值为 1 / 65。
maxStepNum - 只对 SkinnedMesh 和物理是真实的。物理参数。默认值为 3。
gravity - 只对 SkinnedMesh 和物理是真实的。物理参数。默认为 ( 0, - 9.8 * 10, 0 )。
delayTime - 仅适用于音频。默认值为 0.0。
将 SkinnedMesh、Camera 或 Audio 添加到助手并设置动画。添加对象的动画持续时间是同步的。如果已经添加了摄像头/音频,它将被替换为新的。
.enable ( key : String, enabled : Boolean ) : MMDAnimationHelper
key — 允许的字符串是“animation”、“ik”、“grant”、“physics”和“cameraAnimation”。
enabled — true 为启用,false 为禁用
启用/禁用动画功能
.pose ( mesh : SkinnedMesh, vpd : Object, params : Object ) : MMDAnimationHelper
mesh — 改变姿势的 SkinnedMesh。它不需要添加到 helper 中。
vpd — MMDLoader.loadVPD获取的VPD内容
params — (可选)
- resetPose - 默认为真。
- ik - D默认为真。
- grant - 默认为真。
根据 VPD 内容指定更改 SkinnedMesh 的姿势。
.remove ( object : Object3D ) : MMDAnimationHelper
object — SkinnedMesh、相机或音频
从助手中移除 SkinnedMesh、Camera 或 Audio。
.update ( delta : Nummber ) : MMDAnimationHelper
delta — 秒数
提前混合器时间并更新添加到助手的对象的动画
源码
examples/jsm/animation/MMDAnimationHelper.js
更多建议: