VRChat 마이너 갤러리 저장소

제 목
강좌 Write Defaults 의 존재와 활성화 시 이점, 쓰기 싫을때 방법
글쓴이
고희원
추천
14
댓글
8
원본 글 주소
https://gall.dcinside.com/vr/2878807
  • 2023-03-26 04:33:58
							

맨 밑에 3줄요약 있음


아바타를 이제 막 만들기 시작한 갤러들이 하나같이 궁금해 하는 것이 있다.


표정이나 옷을 바꿀려고 토글을 누르면


왜 표정은 기본으로 돌아오지 않는 것이고 옷은 겹쳐지는지 말이다.


그리고 그 해결법이라고 제시하는 것은 하나같이 전부 "Write Defaults 켜라" 라고 말한다.


심지어 그 방법이 통한다.


한국사람이면 한번은 가봤을 "iY MMD World" 에도


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Left Hand와 Right Hand 보다 계층적으로 상위에 있는(유니티 애니메이터 상에서 아래)

레이어의 모든 애니메이션 상태는 Write Default On 이여야 합니다. Write Default off인

state가 존재하면 표정 및 립싱크가 작동하지 않습니다. 위 내용을 이해하지 못했으면 모두

Write Default On을 체크하면 됩니다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


라고 Write Defaults 옵션에 대한 언급이 되어있다.


그러면 Write Default가 하는 일은 무엇이고 왜 이 옵션을 켜야하는지 알아보자



참고로 해당 글은 유니티에 대한 지식이 없는 사람을 대상으로 


매우 긴 글로 설명을 하지만 최대한 쉽게 이해시키기 위해 작성되었습니다.


무지성으로 이 옵션을 키지말고 왜 키는지 이유를 알아보기 위해 작성되었으니


Write Defaults 옵션의 기능에 대해 완전히 이해한 사람이라면 보지 않으셔도 됩니다.


다만 VRChat 공식문서에 따르면 Write Defaults 의 권장 옵션 활성화 유무는 "비활성화" 이므로


이에 대해 대응이 가능하시면 Write Defaults 옵션을 비활성화 하는 것이 VRChat을 하는데에 유리할 수 있습니다.





잠시 SDK 2.0 시절로 돌아가보자.


그 시절에 아바타를 만들지 않은 사람도 존재하겠지만


그당시 유니티 버전은 2017.4.28f1 / 2018.4.20f1 버전이다. 


그리고 이 버전에는 Write Defaults 라는 옵션이 없었다.


그래서 아바타에 옷을 입힐려고 한다면 애니메이션을 만들때


아래 사진과 같이 켜고싶은 옷을 켜고 그 외 나머지 모든 옷을 끄게 해주는 애니메이션이 필요했다.


1a99ef76b49c28a8699fe8b115ef0469e991cd32

(Casual 옷을 꺼낼려면 다른 모든 옷을 찾아서 애니메이션 프로퍼티로 추가 후 0을 줬어야 했다.)


3.0 으로 넘어와서 이렇게 처리를 하는 갤러도 존재할 것이다.


그리고 이 방식은 현재 VRChat 에서 권장하는 방식이다.


밑 사진에 나와 있듯 VRChat 에서는 Write Defaults 를 비활성화 한 상태에서 아바타를 만들자고 약속을 했다.


1a99ef76b69c28a8699fe8b115ef0465d780f5c5


이렇게 하면 현재 2019.4.31f1 버전에 존재하는 Write Defaults 옵션의 활성 유무와 상관없이 내가 켜고 끄고 싶은 옷을 "안전"하게 바꿀 수 있다.


다만 이렇게 하면 치명적인 문제가 존재한다.


만약 자신의 아바타에 100개의 옷이 들어있고 (int 파라미터 하나로 이론상 옷 256개를 넣을 수 있다.)


101번 옷을 넣겠다고 하면


100번 옷 애니메이션을 복사 후 101번 옷을 복사한 애니메이션에 프로퍼티를 추가하여 101번 옷의 값에 1을 주고


나머지 1번부터 100번 옷의 애니메이션에 101번 옷 0값 프로퍼티를 수동으로 추가해줘야 한다.


한 아바타에 101개의 프로퍼티가 존재하는 애니메이션이 101개가 있다는 얘기이다.


프로퍼티가 늘어나면 그만큼 애니메이션 크기도 늘어나기에 다운로드 사이즈도 덩달아 늘어난다.



이 점을 보완하기 위해서 Write Default 라는 옵션을 사용할 수 있는데


Write Defaults 옵션은 말그대로 "기본" 상태를 다시 쓴다는 말이다.


내가 실제로 사용하는 아바타로 예를 들어보겠다.


1a99ef76b79c28a8699fe8b115ef046fe591010034

- 하이어라키에서 Nxde 부터 Uniform 까지가 옷이고 다 꺼두었다.

- 애니메이터에서 위(idle) 부터 파라미터 값이 0이다.

- 모든 State의 Write Defaults 는 활성화 해두었고

- 모든 State의 애니메이션은 오른쪽 밑 Animation 처럼 해당 옷에 필요한 오브젝트만 1 처리 해두었다.


쉽게 말하면 위 짤의 Write Defaults 값은 현재 하이어라키에 있는 아바타이다.


로딩이 된 순간의 아바타가 Write Defaults 라고 생각하면 쉬울 것이다.


대부분 이렇게 아바타를 만들것이고 이렇게 만드는 것이 우리들이 아바타를 만들때 좋은 방식이다.


이렇게 하면 밑 움짤처럼 잘 작동한다.





그러면 이상황에서 파라미터가 0값인 idle에 Write Defaults 옵션을 비활성화 해보겠다.



상황설명

- 초기에는 모든 옷이 꺼져있고 옷의 파라미터값은 0이기에 정상적으로 idle 애니메이션의 프로퍼티대로 실행되어 기본옷을 입고 있음

- 초기에는 모든 옷이 꺼져있는 상황이 Defaults 값으로 Write 되어 있었기 때문에 다른 옷을 바꿔도 기본옷이 꺼지고 해당 옷이 켜짐

- 하지만 idle 은 Write Defaults 가 비활성화 되어 있었기 때문에 Defaults 값이 존재하지 않았기에 토글을 꺼서 파라미터 값을 0으로 만드는 순간 과거 Write 되었던 옷 3개가 같이 켜졌음



그러니까 idle State 에서는 Defaults 값이 Write 되어 있지 않았기 때문에 


idle State 진입 시 켰던 옷 3개가 같이 켜지는 것임


이 현상을 해결하기 위해선 

- 위에서 언급했던 모든 옷의 프로퍼티를 추가하거나

- 모든 State 의 Write Defaults 를 켜면됨



아래 움짤처럼 모든 옷의 프로퍼티를 추가하면 Write Defaults 를 활성화 하지 않아도 


어짜피 모든 옷을 끄고 켜고싶은 옷만 켜기때문에 옵션을 비활성화 해도됨



다만 이렇게 한다고 하면 모든 애니메이션에 모든 옷의 프로퍼티를 다 넣어줘야 한다는 점이 있고


그렇게 하면 용량 문제로 이어질 수도 있기에 쓰지않는 방법이다.




하지만 공식문서 사진 마지막에도 존재하듯


Write Defaults 옵션을 활성화 해두는 것이 고급사용자에게는 유리할 수 있다고 하는것 처럼


우리는 iY MMD World 제작자/Booth 아바타 제작자들과 무언의 약속을 한 것이다.


Write Defaults 옵션을 활성화 해둬서 쓸때없은 프로퍼티 추가와 애니메이션 추가


아바타 외적인 요소(월드 등)을 제작 시 더욱 편하게 쓸 수 있도록 약속을 한 것이다.




Write Defaults 옵션을 비활성화 한 상태로 표정을 바꿨을때


모든 표정은 다 바뀌는데 Shift+F1 을 누르면 원상태로 돌아와야 하는데 안돌아오는 이유는


Shift+F1 표정을 담당하는 State에 애니메이션이 존재하지 않기 때문이다.


idle State에 표정 애니메이션을 만들어서 넣어주면 동작한다.




1아바타 1옷 아바타로 만드는 갤럼이 있을 것이다.


내가보기에도 가장 좋은 방법이지만 


텍스처메모리 편에서도 얘기한거처럼 Crunch 텍스처가 하나라도 존재할 경우


아바타가 무겁던 가볍던 서버에서 갤럼 아바타를 불러올때 마다 해당 텍스처의 압축을 풀때 프라임 드랍이 생길 것이다.


매도 처음에 맞는게 낫다고 하나의 아바타에 5~6개의 옷을 넣어두고 텍스처 최적화 작업을 통해서 프라임 드랍을 최소화 하는것이 더 나을지도 모른다.




참고로 VRChat 에서 Write Defaults 옵션에 대해 비활성화 하자고 해서 비활성화를 해두고


MMD 에서 표정이나 립싱크를 움직이게 만들고 싶다면


1. 모든 State의 Write Defaults 옵션을 비활성화 한다.

2. FX 애니메이터에서 MMD 진입시 토글할 Bool 파라미터와 레이어를 하나 만든다.

3. 추가한 레이어의 Weight를 1로 설정하고 레이어에 Empty State 두개를 추가하고 두 State 에 "VRC Playable Layer Control" 을 추가한다.

4. Entry 에 연결된 State 는 Layer에 FX, Goal Weight 는 1을 주고

5. 연결되어 있지 않은 State 는 Layer에 FX, Goal Weight 는 0을 준다.

6. 두 State 를 연결하고 Entry 가 연결된 State에서 연결되어 있지 않은 State 로는 컨디션을 "True" 를 주고 반대편은 "False" 를 준다.

7. 플레이어블 파라미터에 추가한 Bool 파라미터를 추가, 플레이어블 메뉴에 추가한 Bool 파라미터를 켜고 끌 수 있도록 한다.


위 설정은 추가한 Bool 파라미터를 True 시 FX 애니메이터 자체를 무효화 시킨다.


그래서 iY MMD World 에서 "스테이션 진입시" 라는 내용은 아바타가 VRChat 제공 파라미터인 "InStation" 이 True 일때를 얘기하고


스테이션 진입 전 해당 메뉴를 토글하여 FX 애니메이터의 Weight를 0으로 만들고 진입하면


Write Defaults 옵션이 비활성화 되어 있어도 쉐이프키 및 립싱크가 정상작동 한다.


하지만 이 귀찮은 일을 하기 싫으니 그냥 FX 애니메이터에 있는 모든 State의 Write Defaults 옵션을 켜두도록 하자.



Write Defaults 옵션을 활성화 한다고 아바타 최적화가 안좋아지는 것은 아님


대부분 Write Defaults 옵션을 활용하는 레이어는 표정/옷이고


대부분 그 레이어는 Any State 를 이용한 경우가 대다수임


Any State 에서 각 State로 연결되는 트랜지션 클릭 후


조건 설정할 때 "Can Transition To Self" 체크 해제하자



3줄 요약

- 이 문장을 봤다면 그냥 FX 애니메이터의 모든 State에 Write Defaults 옵션켜라. 귀찮은거 다 안다.

- Any State 연결된 State 는 전부 "Can Trasition To Self" 옵션 체크하자.

- 밑에 다른글도 보고 최적화 다들 하자. 내가 할 수 있는 최적화는 여기까지




1. 다운로드사이즈/텍스처메모리 최적화 방법

https://gall.dcinside.com/mgallery/board/view/?id=vr&no=2876692&search_head=50&page=1

 


2. FX 애니메이터 최적화 방법

https://gall.dcinside.com/mgallery/board/view/?id=vr&no=2878486&search_head=50&page=1

 






#표정

#셰이프키

#쉐이프키
#옷장
#옷
#WriteDefaults
#Write Defaults


InstKuu 2023.03.26 04:34:41
조개껍데기 정보추 2023.03.26 04:37:20
카페인중독환자 2023.03.26 04:37:33
옅은 아 완벽히 이해했어~ 2023.03.26 04:37:49
위치 흥미롭다 2023.03.26 04:38:45
MaYa- 2023.03.26 04:39:20
ㅇㅇ 고마워 2023.03.26 04:43:39
꽃과봄 예아 2023.03.26 04:52:34
번호 분류 제목 글쓴이 날짜 추천
2897240 도와줘 본인 페이셜 움짤 따왔는데 ㅁㅌㅊ? 10 아니그러니까 2023-04-01 10
2897029 또와줘 INTERNET YAMERO.avi 8 깡이 2023-04-01 15
2895618 도와줘 "과몰입" 공채를 모집합니다. 33 새이렌 2023-03-31 13
2895125 일반 100% 확률로 할카스 12 포동포도 2023-03-31 10
2893577 일반 샤니님 님만 보면 반할거 같아요 ㄹㅇ 23 Freeze 2023-03-31 10
2892836 일반 저오늘생ㅇ리임 13 무직백수시안쨩 2023-03-31 10
2890220 정보 누나가 나 브챗하는거 보고 같이 h파티 가자는데 8 ㅇㅇ 223.39 2023-03-30 14
2889019 일반 브붕이들아 28 비요뜨아님 2023-03-29 15
2888806 일반 2년전에 다니던 회사 경리누나한테 연락옴 8 새이렌 2023-03-29 10
2888552 일반 마..마야는 이제... 퇴물이라고 생각해요... 11 닉언밴 2023-03-29 12
2887897 일반 념글 움짤 딱 이거아님? 8 거미군주 2023-03-29 13
2887653 일반 vr chat 처음해보는 만화 2 .manhwa 7 펄슨 2023-03-29 14
2887092 도와줘 아이트래동공 속도가 너무빨라서 친구가 잠자리 보는거 같다는데 어떡계고침? 17 Rurid 2023-03-29 14
2886149 사진/영상 NTERNET OVERDOSE를 춰봤어요 13 나을 2023-03-28 10
2885022 일반 vrchat 처음해보는 만화.manhwa 14 펄슨 2023-03-28 15
2884758 일반 vrchat로 사라져버린 우리 클장 찾습니다 8 ㅇㅇ 2023-03-28 11
2883101 일반 아빠: 내 딸이 님 귀엽대요ㅋㅋㅋ 6 닉언밴 2023-03-27 12
2880992 일반 페이셜 고인물 움짤찾앗다...gif ㄷㄷㄷㄷ 9 라그나로크 2023-03-27 10
2880187 일반 근데 봇치밈 진짜 뇌절아닌가... 4 ㅇㅇ 124.153 2023-03-26 14
> 강좌 Write Defaults 의 존재와 활성화 시 이점, 쓰기 싫을때 방법 8 고희원 2023-03-26 14
2878486 일반 FX 애니메이터(Any State) 최적화 방법 7 고희원 2023-03-26 10
2877799 일반 "ㅅ..사람을 아프게..하..하는건 나쁘다..고 생각해요...." 9 샤니_ 2023-03-25 14
2876928 제작 [무료]간단한 귀걸이 만들어왔어 10 B0ar 2023-03-25 14
2876212 일반 가...감기는..약을 안먹어도 낫는다고 생각해요... 11 ㅇㅇ 1.219 2023-03-25 16
2876201 일반 "◼..◼◼◼ ◼◼ ◼..◼◼◼ ◼◼◼◼....." 10 ㅇㅇ 118.235 2023-03-25 12
2876121 일반 니들은 여자가 웃기다고 하면 절대 환상가지지 마라 12 ㅇㅇ 14.40 2023-03-25 12
2873939 일반 나...남자가 남자보고 좋..좋아한다느니 하는거 이해사 아...안돼요 13 ㅇㅇ 2023-03-24 13
2872311 병신 씨발년 찾았다 자수해라 29 새이렌 2023-03-23 12
2871223 일반 자기가 여갤러면 개추 ㅋㅋ 22 오피녀 2023-03-23 16
2871112 일반 19 승붕쿤 2023-03-23 14
2869328 일반 테스트 4 ㅇㅇ 223.39 2023-03-22 10
2868770 일반 코유키는 아침 11시부터 휴대폰을 본다 6 키르2 2023-03-22 22
2868749 일반 퀘프로 조커의 탄생.jpg 7 아니그러니까 2023-03-22 24
2868063 일반 브챗 1년차후기 13 ㅇㅇ 118.235 2023-03-22 31
2867039 강좌 퀘 프로 alvr안쓰고 페이셜 하는법 나옴 11 오큘퀘2 2023-03-22 18
2866504 일반 "갈채하라 - ." 20 블프 2023-03-21 34
2865989 일반 8일뉴비가 그려본 화본역 유저들 6 ㅇㅇ 112.160 2023-03-21 31
2865076 일반 오늘은 생일이에오 11 재배맨 2023-03-21 27
2864596 일반 페이셜 세부수치 조절 어디서하냐 12 아니그러니까 2023-03-21 27
2864240 일반 "하아...또 싸우는거야...? 질리지도 않나?♡" 7 ㅇㅇ 2023-03-21 39
념글 삭제글 갤러리 랭킹