VRChat/VRChat 아바타 강좌

8. VRChat 아바타 업로드의 기초

FakeZero 2023. 12. 22. 16:50

8. VRChat 아바타 업로드의 기초


  이번 강좌에서는 드디어 이론적인 공부에서 벗어나 아바타를 제대로 업로드 해 보겠다.....물론 이론 공부를 먼저 선행하고 나서다.

 

-VRC Avatar Descriptor 컴포넌트 세부사항

  우선 VRC Avatar Descriptor 컴포넌트를 좀 더 자세하게 알아보자.


View : 화면으로 보이는 시선의 위치를 설정한다.

  • View Position : Edit 버튼을 누르면 Scene탭에 작은 구체와 함께 이동도구가 나타난다. 저 구의 위치가 시선의 위치다. Z축의 + 방향이 아바타의 앞 방향이므로 잘 고려해서 시선을 설정하면 된다. 사람형 아바타의 경우 왼쪽 눈과 오른쪽 눈 사이의 미간에 둔다.

LipSync : 플레이어가 말할 때 입을 어떻게 움직일까에 대한 설정을 다룬다.

  Mode :

  • Default : 아무것도 움직이지 않는다. [Auto Detect!] 버튼을 누르면 Unity에서 자동으로 입 관련 설정을 찾아 적용한다.

  • Jaw Flap Bone : 말할 때에 움직일 오브젝트를 설정한다. Closed에 입을 닫았을 때의 오브젝트 위치, Open에 입을 열었을 때의 오브젝트 위치를 넣으면 된다. 이 범위 안에서 목소리의 성량에 따라 설정한 오브젝트가 움직인다.

  • Jaw Flap Blend Shape : 말할 때에 움직일 블렌드 쉐이프를 설정한다. [Face Mesh]에 블렌드 쉐이프가 설정되어 있는 오브젝트를 설정하고 움직일 [Jaw Flap Blend Shape]에 움직일 블렌드 쉐이프를 고르면 된다.

  • Viseme Blend Shape : 말할 때에 움직일 블렌드 쉐이프를 설정하는 것까지는 같지만 [Jaw Flap Blend Shape]와 다른 점은 입 모양을 발음별로 분류한다는 것이다. 보통 BOOTH에서 아바타를 구매하면 이에 대한 블렌드 쉐이프가 모두 구비되어 있다. 가장 많이 사용하는 설정.

  • Vieseme Parameter Only : 입술을 애니메이션으로 제어한다. Animator탭에서 Int형으로 이름이 Viseme인 파라미터를 만들어 제어할 수 있다. 0~14의 값으로 제어하면 된다.
    • 0 : Viseme: sil
    • 1 : Viseme: PP
    • 2 : Viseme: FF
    • 3 : Viseme: TH
    • 4 : Viseme: DD
    • 5 : Viseme: kk
    • 6 : Viseme: CH
    • 7 : Viseme: SS
    • 8 : Viseme: nn
    • 9 : Viseme: RR
    • 10 : Viseme: aa
    • 11 : Viseme: E
    • 12 : Viseme: ih
    • 13 : Viseme: oh
    • 14 : Viseme: ou

  위의 값으로 해당하는 입술 모양을 제어할 수 있다.


Playable Layers : 사실상 가장 많이 만지는 항목. VRChat 기본 움직임에 대한 애니메이션을 설정한다. 각 항목의 버튼을 누르면 자신이 직접 설정한 컨트롤러 파일을 할당할 수 있다.

  • Base : 점프나 떨어지는 모션, 웅크리기, 엎드리기에 대한 자세를 제어한다.
  • Additive : 숨쉬는 모션 등 Base에서 다루지 못하는 추가적인 움직임을 제어한다.
  • Gesture : 8가지 손 모양을 제어한다.
  • Action : AFK 모드 자세나 앉은 자세 등 플레이어가 제어하지 않는 자세를 제어한다.
  • FX : 아바타 제작의 꽃. 플레이어가 설정할 수 있는 모든 기능은 FX레이어에 들어간다.
  • Sitting : 아바타가 앉아 있을 떄의 애니메이션을 설정한다.
  • TPose : 아바타가 T포즈를 사용할 때에 자신만의 T 포즈를 사용하게 한다.
  • IKPose : 각 관절의 회전을 플레이어의 임의로 조절할 수 있게 한다.

Lower Body : 하체에 대한 설정이다. 트래커와 관련된 설정이다.

  • Use Auto-Footsteps for 3 and 4 point tracking : HMD와 양손의 컨트롤러의 3점 트래킹 또는 추가로 하나의 트래커를 사용해 4점 트래킹 상태의 경우 자동으로 발을 움직인다.
  • Force Locomotion animations for 6 point tracking : 추가로 3개 이상의 트래커를 써서 6점 트래킹 이상의 환경을 구축하고 있을 경우 체크하면 이동시에 [Playable Layers]에서 Base에 할당한 컨트롤러 파일의 영향을 받고 체크를 해제하면 영향을 받지 않게 한다.

Expressions : 액션 메뉴, 그리고 액션 메뉴와 연결되어 있는 파라미터를 수정한다.

  • Menu : Expression Menu Asset파일을 이용해 액션 메뉴를 커스텀한다.
  • Parameters : 커스텀한 액션 메뉴가 애니메이션 변수를 제어할 수 있도록 한다.

Colliders : VRChat 피직스본 업데이트 이후로 피직스본과 상호작용할 수 있는 콜라이더(충돌 판정 범위)를 수정한다. 기본적으로는 Unity가 자동으로 적용해 준다.


-Pipeline Manager 컴포넌트

  사실상 오브젝트와 VRChat을 연결하는 매개체 컴포넌트이다.

 

.VRChat SDK 컨트롤 패널

  아바타를 업로드 할 때 기본적으로 Blueprint ID가 생성되어 VRChat 서버에 업로드 되고 기존에 업로드 되어 있던 아바타를 수정하고 싶다면 SDK 컨트롤 패널의 Content Manager 탭에서 수정하고 싶은 아바타를 골라 [Copy ID] 버튼을 누르고 Pipeline Manager 컴포넌트의 Blueprint ID 항목에 붙여넣고 Attach 버튼을 누르는 것으로 해당하는 아바타 아이디와 연결할 수 있다.


-Expression Parameters 와 Expression Menu의 사용법

  위와 같은 방법으로 Expression Parameters, Expression Menu Asset 파일을 생성할 수 있다.

  위 2개의 파일은 수정을 거친 후에 위에서도 언급했듯이 각각 VRC Avatar Descriptor 컴포넌트의 Expressions탭에서 적용할 수 있다.

 

  적용하는 법을 알았으니 이제 사용법을 알아보자.

  본 강좌에서는 Expression Parameters 파일파라미터 파일, Expression Menu 파일메뉴 파일이라고 칭할 것이다.


Expression Parameters

Animator탭에서 설정한 파라미터
Expression Parameter 파일에서 설정한 파라미터

  파라미터 파일의 Inspector탭에서 파라미터를 관리할 수 있다.

  • Add : 새로운 파라미터를 추가한다. 이때 이름과 자료형은 Animator탭에서 사용한 것과 같게 설정해야한다.
  • Up, Down : 파라미터를 클릭하면 활성화된다. 파라미터의 위치를 이동시킨다.
  • Delete : 선택한 파라미터를 삭제한다.

  새로 만든 파라미터의 이름과 자료형이 Animator탭에서 만든 파라미터의 이름과 자료형과 같아야 한다는 것을 꼭 명심하길 바란다.

  파라미터의 항목들에 대해 설명하겠다.

  • Name : 파라미터의 이름.
  • Type : 파라미터의 자료형.
  • Default : 기본값. 처음 아바타를 실행했을 때의 값을 설정한다.
  • Saved : VRChat 내에서 해당 파라미터에 변형을 주었을 때, 해당 값을 다음 이동한 월드에서도 유지시키는가 또는 기본값으로 초기화 시키는가에 대한 설정이다. 체크를 표시하면 초기화 되지 않고 이동한 월드에서도 변경한 값이 유지된다.
  • Sync : 해당하는 파라미터의 변화를 다른 유저에게 보일지에 대한 여부이다. 예를 들어 옷이 바뀌는 애니메이션과 해당 파라미터가 연결되어 있는데 Sync에 체크를 하지 않았다면 나에게는 보여도 다른 이들에게는 보이지 않는다.

  또 하나, 중요한 것이 Sync를 표시한 파라미터들의 총 용량이다. 파라미터 목록 하단의 [Total Memory] 부분에서 확인할 수 있는데 총 용량이 256을 넘어가게 되면 아바타 업로드가 불가능하므로 주의바란다.


Expression Menu

  메뉴 파일에서는 액션 메뉴의 Expressions탭을 제어할 수 있다. Add Control 버튼으로 새로운 기능을 만들 수 있다.

  • Name : 이름
  • Icon : 액션 메뉴에서 보일 아이콘을 설정한다. 아무것도 설정하지 않으면 기본 사람모양 아이콘이 들어간다.
  • Type : 어떤 기능을 넣을지 결정한다. 6종류의 타입이 있다.

1. Button : 발동시키고 있을 때만 파라미터가 지정한 값으로 변화하고 발동을 중지하면 바로 기본값으로 돌아간다.

2. Toggle : On / Off 할 수 있는 기능이며 On 상태일 때 파라미터를 지정한 값으로 변화하며 Off 상태일때 기본값으로 돌아간다.

3. Sub Menu : 메뉴 안에 하위 메뉴를 만든다. 해당 하위 메뉴를 열고 있는 동안 변화시킬 파라미터도 지정 가능하다. 또 하나의 메뉴 파일을 만들어서 Sub Menu 항목에 적용하면 하위 메뉴를 만들 수 있다.

4. Two Axis Puppet : 세로축과 가로축에 하나씩 파라미터를 두고 -1 ~ +1 값 사이에서 제어한다. 단, 몇 가지 제한 사항이 있다.

  1. 제어하는 변수가 Int형일 경우 위와 오른쪽 버튼만 작동하며 +1의 값 밖에 가지지 못한다.
  2. 제어하는 변수가 Float형일 경우 위와 오른쪽은 +1 방향으로 값이 커지고 아래와 왼쪽은 -1 방향으로 값이 작아진다.
  3. Bool형은 애초에 사용할 수가 없다. 숫자로 된 값을 가지지 않기 때문이다.

  또한 값을 제어하던 도중 왼쪽 클릭(데스크탑)이나 트리거(VR)를 눌러서 Puppet을 꺼버리면 꺼진 시점에서의 값이 고정된다. Puppet이 켜져있는 동안에만 활성화할 파라미터를 설정하는 것도 가능하다.

5. Four Axis Puppet : 위, 아래, 왼쪽, 오른쪽 4가지 축으로 최대 4가지 파라미터를 0 ~ +1의 값으로 제어할 수 있다. 물론 제한사항이 있다.

  1. Four Axis Puppet타입은 Int형 파라미터를 제어하는 경우 정상적으로 0과 1을 나타낸다.
  2. Float형 파라미터를 제어하는 경우 각 방향으로 이동할 때 1이 되는 방향으로 커지고 중앙으로 올 수록 0이 되는 방향으로 작아진다.
  3. 중복되는 파라미터를 제어하는 경우 왼쪽이나 아래 버튼만 작동한다.
  4. 당연히 Bool형 파라미터는 사용 불가능 하다.

  Four Axis Puppet도 마찬가지로 도중에 Puppet을 닫으면 파라미터의 변경사항이 고정된다. Puppet이 켜져있는 동안에만 활성화할 파라미터를 설정하는 것도 가능하다.

6. Radial Puppet : 다이얼형 UI로 Float형 파라미터를 0 ~ 1의 값으로 세부 제어한다. 물론 제한사항이 있다.

  1. 위에 기술한 대로 Float형 파라미터만 제어가능하다.
  2. Int형 파라미터는 시스템상으로는 적용할 수 있지만 VRChat 안에서는 정상적으로 작동하지 않는다.
  3. 당연히 Bool형 파라미터는 쓰지 못한다.

  마찬가지로 도중에 Puppet을 닫으면 파라미터의 변경사항이 고정된다. Puppet이 켜져있는 동안에만 활성화할 파라미터를 설정하는 것도 가능하다.


※아날로그(Aanalog)와 디지털(Digital)※

  이상이 Expression Menu의 설명이 되겠다. 그런데...혹시 눈치 챘는가? Two Axis Puppet, Four Axis Puppet, Radial Puppet 타입이 어째서 Float형 파라미터에 특화되어 있는지에 대해 말이다.

  이 질문의 열쇠가 되는 것은 7강에서 언급했던 수의 연속성이다.

 

  Two Axis Puppet, Four Axis Puppet, Radial Puppet 모두 Button과 Toggle과는 다르게 상태의 변화가 연속적인 제어방법이다. 때문에 이것으로 Int형 변수를 제어하려고 하게 되면 굉장히 비효율적이라는 것을 알 수 있다.

 

  이렇게 연속적인 방식을 아날로그(Aanalog)라 하고

  반대로 불연속적인 방식을 디지털(Digital)이라고 한다.

 

  앞으로 메뉴를 만들거나 파라미터를 새로 만들 때에 그 제어방식이 아날로그 방식인지 디지털 방식인지를 생각하면 훨씬 효율적으로 아바타를 만드는 것이 가능하다.


-VRChat 디버그(Debug)창

  디버그(Debug)창. 이전 0강에서 설명하지 않았던 기능 중 하나로 당시엔 설명할 이유가 없었기 때문에 설명하지 않았지만 이제는 설명해야할 때가 되었다.

 

  디버그창은 VRChat 아바타가 가지고 있는 파라미터, 애니메이션의 변화를 관찰하는 창으로 아바타를 제작할 때에 필수적인 기능이다.

왼쪽부터 순서로 누르면 디버그창을 불러낼 수 있다. 끌 때는 Debug 버튼을 한 번 더 누르면 된다

  디버그 창에서 우리가 주로 확인하는 부분은 3곳 뿐이니 복잡해 보이더라도 유심히 관찰해보길 뿐이다.

  1. 왼쪽의 Parameters 리스트 : 아바타에 적용된 모든 파라미터의 현상황을 실시간으로 모니터링 한다. 만약 파라미터 파일에는 작성하지 않고 컨트롤러 파일에서 내부적으로만 쓰는 파라미터라고 하더라도 모두 모니터링한다.
  2. 중앙의 Tracking Control 리스트 : 아바타의 각 부위가 현재 HMD, 추적 컨트롤러, 트래커에 의해 컨트롤 되고 있는 상황인지(Tracking) 아니면 애니메이션이 재생되고 있는 것인지(Animation) 표시한다.
  3. 오른쪽의 FX를 포함한 Animation Controller와 레이어 리스트 : 각 애니메이션 레이어에서 어떤 애니메이션이 실행되고 있는지를 모니터링한다.

  간단한 아바타를 만드는 것이면 몰라도 처음 만든 많은 기능이 추가된 아바타는 거의 확실히 어딘가에서 고장이 나는 법이다. 그런 때에 디버그창을 활용하면 어디서 잘못되었는지 원인을 유추하기 쉬워진다.


-BOOTH에서 아바타 구매해서 업로드하기

  자, 이제야 겨우 여러분들이 원하는 내용이 나왔다. 사실 정작 내용은 별 거 없다. 아마 오늘 강좌에 쓴 내용중 가장 간단한 내용일 것이다. 그럼에도 이렇게나 시간을 들여서 강좌를 한 것은 그저 여러분들이 단순 아바타를 업로드만 하고 끝이 아니라 혹시라도 아바타를 수정하거나 아바타가 원하는 움직임을 하지 않을 때에 그 원인을 쉽게 유추할 수 있도록 하고 싶었다.

 

  서론이 길었다. 이제 직접 아바타를 구매해서 업로드 해보자!

  BOOTH 홈페이지 : https://booth.pm/ko

  우선 BOOTH에 로그인을 하도록 하자.

  밑으로 좀 내려가서 [3D Models] 카테고리에 들어가면 단번에 VRChat 태그가 붙어있는 수많은 아바타들이 보일 것이다. 이 안에서 사용하고 싶은 아바타를 골라 구매하면 된다...단! 주의사항이 있다.

  두 상점 페이지를 자세히 살펴보자. 분명 같은 아바타를 사용하고 있는데 가격이 다르다. 일본어를 읽을 수 있는 사람을 알겠지만 두 상품은 엄연히 다른 상품이다.

  왼쪽은 아바타를 판매하는 것이고

  오른쪽은 오직 의상만을 판매하는 상품이다.

  2장에서도 한 번 언급했지만 BOOTH에는 아바타만 판매하는 것이 아니라 아바타 전용 의상, 악세서리, 월드 제작에 사용할 수 있는 에셋등을 판매하고 있다. 그러니 사고 싶은 것이 있다면 세부내용을 잘 읽어봐야 한다.

  보통 아바타를 판매하는 상품 이름에는 オリジナル3Dモデル[오리지널 3D 모델]이라고 적혀있다. 꼭 확인해서 돈을 낭비하는 일이 없도록 하자.

  사고 싶은 아바타를 골랐다면 이제 카트에 넣고 결제를 하면 된다.

  단, 결제시에는 해외결제가 가능한 카드가 필요하므로 꼭 지참하도록 하자.

필자는 미리 구매해 둔 マルティー 아바타를 이용하겠다

  원하는 상품을 구매했다면 사이트 우측 상단의 프로필을 클릭 후, 라이브러리 페이지에서 구매한 아바타를 확인할 수 있다. 구매한 아바타의 가장 최신 버전을 다운로드 받아서 압축을 풀어주자.

  정상적으로 압축이 풀렸다면 위와 같이 3D 모델 파일이나 텍스쳐 파일 등등이 들어있다. 하지만 이걸 모두 적용할 필요는 없고 우리는 unitypackage 확장자의 파일만 사용해서 현재 실행하고 있는 Unity창에 불러오기만 하면 된다.

 

  다만! 아직 해야할 것이 남아있다. 잠시 아바타를 구매한 BOOTH의 페이지로 돌아가주길 바란다. 라이브러리에서 상품의 이미지를 클릭하면 바로 이동할 수 있다.

  상품 페이지나 다운받은 압축파일 속에는 아바타를 적용하는 방법이 상세하게 안내되어 있는 경우가 많다. 다만 아바타의 개중에는 만들어진지 좀 지난 상품이라 방법이 옛날 기준으로 적혀있는 상품들도 많다.

  우리가 주목해야 하는 것은 바로 아바타에 어떤 셰이더[シェーダ]가 쓰였는지이다.

  기본적으로 아바타 상품에는 셰이더가 동봉되어 있지 않다! 그 이유는 이들이 이용하는 셰이더 또한 다른 이가 만든 오픈소스 셰이더이기 때문이다(개중에는 셰이더가 동봉되어 있는 상품도 있다.).

  셰이더가 임포트 되지 않은 상태에서 아바타를 임포트 시키면 파일의 설정이 셰이더를 찾지 못해 충돌이 일어나거나 Unity 기본 셰이더로 변경되는 일도 빈번히 있다. 따라서 아바타를 임포트 하기 전에는 반드시 셰이더를 먼저 임포트하는 것이 정신 건강에 좋다(만약 상품에 셰이더가 동봉되어 있다면 해당 버전의 셰이더만 호환하는 것일 수 있으므로 셰이더를 먼저 임포트 하지 않아도 된다.).

  그러니 아바타를 업로드 하기 전에는 반드시! 상품 페이지, 다운로드 받은 파일을 샅샅이 뒤져서 어떤 셰이더를 사용하고 있고 셰이더가 동봉되어 있는지 반드시 확인하기 바란다!

일반적으로 가장 많이 사용되는 liltoon 셰이더
liltoon 셰이더 다음으로 가장 많이 사용되는 UnityChanToonShader

  셰이더는 대부분 구글링으로 찾을 수 있는데 liltoon처럼 BOOTH에서 받을 수 있는 경우도 있고 Github에서만 받을 수 있는 경우도 있으며 혹은 둘 다 가능할 때도 있다.

 

  아바타가 사용하는 셰이더까지 받았다면 이제 아바타를 업로드할 준비가 끝났다.

  위와 같이 셰이더와 아바타 모두 준비되었다면 셰이더를 먼저 임포트 해 보자.

  unitypackage파일을 적용하는 방법은 간단하다. 파일을 Unity창 안으로 드래그 & 드랍하기만 하면 된다. 그러면 조금의 로딩 후 임포트할 파일 목록을 보여주는데 기본적으로 모두 선택되어 있으니 그냥 Import 버튼을 누르기만 하면 된다.

  임포트에 성공했다면 위와 같이 파일이 생성된 것을 볼 수 있을 것이다.

  셰이더 임포트에 성공했다면 마찬가지로 아바타도 임포트 하자. 아무런 문제가 없다면 에러 없이 임포트 될 것이다.

  아바타 폴더를 뒤지면 위 사진처럼 prefab 확장자의 프리팹 파일이 있을 것이다. 전에도 말했듯 아바타 제작자들은 프리팹을 통해서 별다른 설정 없이 바로 아바타를 업로드할 수 있도록 만들어 두었다.

  프리팹 파일을 찾았다면 바로 Hierarchy창에 넣어서 Scene창으로 불러오자.

  VRChat SDK 컨트롤 패널을 불러와서 이름과 썸네일을 설정해주고 약관의 동의까지 해서 아무런 문제가 없다면 Build & Publish 버튼이 활성화 될 것이다.

  Upload Succeeded! 문구가 떳다면 정상적으로 업로드 된 것이다. 이제 VRChat을 기동해서 업로드된 아바타를 확인해 보자.

  정상적으로 업로드가 된 것을 확인했다. 이제 여러분도 자신이 쓰고 싶은 아바타를 업로드 할 수 있다!


  이렇게해서 아바타 업로드의 가장 기본적인 강좌를 마친다.

 

  다음 강좌인 9강부터는 기본적으로는 알지 않아도 되지만 알고 있으면 더 고급적인 기능을 다룰 수 있게 되는 방법을 소개한다.

 

  지금까지 따라와줘서 너무 고맙고 혹시 9강부터도 볼 생각이 있는 분들은 힘내시길 바란다.

 

  다음 업로드 예정 : 2024년 4월