Unity 공부 일지~블렌드 셰이프 조작 방법 그 ①

소개.



게임을 만들고 싶다 ~라고 생각하고 마지막 날부터 Unity를 만지기 시작했습니다 HITOMI2236입니다. 이번 블렌드 셰이프에 대해 조사했으므로 여기에 기록하려고 합니다. 개인용 메모입니다만, 만약 같은 곳에서 헤매고 있는 사람이 있으면, 시간 단축을 위해 읽어 주시면 다행입니다.

1. 블렌드 셰이프 모델에 대해



블렌드 셰이프 검증을 위해 Maya에서 간단한 모델을 만들었습니다. HumanIK의 각 관절 부분에 Cube를 배치한 모델입니다. 머리 부분에 간단한 블렌드 셰이프를 붙이고 있어, 알기 쉽게 하기 위해서 이름을 「face_object」로 변경하고 있습니다.
blendShape_01_01.png


이것을 FBX로 내보냅니다. 내보낼 때는 물론입니다만 애니메이션 항목 없는 블렌드 셰이프의 체크 박스를 켭시다. 나는 꽤 잊어버린다.

내보낸 FBX를 Unity로 드래그 앤 드롭하여 Prefab화한 다음 Hierarchy에 추가합니다.

블렌드 셰이프가 붙어 있는 오브젝트를 확인해 보면 Inspecter에 「Skinned Mesh Render」라는 항목이 표시되고 있는 것을 알 수 있습니다. 그 안에 BlendShapes라는 항목이 있어, 아무래도 이 수치를 늘리면 형태가 변형되는 것 같습니다.



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

좋은 웹페이지 즐겨찾기