Unity Cloth 물리 컴포넌트 기본 이해

Unity Cloth란?

Unity Cloth는 천이나 직물의 움직임을 물리적으로 시뮬레이션하기 위한 컴포넌트다. 캐릭터의 망토, 치마, 깃발, 천 조각 등 외부 힘이나 캐릭터의 움직임에 따라 자연스럽게 흔들려야 하는 오브젝트를 구현할 때 사용한다.

Cloth는 메시의 정점을 기반으로 시뮬레이션을 수행하며, 중력, 외부 가속도, 제약 조건, 충돌 처리 등을 통해 천의 움직임을 계산한다.

일반적인 Transform 애니메이션처럼 모든 프레임의 위치를 직접 지정하는 대신, 물리 시뮬레이션을 통해 다양한 상황에 반응하는 움직임을 구현할 수 있다는 점이 특징이다.

다만 Cloth는 모든 종류의 천 물리를 완벽하게 재현하는 기능은 아니다. 메시 구조와 제약 조건, 충돌체 설정에 따라 결과가 크게 달라지며, 시뮬레이션에 따른 성능 비용도 고려해야 한다.

Cloth 컴포넌트 적용하기

Unity에서 Cloth를 사용하려면 천으로 사용할 메시가 필요하다. 일반적으로 천 메시를 가진 GameObject에 Cloth 컴포넌트를 추가한 다음, 정점 제약 조건과 물리 속성을 설정한다.

기본적인 적용 순서는 다음과 같다.

  • 천으로 사용할 3D 메시를 준비한다.
  • 메시의 정점 수와 구조가 시뮬레이션에 적합한지 확인한다.
  • GameObject에 Cloth 컴포넌트를 추가한다.
  • 움직임을 제한할 정점과 자유롭게 움직일 정점을 설정한다.
  • 중력, 강성, 감쇠, 외부 가속도 등의 속성을 조정한다.
  • 캐릭터나 주변 오브젝트와의 충돌을 설정한다.
  • 필요한 경우 Self Collision과 Inter-Collision을 활성화한다.

메시의 정점이 너무 적으면 천이 뻣뻣하게 움직일 수 있고, 지나치게 많으면 시뮬레이션 비용이 증가한다. 따라서 필요한 움직임을 표현할 수 있는 수준으로 메시 밀도를 조절하는 것이 중요하다.

Cloth의 주요 물리 속성

Stretching Stiffness

천이 늘어나는 정도를 제어하는 속성이다.

값이 높을수록 정점 사이의 거리가 쉽게 변하지 않아 천이 형태를 유지하려는 성질이 강해진다. 값이 낮으면 천이 더 쉽게 늘어나는 움직임을 보인다.

Bending Stiffness

천이 휘어지거나 접히는 정도를 제어한다.

값이 높으면 천이 잘 휘어지지 않고 형태를 유지하려는 성질이 강해진다. 값이 낮으면 망토나 얇은 직물처럼 유연하게 접히는 움직임을 구현하기 쉽다.

Use Tethers

천의 고정된 정점과 다른 정점 사이의 거리가 과도하게 늘어나는 현상을 억제하는 데 사용하는 옵션이다.

특히 일부 정점이 고정된 천에서 불필요한 늘어짐을 줄이는 데 도움이 된다.

Use Gravity

Cloth 시뮬레이션에 중력을 적용할지 결정한다.

활성화하면 천이 중력에 의해 아래로 처지는 움직임을 보인다. 중력의 영향을 받지 않는 특수한 연출에서는 비활성화할 수 있다.

Damping

천의 움직임이 얼마나 빠르게 감쇠하는지 제어한다.

값이 높으면 흔들림이 빠르게 줄어들고, 값이 낮으면 움직임이 오래 지속된다. 망토가 과도하게 진동하는 경우 감쇠 값을 조절해 안정적인 움직임을 만들 수 있다.

External Acceleration

Cloth에 추가적인 가속도를 적용한다.

특정 방향으로 작용하는 힘을 표현하거나 바람에 의해 천이 밀리는 효과를 구현할 때 활용할 수 있다.

Random Acceleration

Cloth에 무작위 가속도를 적용한다.

천이 일정한 방향으로만 움직이지 않고 불규칙하게 흔들리는 효과를 구현할 수 있다. 다만 값을 과도하게 높이면 움직임이 부자연스럽거나 불안정해 보일 수 있다.

Cloth Constraints란?

Cloth Constraints는 천 메시의 각 정점이 얼마나 자유롭게 움직일 수 있는지, 그리고 원래 표면으로부터 얼마나 떨어지거나 침투할 수 있는지를 제어하는 기능이다.

Cloth는 메시의 정점을 시뮬레이션 대상으로 사용한다. 따라서 모든 정점이 자유롭게 움직이도록 설정하는 대신, 특정 정점을 고정하고 나머지 정점에 이동 범위를 지정하는 방식으로 천의 움직임을 설계한다.

주요 설정은 Max Distance와 Surface Penetration이다.

Max Distance

Max Distance는 시뮬레이션 중 정점이 원래 위치에서 이동할 수 있는 최대 거리를 지정한다.

  • 0: 정점이 원래 위치에서 움직이지 않는다.
  • 작은 값: 정점의 이동 범위가 제한된다.
  • 큰 값: 정점이 더 넓은 범위에서 움직일 수 있다.

예를 들어 캐릭터의 망토를 구현한다면 망토 상단의 Max Distance를 0으로 설정하고, 아래쪽으로 내려갈수록 값을 증가시키는 방식으로 구성할 수 있다.

이렇게 하면 상단은 캐릭터에 연결된 것처럼 고정되고 하단은 캐릭터의 이동과 외부 힘에 따라 자연스럽게 흔들린다.

모든 정점의 Max Distance를 0으로 설정하면 천의 움직임이 제한된다. 반대로 지나치게 큰 값을 사용하면 천이 과도하게 움직이거나 원래 형태에서 크게 벗어날 수 있다.

Surface Penetration

Surface Penetration은 정점이 원래 스키닝된 메시의 표면 안쪽으로 얼마나 침투할 수 있는지를 제어하는 속성이다.

주로 캐릭터의 몸을 감싸는 옷이나 치마처럼 천이 신체 표면을 따라 움직여야 하는 경우에 활용한다.

값을 적절하게 설정하면 천이 원래 표면 안쪽으로 과도하게 파고드는 현상을 줄이는 데 도움이 된다. 다만 이 속성만으로 모든 충돌 문제를 해결할 수 있는 것은 아니며, 필요한 경우 별도의 충돌체 설정도 함께 사용해야 한다.

Constraints 설정 방법

Cloth가 적용된 GameObject를 선택하고 Inspector의 Constraints 편집 도구를 사용한다.

정점 선택 도구나 페인트 도구로 원하는 영역을 지정한 다음 Max Distance와 Surface Penetration 값을 설정한다. Unity 버전에 따라 편집 도구의 UI와 제공 기능은 다를 수 있다.

예를 들어 망토 상단은 Max Distance를 0으로 설정하고 하단으로 갈수록 값을 증가시키면, 고정된 부분과 자유롭게 움직이는 부분 사이에 자연스러운 움직임을 만들 수 있다.

Cloth 충돌 처리

Cloth는 캐릭터나 주변 오브젝트와 상호작용하도록 구성할 수 있다.

예를 들어 캐릭터가 움직일 때 망토가 몸통을 통과하지 않도록 하거나, 치마가 다리와 겹쳐 뚫고 지나가는 현상을 줄일 수 있다.

Unity Cloth에서는 일반적으로 Sphere Collider와 Capsule Collider를 충돌체로 활용한다.

  • Sphere Collider: 어깨나 관절 등 구형으로 근사할 수 있는 부위에 사용한다.
  • Capsule Collider: 팔, 다리, 몸통처럼 길쭉한 부위를 근사할 때 사용한다.

Cloth의 충돌 처리는 지정된 충돌체를 기반으로 수행된다. 따라서 충돌체의 크기와 위치가 부정확하면 천이 신체를 통과하거나 불필요하게 튕기는 문제가 발생할 수 있다.

복잡한 캐릭터 모델 전체에 충돌체를 과도하게 배치하면 계산 비용이 증가할 수 있으므로, 실제로 천과 접촉하는 부위에 적절한 충돌체를 배치하는 것이 중요하다.

Cloth Self Collision이란?

Self Collision은 하나의 Cloth 메시 내부에서 천의 일부가 다른 부분을 관통하는 현상을 줄이기 위한 기능이다.

예를 들어 망토가 크게 흔들리면서 천의 한쪽 부분이 다른 부분을 통과하거나, 치마의 접힌 부분들이 서로 겹쳐 뚫고 지나가는 현상을 줄이는 데 사용한다.

일반적인 Cloth 충돌체 설정은 천과 캐릭터 몸통 같은 외부 충돌체 사이의 상호작용을 처리한다. 반면 Self Collision은 천과 천 자신의 충돌을 처리한다.

Self Collision 설정

Self Collision을 사용하려면 Cloth의 충돌 대상으로 사용할 정점을 지정하고, Cloth Inspector에서 관련 속성을 조정한다.

일반적으로 다음 두 속성이 중요하다.

참고로 Debug Mode 에서 Inspector 조작이 가능하다.

Distance

충돌 대상으로 지정된 정점 주변에 설정되는 충돌 구의 지름을 의미한다. 충돌 구가 서로 겹치지 않도록 처리해 정점 사이의 최소 간격을 유지하는 데 사용한다.

값이 너무 크면 주변 정점들의 충돌 제약 조건이 서로 영향을 주면서 천이 떨리거나 불안정해질 수 있다. 따라서 메시의 정점 간격과 천의 두께를 고려해 설정해야 한다.

Stiffness

충돌한 정점들을 서로 분리하려는 효과의 강도를 제어한다.

값이 높을수록 정점 사이의 간격을 유지하려는 성질이 강해진다. 다만 지나치게 강한 설정은 다른 제약 조건과 상충해 시뮬레이션을 불안정하게 만들 수 있다.

Self Collision의 한계

Self Collision은 메시의 삼각형 표면 전체를 정밀하게 검사하는 방식이 아니라, 충돌 대상으로 지정된 정점을 기반으로 처리한다.

따라서 정점 간격이 지나치게 넓거나 삼각형이 큰 메시에서는 천이 서로 관통하는 현상을 완벽하게 방지하지 못할 수 있다.

또한 충돌 계산이 추가되므로 성능 비용이 증가한다. 모든 정점을 무조건 충돌 대상으로 지정하기보다 실제로 서로 겹칠 가능성이 높은 영역을 중심으로 설정하는 것이 효율적이다.

Cloth Inter-Collision이란?

Inter-Collision은 서로 다른 Cloth 컴포넌트에 속한 천들이 서로 충돌하도록 처리하는 기능이다.

Self Collision이 하나의 천 내부에서 발생하는 충돌을 처리한다면, Inter-Collision은 서로 다른 Cloth 사이의 충돌을 처리한다.

예를 들어 여러 개의 천 오브젝트가 서로 가까이에서 움직이거나, 별도로 구성된 천들이 서로 관통하지 않아야 하는 상황에서 활용할 수 있다.

Inter-Collision 설정

Inter-Collision을 사용하려면 두 가지 설정이 필요하다.

먼저 각 Cloth에서 Inter-Collision 대상으로 사용할 정점을 지정한다. 다음으로 Project Settings의 Physics 설정에서 Cloth Inter-Collision의 Distance와 Stiffness를 조정한다.

Inter-Collision Distance

서로 다른 Cloth에 속한 충돌 정점 사이에 유지할 간격을 지정한다.

값이 지나치게 크면 천 사이에 불필요하게 넓은 간격이 생기거나 움직임이 부자연스러워질 수 있다.

Inter-Collision Stiffness

서로 다른 Cloth의 정점들이 겹치지 않도록 분리하는 효과의 강도를 지정한다.

값이 높을수록 정점 사이의 간격을 유지하려는 효과가 강해진다. 다만 실제 결과는 메시 구조와 다른 제약 조건에도 영향을 받는다.

Inter-Collision을 활성화했다고 해서 모든 메시와 모든 충돌체가 자동으로 상호 충돌하는 것은 아니다. 해당 기능에 참여하도록 지정된 Cloth 정점들을 대상으로 처리해야 한다.

Self Collision과 Inter-Collision의 차이

구분Self CollisionInter-Collision
충돌 대상같은 Cloth 내부의 정점서로 다른 Cloth의 정점
주요 목적천 자체의 관통 방지여러 천 사이의 관통 방지
활용 사례한 장의 망토가 접히는 상황서로 다른 천 오브젝트가 겹치는 상황
주요 설정Distance, StiffnessDistance, Stiffness
성능 영향추가 충돌 계산 발생여러 Cloth 사이의 추가 충돌 계산 발생

두 기능은 목적이 다르므로 상황에 따라 선택해서 사용해야 한다. 하나의 망토 내부에서 천이 서로 관통하는 문제가 있다면 Self Collision을, 서로 다른 Cloth 오브젝트가 관통하는 문제가 있다면 Inter-Collision을 검토한다.

Cloth와 일반 애니메이션의 차이

일반적인 애니메이션은 키프레임이나 애니메이션 커브를 통해 오브젝트의 움직임을 지정한다. 반면 Cloth는 물리 시뮬레이션을 통해 정점의 움직임을 계산한다.

일반 애니메이션은 결과를 예측하고 제어하기 쉽지만, 주변 상황에 따라 자연스럽게 반응하도록 만들려면 별도의 작업이 필요하다.

Cloth는 물리 시뮬레이션을 기반으로 하므로 다양한 상황에 반응할 수 있지만, 설정과 실행 환경에 따라 결과가 달라지며 계산 비용도 발생한다.

실무에서는 두 방식을 함께 사용하는 것도 가능하다. 예를 들어 망토의 기본 형태와 캐릭터 연결 부분은 스키닝이나 애니메이션으로 제어하고, 하단의 자연스러운 흔들림은 Cloth로 처리할 수 있다.

다만 실제 구현 방식은 프로젝트의 렌더링 파이프라인, 목표 플랫폼, 성능 요구 사항에 따라 결정해야 한다.

성능 최적화

Cloth는 물리 시뮬레이션을 수행하므로 메시의 정점 수와 충돌 처리량에 따라 성능 비용이 증가한다. 특히 Self Collision과 Inter-Collision을 활성화하면 추가적인 충돌 계산이 발생한다.

성능을 최적화하려면 다음 사항을 고려해야 한다.

메시 정점 수 관리

천의 움직임을 표현하는 데 필요한 수준으로 정점 수를 제한한다. 지나치게 세밀한 메시를 사용하면 시뮬레이션 비용이 증가한다.

충돌체 최소화

실제로 천과 충돌해야 하는 신체 부위만 충돌체로 구성한다. 불필요한 충돌체는 제거하고 크기와 위치를 적절하게 조정한다.

충돌 정점 제한

Self Collision과 Inter-Collision이 필요한 영역만 충돌 대상으로 지정한다. 모든 정점을 충돌 대상으로 설정하기보다 실제로 관통이 발생하기 쉬운 부분을 우선적으로 처리한다.

시뮬레이션 대상 제한

화면에 보이지 않거나 움직임이 중요하지 않은 오브젝트까지 항상 시뮬레이션할 필요는 없다. 상황에 따라 Cloth를 비활성화하거나 단순한 애니메이션으로 대체할 수 있다.

물리 속성 조정

외부 가속도나 충돌 거리를 과도하게 설정하면 떨림이나 불안정한 움직임이 발생할 수 있다. 물리 속성을 무작정 높이기보다 메시 구조와 제약 조건부터 점검하는 것이 효율적이다.

목표 플랫폼에서 테스트

PC와 모바일은 허용 가능한 시뮬레이션 비용이 다를 수 있다. 실제 목표 플랫폼에서 프레임 시간과 물리 업데이트 비용을 측정한 뒤 설정을 조정해야 한다.

실전 예제: 캐릭터 망토 구현

캐릭터의 움직임에 따라 자연스럽게 흔들리는 망토를 구현한다고 가정해 보자.

먼저 망토 메시를 준비하고 Cloth 컴포넌트를 추가한다. 망토 상단 정점은 Max Distance를 0으로 설정해 고정하고, 하단 정점에는 이동 가능한 범위를 부여한다.

다음으로 중력과 감쇠를 조정해 망토가 자연스럽게 처지고 흔들리도록 만든다. 캐릭터의 몸통과 어깨에는 Sphere Collider 또는 Capsule Collider를 배치해 망토가 신체를 통과하는 현상을 줄인다.

이후 문제가 발생하는 부분에 따라 충돌 기능을 추가한다.

  • 망토의 한쪽 부분이 다른 부분을 관통한다면 Self Collision을 검토한다.
  • 별도의 Cloth 오브젝트와 망토가 서로 관통한다면 Inter-Collision을 검토한다.
  • 망토가 캐릭터의 신체 표면 안쪽으로 파고든다면 Surface Penetration과 충돌체 구성을 점검한다.
  • 망토가 과도하게 늘어나거나 불안정하게 움직인다면 Max Distance와 강성, 감쇠 값을 조정한다.

이처럼 Cloth 구현은 하나의 속성만 조절해서 완성하는 작업이 아니다. 메시 구조, 정점 제약 조건, 물리 속성, 충돌 설정을 순서대로 조정해야 안정적인 결과를 얻을 수 있다.

정리

Unity Cloth는 망토, 치마, 깃발 등 천의 자연스러운 움직임을 구현하기 위한 물리 시뮬레이션 컴포넌트다.

핵심은 다음과 같다.

  • 물리 속성: 천의 강성, 감쇠, 중력 및 외부 가속도를 조절한다.
  • Cloth Constraints: 정점의 이동 범위와 표면 침투 범위를 제어한다.
  • Self Collision: 하나의 Cloth 내부에서 발생하는 천의 관통을 줄인다.
  • Inter-Collision: 서로 다른 Cloth 사이에서 발생하는 관통을 줄인다.
  • 충돌체 설정: 캐릭터와 주변 오브젝트에 대한 충돌을 처리한다.
  • 성능 최적화: 정점 수와 충돌 대상, 시뮬레이션 범위를 적절하게 제한한다.

Cloth를 효과적으로 사용하려면 먼저 움직임을 제어할 정점을 정의하고, 외부 충돌을 구성한 뒤, 실제로 필요한 경우 Self Collision과 Inter-Collision을 추가하는 방식으로 접근하는 것이 효율적이다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다