귀찮게 이런 짓을 하는 이유



단일 디자인 옷디자인이 두 개인 옷디자인이 세 개인 옷
Bool 파라미터 1개Bool 파라미터 2개Bool 파라미터 3개
ON/OFF디자인 1 ON, 디자인 2 ON디자인 1 ON, 디자인 2 ON, 디자인 3 ON
토글 버튼 1개 필요토글 버튼 2개 필요
토글 버튼 3개 필요


의상을 세트가 아닌 각 파츠별로 On/Off 하는 방식으로 옷장을 구성할 경우 

Bool 파라미터로 옷을 입히고 벗기며

조작은 주로 토글 버튼을 사용해서 하게 되는데


해당 파츠가 단일 디자인의 파츠일 경우에는 버튼 하나로 On/Off 시켜도 조작에 불편함이 없지만

On/Off 외에 텍스쳐를 변경하거나 알파맵, 블렌드쉐이프, 색상등 마테리얼 세팅 변경등을 통해

다른 기능들을 쓰고싶을 경우 각 기능마다 버튼을 만들어주어야 했음


이럴 경우 ON/OFF 버튼, 기능 1 버튼, 기능 2 버튼.. 이런 방식으로 기능마다 버튼이 추가되어 메뉴 구성이 난잡해지는 문제가 발생함.




▲Radial Puppet 버튼




그래서 버튼 하나로 이러한 것을 조작하기 위해선 토글 버튼이 아닌

Radial Puppet 같은 형태의 버튼을 사용하고

이 버튼은 Bool 파라미터가 아닌 Float 파라미터를 사용함



Float 파라미터는 0.01 단위로 0부터 1사이의 값을 가지는데

이것에 범위를 정해서 조건을 거는 걸로 버튼 하나에 여러 기능을 할당할 수 있음

0.0~0.330.34~0.660.67~1
OFF디자인 1디자인 2


이런 식으로



문제는 Float 파라미터는 1비트를 차지하는 Bool 파라미터와 다르게

8배인 8비트의 용량을 차기하기 때문에 아바타 파라미터 제한을 금방 채워버림.


마테리얼 스왑 두 개 넣는 경우 Float로 만들었을 때 Bool로 만들었을 때보다 4배 더 차지는것도 킹받는데


옷장에 디자인이 두 개인 파츠가 4개 있다고 거기다 전부 Float 파라미터를 달아버리면

순식간에 32비트를 먹어버리는 거임



페이셜이나 반트용 로코모션 관련 기능등 이런저런 기능을 넣다보면 파라미터 제한이 빡빡해지는데

겨우 옷장기능이 저걸 다 먹어버리면 나중에는 파라미터 부족해서

아바타 업로드를 못 하는 사태가 벌어짐




간단한 작동원리


그래서 이 부담을 줄이려고

옷장에 사용한 Float 파라미터는 오직 한 버튼에 여러 기능 넣으려고만 쓴다는 점과

다른 유저와 동기화되지 않는 파라미터는 저 파라미터 제한에 포함되지 않는 다는 점을 이용해서

Float 파라미터 수치가 다른 유저들에게 동기화되지 않도록 설정했고.

그냥 이렇게 설정하면 당연히 자기 시점에만 옷장 기능이 작동하니까


다른 유저들에게도 기능이 작동하도록 Synced 설정한 Bool 파라미터를 만들고

내가 메뉴를 조작해서 내부에서만 작동하는 Float 수치를 바꾸면

해당하는 범위에 맞게 Bool 파라미터 값이 바뀌어서 그게 외부에 반영되도록 애니메이션 레이어를 구성했고

옷장 만들어서 한튜가서 다른 유저 붙잡고 정상작동하는지 확인까지 했으니 이제 어떻게 만드는지 설명함.




나 같은 경우는 NSFW 스위치를 꺼 둔 상태에서 옷장 만지작 거리다

옷이 벗겨져서 찌찌나 가랑이가 노출될 경우 자동으로 속옷 입혀놓는 안전장치 기능,

옷은 옷인데 부분 노출이 있는 옷들은 NSFW 스위치 끈 상태로 착용하면 중요부위에 반창고 붙여서 가리는 기능 등을 만들어놨었고


그게 해당 부위 가릴 수 있는 옷 착용 파라미터들이 전부 꺼져있는 상태면 작동하는 방식이라

각 파츠별로 Bool 파라미터를 조건에 등록할 경우 전부 다 등록해줘야 하는 상황이었는데 이 경우 그냥 Float 파라미터 하나만 등록해놓으면 돼서

옷 추가해도 등록이 간단해지고

기존 옷 마테리얼 스왑 목록 수정하면서 Bool 파라미터 이름 바뀌어도 안전장치 부분은 안 고쳐도 되는 부가적인 이?점이 있었음.


제작과정





적용시킬 옷은 사진상의 찌찌가리개

젖소무늬, 줄무늬 두 개의 디자인이 존재함.





일단 애니메이터에 Radial Puppet 버튼을 위한 Float 파라미터 1개

각 디자인별 ON/OFF 를 위한 Bool 파라미터를 각각 만들어줌.




모듈러아바타 파라미터 컴포넌트에서

사진과 같이 Float 파라미터는 Saved 체크, Synced 체크해제 (메뉴 설정한 게 저장되어야 월드를 옮겨도 옷을 그대로 입고 있으니까)

각 디자인별 Bool 파라미터는 Saved 체크해제, Synced 체크 (옷 입히는 애니메이션은 이 파라미터로 작동할 테니 다른 유저들에게도 적용되게 Synced를 체크함.)





모듈러 아바타 파라미터 컴포넌트를 안 쓰는 경우는 직접 파라미터를 등록해줄 수도 있음.






파라미터를 만들었으니 익스프레션 메뉴에 그걸 작동시킬 Radial Puppet 버튼도 만들어줌

사용할 파라미터는 Float 파라미터인 Sum 비키니 T임.






FX 컨트롤러에 Radial Puppet 기능을 위한 레이어를 만들어줬음

내부적으로 파라미터 변경을 위한 레이어니까 애니메이션은 따로 넣지 않고 None 그대로 둠


+2023 10-08 내용 추가.


위 사진에서 State를 하나 더 만들어서

아무것도 녹화하지 않은 애니메이션을 등록하고

Default State로 지정 (사진상의 주황색 스테이트가 회색이 되고, Entry 에 연결된 State가 아무것도 녹화 안 한 애니메이션 등록, 주황색이 되도록)




트랜지션 조건은 이런식으로 범위를 정해줌.

+2023 10-08 내용 추가. 트랜지션 조건에 IsLocal :True 추가




그리고 파라미터 조작을 위한 Parameter Driver를 각 State에 달아줌

설정값을 정리하면 아래와 같음




StateNew StateSum 비키니 T (젖소무늬)Sum 비키니 T 줄무늬
트랜지션 조건Sum 비키니 T / Less 0.01
Sum 비키니 T / Greater 0.01, Less 0.50
Sum 비키니 T / Greater 0.50
Parameter Drive비키니 T 젖소 / False
비키니 T 줄무늬 / False
비키니 T 젖소 / True
비키니 T 줄무늬 / False
비키니 T 젖소 / False
비키니 T 줄무늬 / True

Can Transition to Self 체크해제하기 / Can Transition to Self 체크해제하기 / Can Transition to Self 체크해제하기 / Can Transition to Self 체크해제하기 / Can Transition to Self 체크해제하기 / Can Transition to Self 체크해제하기 / Can Transition to Self 체크해제하기 / Can Transition to Self 체크해제하기 / Can Transition to Self 체크해제하기 / 



이러면 이제 Radial Puppet 값 따라서

비키니 T 젖소, 비키니 T 줄무늬 파라미터 값이 바뀔 거임.






이제 저 두 Bool 파라미터를 가지고 평범한 옷장처럼 레이어를 하나 더 만들어주면 됨.



트랜지션 조건, State 상태는 아래와 같음

StateSum 비키니 T OFFSum 비키니 T 젖소Sum 비키니 T 줄무늬
트랜지션 조건Sum 비키니 T 젖소 / False
Sum 비키니 T 줄무늬 / False
Sum 비키니 T 젖소 / True
Sum 비키니 T 줄무늬 / True
애니메이션OFF 애니메이션 ON + 젖소 마테리얼 스왑ON + 줄무늬 마테리얼 스왑





그러면 요렇게 Radial Puppet으로 작동하고

파라미터 용량은 2비트만 먹는 가성비 좋은 버튼 하나가 완성됨





----









Float 파라미터 범위 잡아주는 방식으로 기능 할당할 때

갯수가 좀 많다 싶으면 블렌드트리를 쓰는 게 더 편하고 깔끔할 수 있음.


사진은 ON/OFF, 짧아지는 쉐이프키, 길어지는 쉐이프키, 마테리얼 스왑 2개를

Radial Puppet 하나로 조절하려고 만든 블렌드트리


다만 이러면 State에 파라미터 드라이브를 달아놓을 수가 없어서 위 방법 적용은 못하고

당연히 파라미터 공간도 8비트 차지할 테니

길이조절 같은 연속적인 기능이 필요하거나 등록할 기능이 많아서 Bool로 만들어도 얼마 차이 안 나는 경우 쓰면 조아요