VRChat 아바타 업로드 하는법 - avatar project
sdk를 설치했다면, avatar를 만들어보고 업로드해보자.
1. 프로젝트 열기
아바타 프로젝트를 연다.
그러면 처음에 이렇게 아무것도 없는 화면이 보일것이다.
2. 아바타 모델 가져오기
2.1. 아바타 모델 만들기
Blender 또는 Maya 같은 프로그램으로 모델을 만들 수 있다.
하지만 처음 3D 모델을 만든다면, 배워야 할게 많아서 긴 여정이 될 수있다.
아바타는 찾아 쓰는게 정신건강에 좋다.
2.2. 아바타 모델 찾기
유니티 에셋 스토어 | https://assetstore.unity.com/ko |
vrcmods | https://vrcmods.com/ |
booth | https://booth.pm/en/search/VRChat |
Unity Asset Store 같은곳에서 아바타 모델을 얻을 수 있다.
내가 사용하는 아바타의 라이선스를 가지고있는지 정확히 해라. 아바타 라이선스를 가지지 않고 사용하는 것은 VRChat의 약관과 artist의 권리를 위반하는 행위이다.
사용하고있는 모델이 7만개의 삼각형 이하로 해라. 모델에서 삼각형 개수가 초과한다면, 해당 아바타는 "Very Poor"로 마킹될 것이고 너무 많은 폴리곤 개수는 성능 문제를 야기할 수 있다.
3. 프로젝트에 모델 가져오기
유니티에셋스토어에서 모델을 얻었다면 프로젝트에서 다운로드하고 바로 임포트 할 수 있다.
유니티에셋스토어에서 "내 에셋에 추가" 버튼을 눌렀다면, 유니티 패키지 매니저에서 관리할 수 있다.
package manager에서 my assets를 클릭하면 에셋스토어에서 구매한 에셋들을 다운받고 import 할 수 있다.
import 하면 Assets에 폴더가 생긴다.
vrcmods같은곳에서 .unitypackage파일을 받았다면, Unity 화면에 파일을 드래그하면 된다. 또는 Assets > Import Package > Custom Package로 import한다.
위와 같이 새로운 창이 뜰것이고, import를 누르면 된다.
다른방법으로 모델을 얻었다면, import해주어야 하고 관련된 텍스쳐들을 assets폴더에 넣어야 한다.
3d에디터를 사용한 모델을 임포트할 때, 좌표 시스템이 다르다는것을 인식해야 한다. 예를 들어, Blender의 좌표 시스템은 유니티의 좌표 시스템과 다르다. FBX 파일로 Forward를 -Z Forward로 export해야한다.
3. scene에 모델 넣기
모델을 assets에 import했다면 다음은 scene에 넣어야 한다.
아바타당 한 scene을 사용하고 0,0,0좌표에 위치하는걸 추천한다.
Assets폴더 내 폴더들 중에서 Prefabs를 누르면 미리 만들어놓은 게임 오브젝트가 있다.
Prefabs 오브젝트를 위로 옮기면 볼 수 있다.
⚠︎ 아바타 최적화
아바타 최적화는 당신과 다른 사람들에게 낮은 프레임을 유발할 수 있는 중요한 일이다. Avatar Optimization Tips 를 참고하여 아바타를 잘 최적화해보자.
4. avatar descriptor 추가
booth같은곳에서 vrchat전용으로 나온 아바타 모델을 import했다면 avatar descriptor가 있겠지만, 유니티에셋스토어같은곳에서 얻은 모델에서 avatar descriptor가 없다면 추가해주어야 한다. VRChat SDK Control Panel을 키면 Builder에서 추가할 수 있다.
4.1. View position
VRChat에서 카메라가 있을 위치이다. 눈 사이로 하는것이 가장 좋다. 프로젝트에서는 하얀색 공이 보일 것이다.
Edit을 누르고 하얀색 공을 움직인 후 return하면 위치 조정이 가능하다.
4.2. Lip sync mode
너가 말할 때, 아바타의 입을 울직일 수 있다.
Auto Detect를 누르면 VRChat SDK가 아래 모드들 중에 알맞는 립 싱크 모드를 선택해 줄것이다.
Jaw Flap Bone
아바타가 하나의 본을 사용하는 턱이라면, 이것을 사용한다.
Viseme Blend Shape (추천)
Blend shape keys는 꼭지점 위치 베이스 메쉬를 바꾼다. 많은 모델은 말할 때 자세한 애니메이션을 위해 이것을 사용한다.
Jaw Flap Blend Shape
아바타가 하나의 blend shape를 사용한다면, 이것으로 설정한다.
Viseme Parameter Only
고수 크리에이터라면, Animator Parameters 빌트인을 사용해 어떻게 작동하는지 모드를 사용할 수 있다.
4.3. Eye Look
4.4. Playable Layers
https://creators.vrchat.com/avatars/playable-layers
⚠︎ unity 배경지식 요구
이 부분은 Unity Animators를 적당히 안다고 가정하고 설명한다.
처음 vrc avatar description을 추가해서 playable Layers가 위와 같이 없다면 Customize를 누르자.
3.0 Avatar Descriptor라면, 모든 humanoid 아바타들은 5개의 버튼을 가진다: Base, Additive, Gesture, Action, FX
일반적인 아바타는 세개의 버튼을 가진다: Base, Action, FX
이것들은 각각 Unity Animator를 가진다. 다른말로, 5개의 루트 animators를 가지는 것이고 그것들은 각각의 Animator Layers를 가지는 것이다.
이 layers들은 순서대로 적용된다. Base는 Base, Additive, Gesture, Action, FX 순서로 적용된다는 것이다. 예를들어, Additive가 뼈를 움직이고, Action이 같은 뼈를 움직인다면, Action이 우선시되는것이다.
부차적으로, 같은 컨트롤러를 여러 Playable Layers에 사용하지 않길 바란다. 지금 당장은 작동해도, 기능을 추가할 때 주요 이슈를 만들 수 있다.
🔥Animation Controllers만 사용할 것
Animation Controller만 Playable Layer slot에 지원한다. 다른 종류의 컨트롤러를 사용하면 에러가 발생하거나 콘텐츠 업로드가 불가능할 수 있다.
Playable Layer | 설명(description) |
Base | 걷기, 뛰기, strafing 트리를 포함한 locomotion(운동) 애니메이션이 들어간다. 점프, 떨어지기, 떨어지는 빠르기, 웅크림, 기어가기 등 애니메이션 상태 또한 포함한다. 여기에 무언가를 넣는다면, 너는 locomotion 애니메이션 상태를 재 정의해야 한다. 이것은 꽤 복잡하다! example Base Playable Layer를 보아 이것이 얼마나 복잡한지 보아라. Base에 있는 애니메이션은 변형에만 영향을 주어야 한다. 그리고 모든 계층은 Avatar Masks를 사용해 적절한 변환에 영양을 주는지를 보장해야 한다. |
Additive | Base에서 animate된 humanoid bones 위에 첨가물 변형 움직임을 위한 계층이다. Additive는 명확히 humanoid bones를 것이다. 만약 humanoid bones가 아닌 것들 (꼬리, 귀 등등) 에게 게으른 애니메이션을 추가하고싶다면 Gesture를 대신 사용해라. Additive에 있는 Animations는 변형에만 영향을 미쳐야 한다. |
Gesture | 신체의 나머지 부분을 위한 기초적인 애니메이션을 재생하며 각각의 신체 부분에 대해 동작하는 것이다. Avatar Masking을 활용하면 해당 animations이 원하는 아바타의 부분만 작동하도록 영향을 줄 수 있게 보장한다. 그래서 gesture parameter가 왼쪽/오른쪽 손만을 위한 손 모양을 만들기 원한다면 각 계층에서 그 손들을 가려야 한다. 또한 humanoid bones가 아닌 것들(꼬리, 날개, 귀 등등)을 위한 게으른 애니메이션을 원한다면 Gesture에 넣어야 한다. Gesture에 있는 Animations는 변형에만 영향을 미쳐야 한다. |
Action | 캐릭터를 완전히 제어할 때 필요한, 모든 다른 계층을 재정의하는 뼈 애니메이션을 위한 것이다. Action에 있는 Animations는 변형에만 영향을 미쳐야 한다. |
FX | FX는 특별한 계층이다. 다른 모든 계층은 물질적인 애니메이션, 쉐이더 속성 애니메이션, blend shape 애니메이션 등을 사용하지 않는다. 왜냐하면 그것들은 거울 클론에 복사되지 않기 때문이다. 오직 변형이다. 그러나, FX계층에서는 모든것이 복사된다! 다른말로, humanoid 변형/근육 애니메이션이 아닌 모든것은 FX 계층에 들어가야 한다. 이것은 게임오브젝트, 부품, 물리적 교환, 쉐이더 애니메이션, 입자 시스템 애니메이팅 등을 enable/disable하는 것들을 포함한다. |
4.5. Lower Body
4.6. Expressions
처음 vrc avatar description을 추가해서 Expressions가 위와 같이 없다면 Customize를 누르자.
이제 Expressions Menu 에셋과 Expression Parameters 에셋을 만들어야 한다.
그 전에 Menu폴더를 하나 만들어 메뉴를 관리하자.
해당 메뉴 폴더에 들어가 우클릭 Create > VRChat > Avatars > Expressions Menu를 하고 우클릭 Create > VRChat > Avatars > Expression Parameters도 한다.
그 후에 Expressions자리에 Menu와 Parameters를 드래그하면 된다.
Menu에셋을 누르면 Add Control을 할 수 있다. 최대 8개의 Control까지 가능하다.
하나의 컨트롤에는 이름, 아이콘, 타입, 파라미터가 들어간다.
Type of Controls | 설명 |
Button | 클릭되었을 때 parameter를 set한다. sync/reset이 보내졌을 때(일반적으로 1초 후) 재설정된다.(??) |
Toggle | toggle을 키면 parameter를 설정하고, toggle을 끄면 parameter를 재설정한다. |
Sub-Menu | 또다른 Expression Menu를 연다. 게다가 들어갈 때 parameter를 설정할 수 있고, 메뉴를 나갈 때 paremeter를 재설정할 수 있다. |
Two Axis Puppet | 조이스틱 위치에 의존하는 두개의 실수 파라미터를 컨트롤하는 축 인형 메뉴를 연다. parameter들은 수직 수평에 매핑된다. 실수 값 범위는 -1.0에서 1.0이다. |
Four Axis Puppet | 조이스틱 위치에 의존하는 네개의 실수 파라미터를 컨트롤하는 축 인형 메뉴를 연다. parameter들은 위 오른쪽 아래 왼쪽에 매핑된다. 실수 값 범위는 0.0에서 1.0이다. |
Radial Puppet | 하나의 실수 파라미터를 컨트롤하는 방사형 인형 메뉴를 연다. 채울 수 있는 진행도 바 같은것이다. 실수 값 범위는 0.0에서 1.0이다. |
4.7. Colliders
5. build탭 가기 / 아바타가 괜찮은지 체크
VRChat SDK에서 Builder를 켜 게임오브젝트를 볼 수 있다.
다음을 따라 간단한 과정을 따라하자.
- 아바타 이름을 주자. 설명도 추가할 수 있다.
- Content Warnings에서 적절한 것을 체크하자.
- Visibility를 정하자. private는 다른사람이 클론할 수 없다.
- 썸네일을 정하자. 이미지를 선택하거나 유니티 scene을 캡쳐해 썸네일로 할 수 있다.
- 'Validations' 섹션을 읽어보자. 많은 에러와 경고가 뜰것이다. 왠만하면 모두 해결하는 것이 좋다.
- 준비가 됐다면, 아바타를 빌드하자
6. 아바타를 빌드하고 업로드하자
"Build & Publish" 버튼을 누르면 SDK가 아바타의 빌빙과 업로딩을 시작한다.
업로딩이 끝난 후, 그것은 VRChat에서 사용 가능할 것이다. 또한 VRChat SDK > Show Control Panel > Content Manager에서도 당신의 아바타를 볼 수 있다.
Avatars - uploaded에 생긴것을 볼 수 있다.