MRが楽しい

MRやVRについて学習したことを書き残す

Blenderで作成したシェイプキーをUnityに取り込み利用する

本日は Unity と Blender の技術調査枠です。
Blender で作成したモデルのシェイプキーを Unity に取り込み利用する方法についてまとめます。

シェイプキーを設定したモデルとして、以下で作成した球体モデルを再利用します。
bluebirdofoz.hatenablog.com

Blender でシェイプキーを設定したモデルを fbx 形式で出力します。
f:id:bluebirdofoz:20180712073955j:plain

出力形式としては、メッシュを出力すればシェイプキーが含まれます。
f:id:bluebirdofoz:20180712074026j:plain

Unity のプロジェクトを起動し、fbx ファイルをアセットとしてインポートします。
このとき、仮にシェイプキーを使ったアニメーションを Blender 上で設定していても Unity には取り込まれません。
アニメーションとして取り込み可能なのはオブジェクトやボーンのトランスフォーム変更によるアクションデータです。
f:id:bluebirdofoz:20180712074035j:plain

取り込んだオブジェクトを Hierarchy に配置します。
オブジェクトを選択すると、シェイプキーを設定したオブジェクトである場合「Skinned Mesh Renderer」コンポーネントが設定されています。
このうちの「BlendShapes」を開くと、Blender で設定したシェイプキーが確認できます。
f:id:bluebirdofoz:20180712074043j:plain

もし取り込みが行われていない場合、シェイプキーの取り込み設定が無効化されていることがあります。
アセットの Model インポートの設定を確認し、「Import BlendShapes」が有効になっていることを確認します。
f:id:bluebirdofoz:20180712074050j:plain

取り込んだシェイプキーは「Skinned Mesh Renderer」コンポーネントを通して利用可能です。
以下のサイトのサンプルスクリプトを参考に、XKey と YKey のシェイプキーを変形させるスクリプトを組んでみました。
peroon.hatenablog.com
・ShapeManager

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShapeManager : MonoBehaviour
{
    private SkinnedMeshRenderer skinnedMeshRenderer;

    void Start()
    {
        skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer>();
    }

    void Update()
    {
        // XKey(index:0)のシェイプキー値を 0.0f ~ 100.0f で設定する
        float value_XKey = 50.0f + 50.0f * Mathf.Sin(Time.time);
        skinnedMeshRenderer.SetBlendShapeWeight(0, value_XKey);

        // YKey(index:1)のシェイプキー値を 0.0f ~ 100.0f で設定する
        float value_YKey = 50.0f + 50.0f * Mathf.Cos(Time.time);
        skinnedMeshRenderer.SetBlendShapeWeight(1, value_YKey);
    }
}

オブジェクトにスクリプトを適用してシーンを再生すると、以下のようにシェイプキーの変形が行われます。
f:id:bluebirdofoz:20180712074106g:plain