Unity에서 FaceOSC로 VTuber 하는 느낌(전편)

6634 단어 UnityOSC

개시하다


이번에는 얼굴 검사까지.
다음에 모델 동작 적어놓을게요.
일단 성과물의 GIF는 아래에 둔다.
유닛 초보자니까 틀리면 알려주세요.

왜 FaceOSC냐면요.


유닛으로 얼굴 체크하려고 했는데.
Facetracker는 유료입니다.
OpenCV도 유료니까.
OSS를 사용한 FaceOSC
따라서 Unity에서 FaceOSC를 사용하는 경우
유니티 패키지를 제작해 공개했기 때문에 소개해드릴게요.
OSC 수신UnityOSC이 유명한 것 같아요.
그루브 Tips선생님 uOSC좋아요.
이번에 사용한 건 이거예요.

UFaceOSC


이번에 만든 유니티 포장.
uOSC에서 FaceOSC에서 받은 OSC 메시지를 지웁니다.
유닛 경험이 적기 때문에 버그가 있으면 절 찾을 수 있으면 좋겠어요.
가져오기/raw에 오류가 있을 수 있습니다.

컨디션

  • MacOS 10.13.2
  • Unity 2017.3.1f1

  • FaceOSC v1.1

  • uOSC v0.0.1

  • UFaceOSC v0.0.1
  • 사용법

  • GiitHub에서 UOSC, UFO OSC, FaceOSC
  • 다운로드
  • 새 Unity 프로젝트 작성
  • [Assets] => [Import Package] => [Custom Package...]에서 UOSC 및 UaceOSC 가져오기
  • [GameObject] => [Create Empty] 게임 대상 만들기
  • 만든 게임 대상Inspector부터 Add Componet까지 부착
  • 선택
  • 포트에 [Scripts] => [uOSC] => [uOscServer]
  • 입력
  • 8338부터 Add Componet새 스크립트 만들기(이번엔 [New Script]라는 이름으로 만들었음)
  • 생성된 스크립트에 다음 샘플 프로그램을 입력하십시오
  • FaceOSC를 시작하여 raw 확인란을 엽니다
  • .
  • Unity의 Run 버튼 누름
  • main.cs
    using System.Collections;
    using UnityEngine;
    using uOSC;
    using UFaceOSC;
    
    public class main : MonoBehaviour {
      private UFaceOSC.Parser faceOscParser;
    
      void Start()
      {
        // UFaceOSCのパーサクラスを初期化
        faceOscParser = new UFaceOSC.Parser();
        // uOscServerコンポーネントを取得して受信時のコールバック関数を設定
        var server = GetComponent <uOscServer>();
        server.onDataReceived.AddListener(OnDataReceived);
      }
    
      void OnDataReceived(Message message)
      {
        // パーサクラスにOSCアドレスとOSCメッセージを渡す
        faceOscParser.SetData(message.address, message.values);
        if(faceOscParser.found == 1) {
          // FaceOSCから受信した顔の頂点情報を取得
          float[] raw = faceOscParser.raw;
          // or Vector2[] rawPoints = faceOscParser.GetRawPoints();
          // FaceOSCから受信した口の高さを取得
          float mouthHeight = faceOscParser.gesture.mouth.height;
        }
      }
    }
    

    세부내용


    UFaceOSC.Parer 클래스의 구성원 변수는 FaceOSC의 다음 OSC 메시지 주소를 기반으로 합니다.
    입 높이면main 그러니까/gesture/mouth/height오른쪽 눈의 열기faceOscParser.gesture.mouth.height 때문에/gesture/eye/right.
    faceOscParser.gesture.eye.right/pose/position으로, Vector2/pose/orientation으로 되돌아왔다.Vector3만 되돌아오는 방법을 준비했다./raw 맞아요. 수량은 66이에요.이 상수도 Vector2[]에서 읽을 수 있다.
  • Pose
  • center position:/pose/position
  • scale:/pose/scale
  • orientation (which direction you're facing):/pose/orientation
  • Gestures
  • mouth width:/gesture/mouth/width
  • mouth height:/gesture/mouth/height
  • left eyebrow height:/gesture/eyebrow/left
  • right eyebrow height:/gesture/eyebrow/right
  • left eye openness:/gesture/eye/left
  • right eye openness:/gesture/eye/right
  • jaw openness:/gesture/jaw
  • nostril flate:/gesture/nostrils
  • Raw
  • raw points (66 xy-pairs):/raw
  • 성과물



    이번 환경+라이브 2D로 VTuber 느낌을 해봤어요.
    사용한 모델은 Live 2D로 공개된 샘플을 사용했습니다.
    길어졌으니까 그 근처는 다음에 쓰자.

    감상


    Unity에서 FaceOSC를 사용한 예가 있지만 오픈 소스는 발견되지 않았습니다.
    상상을 초월한 유니티 피로(편리하지만).
    다음에 마스코트 이미지 건드리고 싶은 놈.

    좋은 웹페이지 즐겨찾기