PART 5 · 강의 3/3

Wind와 Collision

바람 상호작용, Self-Collision, Cloth-환경 충돌 처리

01

Wind 상호작용

Wind Directional Source와 Cloth 바람 효과

Chaos Cloth는 월드에 배치된 Wind Directional Source와 자동으로 상호작용합니다. Cloth Config의 DragLift 값이 바람에 대한 반응을 결정합니다.

C++ - 커스텀 바람 적용
// 방법 1: Wind Directional Source 생성 AWindDirectionalSource* WindSource = GetWorld()->SpawnActor<AWindDirectionalSource>(); UWindDirectionalSourceComponent* WindComp = WindSource->GetComponent(); WindComp->Speed = 200.0f; WindComp->Strength = 1.0f; WindComp->MinGustAmount = 0.1f; WindComp->MaxGustAmount = 0.5f; WindComp->GustFrequency = 2.0f; // 돌풍 빈도 // 방법 2: Skeletal Mesh에 직접 바람 벡터 설정 void AClothCharacter::ApplyCustomWind(FVector WindVelocity) { USkeletalMeshComponent* Mesh = GetMesh(); // Cloth에 직접 외부 힘 적용은 Wind Source를 통해 수행 // 또는 ClothingSimulation에서 Velocity Wind를 설정 // Cloth의 Drag/Lift 파라미터로 바람 반응 강도 조절 // Drag: 바람에 밀리는 정도 // Lift: 바람에 들리는 정도 }
Cloth Config 파라미터바람 효과낮은 값높은 값
Drag바람에 밀리는 정도바람 거의 무시바람에 크게 반응
Lift바람에 들리는 정도들리지 않음바람에 크게 들림
WindVelocityScale바람 속도 배율약한 반응과장된 반응
02

Capsule Collision

캐릭터 본과의 충돌 처리

Cloth가 캐릭터의 몸을 뚫지 않도록 Capsule Collision을 설정합니다. Physics Asset의 각 바디가 Cloth 파티클과의 충돌 캡슐로 사용됩니다.

Collision 설정 방법
  • Physics Asset 활용 — Skeletal Mesh의 Physics Asset에 있는 Capsule/Sphere 바디가 자동으로 Cloth 충돌체로 사용됩니다.
  • Collision Thickness — Cloth Config에서 설정. 충돌체 표면에서의 최소 거리.
  • Friction — 충돌 시 천이 미끄러지는 정도. 0 = 마찰 없음, 1 = 완전 고정.
  • CollisionMass — 충돌 시 파티클에 가해지는 반발력의 강도.
Cloth 전용 Physics Asset

래그돌용 Physics Asset과 Cloth 충돌용은 요구사항이 다릅니다. Cloth 충돌용으로는 단순한 캡슐 몇 개(상체, 허벅지, 팔)만 있으면 충분합니다. 너무 많은 충돌체는 성능을 저하시킵니다.

03

Self-Collision

천 자체의 자가 충돌

Self-Collision은 천의 파티클이 같은 천의 다른 부분과 겹치지 않도록 하는 기능입니다. 접히는 천, 겹쳐지는 의상에 필수적이지만 성능 비용이 큽니다.

파라미터설명성능 영향
SelfCollisionThickness자가 충돌 감지 두께두꺼울수록 비용 증가
SelfCollisionFriction자가 충돌 마찰낮음
bUseSelfCollision활성화 여부비활성 시 큰 성능 절감
Self-Collision 성능

Self-Collision은 O(n^2) 복잡도를 가지므로, 파티클 수가 많은 천에서는 매우 비쌉니다. 중요한 의상에만 선택적으로 활성화하고, LOD에 따라 원거리에서 비활성화하는 것이 좋습니다.

04

Cloth 성능 최적화

프로덕션 품질의 Cloth 시뮬레이션

최적화 기법설정절감 효과
LOD별 ClothLOD 1+ 에서 Cloth 비활성화원거리 성능 대폭 향상
Solver Iteration최소한의 반복 횟수반복 1회 줄일 때마다 큰 절감
Self-Collision 제한주인공만 활성화NPC 성능 절감
파티클 수 제한Cloth 메시 폴리곤 최적화500개 이하 파티클 권장
Suspend/Resume화면 밖 Cloth 일시 정지보이지 않는 캐릭터 절감
SUMMARY

핵심 요약

  • Wind Directional Source와 Cloth의 Drag/Lift 파라미터로 바람 상호작용을 구현합니다.
  • Capsule Collision은 Physics Asset의 바디를 활용하여 캐릭터 관통을 방지합니다.
  • Self-Collision은 천 자체의 겹침을 방지하지만 성능 비용이 크므로 선택적으로 사용합니다.
  • LOD, Solver Iteration, Suspend/Resume을 활용하여 Cloth 성능을 최적화합니다.
  • 파티클 수를 500개 이하로 유지하는 것이 프로덕션 성능의 기본입니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Wind Directional Source 연동

Wind Directional Source를 레벨에 배치하고 Cloth에 바람 효과를 적용하세요. Wind Speed와 Direction을 변경하며 Cloth 반응을 관찰하고, Drag/Lift Coefficient를 조정하세요.

실습 2: Cloth와 환경 콜리전

캐릭터 주변의 Static Mesh(기둥, 벽)와 Cloth가 충돌하는 씬을 구성하세요. Collision Sphere/Capsule을 추가하여 Cloth가 환경 오브젝트에 자연스럽게 걸리도록 설정하세요.

심화 과제: 동적 날씨 바람 시스템

시간에 따라 바람 세기와 방향이 변하는 날씨 시스템을 구현하고 Cloth에 연동하세요. Perlin Noise 기반 돌풍을 추가하고, 실내/실외 전환 시 바람이 차단되는 Volume 기반 시스템을 제작하세요.