PART 7 · 강의 1/3

Physics Scene 설정

FPhysScene_Chaos의 전역 물리 파라미터와 프로젝트 설정

01

프로젝트 물리 설정

Project Settings > Engine > Physics

Project Settings > Engine > Physics에서 프로젝트 전체에 영향을 미치는 물리 파라미터를 설정합니다.

설정위치기본값설명
Default Gravity ZGeneral-980전역 중력 (cm/s^2)
Default Terminal VelocityGeneral4000최대 낙하 속도
Max Physics Delta TimeFramerate1/30물리 최대 DeltaTime
Max Substep DeltaTimeFramerate1/60서브스텝 최대 DeltaTime
Max SubstepsFramerate6최대 서브스텝 횟수
Solver Iteration CountChaos8PBD 솔버 반복 횟수
Push Out Iteration CountChaos3관통 해소 반복 횟수
Solver Iteration Count

솔버 반복 횟수가 높을수록 시뮬레이션 정확도가 향상되지만 CPU 비용도 증가합니다. 8~12회가 대부분의 게임에 적합합니다. 복잡한 Constraint 체인이나 스태킹이 필요하면 16~20회로 늘릴 수 있습니다.

02

중력과 물리 환경

중력 커스터마이징과 물리 볼륨

C++ - 중력 제어
// 전역 중력 변경 void AMyGameMode::SetLowGravity() { // 월드 설정에서 중력 변경 AWorldSettings* WorldSettings = GetWorld()->GetWorldSettings(); WorldSettings->bGlobalGravitySet = true; WorldSettings->GlobalGravityZ = -196.0f; // 달 중력 (1/5) } // 개별 컴포넌트 중력 스케일 void AFloatingObject::SetupZeroGravity() { MeshComp->SetEnableGravity(false); // 또는 중력 스케일 조정 MeshComp->GetBodyInstance()->bEnableGravity = true; MeshComp->SetGravityScale(0.1f); // 10% 중력 } // Physics Volume으로 영역별 중력 설정 // 에디터에서 APhysicsVolume을 배치하고 // CharacterGravityScale 또는 bPhysicsOnContact 설정
Physics Volume 활용

APhysicsVolume을 레벨에 배치하면 영역 내 오브젝트에 다른 중력, 마찰, 터미널 벨로시티를 적용할 수 있습니다. 수중 영역, 우주 공간, 저중력 방 등에 유용합니다.

03

콜리전 필터링 최적화

불필요한 충돌 검사 제거

콜리전 최적화 전략
  • Collision Channel 분리 — 서로 상호작용하지 않는 오브젝트는 별도 채널을 사용하고 Ignore로 설정합니다.
  • Simple vs Complex Collision — 물리 시뮬레이션에는 Simple Collision만 사용. Complex(Per-Poly)는 Trace에만 사용합니다.
  • Collision Enabled 최소화 — QueryOnly로 충분한 오브젝트에 QueryAndPhysics를 사용하지 않습니다.
  • Generate Overlap Events 비활성화 — Overlap이 불필요한 오브젝트는 명시적으로 비활성화합니다.
최적화 항목설정절감 효과
불필요한 Overlap 비활성화GenerateOverlapEvents = falseBroadphase 비용 감소
채널 Ignore불필요한 채널 간 IgnoreNarrowphase 비용 감소
Simple Collision 사용bTraceComplex = falseTrace 비용 대폭 감소
CCD 선택적 활성화필요한 오브젝트만 CCDCCD 오버헤드 감소
04

Continuous Collision Detection (CCD)

고속 물체의 터널링 방지

빠르게 움직이는 물체(총알, 화살 등)는 한 프레임에 다른 물체를 완전히 통과할 수 있습니다(터널링). CCD를 활성화하면 프레임 간 스윕 테스트로 이를 방지합니다.

C++ - CCD 설정
// CCD 활성화 FBodyInstance* Body = MeshComp->GetBodyInstance(); Body->bUseCCD = true; // 블루프린트에서: Body Instance > Use CCD 체크 // CCD는 성능 비용이 있으므로 // 고속 물체(총알, 화살)에만 선택적으로 활성화
CCD 주의사항

CCD는 성능 비용이 높으므로 모든 오브젝트에 활성화하지 마세요. 일반적인 물리 오브젝트는 CCD 없이도 충분합니다. 고속 이동 오브젝트(발사체 등)에만 선택적으로 적용하세요.

SUMMARY

핵심 요약

  • Project Settings > Physics에서 중력, 솔버 반복, 서브스텝 등 전역 물리 파라미터를 설정합니다.
  • Solver Iteration Count 8~12회가 일반적이며, 복잡한 시뮬레이션에서 16~20회로 증가시킵니다.
  • Physics Volume으로 영역별 중력/마찰을 다르게 설정할 수 있습니다.
  • 콜리전 최적화: 채널 Ignore, Simple Collision 사용, Overlap 비활성화 등으로 성능을 확보합니다.
  • CCD는 고속 물체의 터널링을 방지하지만, 성능 비용이 있으므로 선택적으로 사용합니다.
PRACTICE

도전 과제

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

실습 1: Physics Scene 글로벌 설정 최적화

Project Settings > Physics에서 Solver Iteration Count, Position/Velocity Iteration을 변경하며 시뮬레이션 정확도와 성능의 트레이드오프를 측정하세요. stat physics로 성능 영향을 기록하세요.

실습 2: Collision Complexity 비교

복잡한 메시에 대해 Use Simple Collision, Use Complex as Simple, Default 3가지 콜리전 설정의 성능 차이를 측정하세요. 100개의 물리 객체로 FPS 영향을 비교하세요.

심화 과제: 물리 씬 분할 최적화

대규모 오픈 월드에서 물리 오브젝트의 Sleep/Wake를 거리 기반으로 관리하는 시스템을 C++로 구현하세요. 플레이어 근접 시 Wake, 원거리 시 Force Sleep하는 전략을 적용하세요.