Wind와 Collision
바람 상호작용, Self-Collision, Cloth-환경 충돌 처리
Wind 상호작용
Wind Directional Source와 Cloth 바람 효과
Chaos Cloth는 월드에 배치된 Wind Directional Source와 자동으로 상호작용합니다. Cloth Config의 Drag와 Lift 값이 바람에 대한 반응을 결정합니다.
// 방법 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 | 바람 속도 배율 | 약한 반응 | 과장된 반응 |
Capsule Collision
캐릭터 본과의 충돌 처리
Cloth가 캐릭터의 몸을 뚫지 않도록 Capsule Collision을 설정합니다. Physics Asset의 각 바디가 Cloth 파티클과의 충돌 캡슐로 사용됩니다.
- Physics Asset 활용 — Skeletal Mesh의 Physics Asset에 있는 Capsule/Sphere 바디가 자동으로 Cloth 충돌체로 사용됩니다.
- Collision Thickness — Cloth Config에서 설정. 충돌체 표면에서의 최소 거리.
- Friction — 충돌 시 천이 미끄러지는 정도. 0 = 마찰 없음, 1 = 완전 고정.
- CollisionMass — 충돌 시 파티클에 가해지는 반발력의 강도.
래그돌용 Physics Asset과 Cloth 충돌용은 요구사항이 다릅니다. Cloth 충돌용으로는 단순한 캡슐 몇 개(상체, 허벅지, 팔)만 있으면 충분합니다. 너무 많은 충돌체는 성능을 저하시킵니다.
Self-Collision
천 자체의 자가 충돌
Self-Collision은 천의 파티클이 같은 천의 다른 부분과 겹치지 않도록 하는 기능입니다. 접히는 천, 겹쳐지는 의상에 필수적이지만 성능 비용이 큽니다.
| 파라미터 | 설명 | 성능 영향 |
|---|---|---|
SelfCollisionThickness | 자가 충돌 감지 두께 | 두꺼울수록 비용 증가 |
SelfCollisionFriction | 자가 충돌 마찰 | 낮음 |
bUseSelfCollision | 활성화 여부 | 비활성 시 큰 성능 절감 |
Self-Collision은 O(n^2) 복잡도를 가지므로, 파티클 수가 많은 천에서는 매우 비쌉니다. 중요한 의상에만 선택적으로 활성화하고, LOD에 따라 원거리에서 비활성화하는 것이 좋습니다.
Cloth 성능 최적화
프로덕션 품질의 Cloth 시뮬레이션
| 최적화 기법 | 설정 | 절감 효과 |
|---|---|---|
| LOD별 Cloth | LOD 1+ 에서 Cloth 비활성화 | 원거리 성능 대폭 향상 |
| Solver Iteration | 최소한의 반복 횟수 | 반복 1회 줄일 때마다 큰 절감 |
| Self-Collision 제한 | 주인공만 활성화 | NPC 성능 절감 |
| 파티클 수 제한 | Cloth 메시 폴리곤 최적화 | 500개 이하 파티클 권장 |
| Suspend/Resume | 화면 밖 Cloth 일시 정지 | 보이지 않는 캐릭터 절감 |
핵심 요약
- Wind Directional Source와 Cloth의 Drag/Lift 파라미터로 바람 상호작용을 구현합니다.
- Capsule Collision은 Physics Asset의 바디를 활용하여 캐릭터 관통을 방지합니다.
- Self-Collision은 천 자체의 겹침을 방지하지만 성능 비용이 크므로 선택적으로 사용합니다.
- LOD, Solver Iteration, Suspend/Resume을 활용하여 Cloth 성능을 최적화합니다.
- 파티클 수를 500개 이하로 유지하는 것이 프로덕션 성능의 기본입니다.
도전 과제
배운 내용을 직접 실습해보세요
Wind Directional Source를 레벨에 배치하고 Cloth에 바람 효과를 적용하세요. Wind Speed와 Direction을 변경하며 Cloth 반응을 관찰하고, Drag/Lift Coefficient를 조정하세요.
캐릭터 주변의 Static Mesh(기둥, 벽)와 Cloth가 충돌하는 씬을 구성하세요. Collision Sphere/Capsule을 추가하여 Cloth가 환경 오브젝트에 자연스럽게 걸리도록 설정하세요.
시간에 따라 바람 세기와 방향이 변하는 날씨 시스템을 구현하고 Cloth에 연동하세요. Perlin Noise 기반 돌풍을 추가하고, 실내/실외 전환 시 바람이 차단되는 Volume 기반 시스템을 제작하세요.