안동민 개발노트

본문 시작

환경 설정의 성능 영향 분석

후처리·그림자·광원·안개·반사와 Nanite·Lumen·World Partition을 규모와 플랫폼 예산에 맞춰 선택합니다.

에셋과 레벨 구조를 정리했다면, 다음 병목은 전역 환경 설정에서 자주 발생합니다.

포스트 프로세싱, 그림자, 광원, 안개, 반사 같은 환경 설정(Environmental Settings)은 화면 품질을 크게 좌우하지만, 동시에 렌더링 비용도 크게 바꿉니다.

같은 맵이라도 어떤 옵션을 켜고 끄는지에 따라 프레임 안정성이 완전히 달라질 수 있습니다.

이번 절에서는 품질과 성능 사이의 균형점을 찾는 기준을 정리합니다.

목표 하드웨어에서 안정적인 프레임을 유지하면서도 의도한 연출을 지키는 설정 방식까지 함께 다룹니다.


환경 설정이 성능에 미치는 영향 이해

언리얼 엔진의 환경 설정들은 그림자·조명·후처리 등 서로 다른 패스와 메모리에 영향을 미치며, 전반적인 시각적 품질과 성능의 트레이드오프(Trade-off) 관계에 있습니다.

  • 높은 품질 = 높은 성능 비용: 해상도·샘플 수·가시 범위가 증가하면 비용이 커질 수 있지만, 증가율은 효과와 장면마다 다릅니다.
  • 플랫폼별 목표 설정: PC, 콘솔, 모바일 등 각 플랫폼의 하드웨어 성능을 고려하여 적절한 품질 설정을 목표로 해야 합니다.
  • 시각적 중요도 판단: 어떤 환경 효과가 게임의 핵심적인 미학을 위해 필수적이고, 어떤 효과는 성능을 위해 희생할 수 있는지 판단해야 합니다.

주요 환경 설정과 성능 영향 분석

언리얼 엔진에서 주로 Post Process Volume, Directional Light, Sky Light, Exponential Height Fog 등의 액터를 통해 조정되는 주요 환경 설정들을 살펴봅니다.

포스트 프로세싱 (Post Processing) 최적화

  • 역할: 화면에 최종적으로 렌더링된 이미지에 다양한 시각 효과를 적용하는 단계입니다. (블룸, 앰비언트 오클루전, 스크린 스페이스 리플렉션 등)
  • 성능 영향: 주요 GPU 비용 후보이며, 화면 해상도와 효과 구현에 따라 비용이 달라집니다. 모든 장면에서 가장 큰 병목인 것은 아닙니다.
  • 분석 도구: ProfileGPU 명령어를 사용하여 PostProcess 항목의 상세 비용을 확인합니다.
  • 최적화 전략
    • 불필요한 효과 비활성화: 사용하지 않거나 눈에 띄지 않는 포스트 프로세싱 효과는 과감히 비활성화합니다.
    • 품질 설정 조정: 품질·해상도·샘플 수처럼 계산량을 바꾸는 설정을 먼저 비교합니다. Intensity, AO의 Power 등 외형 설정만 낮추면 같은 패스가 계속 실행될 수 있습니다.
    • 블룸(Bloom): Intensity와 Threshold는 외형을 맞추는 값입니다. 비용 절감은 블룸 방식·품질 또는 비활성화 전후 측정으로 판단합니다.
    • 피사계 심도(Depth of Field): 초점 거리와 조리개는 연출을 결정합니다. 비용은 DoF 품질·해상도와 흐림 영역을 함께 측정하며, 초점 거리 변경 자체를 최적화로 보지 않습니다.
    • 렌즈 플레어(Lens Flare): 필요 없으면 비활성화합니다.

그림자 (Shadows)

  • 역할: 오브젝트에 사실적인 그림자를 드리워 공간감과 깊이감을 더합니다.
  • 성능 영향: 광원 계산과 함께 GPU 부하의 주요 원인입니다. 특히 Movable 광원의 동적 그림자는 실시간으로 섀도우 맵을 렌더링해야 하므로 매우 비쌉니다.
  • 분석 도구: ProfileGPU 또는 GPU 트레이스에서 사용 중인 그림자 방식의 패스 시간을 확인합니다.
  • 최적화 전략
    • 모빌리티 설정: 사전 계산 조명을 쓰는 프로젝트에서는 Static/Stationary를 검토합니다. Stationary에도 동적 그림자 비용이 남으며, Lumen GI는 정적 라이트맵 GI를 사용하지 않습니다.
    • 그림자 해상도: 기존 Shadow Maps는 광원별 해상도 설정을, VSM은 해당 품질·페이지·캐시 지표를 확인합니다. 설정 적용 범위와 실제 비용을 먼저 확인합니다.
    • 그림자 거리: CSM을 사용하는 Directional Light에서는 Dynamic Shadow Distance를 조절합니다. 거리 밖 그림자 방식과 VSM 사용 여부를 함께 확인합니다.
    • 그림자 캐스케이드: CSM에서는 캐스케이드 수를 줄여 비용과 전환 품질을 비교합니다. VSM에는 이 설정을 그대로 적용하지 않습니다.
    • Shadow Quality 설정: Engine Scalability의 Shadow 품질과 프로젝트의 그림자 방식을 함께 확인합니다.

광원 (Lights)

  • 역할: 레벨에 빛을 부여하고 분위기를 조성합니다.
  • 성능 영향: 동적 광원(Movable)의 수와 광원당 영향을 미치는 범위(Attenuation Radius)가 넓을수록 GPU 부하가 커집니다. 각 픽셀에 영향을 미치는 광원 수가 많아질수록 비용이 증가합니다.
  • 분석 도구: Light Complexity 뷰 모드를 사용하여 표면에 영향을 주는 비정적 광원 수를 확인합니다. 실제 시간은 ProfileGPU의 해당 조명 패스에서 확인합니다.
  • 최적화 전략
    • 모빌리티 설정: 프로젝트의 라이트맵 또는 동적 조명 경로에 맞는 Mobility를 선택합니다.
    • 광원 수 제한: 동적 광원의 수를 최소화합니다.
    • 감쇠 반경 (Attenuation Radius): 광원의 Attenuation Radius를 필요한 범위만큼만 작게 설정하여 불필요하게 넓은 영역에 영향을 미치지 않도록 합니다.
    • 빛 투과 비용: Light Function이나 IES Profile과 같은 복잡한 빛 투과 효과는 연산 비용이 있으므로 신중하게 사용합니다.

안개 (Fog) 운용 체크

  • 역할: 공간감, 깊이감, 그리고 분위기를 조성합니다.
  • 성능 영향: Exponential Height Fog는 기본적으로 비교적 효율적이지만, Volumetric Fog (체적 안개)는 GPU 부하가 매우 큽니다.
  • 분석 도구: ProfileGPU에서 Volumetric Fog 또는 Exponential Height Fog 관련 비용을 확인합니다.
  • 최적화 전략
    • Exponential Height Fog 사용: 대부분의 경우 이 액터로 충분하며, 성능 효율적입니다.
    • Volumetric Fog 사용 제한
      • 필요한 경우에 활성화하고, Shadow Scalability가 제어하는 볼륨 해상도를 비교합니다. Scattering Distribution과 Extinction Scale은 산란 방향·밀도 설정이지 품질 단계가 아닙니다.
      • View Distance로 범위를 정하고 r.VolumetricFog.GridSizeZ 등 그리드 설정은 품질·비용을 측정해 조절합니다. 거리 변경과 해상도 변경을 구분합니다.

반사 (Reflections)

  • 역할: 표면에 주변 환경이 반사되는 효과를 구현하여 현실감을 높입니다.
  • 성능 영향: Screen Space Reflections (SSR)은 GPU 비용이 크고, Reflection Capture Actors (리플렉션 캡처 액터)는 라이트맵과 비슷하게 빌드 시간이 필요하지만 런타임 비용은 적습니다.
  • 분석 도구: ProfileGPU에서 SSR 또는 Reflection Capture 관련 비용을 확인합니다.
  • 최적화 전략
    • Reflection Capture Actors 사용: 정적인 환경의 반사에는 Box Reflection Capture 또는 Sphere Reflection Capture를 사용하여 미리 반사 정보를 캡처합니다.
    • Screen Space Reflections 설정: Post Process Volume에서 Screen Space Reflections의 Intensity를 낮추거나, Max Roughness를 낮추면 더 매끄러운 표면까지만 SSR이 기여하므로 비용을 줄일 수 있습니다. SSR Quality도 조정합니다.
    • Planar Reflections 사용 제한: 매우 정확한 반사(물 표면)에 사용되지만, 반사 방향에서 장면을 추가 렌더링하므로 비용이 큽니다. 총 프레임 시간이 반드시 두 배가 되는 것은 아닙니다. 극도로 제한적으로 사용하거나 비활성화합니다.

목표 FPS와 예산

한 프레임의 시간은 1000 ÷ 목표 FPS로 계산합니다. 60FPS는 약 16.7ms, 45FPS는 22.2ms, 30FPS는 33.3ms입니다. 이 수치만으로 조명·안개 프리셋을 정하지 말고, CPU와 GPU가 겹쳐 진행된다는 점을 고려해 각 축의 병목과 여유를 측정합니다.

대표 실내·야외·전투 장면의 캡처를 저장하고, 효과별 비용과 하위 사양의 프레임 분포를 함께 기록합니다.


전반적인 환경 설정 최적화 전략

  • 프로젝트 세팅 (Project Settings): 편집(Edit) > 프로젝트 세팅(Project Settings)에서 Engine > Rendering, Engine > Physics, Engine > Input 등 전역 설정을 조정해 게임 전체 품질과 성능을 제어할 수 있습니다. (예: Frame Rate, View Distance Scale, Anti-Aliasing Method, Motion Blur)
  • 퀄리티 스케일러블리티 (Scalability): 언리얼 엔진은 Scalability Settings (확장성 설정)을 통해 Low/Medium/High/Epic/Cinematic 등 미리 정의된 품질 프리셋을 제공합니다. 이는 콘솔 명령어 (sg.ResolutionQuality, sg.ViewDistanceQuality 등)를 통해 조절할 수 있습니다.
    • 활용: 플레이어가 게임 내 옵션 메뉴에서 그래픽 품질을 조절할 수 있도록 이러한 확장성 설정을 활용합니다.
  • 지속적인 프로파일링: 개발 과정 내내 Stat 명령어와 ProfileGPU를 사용하여 성능을 모니터링하고, 변경 사항이 성능에 어떤 영향을 미치는지 항상 확인합니다.

프로젝트 규모별 Nanite/Lumen/World Partition 선택 가이드

환경 설정은 품질을 높일수록 GPU와 CPU 비용이 함께 늘어날 수 있습니다.

최신 기능 여부나 프로젝트 크기만으로 적용을 결정하지 않습니다.

기능도입 전 확인할 조건
Nanite대상 RHI·플랫폼과 메시 기능 지원, 머티리얼·픽셀·그림자 비용
Lumen동적 GI·반사의 필요성, 대상 장치의 지원과 GPU 예산, 대체 조명 경로
World Partition월드 크기, 스트리밍 셀·로드 소스, 협업·빌드 방식
VSM동적 그림자 품질, 페이지·캐시 비용, 대상 플랫폼 지원
선택 순서
  1. 목표 플랫폼의 최소 사양을 먼저 확정합니다.
  2. Lumen을 켠 상태/끈 상태의 GPU 프레임 비용을 비교합니다.
  3. 폴리곤 밀도가 높은 환경에서 Nanite 적용 전후 메모리/프레임을 비교합니다.
  4. 맵 규모가 크고 협업 인원이 많다면 World Partition 도입 여부를 먼저 결정합니다.
  5. 목표 프레임 분포와 플레이 가독성 기준을 함께 통과하는 설정을 선택합니다.

운영 검토 포인트

환경 옵션은 기능을 많이 켠다보다 타깃 하드웨어에서 프레임 안정성을 확보한다는 기준으로 선택해야 합니다.

특히 Lumen, Nanite, World Partition은 프로젝트 규모와 팀 파이프라인에 맞춰 선택적으로 적용하고, GPU 시간뿐 아니라 CPU·상주 메모리·스트리밍 지연도 측정해 결정합니다.

품질 옵션을 낮췄을 때도 플레이 가독성과 연출 의도가 유지되는지 확인한 뒤, 최종 설정을 기술 문서에 고정하면 운영 단계의 설정 드리프트를 줄일 수 있습니다.