VRChat/VRChat 아바타 가이드

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

밍결 2022. 12. 18.

글을 들어가기 전에.

이 글은 '하는 방법'보다 '왜 이렇게 하는가'에 초점을 두고 있습니다.

무작정 따라하기엔 오히려 좋지 않은 글일 수 있습니다. 제 생각엔 "옷장 만큼은" 설명해야 하는 게 많을 뿐만 아니라 파트도 서로 뚝뚝 끊겨있기 때문에 영상으로 따라하는 게 훨씬 좋다 생각합니다. 글로는 한계가 있어요.

두 달 전 즈음에 작성하다가 따라하기엔 너무 설명이 난잡해서 포기하고 버려둔 글인데, 누군가 옷장도 올려줬으면 좋겠다 하셔서 혹여나 도움 될 사람도 있으려나 싶어 올리는 글입니다.


아바타를 무겁게 만드는 유저가 많아 옷장에 부정적인 의견을 많이 말했지만, 아바타를 예쁘게 사용하기 위해 약간의 옷장은 필요하다. 스타킹을 좋아하는 사람도 많지만 맨다리도 매력적이고, 겉옷을 입었다 벗었다 하는 일도 중요한 일이고, 헤어스타일을 바꾸겠다고 아바타를 바꾸면 너무 불편하니까.

그런데, 처음 옷장을 만들면 정말 어렵다.

기능적인 부분을 처음 접하는 거라 어렵기도 하고, 대부분은 영상을 가이드로 사용하니까 막대한 정보의 양에 두려움을(?) 떨기도 한다. 어떻게 저걸 다 봐 어떻게 저걸 내가 할 수 있겠어. 도저히 자신이 없어서 옷장에서 아예 포기를 해버리는 경우가 많다.

하지만 옷장은 '노가다'라서 귀찮을 뿐이지 어려운 건 아니다.

 

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

옷장 기능을 만들기 위해 수정해야 하는 건 FX, 메뉴, 파라미터 이렇게 총 세 가지다.

여기에 필요한 걸 넣는 건 엄청 쉽다.

여기에 필요한 수치를 입력하는 건 솔직히 10분도 채 걸리지 않는다.

"전용 의상 옷 하나 입혀주고 옷장 해주는데 7-8만원을 받더라" (그런데 그거조차 제대로 안 해줬다) 같은 얘기에 화를 내는 유저가 많은 이유가, 전용 의상 입히는 일은 일도 아니며 옷장 기능은 실력이라고 할 수 없을 정도로 간단하기 때문이다. 진짜 호구 잡힌 거라서..

시간이 없어 커미션을 맡길 생각이더라도, 자신이 최소한은 알아야 호구당하지 않을 수 있다.

 

시작 전에 준비해야 할 사항

이 글을 따라하기 전에, 자신이 만약 "씬을 새로 만드는 방식으로 한 프로젝트 파일 내에서 여러 아바타를 작업할 생각이라면" FX, 메뉴, 파라미터 파일을 수정하기 전 세 파일을 복제하고 복제한 파일로 수정한 뒤 작업하길 바란다.

해당 파일은 (같은 아바타라면) 같은 프로젝트 내에서 공유되어 쓰인다. 셀레 A 아바타를 만들고 같은 프로젝트에서 셀레 B 아바타를 만들면 셀레 B 아바타의 해당 파일과 셀레 A 아바타의 해당 파일이 공유되어 작업한 옷장 설정을 날려먹게 될 수가 있다.

나는, 씬을 추가로 만들지 않는 걸 추천한다. 한 프로젝트에 여러 아바타 작업하지 말고, 하나의 프로젝트엔 하나의 아바타만 작업하는 걸 추천한다. 그게 같은 아바타를 베이스로 하더라도 말이다. (프로젝트 파일 터질 때가 있어서 리스크를 분산하는 용도 뿐만 아니라 텍스쳐, 옷장 관련 파일 일일이 다르게 관리하는 거 귀찮으니까)

 

복제해서 수정하는 방법

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

1. 좌측 Hierarchy에 있는 아바타 이름을 클릭하면 우측 Inspector에 내용이 표시된다. 
2. Inspector에서 FX, 메뉴, 파라미터 등을 클릭하면 중앙 하단 Project 창에서 해당 파일이 위치한 경로로 바뀌며 해당 파일을 강조해준다. (만약 경로로 들어가서 파일을 못 찾겠으면 Inspector에서 해당 메뉴를 한 번 더 누르면 된다. 언제든 다시 강조해준다)
3. Project 창에서 해당 파일을 컨트롤D로 복제하고, 복제한 파일의 이름을 수정한다.
4. 그리고 수정한 파일을 드래그해서 Inspector의 해당 메뉴에 올려주면 수정한 파일로 바뀐다.

 

아, 그리고 만약 이 글에서 설명하는 "창"이 자신에게 보이지 않을 경우, "상단 메뉴"의 "Window"에서 찾으면 다 있다. 인스팩터 등의 기본적인 창은 "General"에 있고, 애니메이션이나 애니메이터 메뉴는 "Anamation"에 있다.

 

VRC Expressions Menu 설정 방법 (메뉴 설정 방법)

메뉴에서 자신이 원하는 방향대로 큰 틀을 잡고 가야하는데,

문제는 여기서 "옷장" 강좌 등을 따라하면 (시작한 지 얼마 안 되어 옷도 얼마 없을 텐데) 여러 옷을 넣는 방법을 강좌를 따라하게 되고, 여러 옷을 넣는 방법을 배우게 되면 옷장 구성조차 남을 보고 따라하게 되고, 때문에 정작 자기가 배우고 있는 게 무슨 말인지 여러 번 반복해서 작업하기 전까지는 잘 와닿지 않는다고, 나는 생각한다. 오히려 너무 많아서 헷갈린다.

그렇기 때문에 조금 더 간단할 필요가 있다.

 

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

메뉴 파일이 위치하고 있는 카테고리의 이름은 "Expressions"다. 우리가 VRChat에서 좌측 컨트롤러의 Y를 눌렀을 때 보여지는 '옷장'으로 사용할 기능의 이름도 "Expressions"다. 여기서 설정한 파일이 VRChat에서 그대로 적용된다고 생각하면 쉽다.

당연히 VRChat에서 Expressions을 눌렀을 때 보여지는 메뉴가 아바타의 Expressions의 Menu에 등록된 메뉴 내용이다. (아무런 기능도 설정하지 않고 메뉴 파일에 아무거나 써서 업로드 해도 그대로 적용된다. 눌러도 아무 반응 없겠지만)

메뉴 파일을 (프로젝트 창에서) 클릭 혹은 (인스팩터 창에서) 더블 클릭 하면, 아래 이미지처럼 인스팩터 창에 메뉴 구성 내용을 띄워준다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

아바타의 메뉴 파일을 그대로 사용하고 있다면 아바타 제작자가 설정해둔 메뉴가 나올 거고, 아예 새로 메뉴를 만들었다면 아무 내용도 없을 거다. 나는 이미 작업을 다 해놓은 아바타기 때문에 여러분과 전혀 다른 메뉴가 표시되고 있다.

나는 1번 메뉴가 "표정"이고, 2번 메뉴가 "기본 옵션"이니까 VRChat에서도 이렇게 표시된다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

하나의 메뉴 파일에 등록할 수 있는 리스트의 수는 8개다.

하지만 우리가 등록할 애니메이션의 수는 8개 이상인 경우가 대부분이라, "메뉴 파일 -> 하위 메뉴 파일" 이런 식으로 메뉴에서 메뉴로 새끼치는 방법을 주로 사용한다. 

 

Sub Menu

여러분에게 필요한 게 "1번 옷", "2번 옷", "속옷 ON/OFF" 라면 "Sub Menu"기능을 사용할 필요가 없다. 아바타에 등록되는 메인 메뉴 파일 하나에서 다 해결할 수 있다. 

하지만 옷을 파츠별로 1번 의상 점퍼 ON/OFF, 1번 의상 티셔츠 ON/OFF, 1번 의상 치마 ON/OFF, 1번 의상 안경 ON/OFF, 1번 의상 신발 ON/OFF, 2번 의상 이하 생략 3번 의상 이하 생략 등 이런 식으로 나눠서 옷장을 만들 예정이라면 이미 메뉴에 넣을 요소가 8개가 넘어가기 때문에 Sub Menu를 사용해야만 한다. 

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

메뉴 파일에서 "Add Control"을 누르면 위 이미지처럼 메뉴를 하나씩 만들 수 있다. 

추가한 리스트에서 "Type"을 설정할 수 있는데, 여기서 "Sub Menu"를 선택하면 Sub Menu에 또 다른 메뉴 파일을 등록할 수 있다(메뉴 파일을 드래그로 끌어와서 놓아주기만 하면 된다). 

우린 지금 서브 메뉴에 넣을 메뉴 파일이 없으니까, 프로젝트 창에서 우클릭 해서 새 메뉴 파일을 생성해야 한다. 

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

프로젝트 창에서 우클릭 후, Create - VRChat - Avatars - Expressions Menu 를 선택하면 빈 메뉴 파일이 생성된다.

"저는 Create에 VRChat가 없는데 어떻게 해야 하나요?"라고 질문을 하는 분이 혹시 있을 수도 있는데, 아직 기본적으로 설치해야 할 거도 전혀 하지 않았다는 말 밖에 해줄 수 있는 게 없다. 돌아가서 먼저 설치부터 하시고 와야한다.

아래 글을 참고하시면 좋을 거 같다. 

 

VRChat 아바타 업로드 하는 방법 (VRC SDK3 에러 해결 방법 등)

서론 조금 길다. 오늘 하루종일 VRC 아바타 업로드 해보려고 "개지랄" 진짜 내가 이런 나쁜 표현 블로그에는 거의 안 쓰는데, 진짜 "개지랄"하다가 겨우 끝내고 작성하는 글이다. 이 놈의 오류는

mingyeo1ee.tistory.com

어쨌든, 여기서 만든 (프로젝트 창에 생성된) 메뉴 파일을 클릭해서, 아래 이미지처럼 1번 머리, 2번 머리, 3번 머리 이런 식으로 입력하면 끝난다. 

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

이름을 입력하고, Type에 '토글'(Toggle)을 선택해주고 Parameter를 입력해주면 된다. 

 

파라미터는 뭐고 토글은 뭔가요?
"Button"은 뭐고 "Toggle"은 뭐고 그 외 다른 메뉴는 뭔가요?

 

Toggle

Puppet라고 써있는 타입은 여러분이 궁금하면 검색해서 알아보는 걸 추천하고(이거까지 설명하면 너무 길어진다, 나도 거의 안 써서 익숙하지 않고), 보통 Button과 Toggle을 주로 사용한다. Button은 말 그대로 버튼처럼 딸각 하고 원래 상태로 돌아가는 거고, Toggle은 ON 시키면 ON에서 계속 작동하고 있는 걸 말한다.

옷장의 원리는, 특정한 애니메이션을 녹화한 뒤(엑셀 매크로처럼) 해당 애니메이션을 게임에서 작동시켜 계속 보여주는 방식이다. 그러니까 내가 A라는 옷을 입고 있다가 B라는 옷으로 갈아입힌다고 생각하면, A옷과 B옷 모두 게임에 업로드 한 뒤 게임에서 Expressions를 이용해 A 객체를 끄고 B 객체를 켜는 방식으로 옷장이 작동하는 거라고 보면 된다.

이해가 빠른 분은 무슨 말을 하는지 이미 이해했을 거다.

Toggle 기능을 사용해 옷과 같은 요소를 애니메이션으로 켜지거나 꺼진 상태로 작동시키면서 다른 옷으로 나오게 하는 거라고 생각하면 쉽다.

 

Button

버튼은 토글에서 설명했다시피 "Button은 말 그대로 버튼처럼 딸각 하고 원래 상태로 돌아가는 거고", 그래서 자주 사용하진 않지만, 특정한 기능을 만들 때 (VRC Avatar Parameter Driver 기능과 연계해서) 많이 사용한다.

VRC Avatar Parameter Driver을 사용하는 버튼 기능은 글 흐름 상의 이유로 다음에 설명.

어쨌든, 특정한 기능을 만드는 게 아니라 단순히 ON/OFF 옷장만 넣으려고 하는 지금은 "토글"로 넣으면 된다.

 

실제 메뉴 구성 방법

이렇게 하라는 건 아니고, 원리만 설명하면 어떻게 해야하는지 감을 못 잡는 분도 있을 수 있으니 아래는 단순한 예시.

우리가 옷장을 간단하게 구성하면 "머리"와 "의상" 그리고 "악세" 총 세 가지 정도로 나누면 충분하다.

그렇다면 아바타에 넣는 메인 파일의 구성은 1번에 머리(서브메뉴) 2번에 의상(서브메뉴) 3번에 악세(서브메뉴)로 구성한다. 그럼 여기서 추가로 생성해야 할 서브 메뉴 파일은 "머리", "의상", "악세"고, 해당 서브 메뉴 파일을 메인 파일의 '서브 메뉴' 타입에 연결시켜주면 된다.

서브 메뉴인 "머리" 메뉴 파일을 열어 "기본 머리", "포니테일", "긴 생머리"를 토글로 등록해주고, 같은 방법으로 "의상" 파일도 수정하고, "악세" 파일도 만들 예정인 요소를 추가해주면 된다(만들 게 별로 없는 사람은 서브 메뉴를 사용하지 않고 아바타에 넣는 메인 메뉴 파일에 토글 타입으로 등록해주면 된다).

 

Type 입력이 끝났으면, Type 아래에 있는 "Parameter"에 해당 값을 넣어줘야 한다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

 

VRCExpressionParameter 설정 방법

하지만 우리는 파라미터를 만진 게 없으니 파라미터가 없다.
(혹은 아바타 제작자가 넣어둔 파라미터)

파라미터를 먼저 만들어줘야 한다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

"파라미터"는 아까 메뉴 아래에 있던 그거다.

파라미터를 먼저 설명하고 메뉴를 했으면 좋았겠지만, 제대로 이해하려면 이런 식으로 설명하는 게 좋다고 생각했다.

 

어쨌든, "메뉴 입력할 때 넣는 파라미터 값"은 "파라미터 파일에 있는 파라미터 값 중에서" 선택할 수 있다. 

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

파라미터 이름은 자신이 이해할 수 있는 대로 작성하면 된다.

내 아바타를 예로 보여주어서 너무 복잡한데, 나는 하나하나 따로 조정하는 게 필요해서 조금 쓸데없을 정도로 많은 거고 여러분은 이렇게 복잡하게 만들 필요까진 없다. 

보통은 Int 타입으로 "머리", "의상" 이렇게 2개 들어가고 악세 별로 하나하나 추가되는 수준이다.

의상을 4개를 넣든 5개를 넣든 "의상" 하나만 들어가기 때문에 간단하다. 

 

Int는 뭐고 Bool은 뭔가요?

Int

Int는 "여기 있는 값 중에서 하나만" 선택하는 기능이다.

그러니까 의상 1, 2, 3, 4, 5번을 넣으면 이 중에서 1개만 선택할 수 있다. 3번(토글)을 선택하면 기존 선택한 1번(토글)은 꺼지는 형태. 의상이나 머리처럼 여러 개 중에 단 하나만 켜는 애니메이션은 Int형으로 사용하면 좋다. 

Bool

이건 개별로 만들 수 있는 기능이다. Int는 하나의 "세트"를 만들어 거기서 선택해 사용하지만, Bool은 "하나"의 독립된 개체로 Bool로 안경, 머리띠, 머리핀, 볼의 홍조 이런 식으로 4개를 만들면 4개 모두 개별적으로 껐다 켰다 할 수 있다. 

그러니까 편하고 쉽게 만들고 싶으면 Int로 머리, 의상만 바꾸는 게 최고다. 인트 2개면 끝나니까. 

Int로 악세서리를 Bool처럼 사용하는 경우도 있는데 이는 나도 잘 모르고, 원리를 잘 모르겠어서 생략. 

 

실제 파라미터 구성 방법 

아까 말했다시피 예시일 뿐, 이렇게 구성할 필요는 없다.

"머리"로 "Int" 타입 하나,
"의상"으로 "Int" 타입 하나,
"안경"으로 "Bool" 타입 하나, 
"머리띠"로 "Bool" 타입 하나,
"머리핀"으로 "Bool" 타입 하나.

이런 식으로 하면 총 5개의 파라미터가 나온다. 끝.

 

그럼 옆에 "Default"와 "Saved"가 보일 거다.

Default, Saved

Default는 말 그대로 '디폴트값' 그러니까 기본 값을 정하는 거다.

Int는 0~8번 중에 기본 값을 넣을 수 있고, Bool은 Default 체크를 해두면 "켠 상태"가 기본이 된다.

인트는 0번 머리, 1번 머리, 2번 머리 중에 원하는 값을 넣으면 되니 이해가 쉽다.
(왜 1번이 아니라 0번인지는 나중에 FX 레이어 할 때 설명)

하지만 Bool은 헷갈릴 수 있다.

Bool의 디폴트값은 단지 해당 메뉴를 "ON" 혹은 "OFF" 둘 중에 하나를 선택할 뿐이다. 이렇게 생각하면 정말 쉬운데, 문제는 우리가 애니메이션을 "어떤 상태를 기본 값으로 할지"에 따라 ON이 꺼지는 걸 수도 있고 OFF가 꺼지는 걸 수도 있는 게 문제다. 이거 때문에 (사람에 따라서) 헷갈리기도 한다.

자신이 해당 메뉴를 "작동시켰을 때" "애니메이션이 꺼지게 만들면" 디폴트값으로 선택했을 때 "꺼지게" 나오고, 반대로 "작동시켰을 때" "애니메이션이 켜지게 만들면" 디폴트값으로 선택했을 때 "켜지게" 나온다.

그러니까 Bool의 디폴트값을 선택했다고 해당 악세서리가 나오는 게 아니라, 켜질 때 나오게 해둔 애니메이션이 나올 뿐이라는 거다. 켜질 때 나오는 애니메이션이 '안경을 끄는' 애니메이션으로 설정했다면 디폴트값에 체크했을 때 안경도 당연히 꺼진 상태가 기본이 된다.

그러니까 자신이 이해할 수 있게 파라미터 값을 잘 쓰는 걸 추천하며, 이왕이면 하나의 방향성으로 통일하는 걸 추천한다. '이건 끄는 게 기본이고 저건 켜는 게 기본이고' 이런 식으로 나누지 말고, 체크했을 때 켜지는 걸로 할 거면 다른 거도 체크했을 때 다 켜지는 걸로 하라는 얘기다. 그래야 편하다.

내가 괜히 "허벅지 줄이기" 라고 파라미터 값에 쓸데없이 '줄이기'라고 써둔 게 아니다. 괜히 다른 파라미터 값도 똑같이 "줄이기"로 통일한 게 아니다. 체크를 해야 할 때 '허벅지 줄이기' 라고 안 써놓고 '허벅지' 라고만 써두면 이게 허벅지를 줄이는 건지 늘리는 건지 뇌정지가 오기 때문에, 다른 건 늘리는 거고 줄이는 거고 섞여있으면 존나 헷갈리니까 저렇게 써둔 거다.

'이걸 왜 헷갈려?' 할 수 있는데, 롤에서 스킬 4개 쓰는 건 쉬운데 니달리나 앨리스나 리신처럼 스킬 7개가 되면 헷갈려서 손이 꼬이는 사람은 작업하다보면 헷갈릴 수 있다. 아펠리오스 처음 나왔을 때 스킬 이해 못 하고 연습 한 달 넘게 해도 똑바로 못 하던 유저 엄청 많았다는 사실을 상기해야 한다. 작업하다가 헷갈리기 진짜 쉽다.

Saved는 내가 켠 값을 '저장'한다는 거다.

이걸 체크 해제하면 맵을 옮기거나 재접속을 하거나 여러 상황에 '기본 값'(디폴트 값) 설정대로 조정된다.

반대로 체크하면 내가 마지막에 설정한 값 그대로 저장된다.

Saved를 사용하는 게 편한데, "옷을 벗는 옵션"이나 "DPS" 같은 건 Saved 체크를 해제하면 좋다. 왜냐면 까먹고 옷을 벗고 친구가 판 월드 혹은 퍼블릭 월드에 조인하거나, DPS를 켜둔 채로 친구 방에 조인을 할 수 있으니까.

 

여기서 설정한 파라미터값을 아까 메뉴에 넣어야 하는 파라미터 값에 넣어주면 된다. 

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

아까 말했다시피 1번으로 사용할 걸 0번부터 넣어주면 된다.

 

그리고 FX 파일에도 파라미터 값을 그대로 똑같이 옮겨야 한다.

FX 파일을 여는 방법은, 메뉴 파일과 파라미터 파일과 똑같다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

해당 FX 파일을 열면 아래와 같은 화면이 나온다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

좌측 상단에 Layer와 Parameters가 있는데 우리가 지금 설정해야 하는 건 Parameters다.

아까 말했다시피 파라미터 파일에 있는 값을 여기다 옮겨주어야 한다.

여기에 똑같이 옮기는 이유는, FX에서도 메뉴에 파라미터 값을 넣듯이 레이어를 설정할 때 파라미터 값을 필요로 하기 때문이다. 그리고 여기에 작성한 파라미터 값과 파라미터 파일에 있는 값이 서로 연결되면서 서로 송수신(?)하듯이 작동하는 거기 때문에 여기에 입력할 때 오타가 나지 않게 조심해야 한다. (제스쳐 같은 건 건들지 말고 가만히 놔두면 된다)

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

다 입력했으면 옆에 있는 Layer로 넘어가면 된다.

 

FX Layer 기본 구조

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

위 이미지가 Int형의 기본이고, 아래 이미지가 Bool형의 기본이다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

네모 박스에 들어가는 게 "애니메이션" 이다.

 

FX 레이어를 설명하기 전에 FX 레이어에 사용할 애니메이션을 녹화부터. 

애니메이션 녹화 및 설정 방법

Animation 창에서 'Create'를 누르면 애니메이션 파일을 생성할 수 있다. 

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

하지만 그 전에, Hierarchy에서 작업한 아바타를 복제해야 한다.

작업한 아바타의 가장 상위 오브젝트를 클릭한 뒤 컨트롤 D를 누르면 동일 이름(1)가 생성되는 식으로 아바타 오브젝트가 생성된다. (아래 이미지는 'Milk-Re'를 복제한 모습이다)

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

복제하는 이유는, 애니메이션을 만들 때 이상한 무언가가 추가되기 때문이다. (아래 이미지 참조)

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

가끔 옷장 작업 후 아바타 하체가 바닥에 꽂히는 등의 문제가 발생하는 이유, 뭔가가 고장나는 이유가 이 때문이다. 이 문제 때문에, "복제"한 아바타 오브젝트로 작업하고 거기서 생성된 애니메이션만 기존 아바타 레이어에 붙이는 형식으로 작업한다.

다만 셀레스티아 같은 경우 복제해서 작업해도 위 이미지의 Milk-Re (1) 같은 파일이 따로 생성되지 않고, 기존 아바타 오브젝트의 컨트롤러에 아래 이미지와 같은 이상한 무언가가 추가되기 때문에 작업할 때 따로 찾아서 지워줘야 한다. (반대로 말하면 셀레스티아는 복제해서 작업할 필요가 없다는 의미기도 하다)

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

작업할 때 복제한 오브젝트와 원본 오브젝트를 혼동할 수도 있으니, 원본 오브젝트는 인스팩트 창에서 체크를 해제 해서 꺼둔 상태에서 작업하는 걸 권장한다.

 

준비가 다 됐다면, 복제한 오브젝트를 선택한 채로 (아까 말했다시피) Animation 창에서 'Create'를 눌러 애니메이션 파일을 생성하면 된다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

그럼 이렇게 애니메이션을 녹화할 수 있게 변한다.

여기서 '녹화' 버튼을 누르고, 원하는 애니메이션을 입력해주면 끝.

애니메이션 입력은, 녹화 상태인 채로 원하는 수치를 변경시켜주면 된다. 어떤 오브젝트를 끄던가, 얼굴 쉐이프키를 켜고 끄던가, 바디를 조절하던가.

Int에 넣을 애니메이션은 A머리를 켤 때 B머리를 끄고 C머리를 끄는 식으로 만들어줘야 하고, Bool에 넣을 애니메이션은 켜는 애니메이션과 끄는 애니메이션 2개를 만들어줘야 한다.

말로 설명하면 어려울 수 있으니 예를 들자면,

A 머리 켜는 애니메이션 (Int로 들어갈 예정)
- A 켜기 (A 오브젝트 수치 1)
- B 끄기 (B 오브젝트 수치 0)
- C 끄기 (C 오브젝트 수치 0)

B 머리 켜는 애니메이션 (Int로 들어갈 예정)
- A 끄기 (A 오브젝트 수치 0)
- B 켜기 (B 오브젝트 수치 1)
- C 끄기 (C 오브젝트 수치 0)

안경 켜는 애니메이션 (Bool로 들어갈 예정)
- 안경 켜기

안경 끄는 애니메이션 (Bool로 들어갈 예정)
- 안경 끄기

이런 식이다.

A머리 B머리 따로 녹화할 필요 없고, A머리 켜는 애니메이션을 만들 때 A, B, C, D 다 선택해서 작업한 뒤 해당 애니메이션 파일을 복제해서 이름 바꾸고 값만 변경해주면 간편하다. ON/OFF 만들 때도 켜는 거 만들고 복제해서 수치만 끄는 식으로 변경하면 된다. (0이 끄는 거고, 1이 켜는 거다)

 

참고로 애니메이션 파일을 처음 생성한 후 하나 더 만들 때에는, 이름을 클릭하면 나오는 "Create New Clip"을 사용하면 더 편리하게 만들 수 있다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

 

애니메이션 파일을 다 만들었으니, 다시 FX 레이어로.

 

FX레이어 설정 방법 (트랜지션 설정 방법)

방금 생성한 애니메이션 파일을 FX레이어에 드래그해서 넣어주기만 하면 된다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

파일을 넣어주면 저렇게 순서대로 박스가 생성된다.

박스를 적당히 정렬한 뒤, Any State를 우클릭하면 나타나는 "Make Transition"을 클릭하면 다른 박스와 연결을 시킬 수 있는데, Int형은 위 이미지처럼 연결하면 된다. Bool 형은 아래 이미지처럼.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

참고로 처음 넣은 파일은 '주황색' 박스로 생성되고 0번이 강제된다.
초록색 Entry 박스에서 주황색 박스로 가면 "0번"이다.
(0번 관련 이야기는 글 말미에 설명)

 

Int 트랜지션 설정 방법

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

앞서 제시한 이미지처럼 트랜지션을 이어주었다면 트랜지션 내용을 설정해줘야 한다.

해당 트랜지션을 클릭하면, 인스팩터창에 아래 이미지와 같은 설정창이 나온다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

똑같이 설정하면 된다.

가장 중요한 건, Conditions 설정이다.

의상 Equals(=) 0 이라고 설정되어 있는데, "의상" 값이 "0"이면 작동한다는 의미다.

여기서 의상 값이 "0"이라는 게 무슨 의미일까?

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

우리가 '메뉴' 파일 설정할 때 파라미터 아래에 Value 값이 있었다. 아까도 설명했지만 해당 메뉴 파일에 작성하는 내용이 VRChat 메뉴에서 보여지는 내용이다. 반대로 말하면 VRChat 메뉴에서 해당 메뉴를 선택했을 때 해당 값(Value)을 아바타로 보낸다는 의미다.

즉, 메뉴 파일에서 선택한 "의상" 값(Value)이 0일 때 이 트랜지션을 작동시킨단 의미다.

어떻게 작동시키냐? 트랜지션이 향하는 곳(선택한 의상, 머리 등)에 있는 값을 작동시킨단 의미다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

AnyState에서 머리로.

어떻게? 내가 설정한 트랜지션 설정에 따라서.

위에 있다고 0번으로 작동하는 게 아니라, 내가 설정한 트랜지션 값에 따라서 작동한다. 내가 "머리" 값이 0번일 때(머리 equals 0) 해당 트랜지션을 작동시켜서 기본 머리 애니메이션을 켜라! 라고 지정해놨으면, 내가 VRChat 메뉴에서 0번 값으로 지정된 메뉴를 클릭했을 때 해당 트랜지션이 작동하면서 애니메이션이 켜진다.

내가 이상하게 설정하면 당연히 이상하게 작동한다.

그렇기 때문에 (헷갈리지 않기 위해) 메뉴 파일과 동일한 순서대로 설정할 필요가 있다. 0번에 기본, 1번에 긴 생머리, 2번에 밥 헤어 해야지 라고 생각해서 메뉴 파일에도 그렇게 설정해뒀으면서, 정작 트랜지션 설정할 땐 세 번째 트렌지션에 "머리 equals 0" 주고 왜 자꾸 기본 머리가 안 켜지고 밥 헤어가 켜지는 거야? 라고 하면 안 된다.

 

Bool 트랜지션 설정 방법

Bool 형식도 크게 다르지 않다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

단지 Int형처럼 여러 개 중에 하나를 선택하는 게 아니라, 단순히 On/Off 기능만 존재할 뿐이다.

위 이미지는 파자마 칫솔 켜기 -> 파자마 칫솔 끄기 트랜지션 내용이다.

"파자마 칫솔" 메뉴 값이 True면(게임에서 파자마 칫솔 메뉴를 켠 상태면) "파마자 칫솔 끄기"를 켜라. 그러니까, 파자마 칫솔을 메뉴에서 클릭한다고 파자마 칫솔이 켜지는 게 아니라, 파자마 칫솔을 눌렀을 때 '파자마 칫솔 끄기'를 켜기 때문에 파자마 칫솔이 꺼진다.

당연히 파자마 칫솔 끄기 -> 파자마 칫솔 켜기 트랜지션 내용엔 반대의 내용이 들어간다. "파자마 칫솔" 메뉴 값이 False면(게임에서 파자마 칫솔 메뉴를 끈 상태면) 파자마 칫솔 켜기를 켜라.

 

이렇게 트랜지션까지 설정하면 모든 작업이 끝난다.
(메뉴 파일에 밸류값 다시 한 번 확인하면서 잘 넣어주고)

설명이 잘 됐을지 잘 모르겠다.

솔직히 '따라하려고 하는 입장'인 사람에겐 설명이 잘 안 됐을 거라고 생각한다. 옷장을 설명하는 내용 자체가 너무 길어서, 옷장 만큼은 영상 강의를 보고 작업하는 게 훨씬 편하다고 생각한다. 원리보다는 단순히 작업을 하고 싶을 뿐인 사람이라면 더욱 더 말이다.

애니메이션을 먼저 녹화하고 작업하는 게 훨씬 스무스한데, 그렇게 하면 원리 설명이 힘들 거 같아서 따라하기 힘들더라도 이런 식으로 설명했다. 조금 스무스하게 따라하려면 애니메이션 녹화 - 파라미터 - FX레이어 - 메뉴 순으로 보는 게 좋다고 생각한다.

 

아래는 글의 흐름 때문에 설명하지 못 한 내용 추가 설명.

 

Int 0번 (초기화 버튼 만들 때 사용)

'0번에 어떠한 값도 주고 싶지 않다면' 아래 이미지처럼 작성하면 된다.

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

0번 이야기는 간단한 옷장을 만드는 사람에겐 큰 의미가 없는 이야기지만, 나중에 VRC Avatar Parameter Driver를 사용하게 될 때 중요하게 작용한다. 몇 달이 지나고 여러분이 뉴비가 아니게 되었을 때 초기화 버튼을 만든다거나 특정 기능을 추가하려고 할 때, 그 때는 우클릭 - Create - Empty로 아무 값 없는 주황색 박스를 만들고 1번부터 따로 작업하는 게 좋다.

위 이미지는 메이드복을 부위별로 벗을 수 있게 나누어둔 모습이다. 나는 메이드복의 모든 파츠를 입고 있는 게 일반 상태니까 여기서 (메이드 1, 2, 3, 4는 벗는 값이라서) 어떠한 값도 선택되면 안 된다.

그래서 처음엔 주황색 박스에 '옷을 초기화하는 버튼'을 만들어 놔두었지만, 초기화 버튼을 0번 값에 두게 되면 0번 값은 내가 원하든 원하지 않든 '항상' 작동하기 때문에 내가 메이드 1번으로 스타킹을 벗든 메이드 2번으로 신발을 벗든 Entry에서 시작되는 주황색 박스인 0번 값이 다시 선택되며 '초기화 버튼'을 계속 작동시켜서 문제가 생긴다. 그렇다고 벗는 버튼을 0번에 놔두면 항상 벗고 있으니까 안 된다.

방금 설명한 상황처럼 초록색 박스 Entry에서 나와서 주황색 박스로 이어지는 0번에 어떠한 값도 주지 않는 상태가 필요할 때가 있는데, 그럴 때 위 이미지처럼 0번에 아무 애니메이션을 지정하지 않은 더미 값을 만들면 된다. 레이어에 우클릭을 후 "Create State" - "Empty"를 만든 후 아무 설정도 하지 않고 이름만 바꾸면 된다.

 

애니메이션 키 프레임 기능

VRChat 아바타 3.0 옷장 만드는 방법 (옷장 가이드)

애니메이션은 대개 옷장만 사용하기 때문에 키 프레임을 잘 사용하지 않는다.

그런데 키 프레임은 생각보다 중요한 기능이다. "가슴 크기를 늘리는" 경우처럼 '연속적인' 변화가 발생하는 애니메이션도 있기 때문이다. 이는 침 흘리는 애니메이션 등을 녹화할 때도 중요하다.

우리가 녹화를 하면 '값'의 최종 값만 저장되지만, 값을 지정한 뒤 키 프레임을 찍어주면 해당 시간에 해당 값이 저장된다. 그리고 설정한 값에 따라 애니메이션 수치도 변한다. 그러니까 0초에 0의 값이, 60초엔 100의 값이 '애니메이션처럼' 작동한단 얘기다. (0초에 0, 60초에 100으로 키프레임을 찍어두면, 60초 동안 0부터 100까지 증가하는 애니메이션이 된다는 얘기다)

이를 (메뉴 타입) Puppet 과 연계하면, 0%일 때 일반 가슴, 100%일 때 큰 가슴을 설정할 수 있다.

무슨 말인지 잘 모르겠다고?

우린 옷을 Int로 작업했지만, 옷을 만약 30개 정도 넣을 때도 Int를 사용하는 게 합리적일까?

그렇지 않다.

옷 30개에 대한 애니메이션 파일을 하나 만든 뒤, 1초로 지정했을 때 A옷을, 2초로 지정했을 때 B옷을, 3초로 지정했을 때 C옷을 켜는 방법으로 만들 수도 있다. 키 프레임을 사용해서 100개짜리 옷장을 만들라는 게 아니고, 나중에 '요다래' 같은 침 뱉는 기능을 넣는다거나 입김을 넣는다거나 하는 등의 애니메이션을 작업할 때 필요할 거라 미리 설명해주는 거 뿐이다. 헤매지 말라고.

댓글

💲 추천 글