#03 VRMお手軽ポーズ/風による揺れの再現
YATTA!駆動開発の第3回。プロトタイプ版 VRMお手軽ポーズの風を再現する機能についてです。
https://gyazo.com/640d11a16b607c6a608cc99ba9a8e21f
説明
前回は#02 VRMお手軽ポーズ/指編集機能
次回は#04 VRMお手軽ポーズ/カメラ目線
プロトタイプ版 VRMお手軽ポーズで風のように髪を揺らす機能を開発しています。
VRMに風っぽい効果を与える方法 の手法とほぼ同じです。
操作 UI が実装途中なので公開は後日になります。
風による揺れの再現
モデルの写真を作成する際に動きがある画が欲しかったので風のように揺れ物を動かす機能を作成しました。
https://twitter.com/i/status/1200062807737163776
実装
仕組みとしては
VRMモデルのspringBoneの要素を取得する。
gravityDirに風の力のベクトルを加え正規化する
gravityPowerに風の力の値を加える
springBoneの集合はVRM.springBoneManagerを参照して取得することが出来ます。
ただ、gravityDirもgravityPowerもreadonlyなプロパティなので他のやり方を考えた方が良いかもしれません。
code:ts
private updateSpringBones() {
if (!(this.currentVRM && this.currentVRM.springBoneManager))
return;
this.currentVRM.springBoneManager.springBoneGroupList.forEach(element => {
element.forEach(node => {
this.applyWindForce(node);
});
});
}
private applyWindForce(node: VRMSpringBone) {
let vec = new THREE.Vector3(0, -1, 0);
vec.applyEuler(this.target.rotation);
let currentGravity = this.gravityDir;
currentGravity.add(vec);
node.gravityDir = currentGravity.normalize();
node.gravityPower = this.currentWindForce;
}
次回は#04 VRMお手軽ポーズ/カメラ目線
参考
VRMに風っぽい効果を与える方法
vrm-c / vrm-specification VRM拡張: 揺れモノ設定
https://pixiv.github.io/three-vrm/docs/globals.html
#VRM