Cloth Simulation으로 캐릭터 망토와 머리카락 물리를 자연스럽게 연출하는 방법

캐릭터 망토와 머리카락이 관절을 뚫거나 과도하게 흔들리는 문제를 줄이기 위해 PBD·XPBD 기반 Cloth Simulation의 거리 제약, 충돌, 감쇠, LOD 설정과 실전 튜닝 절차를 정리합니다.

✓ 복사 완료!
챕터일반 가이드
난이도중급
상태● 검토 완료
대상 엔진
Engine Agnostic
최종 업데이트
Cloth Simulation으로 캐릭터 망토와 머리카락 물리를 자연스럽게 연출하는 방법

캐릭터 망토와 머리카락 물리는 단순히 ‘흔들리게’ 만드는 기능이 아니라 애니메이션·충돌체·제약 조건을 함께 설계하는 문제다. 실시간 게임에서는 Position-Based Dynamics(PBD) 또는 Extended Position-Based Dynamics(XPBD)를 기반으로 거리 제약과 충돌을 반복 해결하고 부위별 강성·감쇠·LOD를 분리하면 안정성과 표현력을 함께 확보할 수 있다.

캐릭터 망토와 헤어 Cloth Simulation에서 먼저 해결할 문제

망토와 머리카락은 모두 천이나 가는 섬유처럼 보이지만 필요한 움직임은 다르다. 망토는 넓은 면적의 접힘과 바람 반응이 중요하고 헤어는 머리의 회전과 가속에 빠르게 따라가면서도 실루엣을 유지해야 한다.

대상우선순위대표 제약 조건흔한 문제
망토접힘, 관성, 바람거리, 굽힘, 충돌다리 관통, 가장자리 떨림
긴 머리카락실루엣, 지연 반응거리, 굽힘, 루트 고정목·어깨 관통, 과도한 출렁임
장식 술·리본선명한 형태거리, 각도, 감쇠고주파 진동, 회전축 꼬임

애니메이션과 물리를 경쟁시키지 않는 것이 핵심이다. 어깨, 목, 두피처럼 캐릭터에 고정되어야 하는 영역은 스킨드 메시 또는 본 애니메이션이 지배하고 끝단으로 갈수록 시뮬레이션 비중을 높인다.

캐릭터 등 뒤에서 망토와 긴 머리카락의 고정 영역, 시뮬레이션 영역, 충돌체를 구분한 기술 아트 설명 이미지

Cloth Simulation은 어떤 원리로 움직이는가?

실시간 Cloth Simulation은 메시의 정점 또는 체인 노드를 입자로 보고 이전 위치와 목표 거리의 차이를 반복적으로 보정한다. Verlet 적분을 사용하는 단순한 형태는 다음과 같이 표현할 수 있다.

xt+Δt=xt+(xt−xt−Δt)(1−d)+aΔt2x_{t+\Delta t}=x_t+(x_t-x_{t-\Delta t})(1-d)+a\Delta t^2

여기서 xx는 입자 위치, dd는 감쇠 계수, aa는 중력·바람·캐릭터 가속도 같은 외력이다. 이후 연결된 두 입자 사이의 거리 제약을 여러 번 풀어 늘어남을 줄인다.

C(x)=∥x2−x1∥−LC(x)=\lVert x_2-x_1\rVert-L Δx1=−w1w1+w2C(x)n,Δx2=w2w1+w2C(x)n\Delta x_1=-\frac{w_1}{w_1+w_2}C(x)n,\qquad \Delta x_2=\frac{w_2}{w_1+w_2}C(x)n

LL은 원래 길이, ww는 역질량, nn은 두 입자 사이의 정규화된 방향이다. PBD는 구현과 제어가 비교적 단순하지만 반복 횟수와 프레임 시간에 따라 강성이 달라질 수 있다. XPBD는 compliance 값을 도입해 시간 간격 변화에도 더 일관된 강성을 목표로 한다.

PBD와 XPBD는 무엇을 선택해야 할까?

기준PBDXPBD
구현 난이도비교적 낮음누적 라그랑주 승수 처리 필요
반복 횟수 영향큼상대적으로 작음
프레임 시간 변화강성 변화가 눈에 띌 수 있음강성 일관성에 유리
권장 용도간단한 리본, 소규모 보조 물리망토, 긴 헤어, 품질 설정이 다양한 게임

엔진 내장 Cloth 기능을 쓴다면 알고리즘을 직접 구현할 필요는 없다. 다만 거리 제약, 굽힘 강성, 충돌 반경, 솔버 반복 횟수처럼 결과를 바꾸는 개념은 동일하므로 해당 파라미터의 의미를 이해해야 한다.

망토 Cloth Simulation은 어떻게 구현하고 튜닝할까?

1. 메시와 고정 영역을 물리용으로 분리한다

렌더 메시를 그대로 시뮬레이션하면 정점 수가 많아 비용이 빠르게 커진다. 망토는 보통 저해상도 시뮬레이션 메시를 별도로 만들고 렌더 메시에는 스키닝 또는 랩 변형으로 결과를 전달한다.

  • 목선과 어깨 부근의 1~2열 정점은 고정한다.
  • 중앙은 충분히 접히도록 사각 격자를 유지한다.
  • 가장자리는 실루엣에 영향을 주므로 내부보다 약간 촘촘하게 배치한다.
  • 장식, 갑옷, 칼집처럼 단단한 부분은 Cloth 메시에서 분리한다.

2. 거리 제약과 굽힘 강성을 단계적으로 설정한다

망토가 고무처럼 늘어난다면 구조적 거리 제약이 약한 것이다. 반대로 종이처럼 꺾인다면 굽힘 강성이 너무 높거나 솔버 반복 횟수가 과하다. 처음에는 중력, 거리 제약, 충돌만 활성화하고 안정화한 뒤 굽힘과 바람을 더한다.

파라미터낮출 때의 변화높일 때의 변화초기 튜닝 방향
거리 강성늘어남 증가형태 유지 증가망토 폭과 길이가 유지될 수준으로 높게
굽힘 강성부드러운 접힘단단한 판처럼 움직임가죽은 높게, 얇은 천은 낮게
감쇠관성 증가, 잔진동움직임이 빨리 멈춤떨림이 사라지는 최소 수준
솔버 반복 횟수비용 감소, 제약 약화안정성 증가, 비용 증가목표 프레임 예산 안에서 측정
충돌 반경관통 위험 증가몸에서 떠 보일 위험실제 모델 두께보다 약간 크게

3. 캐릭터 속도 변화와 텔레포트를 별도로 처리한다

달리기에서 급정지하거나 컷신 전환으로 캐릭터 위치가 크게 바뀌면 망토 입자의 이전 위치가 남아 폭발적인 속도로 보일 수 있다. 캐릭터 루트의 위치·회전 변화량을 측정해 외력으로 제한적으로 전달하고 텔레포트 또는 리스폰 시에는 시뮬레이션 상태를 현재 포즈로 재설정한다.

// 엔진 독립적 의사 코드
if (rootDeltaDistance > teleportDistance || rootDeltaAngle > teleportAngle) {
    cloth.ResetToSkinnedPose();
} else {
    cloth.AddInertialForce(-characterAcceleration * inertiaScale);
    cloth.Simulate(fixedDeltaTime, solverIterations);
}

고정 시간 간격으로 시뮬레이션하고 렌더 프레임에서 보간하면 프레임 드롭 구간의 움직임이 더 예측 가능해진다. 다만 한 프레임에 처리하는 서브스텝 수에는 상한을 두어 순간적인 성능 악화를 막아야 한다.

머리카락 물리는 왜 쉽게 떨리고 관통하는가?

헤어는 폭이 좁고 길이가 길어 작은 회전 오차도 끝단에서 크게 보인다. 특히 머리카락 루트를 두피에 단단히 고정하지 않거나 목·어깨 충돌체가 부족하면 캐릭터가 고개를 돌릴 때 관통이 즉시 드러난다.

헤어 체인은 Cloth보다 본 기반 보조 물리가 유리한 경우가 많다

모든 헤어카드를 면 Cloth로 처리할 필요는 없다. 긴 포니테일, 땋은 머리, 앞머리 다발처럼 형태가 정해진 요소는 본 체인 기반 스프링 또는 Verlet 체인이 더 저렴하고 아트 디렉션도 쉽다. 반대로 넓은 헤어 클로스, 치마처럼 면적이 있는 요소는 Cloth가 접힘 표현에 유리하다.

상황권장 방식이유
포니테일·땋은 머리본 체인 + 거리/각도 제약실루엣 유지와 비용 제어가 쉬움
앞머리·짧은 옆머리제한된 본 보조 물리얼굴 관통을 세밀하게 제어 가능
넓은 헤어 천·베일Cloth Simulation면적 기반 접힘과 바람 반응에 적합
먼 거리 NPC애니메이션 전용 또는 비활성화화면 기여도 대비 비용이 낮음

포니테일 본 체인과 망토 저해상도 Cloth 메시, 목과 어깨 캡슐 충돌체의 관계를 보여 주는 게임 캐릭터 물리 설정 이미지

헤어 안정성을 높이는 설정 순서

  1. 루트 본 또는 루트 정점을 두피 스킨 포즈에 고정한다.
  2. 각 체인에 최대 길이와 최대 굽힘각을 설정해 실루엣이 무너지지 않게 한다.
  3. 목, 어깨, 등 상부에 캡슐 충돌체를 배치하고 머리카락 폭보다 약간 큰 충돌 반경을 사용한다.
  4. 고속 회전 시에는 속도 상한과 추가 감쇠를 적용한다.
  5. 얼굴 주변, 뿌리 주변, 장식물처럼 관통이 눈에 띄는 부위는 물리 대신 보정 본 또는 애니메이션 레이어를 사용한다.

충돌과 관통 문제를 줄이는 실전 체크리스트

충돌체를 많이 넣는다고 항상 좋아지지는 않는다. 서로 겹친 캡슐이 많으면 입자가 여러 방향으로 밀려 떨림이 생길 수 있다. 플레이 카메라에서 관통이 자주 보이는 방향을 우선해 최소한의 단순 충돌체를 구성한다.

flowchart TD
    A[스킨 포즈 갱신] --> B[고정 정점과 헤어 루트 배치]
    B --> C[중력·바람·관성 외력 적용]
    C --> D[거리·굽힘 제약 반복 해결]
    D --> E[캡슐·구 충돌 해결]
    E --> F[렌더 메시로 변형 전달]
    F --> G[거리와 품질에 따른 LOD 적용]

충돌 튜닝 시에는 다음 순서를 권장한다.

  1. 충돌을 끈 상태에서 거리 제약, 감쇠, 서브스텝으로 기본 안정성을 맞춘다.
  2. 몸통부터 단순 캡슐 충돌체를 추가한다.
  3. 목·어깨·골반처럼 관통이 눈에 잘 띄는 관절을 보강한다.
  4. 빠른 회전, 점프, 착지, 대시, 피격, 컷신 전환을 포함한 테스트 애니메이션으로 검증한다.
  5. 마지막에만 자기 충돌을 검토한다. 자기 충돌은 접힘 품질을 높이지만 비용이 커서 주인공의 근접 샷처럼 필요한 범위에 제한하는 편이 좋다.

성능 예산과 LOD는 어떻게 나눠야 할까?

Cloth 비용은 대체로 입자 수, 제약 수, 서브스텝, 솔버 반복 횟수, 충돌 후보 수에 비례한다. 따라서 모든 캐릭터에 동일한 품질을 적용하면 군중 장면에서 병목이 생긴다.

LOD권장 대상시뮬레이션 정책
LOD 0플레이어, 대화 중인 주요 캐릭터전체 망토, 헤어 체인, 주요 충돌 활성화
LOD 1중거리 중요 NPC시뮬레이션 메시 단순화, 반복 횟수 축소
LOD 2원거리 NPC헤어 또는 망토 중 하나만 유지, 충돌 축소
LOD 3군중·원거리애니메이션 포즈 또는 정적 변형으로 대체

거리만으로 LOD를 전환하면 카메라 줌이나 연출 카메라에서 결과가 튈 수 있다. 화면 점유율, 캐릭터 중요도, 카메라 시선 방향을 함께 고려하고 전환 시에는 짧은 블렌드 또는 상태 재초기화를 적용한다.

자주 묻는 질문 (FAQ)

망토가 순간적으로 폭발하거나 길게 늘어나는 이유는 무엇인가?

큰 위치 변화가 발생했는데 이전 프레임 위치를 재설정하지 않았거나 서브스텝·솔버 반복 횟수가 부족한 경우가 많다. 텔레포트 임계값에서 상태를 재설정하고 고속 동작의 최대 속도를 제한한다.

자기 충돌을 반드시 켜야 하나?

아니다. 자기 충돌은 망토의 접힘 품질을 높이지만 비용이 크다. 카메라에 가깝고 접힘이 중요한 주인공 의상에 한정하고 일반 NPC에는 단순 충돌체와 아트 보정으로 대체하는 편이 실용적이다.

헤어에 Cloth와 본 물리를 함께 써도 되는가?

가능하다. 넓은 베일이나 긴 장식은 Cloth로 포니테일과 앞머리처럼 형태를 지켜야 하는 요소는 본 체인 물리로 분리하면 제어와 성능의 균형을 맞추기 쉽다.

정리

좋은 망토와 헤어 물리는 높은 정점 수보다 역할 분리가 먼저다. 고정 영역은 애니메이션에 맡기고 움직이는 영역에는 PBD 또는 XPBD 제약을 적용하며 충돌체·텔레포트 재설정·LOD를 함께 설계한다. 이 순서로 접근하면 캐릭터의 실루엣을 지키면서도 달리기와 전투에서 설득력 있는 관성과 바람 반응을 만들 수 있다.