バーチャルYoutuberなどでキャラクターの表情を変えたいとき、Unityでよく使われるのがブレンドシェイプです。ブレンドシェイプ機能を使うことで、3Dモデルの表情や形をUnityでも簡単に変更することができます。
Unityでは、BlendShapes(ブレンドシェイプ)、Blenderでは「シェイプキー」と呼ばれるものです。どちらも、頂点を動的に移動させることにより、オブジェクトの形状を変形させる目的で使われています。MMDなどでは“モーフ”や“表情モーフ”がこれにあたります。
詳しくは下記を参照して下さい。
ヒエラルキーをよく見てみて下さい。
Skinned Mesh Renderer コンポーネントは、Assets からヒエラルキーに持っていった最上位のオブジェクトではなく、ツリー構造の下層にあるオブジェクトにアタッチされています。
ブレンドシェイプの値を大きくしてみて下さい。
Blender では、シェイプキーの値は、0〜1.0 ですが、 Unity の BlendShape では、数値範囲が 0 〜 100です。0.5 の場合は、50と入力すれば、反映されるはずです。
このようなスクリプトを作成しブレンドシェイプキーを持ったゲームオブジェクトにアタッチすることで、スクリプトからブレンドシェイプの値を動的に変更することもできます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class control_blend_shapes : MonoBehaviour {
// SkinnedMeshRenderer 操作用の変数宣言
private SkinnedMeshRenderer blendshape_SMR;
void Start () {
// コンポーネントから SkinnedMeshRenderer を取得し変数に格納する
blendshape_SMR = this.GetComponent<SkinnedMeshRenderer>();
}
void Update () {
float value;
value = 100; //固定値に変化させる場合
// value = 50.0f + 50.0f * Mathf.Sin (Time.time); //時間変化で自動的に値を変化させる場合
// シェイプキーの値を変更する(1つ目の引数がシェイプキー番号、二つ目の引数が変形する値(0~100で指定する))
blendshape_SMR.SetBlendShapeWeight (0, value);
}
}
ブレンドシェイプをUnity で使えるアニメーションクリップ(.animファイル)として保存するには、下記の記事にある BlendShapeEditHelper が便利です。
ブレンドシェイプが使えるようになると、Unity でアニメーション以外にも、さまざまな動きをコントロールできるようになります。
『3Dモデルオブジェクトのカタチを変えたい』ときは、ブレンドシェイプを試してみて下さい。