three.js MMDAnimationHelper

2023-02-16 17:49 更新

MMD 資源的動畫助手。

MMDAnimationHelper 處理由 MMDLoader 加載的 MMD 資產(chǎn)的動畫,具有 IK、Grant 和 Physics 等 MMD 特殊功能。它在內(nèi)部使用了 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 - 如果設(shè)置為 true,助手將遵循復(fù)雜且昂貴的 PMX 動畫系統(tǒng)。僅當(dāng)您的 PMX 模型動畫效果不佳時才嘗試此選項。默認為假。

創(chuàng)建一個新的 MMDAnimationHelper。

屬性

.audio : Audio

添加到助手的音頻。

.camera : Camera

添加到助手的相機。

.meshes : Array

添加到助手的 SkinnedMesh 數(shù)組。

.objects : WeakMap

一個 WeakMap,其中包含在幫助程序中用于添加到幫助程序的對象的動畫內(nèi)容。例如,您可以使用“helper.objects.get(mesh).mixer”為添加的 SkinnedMesh 訪問 AnimationMixer

.onBeforePhysics : Function

在 SkinnedMesh 的物理計算之前立即執(zhí)行的可選回調(diào)。此函數(shù)與 SkinnedMesh 一起調(diào)用。

方法

.add ( object : Object3D, params : Object ) : MMDAnimationHelper

object — SkinnedMesh、相機或音頻參數(shù) — (可選)

animation - 設(shè)置為對象的 AnimationClip 或 AnimationClip 數(shù)組。僅適用于 SkinnedMesh 和 Camera。默認是未定義的。

physics - 僅適用于 SkinnedMesh。一個標(biāo)志是否打開物理。默認為真。

warmup - 只對 SkinnedMesh 和物理是真實的。物理參數(shù)。默認值為 60。

unitStep - 只對 SkinnedMesh 和物理是真實的。物理參數(shù)。默認值為 1 / 65。

maxStepNum - 只對 SkinnedMesh 和物理是真實的。物理參數(shù)。默認值為 3。

gravity - 只對 SkinnedMesh 和物理是真實的。物理參數(shù)。默認為 ( 0, - 9.8 * 10, 0 )。

delayTime - 僅適用于音頻。默認值為 0.0。

將 SkinnedMesh、Camera 或 Audio 添加到助手并設(shè)置動畫。添加對象的動畫持續(xù)時間是同步的。如果已經(jīng)添加了攝像頭/音頻,它將被替換為新的。

.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內(nèi)容

params — (可選)

  • resetPose - 默認為真。
  • ik - D默認為真。
  • grant - 默認為真。

根據(jù) VPD 內(nèi)容指定更改 SkinnedMesh 的姿勢。

.remove ( object : Object3D ) : MMDAnimationHelper

object — SkinnedMesh、相機或音頻

從助手中移除 SkinnedMesh、Camera 或 Audio。

.update ( delta : Nummber ) : MMDAnimationHelper

delta — 秒數(shù)

提前混合器時間并更新添加到助手的對象的動畫

源碼

examples/jsm/animation/MMDAnimationHelper.js


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號