유니티로 Vtuber용 표정 제어 장비 만들기
자기소개
안녕하십니까, 저는 유자입니다@Yuzu_Unity
입문
저는 Vtuber의 표정 컨트롤 방법이 몇 가지가 있다고 생각해요.
나는 나의 가장 좋은 시스템을 고려해 보았다.
실시간 및 후속 수정
일단 원하는 기능은요.
OVR 립싱크
수동 (컨트롤러 스냅 포함)
아이폰 등의 얼굴 추적(스냅 포함)
또한 이러한 혼합 상황의 조정, 기록 기능, 타임라인의 재생 모드 밖 표시
여기까지 왔으면 더 이상 원하는 게 없겠지.
VtuberFacialRigDemo pic.twitter.com/aK3fh9cmpI - 유자(@Yuzu_Unity)2019년 4월 30일
설계
기본적으로 3DCG의 혼합 변형된 얼굴 장비를 참고하여 제작되었습니다.p>
FacialWeight를 사용하여 FacialRig 매개변수의 혼합 정도를 관리합니다.
수조(기록시스템 참조)를 사용할 수 없기 때문에 상당히 번거롭다
레코드 시스템
몇 편의 보도를 보았는데, 왜 json으로 저장하고 있는지 모르겠다
자제하는 경우가 많지만 처리도 무거워 사용하기 어렵다p>
※ 유니티는 표준 애니메이션 편집 기록 기능이 있습니다!!(편집기 전용)
GameObjectRecorder(※ Unity 버전에 따라 API가 다르므로 공식 참조)
https://docs.unity3d.com/2018.3/Documentation/ScriptReference/Animations.GameObjectRecorder.html
이거 알면 다들 갈아타세요~(봉)
물론 처리할 부하도 없고, 프레임의 차이가 없으면 키프레임도 맞지 않는다p>
근데... 좀 안 쓰인다
구성 요소를 포착하면 모든 차이가 포착됩니다.
필요하지 않은 부분을 배제할 수 없습니다... (방법이 있으면 알려주세요...)
따라서 포획 전용 구성 요소(C# 클래스)를 별도로 생성해야 합니다
유니티 애니메이션에서 스크립트 변수를 옮긴 적이 있는 분들은 아실 거예요.
키프레임을 치는 조건은 다음과 같다.p>
서열화(public 또는 [SerializeField])
배열이나 리스트가 아니라...배열을 사용할 수 없습니다. 매우 번거롭습니다.
(편집기 확장을 사용해도 해결되지 않음...키프레임이 제대로 작동하지 않음)
BlendShape의 모든 매개변수 등 키프레임의 몇 분 동안 변수를 배치합니다.
다시 다른 배열을 넣을게요.p>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//プレイモード外でも実行
[ExecuteInEditMode]
public class FacialRig : MonoBehaviour
{
[Range(0, 100)]
public int a, i, u, e, o, blink;
[HideInInspector]
public int[] facilValue=new int[6];
void Update()
{
facilValue[0] = a;
facilValue[1] = i;
facilValue[2] = u;
facilValue[3] = e;
facilValue[4] = o;
facilValue[5] = blink;
}
}
이후 기록용 스크립트를 준비하면 완성됩니다.
재생 시 레코드 시작
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//忘れずに
using UnityEditor.Animations;
public class RecordFacialRig : MonoBehaviour
{
public AnimationClip clip;
private GameObjectRecorder gameObjectrecorder;
void Start()
{
// Animatorコンポーネントをつけるオブジェクト
gameObjectrecorder = new GameObjectRecorder(gameObject);
/* ここにバインドしたいコンポーネント記述(今回はFacialRig
このスクリプトがアタッチしているオブジェクトからGetComponentを行う)*/
gameObjectrecorder.BindComponentsOfType<FacialRig>(gameObject, true);
}
void LateUpdate()
{
if (clip == null)
return;
// フレームごとにキーフレームを打つ
gameObjectrecorder.TakeSnapshot(Time.deltaTime);
}
void OnDisable()
{
if (clip == null)
return;
if (gameObjectrecorder.isRecording)
{
// アニメーションクリップに保存
gameObjectrecorder.SaveToClip(clip);
}
}
}
다음은 OVRLLipSync를 편집하여 파라미터를 FacialRig로 흐르게 하고 포착한 것입니다
디자인 기반 FacialManager 스크립트 만들기
마지막으로 FacialManager에서 매개변수를 혼합하여 메쉬에 적용합니다.
FacialRig.cs의facilValue를 사용하여 FacialWeightValue를 곱한 값
Clamp를 가산하는 간단한 작업이기 때문에 코드가 생략되었습니다
※ [Execute InEditMode] 잊지 마세요p>
FacialRig 구성 요소가 Timeline에 설치되어 다양한 AnimationTrack의 그림
구성
iPhoneX계의 표정 획득 방법 향후 기술
Reference
이 문제에 관하여(유니티로 Vtuber용 표정 제어 장비 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yuzu_Unity/items/d891ecee64a164149167텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)