본문 바로가기

유니티/에셋, 패키지

[유니티에셋]소프트바디 스키닝(Obi Softbody)

반응형

글 작성은 Obi 공식 홈페이지의 'Obi Softbody > Softbody skinning' 문서를 보고 작성하였습니다. 하지만 설명이 잘못된 부분도 있고, 자료가 부족한 부분도 있고 무엇보다 제가 이해하기 쉽게 정리하기 위해서 글을 작성하고 있습니다. 원문 : http://obi.virtualmethodstudio.com/tutorials/softbodyskinner.html

 

 


 

1. 소프트바디 스키닝

소프트바디 물리엔진 시뮬레이션과 렌더링은 ObiSoftbody(시뮬레이션)과 ObiSoftbodySkinner(렌더링)의 두 가지 요소로 처리됩니다. 전자는 파티클 기반 메시 표현을 생성합니다. 후자는 파티클 기반 표현에 임의의 메시를 씌워 함께 움직이고 변형되도록 합니다.(이를 스키닝이라 하겠습니다)

두 개의 별도 구성요소를 사용하면 시뮬레이션과 렌더링을 분리할 수 있으며, 이는 종종 유용하게 사용됩니다. 또한 각 obiSoftbody에 대해 ObiSoftbodySkinner를 하나만 가질 필요는 없습니다. 여러 개의 스키너들들 사용하여 여러 개의 메쉬를 하나의 소프트바디에 입힐 수 있습니다.

2. 소프트바디 스키너

이 컴포넌트는 소프트바디 파티클의 스킨메쉬렌더러(SkinnedMeshRenderer)의 자동 스키닝을 수행합니다. 이것은 각 메쉬의 버텍스에서 가장 가까운 파티클을 찾고 거리 기반 가중치를 할당함으로써 이루어집니다. 다음 파라미터를 사용하여 이 거리 가중치를 수행하는 작업을 제어할 수 있습니다.

소프트바디 스키너 컴포넌트의 인스펙터창

Source Softbody : 스키너에 사용할 Softbody 컴포넌트가 있는 게임 오브젝트를 드래그해서 넣으면 됩니다. 스키너와 소프트바디 컴포넌트가 꼭 한 게임오브젝트에 같이 존재하지 않아도 됩니다.

Skinning Falloff : 스키닝 감소의 강도. 1은 선형 감소를 의미하며, 값이 커질수록 감소 지수가 증가되어 가까운 입자에 더 많은 가중치를 부여합니다.

Skinning Max Distance : 각 버텍스를 스키닝 할 때 고려해야 할 최대 거리입니다. 이 거리보다 멀리 떨어진 파티클은 스키닝에 고려되지 않습니다.

- 'Bind Skin'을 클릭하면 Obi가 메시를 소프트 바디 파티클에 스키닝합니다.

- 블루프린트를 다시 생성한 후 스킨을 바인딩 하지 않으면 스키닝이 잘못 보입니다. 먼저 블루 프린트를 생성한 후 스키너를 순서대로 바인드 해야합니다.

3. 주의사항

제가 직접 에셋을 테스트하면서 정리해놓은 내용입니다. 큐브같은 유니티 기본 오브젝트가 아닌, 에셋스토어에서 받을 수 있는 모델을 가지고 테스트해보겠습니다. (모델 정보는 글 하단에 첨부)

3.1. 스키너 컴포넌트의 위치

Softbody Skinner컴포넌트는 무조건 실제 메시를 렌더링하는 오브젝트에 존재해야 합니다. 이 컴포넌트는 해당 게임오브젝트(this)에서 mesh Renderer를 찾아 스키닝하는 방식이기 때문에, 렌더러가 없는 컴포넌트에 스키너를 넣으시면 null reference 예외를 발생시키게 됩니다.

보통 모델파일들은 메인 게임오브젝트(프리팹의 최상위)가 렌더러를 갖고 있는 것이 아닌 자식 오브젝트들에 각 부위에 해당하는 렌더러 컴포넌트를 가지고 있어서 이 부분을 꼭 확인하셔야 합니다.

3.2. 오브젝트 스케일 vs 모델 스케일펙터

정답 먼저 말해드리자면 무조건 모델파일의 스케일펙터를 조정해서 오브젝트의 크기를 조정하는것을 추천드립니다. 블루프린트 인스펙터에 기본적으로 오브젝트의 스케일값을 조정하는 기능이 있지만, 이것이 모델파일에 정상적으로 작동하지 않습니다.

예를 들어 오브젝트의 localscale을 3x3x3으로 조정하고, 블루프린트의 스케일을 3x3x3으로 조정하고 확인하면, 소프트바디 파티클의 크기가 9x9x9의 크기로 형성되어 제대로 동작하지 않습니다. 그리고 이 오차값을 어거지로 맞춰보아도 왼쪽과 같이 오브젝트가 이상한 형태로 찌그러집니다.

반면 스케일펙터로 오브젝트의 크기를 조정하고 블루프린트 스케일을 1x1x1으로 설정하면 오른쪽과 같이 깔끔하고 이쁘게 스키닝이 적용됩니다. 이 귀여운 원숭이에게 공을 던져보면 공에 맞는대로 이쁘게 찌그러지는것을 확인할 수 있습니다.

 

 

유니티 물리엔진 소프트바디

 

 

 

 

 


사용에셋

 

 

Cute Zoo 2 | 캐릭터 | Unity Asset Store

Get the Cute Zoo 2 package from SURIYUN and speed up your game development process. Find this & other 캐릭터 options on the Unity Asset Store.

assetstore.unity.com

 

Obi Softbody | 물리엔진 | Unity Asset Store

Get the Obi Softbody package from Virtual Method and speed up your game development process. Find this & other 물리엔진 options on the Unity Asset Store.

assetstore.unity.com

 

반응형