【3Dモデルの表情や形を自由自在に変えられる】Blenderでシェイプキーを作りUnityのブレンドシェイプで動かす方法

バーチャルYoutuberなどでキャラクターの表情を変えたいとき、Unityでよく使われるのがブレンドシェイプです。ブレンドシェイプ機能を使うことで、3Dモデルの表情や形をUnityでも簡単に変更することができます。

 

ブレンドシェイプとは?

Unityでは、BlendShapes(ブレンドシェイプ)、Blenderでは「シェイプキー」と呼ばれるものです。どちらも、頂点を動的に移動させることにより、オブジェクトの形状を変形させる目的で使われています。MMDなどでは“モーフ”や“表情モーフ”がこれにあたります。

詳しくは下記を参照して下さい。

手順

1.Blender(3Dモデルデータ側)でやること

  1. 初期状態の場合、シェイプキーは Basis ともう一つのシェイプキー(形状を変形させる)の2つを用意すること。
  2. エディットモードで頂点編集をし、変形後のモデル状態で シェイプキー に 1.0 を入力する。
  3. オブジェクトモードにして、そのキーの値を 0〜1.0 の間でパラメータ変更することで、モデルの形状を数値パラメータで変形することができる。
  4. FBX形式でエクスポート(ファイル出力)をする。

2.Unity(アプリ側)でやること

  1. Assets に fbx ファイルをインポートする。(ProjectビューへドラッグアンドドロップでOK)
  2. fbxファイルのインスペクタを表示し Model タブで、 Import BlendShapes にチェックを入れる。(デフォルトで入っているはず)
  3. fbxファイルをヒエラルキーにドラッグアンドドロップし、配置する。
  4. ヒエラルキーでfbxファイルの下層オブジェクトを開き、Skinned Mesh Renderer コンポーネントがアタッチされているか確認する。
  5. Skinned Mesh Renderer コンポーネント 内に BlendShapes という欄があり、そこでシェイプキーの値を変更できる。
  6. シェイプキーの値は、0〜100で変更することで、オブジェクトの形状をBlenderで設定したように変更することができる。

 

Assetsからヒエラルキーにゲームオブジェクトを配置してもSkinned Mesh Renderer コンポーネントがアタッチされていないときは?

ヒエラルキーをよく見てみて下さい。
Skinned Mesh Renderer コンポーネントは、Assets からヒエラルキーに持っていった最上位のオブジェクトではなく、ツリー構造の下層にあるオブジェクトにアタッチされています。

BlendShapes の値を変えても動かないときは?

ブレンドシェイプの値を大きくしてみて下さい。
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); 
	}
}

 

ブレンドシェイプをアニメーションクリップ(.anim)として保存するには?

ブレンドシェイプをUnity で使えるアニメーションクリップ(.animファイル)として保存するには、下記の記事にある BlendShapeEditHelper が便利です。

ブレンドシェイプが使えるようになると、Unity でアニメーション以外にも、さまざまな動きをコントロールできるようになります。
『3Dモデルオブジェクトのカタチを変えたい』ときは、ブレンドシェイプを試してみて下さい。

参考