icon
7장 : 물리 환경 설정

물리 시뮬레이션 성능 조정


이전 절에서 캐릭터의 물리 기반 제어에 대해 알아보며, 레벨에 동적인 상호작용을 부여하는 물리 엔진의 중요성을 다시 한번 강조했습니다. 이제 이 강력한 물리 시뮬레이션이 게임 성능에 미치는 영향과 이를 최적화하는 방법에 대해 다룰 차례입니다. 물리 시뮬레이션은 매우 계산 집약적인 작업이므로, 최적화 없이는 게임의 프레임 속도를 크게 저하시킬 수 있습니다. '나 혼자 언리얼 기본' 교재를 통해 여러분이 언리얼 엔진의 물리 시뮬레이션을 효율적으로 관리하고 조정하여, 시각적으로 풍부하면서도 안정적인 게임 환경을 구축할 수 있도록 안내해 드리겠습니다. 마치 효율적인 기계가 최소한의 에너지로 최대의 성능을 내듯, 여러분의 게임도 최적화된 물리 시뮬레이션을 통해 부드럽게 작동하게 만들어 봅시다.


물리 시뮬레이션 성능 최적화의 중요성

물리 시뮬레이션은 CPU와 GPU 자원을 모두 소모하며, 특히 동시다발적으로 많은 오브젝트가 물리 상호작용을 할 때 성능 병목 현상을 일으키기 쉽습니다.

  • 안정적인 프레임 속도 유지: 물리 시뮬레이션으로 인한 프레임 드랍은 플레이어 경험을 크게 저해합니다. 모든 상황에서 목표 프레임 속도를 유지하는 것이 중요합니다.
  • 리소스 효율성: CPU, GPU, 메모리 등 한정된 시스템 리소스를 효율적으로 사용하여 게임의 전반적인 성능을 향상시킵니다.
  • 멀티플랫폼 지원: 고사양 PC뿐만 아니라, 콘솔, 모바일 등 다양한 하드웨어 스펙을 가진 기기에서도 게임이 원활하게 실행되도록 합니다.
  • 게임 플레이 일관성: 물리 버그(오브젝트 뚫림, 떨림 등)를 줄이고, 예측 가능한 물리적 반응을 보장하여 게임 플레이의 일관성을 높입니다.

주요 물리 시뮬레이션 최적화 전략

물리 시뮬레이션은 여러 계층에서 최적화할 수 있습니다. 가장 중요한 몇 가지 전략을 살펴보겠습니다.

충돌 메시 복잡도 최적화

이전 절에서 다룬 내용이지만, 물리 성능에 가장 큰 영향을 미치므로 다시 한번 강조합니다.

  • Simple Collision (단순 충돌) 적극 활용
    • 핵심: 대부분의 스태틱 메시는 간단한 기하학적 형태(상자, 구, 캡슐, Convex Hull)로 충돌을 계산하는 Simple Collision을 사용해야 합니다. 이는 매우 성능 효율적입니다.
    • Static Mesh Editor에서 Collision 메뉴를 통해 자동으로 생성하거나 직접 추가할 수 있습니다.
  • Complex Collision (복잡 충돌) 사용 제한
    • 메시의 실제 폴리곤을 사용하는 Complex Collision은 매우 정확하지만, 엄청난 성능 부하를 유발합니다.
    • 사용 지양: Collision ComplexityUse Complex as Simple로 설정하는 것은 극도로 정밀한 충돌이 필요한 몇몇 경우를 제외하고는 절대 피해야 합니다.
    • 예외: 복잡한 절벽 지형처럼, Simple Collision으로 근사화하기 어렵고 플레이어가 직접 밟고 이동해야 하는 매우 큰 Static Mesh Actor에는 Use Complex as Simple을 고려할 수 있습니다. 하지만 이마저도 랜드스케이프(Landscape) 사용을 권장합니다.

물리 시뮬레이션 활성화 관리

모든 오브젝트가 항상 물리 시뮬레이션될 필요는 없습니다.

  • Simulate Physics의 전략적 사용
    • 핵심: Simulate Physics 옵션은 오직 실제로 물리적 상호작용이 필요한 오브젝트에만 활성화해야 합니다.
    • 정적인 배경 오브젝트나, 미리 애니메이션된 오브젝트에는 이 옵션을 비활성화합니다.
  • 물리 오브젝트 수 제한
    • 한 화면에 동시에 물리 시뮬레이션되는 오브젝트의 수를 최소화합니다.
    • 폭발 등으로 파편이 생성될 경우, 파편의 수와 물리 시뮬레이션 시간을 제한하는 로직을 블루프린트나 C++로 구현합니다.
  • 물리 오브젝트 '슬립(Sleep)' 관리
    • 언리얼 엔진의 물리 엔진은 움직임이 거의 없는 물리 오브젝트를 자동으로 '슬립(Sleep)' 상태로 전환하여 더 이상 계산하지 않습니다. 이는 중요한 최적화 요소입니다.
    • 물리 시뮬레이션이 활성화된 액터의 Details 패널 Physics 섹션에서 Start Awake 옵션이 있습니다. 기본적으로 체크되어 있으며, 이 오브젝트가 생성될 때부터 바로 물리 시뮬레이션되도록 합니다. 만약 특정 오브젝트가 생성되자마자 정지 상태여야 한다면 이 옵션을 비활성화하여 시작부터 슬립 상태로 만들 수 있습니다.
    • Wake on Rigid Body Collide: 슬립 상태의 오브젝트가 충돌 시 깨어나 물리 시뮬레이션되도록 하는 옵션입니다.

물리 서브스텝 설정

프로젝트 전체 물리 설정에서 충돌 정확도와 성능 사이의 균형을 맞춥니다.

  • 위치: 편집(Edit) > 프로젝트 세팅(Project Settings) > 엔진(Engine) > 물리(Physics)
  • Enable Substepping (서브스텝 활성화)
    • 고속으로 움직이는 오브젝트가 서로 뚫고 지나가는 현상(터널링)을 방지하고 물리 시뮬레이션의 안정성을 높입니다.
    • 활성화 시 성능 비용 증가: 서브스텝은 정확도를 높이지만, 더 많은 물리 계산을 수행하므로 성능 부하가 커집니다.
    • 조절: 필요한 경우에만 활성화하고, Max Substep Delta TimeMax Substeps 값을 합리적으로 조절합니다.
      • Max Substep Delta Time을 너무 작게 설정하면 서브스텝 수가 늘어나고, Max Substeps를 너무 높게 설정하면 프레임 속도가 크게 저하될 수 있습니다. 기본값을 유지하거나 약간 조절하는 것이 좋습니다.

물리 재질의 효율적 사용

  • 물리 재질 자체는 성능에 큰 영향을 미 미치지만, Friction (마찰)과 Restitution (반발력) 값을 너무 극단적으로 설정하면 물리 시뮬레이션이 불안정해지거나 계산량이 늘어날 수 있습니다. 현실적인 값을 유지합니다.
  • Density 값을 과도하게 변경하면 질량 계산에 영향을 미쳐 예상치 못한 물리 반응을 유발할 수 있습니다.

물리 시뮬레이션 관련 디버깅 및 프로파일링 도구

물리 시뮬레이션 문제를 진단하고 최적화할 때 유용한 언리얼 엔진 내장 도구들입니다.

  • 뷰포트 Show > Collision
    • 역할: 레벨에 있는 모든 충돌 메시를 시각적으로 보여줍니다. 녹색은 Simple Collision, 빨간색/주황색은 Complex Collision을 나타냅니다.
    • 활용: 불필요하게 복잡한 충돌 메시가 사용된 곳을 찾아내어 최적화합니다.
  • 콘솔 명령어 PXVIS COLLISION 1
    • 역할: 게임 플레이 중 Shift + ~ 키를 눌러 콘솔을 연 뒤 이 명령어를 입력하면, 실시간으로 물리 오브젝트의 충돌 바디를 시각화하여 보여줍니다.
    • 활용: 물리 시뮬레이션되는 오브젝트의 충돌 메시가 올바른지, 터널링 현상이 발생하는지 등을 시각적으로 확인합니다.
  • Stat Physics
    • 역할: 실시간으로 물리 엔진의 통계(물리 오브젝트 수, 뼈대 수, 충돌 쌍 수, 물리 스텝 시간 등)를 보여줍니다.
    • 활용: 물리 시뮬레이션이 성능 병목의 원인인지 파악하고, 어떤 요소(오브젝트 수, 충돌 수)가 가장 큰 부하를 주는지 식별합니다.
      • Physics 시간(CPU Game)이 높다면 물리 시뮬레이션이 CPU에 큰 부담을 주고 있는 것입니다.
  • Stat SceneRendering
    • Physics 관련 렌더링 비용(예: DebugDrawPhysX)을 확인할 수 있습니다.
  • ProfileGPU
    • GPU 프로파일러에서 물리 디버깅 시각화(PXVIS 등)가 GPU에 얼마나 부담을 주는지 확인할 수 있습니다. (일반적인 게임 플레이에서는 사용하지 않음)

추가적인 최적화 팁

  • 물리 메시 LOD: 스태틱 메시 에셋의 LOD 설정에서, 멀리 있는 LOD에는 더 단순한 충돌 메시를 사용하도록 설정할 수 있습니다.
  • 물리 시뮬레이션 종료/시작 로직: 특정 오브젝트가 플레이어로부터 멀어지거나 중요도가 낮아지면 물리 시뮬레이션을 비활성화하고, 다시 가까워지면 활성화하는 로직을 블루프린트나 C++로 구현합니다. (이는 엔진의 슬립 기능보다 더 적극적인 제어입니다.)
  • 고속 오브젝트에 CCD (Continuous Collision Detection) 사용: Simulate Physics가 활성화된 액터의 Details 패널 Physics 섹션에서 Use CCD를 활성화합니다. 이는 터널링 현상을 방지하지만, 성능 비용이 있으므로 꼭 필요한 매우 빠른 오브젝트(예: 총알, 빠른 차량)에만 적용합니다.

물리 시뮬레이션 성능 조정은 시각적 품질과 게임 플레이의 반응성 사이에서 균형을 찾아야 하는 섬세한 작업입니다. 이 절에서 배운 충돌 메시 최적화, 물리 시뮬레이션 활성화 관리, 서브스텝 조정, 그리고 다양한 디버깅 도구 활용법을 바탕으로, 여러분의 게임이 항상 최적의 성능을 유지하면서도 풍부한 물리적 상호작용을 제공할 수 있도록 노력하세요. 지속적인 테스트와 프로파일링만이 성공적인 최적화로 가는 길입니다.

이것으로 7장 "물리 환경 설정"을 마칩니다.