본문으로 바로가기
반응형

Unity에서  Cloth 시뮬레이션

Nobuyuki Kobayashi, 11 월 24, 2015



역자주)2015년에 Unity Japan의 노부유키님이 올려주신 포스팅으로, 현재 Unity 2018이나 2019에서 적용이 될지는 아직 테스트를 못해보았다. 아마도 이렇게 적용하는 사례도 있다는걸 참고하면 될듯

원문링크 : https://blogs.unity3d.com/jp/2015/11/24/unity5clothsimulation/?fbclid=IwAR3mM-dp5c-R3-ghDwlKZBivudyub3MsNWFPJJPhS-GO3WTGj0ciq3rsYHQ

Unity Documents : https://docs.unity3d.com/Manual/class-Cloth.html

 


캐릭터 표현과 다이나믹스(역학)


캐릭터를 표현하는데 흔들림(역학)은 빠뜨릴 수 없습니다. 다이나믹스라는 별명 혹은 보조 애니메이션을 말하며, 주로 FBX를 통해 import되는 애니메이션(이것을 기본 애니메이션-primary animation-이라고합니다)에 머리카락이나 옷 등의 이른바 '흔들리는 물체 "의 움직임을 별도로 게임 엔진에서 기본 애니메이션에 가산하는 형태로 실현하는 기능을 말합니다. 다이나믹스에는 여러가지 방법이 있습니다. 물리 엔진 Physics를 사용하는 방법도 있고, 스프링 등의 계산식을 사용하기도합니다. 각각 특기 · 능숙하지 못한 측면이 있으므로, 용도 나 목적에 따라 그 방법이 선택되는 것이 보통입니다.

예를 들면 일본의 3D 애니메이션은 3dsMax의 "Spring Magic"이라는 스크립트가 종종 다이나믹스의 방법으로 채용되고 있습니다. 여러분이 TV에서 볼 수있는 3D 캐릭터를 많이 하지만,이 스크립트는 머리를 흔들고있는 것입니다.

한편 Unity에서는 기존의 조인트 베이스의 흔들리는 물체 표현으로는 유니티 짱에 사용되는 "Spring Joint"이 예쁜 흔들리는 물체 표현을 구현 해주었습니다 만, 조인트베이스로 표현할 수없는 것도 있습니다.

그래서 Unity에서는 개선된 Physics 구성 요소의 하나 인 "Cloth"를 사용하면, 디자인 할 수있는 옷의 표현이 개선됩니다!

"Cloth"는 이름 그대로 실시간 의상 시뮬레이션을 실현하는 기능입니다. 설정은 조금 요령이 있습니다만, 요령을 알면 효과적인 흔들리는 물체 표현이 가능합니다. 또한 "Spring Joint"와 "Cloth"을 구분하여 "Cloth"단체에서는 어려운 표현도 가능합니다.

 


Cloth Simulation으로 무엇을 할 수 있습니까?

 

우선 크로스 시뮬레이션에서 어떤 것을 할 수 있는지 동영상으로 살펴 보자.

 

이처럼 3D 메쉬를 마치 천 (크로스)처럼 움직일 수있는 것이 크로스 시뮬레이션의 특징입니다. 이러한 특징을 충분히 활용하면 다음과 같은 캐릭터 표현이 가능합니다.

왼쪽은 친숙한 CRS 유니티 짱입니다. 오른쪽의 3D 발키리의 롱 레오의 움직임은 모두 크로스 시뮬레이션에서 실현되고 있습니다. 영상에서 "롱 레오 아슬아슬하게 발을 땅에 디디'라는 클로스 시뮬레이션에서는 매우 난이도가 높은 작업입니다만 , 깨끗이 처리되고 있다고 생각합니다.

이 "3D 발키리의 롱 레오"같은 디자인은 기존의 조인트베이스의 흔들리는 물체 표현에서는 어려운 디자인의 하나였습니다. 그것이 Unity에 탑재 된 Cloth 구성 요소를 사용하면서 실현 가능해진 것입니다.

그 밖에도 Cloth 구성 요소는 Blacksmith 데모에서도 사용되고 있습니다. Blacksmith 데모에서는 도전자 남자의 갑옷 直垂( 히타타레 [直垂] : 소매 끝에 묶는 끈이 달리고 옷자락을 하의 속에 넣어 입는 예복의 일종) 부분에 사용되고 있습니다.

도전자 케릭터가 걸어 가면 갑옷 히티타레가 자연스럽게 허벅지를 따라만큼 잘 변형하면서 움직이고있는 것이 간파 할 수 있습니다. 이 히티타레 부분은 조인트는 전혀 들어 있지 않지만, 클로스 시뮬레이션을 사용하면 더 효과적으로 보여지는 것을 확인할 수 있습니다.

 

 

 

설정 방법

 

Cloth 구성 요소의 연결은 간단합니다. Skinned Mesh Renderer가 붙어있는 게임 오브젝트에 "Add Component"버튼을 클릭하고 Physics> Cloth를 선택하고 구성 요소를 연결하기만 하면됩니다.

Cloth 구성 요소가 연결되면 다음과 같은 상태가됩니다.

그리고 적절히 Cloth 속성 조정과 Cloth와의 충돌을 판정하기위한 콜라이더를 설정합니다. 우선 알기쉬운 콜라이더의 설정을 진행합니다.

 

 

 

사용할 수있는 콜라이더(Colliders)에 대해

 

사용할 수 있는 콜라이더는

· Sphere (구)
· Capsule (캡슐)
· Sphere 2 개 의한 원뿔형

세 종류입니다. 각 콜라이더를 결합 할 수도 있습니다.

 

 

Cloth 구성 요소의 속성에 대해

Properties

Function
 Stretching Stiffness   천의 뻣뻣함이 늘어나는 정도
 Bending Stiffness

  천의 단단함이 굽혀지는 정도

  Stretching과 Bending, Damping Properties로 천의 움직임을 생성하게 됩니다.

  Use Tethers   움직이는 천 입자가 고정된 한 부분에서 너무 멀리 떨어지지 않도록 하는 구속 조건을 적용. 천의 과도한 신축성을 줄이는데 움이 됩니다.
  Use Gravity   중력 가속도가 천에 적용되는지 여부
  Damping   운동 감쇠 계수
  External Acceleration   천에 일정한 외부 가속도가 적용됩니다.
  Random Acceleration   천에 적용되는 임의의 외부 가속도.
  World Velocity Scale   캐릭터의 월드-스페이스 움직임이 천의 정점에 얼마나 영향을 미치는지.
  World Acceleration Scale   캐릭터의 월드 - 스페이스 가속도가 천의 정점에 얼마나 영향을 미칩니까?
  Friction

  캐릭터와 충돌 할 때 천의 마찰.

  이 항목들은 천의 사용목적에 따라 조정하는 속성들

  Collision Mass Scale   충돌하는 입자의 질량을 얼마나 증가시킬 것인가.
  Use Continuous Collision   지속적인 충돌 활성화
  충돌 안정성을 향상시킵니다.
  Use Virtual Particles   충돌 안정성을 향상 시키려면 삼각형당 하나의 가상 입자를 추가하십시오.
  Solver Frequency

  초당 솔버 반복 수입니다.

  - 시뮬레이션의 정확도를 높이기 위한 속성

  Sleep Threshold   천의 수면 역치.
  Capsule Colliders
  이 Cloth 인스턴스와 충돌해야 하는 CapsuleColliders의 배열입니다.
  Sphere Colliders
  이 Cloth 인스턴스와 충돌해야하는 ClothSphereColliderPair의 배열입니다.

Cloth 구성 요소에는 많은 속성이 있지만 조정해야하는 속성은 그다지 많지 않습니다. 조정해야하는 속성에 관해서도 크게 3개의 블록에 포함되어있는 속성을 순서대로 조정 해 나가는 것이 좋습니다. 3개의 블록은

· 「천의 움직임의 질감 "을 만들어내는 속성
· "Cloth"의 사용 목적에 따라 설정하는 속성
· 시뮬레이션의 정확도를 올리기위한 속성

으로 용도가 나뉘어져 있습니다. 기타 속성은 특수 목적으로 사용하는 경우를 제외하고 기본 기본 상태로 사용해도 문제 없습니다.

 

 

 

"천의 움직임의 질감"을 만들어내는 속성 조정

 

Stretching Stiffness / Bending Stiffness
⇒ 천의 늘어남과 비틀림의 견고함을 제어합니다.
· Stretching가 1에 가까워지면 "늘어나기 어려워짐"입니다.
· Bending가 1에 가까워지면 "비틀림이 어려워짐"입니다.

Damping
⇒ 모션의 감쇠 계수.
· 1에 가까울수록 크로스 모션이 "무거워"입니다.
· 0에 가까울수록 크로스 모션이 "탄력 쉽게"입니다.

첫째,이 세 가지 속성을 조정하여 설정하고자 하는 "천의 움직임의 질감"을 만듭니다.

예를 들어, "얇은 비단으로 된 천"을 표현하고 싶다면, Bending은 작은 (0.2 정도)에 Damping은 0.3 정도로하는 것이 좋다. 한편, '두꺼운 천 "을 표현하고 싶다면, Bending은 큰 (1에 가까울 정도)에 Damping도 큰 (0.8 등)에 해주고 있습니다.

이곳은 Cloth를 적용하는 메쉬의 밀도와 각자의 이미지에 의존하기 때문에 실제로 모션을 재생하면서 속성을 조정 해 나가면 좋을 것입니다.

그러기 위해서는 가장 먼저 본듯한 "천 공 위에 떨어 뜨리는 '같은 간단한 장면을 만들어 각 속성의 버릇을 테스트 해 보는 것이 좋다고 생각합니다.

 

 

 

"Cloth"의 사용 목적에 따라 설정하는 속성

 

World Velocity Scale / World Acceleration Scale
⇒Cloth 구성 요소가 붙어있는 오브젝트의 모션에 대해
· Velocity Scale : 속도 (벡터)로부터받는 영향력을 설정합니다.
· Acceleration Scale : 가속도로부터받는 영향력을 설정합니다.

Friction
⇒ 콜라이더와의 마찰 계수.
· 1에 가까워만큼 마찰이 커집니다.
· 0에 가까울수록 미끄럼이 좋아집니다.

이러한 세 가지 속성은 Cloth를 어떤 용도로 사용 하느냐에 따라 결정하면 좋을 것입니다. 춤에 의해 흔들리는 물체의 경우에는 Acceleration Scale 쪽을 주로 설정합니다.

마지막 남은 "시뮬레이션의 정확성을 준다" 속성을 설정하기 전에 당신이 해야 할 작업들이 있습니다. 우선 그쪽을 끝마쳐 둡시다.

고정하지 않는 경우

Hip 조인트에 고정 된 경우
Hip 조인트에 고정 된 것은, 아무리 움직여도 바닥에 떨어지지 않습니다만, 고정을 하지 않는 것은 움직임이 너무 미끄러져 바닥에 떨어지는 것을 알 수 있다고 생각합니다.

예를 들면, 스커트라면 종종 허리 (Hip)의 조인트 웨이트 지을 수 있다고 생각합니다.
Cloth를 스커트의 메쉬에 적용하여 치마가 Hip 조인트에서 구르는 것을 방지하기 위해, Cloth 구성 요소의 "Edit Constraints"로 구속합니다.

Visualization을 "Max Distance"하고 Paint 버튼을 ON, Max Distance에 체크하여 값을 0으로 설정합니다.

Scene 뷰에서 스커트 상단의 정점을 빨간색으로 칠한 것입니다. 붉게 칠해진 정점이 Hip 조인트에 구속되는 것입니다.

이 채우기 작업을 다시 할때는 Cloth 구성 요소를 한 번 분리하여 다시 설정 할 필요가 있기 때문에, 조금씩 조정하는 것이 좋습니다.

3D 발키리의 경우 롱 레오 메시를 Hip 조인트 웨이트 연결을 한 후 주로 롱 레오의 허리 부분을 Max Distance 값을 0 (빨강)으로 설정했습니다. 이 설정은 허리 부분의 옷감은 단단히 Hip 조인트에 구속되게하고, 그 이외의 부분은 자유롭게 움직이는 것을 예상하고 있기 때문입니다. (후에 함부로 치마가 벗겨져 않도록 한다는 목적도 있습니다.)

 

Blacksmith 데모의 도전자  케릭터의 히티타레의 경우 허리 근처의 Max Distance 값은 0 (빨강) 중간 중간 쯤에서 값이 가장 큰 0.6 (녹색)이되고, 끝 부분은 0.4 정도 (노랑) 되어 있음을 볼 수 있습니다. 이것은 허리 부근은 Hip 조인트에 구속되어 있지만 그것이 끝쪽으로 가면 적당히 이완되어 있다는 것입니다. 결과 다리의 움직임에 따라 히티타레가 허벅지를 피하면서 흔들림 액션을 실현하고 있습니다.

또한 또다른 속성인 'Surface Penetration'는 함께 설정 하지 않았습니다. 정상적인 사용 범위 내에서는 여기에 속성을 설정하지 않아도 괜찮습니다.

 

 

Cloth 시뮬레이션의 정확도를 올리기

특정 모션에서 Cloth 시뮬레이션의 정확성을 올리고 싶을 때가 있습니다. 예로는 "발을 들이는"같은 동작이있는 경우, 레오 등에 Cloth 시뮬레이션을 하고, 정점의 일부가 콜 라이더에 걸려 접혀버리는 현상이 생길 수 있습니다.

이 경우 "Solver Frequency"의 값을 일반 (120)의 2 배 이상으로 설정합니다. 설정 값은 메쉬의 밀도에 따라 달라집니다.

 

 

Cloth 시뮬레이션을 사용하기위한 Tips

다음으로 Cloth 시뮬레이션을 능숙하게 사용하기 위한 Tips으로 몇 가지 예시 있으므로 참고하여 보십시오.

1. 시뮬레이션 설정을 하기 전에 메쉬의 스케일을 확인한다.

(역자주 - 가급적 Unity에서 스케일을 조정하지 않고 model에서 크기를 미리 조정 해 둔다 - 가능하면 3DS MAX나 Maya등의 DCC Tool에서 스케일을 미리 조정하는 것을 권장. 이는 비단 Animation 에만 해당되는 내용은 아니지만)

2. Cloth 시뮬레이션 메쉬의 밀도는 가능한 한 높은 편이 깨끗한 결과를 얻을 수있다.(대신 컴퓨팅 파워도 필요하다)

3. Cloth 간의 접촉 판정은 할 수 없기 때문에 "옷"에 "벨트"를 조합 싶은 경우에는 다른 방식의 조합을 생각한다. ( "Spring Joint ' 사용등)

4. 콜 라이더로 접촉 판정 용 및 형상 유지용 2 종류를 구분.

5. 다이나믹스를 사용할 때는 반드시 워밍업 시간을 준비한다.
※ 워밍업 시간 : 다이나믹스가 안정 될 때까지 예비 시간

마지막으로 설정했습니다 3D 발키리의 크로스에 설정 한 속성 값을 참고로 공개합니다.
롱 파 레오 메시 분할 밀도를 상당히 올려 있으므로 다음과 같은 설정이되어 있습니다.

그럼 Unity를 사용한 새로운 크로스 시뮬레이션의 세계를 즐기세요!

 

 

Credit

■ 3D 발키리는
본문에서 사용한 캐릭터 모델 "3D 발키리"는 "왈큐레의 모험시 열쇠 전설"에 등장하는 발키리를 바탕으로 주식회사 반다이 남코 엔터테인먼트에서 새롭게 만든 것입니다.

■ 카탈로그 IP 오픈 된 프로젝트는
"카탈로그 IP 오픈 화 프로젝트 '는 반다이 남코 통합 10 주년 기념 기획으로서 주식회사 반다이 남코 엔터테인먼트가 실시하고있는 네트워크 엔터테인먼트의 새로운 사업 영역의 확대를 목적으로 한 활동입니다. 크리에이터 등록하여 카탈로그 IP (회사 소유의 원래 IP) 17 타이틀을 사용한 2 차 창작이 디지털 콘텐츠의 영역에서 가능합니다. 참여는 크리에이터 등록이 필요합니다. 작품의 공개는 일본에서만 가능합니다.

공식 사이트 http://open.channel.or.jp/
공식 트위터 계정 https://twitter.com/876cafe
© BANDAI NAMCO Entertainment Inc.

 

반응형

'Technical Report > Graphics Tech Reports' 카테고리의 다른 글

Bent Normal  (0) 2020.03.13
Bent Normals and Cones in Screen-space  (0) 2019.04.12
Unity Visual Effect Graph 간단히 살펴보기  (0) 2018.11.13
Unity only LIght Probes bake test  (0) 2018.11.02
Unity Texture Arrays  (0) 2018.10.14