Help us understand the problem. What is going on with this article?

Unity勉強日誌~ブレンドシェイプ操作方法その①

はじめに。

ゲーム作ってみたいな~と思い、つい先日からUnityをさわり始めましたHITOMI2236です。今回ブレンドシェイプについて調べたのでここに記録しようと思います。個人用のメモですが、もし同じところで迷っている人がいたら、時間短縮のために読んでくれたら幸いです。

1 . ブレンドシェイプのモデルについて

ブレンドシェイプ検証用にMayaで簡単なモデルを作りました。HumanIKの各関節部分にCubeを配置しただけのモデルです。頭部の部分に簡単なブレンドシェイプをつけており、わかりやすくするために名前を「face_object」に変更しています。
blendShape_01_01.png
blendShape_01_01.png

これをFBXで書き出します。書き出す時にはもちろんですがアニメーション項目ないのブレンドシェイプのチェックボックスをオンにしましょう。私は結構忘れます。

書き出したFBXをUnityにドラッグアンドドロップしてPrefab化し、Hierarchyに追加します。

ブレンドシェイプがついてるオブジェクトを確認してみるとInspecterに「Skinned Mesh Render」という項目が表示されているのがわかります。その中にBlendShapesという項目があり、どうやらこの数値を増やすと形が変形するようです。

blendShape_01_02.png

2 . ブレンドシェイプを制御するプログラム。

モデルの名前は「blendShapeCharacter」,
ブレンドシェイプ情報を持っているオブジェクト名は「face_object」です。
「face_object」が持っているブレンドシェイプの名前は「blendShape1.blendAction」です。

skinShape.rb
using System.Collections;
using System.Collections.Generic;
using UnityEngine;



public class blenderShapeControll : MonoBehaviour {
    public GameObject head;
    public SkinnedMeshRenderer skinnedMeshRenderer;
    private float m_weight;
    private int m_Index;


    void Start() {

        m_weight = 0;
        head = GameObject.Find("blendShapeCharacter/face_object");
        skinnedMeshRenderer = head.GetComponent<SkinnedMeshRenderer>();
        m_Index = skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex("blendShape1.blendAction");

    }

    void Update() {

        if (Input.GetKey(KeyCode.A))
        {
            if (m_weight == 0) {
                m_weight = 100;
            } else {
                m_weight = 0;
            }
            skinnedMeshRenderer.SetBlendShapeWeight(m_Index, m_weight);
        } 
    }
}

Aボタンを押すとブレンドシェイプが100と0に切り替わるシンプルなプログラムです。

GameObject.Find("blendShapeCharacter/face_object");

ここでブレンドシェイプの情報を持っているオブジェクトを検索して、

skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex("blendShape1.blendAction");

ここでそのオブジェクトが持っているスキンメッシュのインデックスを取得しているようです.

skinnedMeshRenderer.SetBlendShapeWeight(index, weight);

SetBlendShapeWeightで対象のウェイトを操作する。
以上のような手順?になりました。

最後に

多分クラス化しようと考えているので、フェイシャルのブレンドやインデックスの一覧取得方法など調べてみようかなと考えています。

趣味で3D作品を作っています。もしよければ見て上げてください。星つけてくれたら嬉しいな!
そして、フレンドになって技術共有しましょう!
sketchfab

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした