UniVRM의 VRMBS Shappe Proxy를 통한 이모티콘 공통화

13530 단어 UniVRMVRMUnity

개시하다


2018년 4월 16일 다국적고는 VRM과 UniVRM을 공개했다.
자세한 내용은 공식github(매우 자세하게 정리했기 때문에 기본적인 내용은 여기를 보면 괜찮을 것이다.)
VRM은 VR 애플리케이션을 위한 인간형 3D 가상 이미지(3D 모델) 데이터를 처리하는 파일 형식으로, UniVRM은 Unity를 위한 VRM 파일의 읽기와 쓰기를 위한 C#의 표준 구현이다.
그렇다면 UnivRM은 Unity VRM 파일의 읽기와 쓰기를 위한 C#의 표준으로 다음과 같은 구성 요소를 제공합니다.
  • 모델 정보
  • BlendShape
  • 일인칭 시점
  • 시선 제어
  • 요동물
  • VRM의 이미 설치된 모델이라면 이 같은 정보는 공동 처리를 통해 얻을 수 있다는 것이다.편해요.
    이 기사에서는 UniVRM BlendShape의 작동 방법에 대해 설명합니다.

    컨디션

  • Unity2017.4.0f1
  • UniVRM-0.30
  • UniVRM에서 BlendShape을 얻지 못하면...


    말하자면 UniVRM으로 BlendShape을 얻는 게 뭐가 편할까요?
    다음 이미지는 립스틱에 자주 사용되는 OVRLipSync의 OVR LipSync Context MorphTarget 스크립트 검사기입니다.

    Viside To Blend Targets의 10~14에 Shape Key를 설정하지만, 모델마다 Skinnied Mesh Renderer의 이름과 위치가 다르고, Shape Key의 순서도 다르기 때문에 이것을 설정할 때 모델의 구조에 익숙하지 않으면 설정할 수 없습니다.각양각색의 모형을 처리하려면 힘들 거야...(설정법 정보움푹 패인 선생의 보도) 참조
    그곳에서 UniVRM의 VRMBS lend Shappe Proxy를 통해 Shape Key를 얻었는데, 조작은 본 보도의 제목이다.

    UniVRM에서 BlendShape 작업


    이번에는 Togle로 이모티콘(사랑, 기쁨, 슬픔)을 조작하는 간단한 각본을 만들었다.
    FaceAnimation.cs
    using UnityEngine;
    using UnityEngine.UI;
    using VRM;
    
    public class FaceAnimation : MonoBehaviour
    {
    
        private VRMBlendShapeProxy proxy;
        public GameObject model; // VRMモデルのオブジェクトを設定
        public Toggle a;
        public Toggle i;
        public Toggle u;
        public Toggle e;
        public Toggle o;
        public Toggle egao;
        public Toggle komari;
    
    
        // Use this for initialization
        void Start()
        {
    
        }
    
        // Update is called once per frame
        void Update()
        {
    
            // VRMBlendShapeProxyはUpdateが始まってからでないと取得できない
            if (proxy == null)
            {
                proxy = model.GetComponent<VRMBlendShapeProxy>();
            }
            else
            {
    
                // あ
                if (a.isOn)
                {
                    proxy.SetValue(BlendShapePreset.A, 1f);
                }
                else
                {
                    proxy.SetValue(BlendShapePreset.A, 0f);
                }
    
                // い
                if (i.isOn)
                {
                    proxy.SetValue(BlendShapePreset.I, 1f);
                }
                else
                {
                    proxy.SetValue(BlendShapePreset.I, 0f);
                }
    
                // う
                if (u.isOn)
                {
                    proxy.SetValue(BlendShapePreset.U, 1f);
                }
                else
                {
                    proxy.SetValue(BlendShapePreset.U, 0f);
                }
    
                // え
                if (e.isOn)
                {
                    proxy.SetValue(BlendShapePreset.E, 1f);
                }
                else
                {
                    proxy.SetValue(BlendShapePreset.E, 0f);
                }
    
                // お
                if (o.isOn)
                {
                    proxy.SetValue(BlendShapePreset.O, 1f);
                }
                else
                {
                    proxy.SetValue(BlendShapePreset.O, 0f);
                }
    
                // 笑顔
                if (egao.isOn)
                {
                    proxy.SetValue(BlendShapePreset.Joy, 1f);
                }
                else
                {
                    proxy.SetValue(BlendShapePreset.Joy, 0f);
                }
    
                // 困り顔
                if (komari.isOn)
                {
                    proxy.SetValue(BlendShapePreset.Sorrow, 1f);
                }
                else
                {
                    proxy.SetValue(BlendShapePreset.Sorrow, 0f);
                }
            }
        }
    }
    
    
    여기서 중점은 업데이트 함수에 proxy를 설정하는 것입니다.현재 구조상 Update가 뛰지 않으면 proxy를 진행할 수 없습니다.SetValue() 작업을 수행할 수 없습니다.(더 정확히 말하면 VRMM BlendShappe Proxy 내부의 BlendShapeMerger 실례를 설정하지 않으면 조작할 수 없습니다.)
        void Update()
        {
    
            // VRMBlendShapeProxyはUpdateが始まってからでないと取得できない
            if (proxy == null)
            {
                proxy = model.GetComponent<VRMBlendShapeProxy>();
            }
    
    VRMM BlendShappe Proxy만 가져오면 SetValue () 를 통해 BlendShape의 값을 변경할 수 있습니다.(값의 범위는 0f~1f)
    proxy.SetValue(BlendShapePreset.A, 1f);
    

    시험해 보다


    이번에는 유닛 소스를 VRM으로 설정해 보자.(© Unity Technologies Japan/UCL)
    참고공식.,'사랑'과'희'에 웃음,'애'에 수심에 찬 표정.(소재 주변 설정에 대한 애정 없음)
    그리고 상황을 설정해서 실행하는 거야.

    실행 결과


    똑바로 움직여!

    모델 변경


    그리고 응용 프로그램으로 모델의 변경을 시도해 보세요.
    변경된 모델은 니니 입체를 빌려 썼다.
    http://3d.nicovideo.jp/works/td32797
    장면에 VRM 파일을 가져온 프리셋을 구성합니다.cs의 모델을 검사기로 설정하기만 하면

    잘 움직였어.모델 변경도 몇 단계로 가능합니다!

    끝맺다


    방금 공개된 VRM 대응 모델은 드물지만, 앞으로 VRM이 보급되면 단순히 모델을 바꿔 공통된 동작을 할 수 있게 된다.모형의 설치가 간단하기 때문에 직접 만든 모형이 있는 사람은 어쨌든 만들어 보세요!그리고 프로그래머가 VRM의 API에 대응하는 처리를 만들면 행복할 수도 있다.

    좋은 웹페이지 즐겨찾기