three.js MMDAnimationHelper

2023-02-16 17:49 更新

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


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号