안동민 개발노트 아이콘

안동민 개발노트

5장 : 조명과 그림자 설정

조명과 그림자의 디버깅

광원, GI, 반사까지 적용했다면 이제 실제로 자주 마주치는 문제를 해결할 단계입니다.

조명 시스템은 설정 항목이 많아 작은 값 하나만 틀려도 그림자 깨짐, 빛샘, 과다 노출, 비정상 암부 같은 문제가 쉽게 발생합니다. 이 문제를 빠르게 진단하지 못하면 레벨 품질과 작업 속도가 동시에 떨어집니다.

이번 절에서는 조명/그림자 디버깅(Debugging) 절차를 단계적으로 다룹니다. 시각화 모드와 콘솔 명령어를 조합해 문제 원인을 빠르게 좁히는 것이 목표입니다.


조명 및 그림자 문제의 일반적인 유형

조명과 그림자의 디버깅에서 에디터 설정, 월드 상태, 실행 결과를 정리한 것입니다.

조명과 그림자 관련 문제는 주로 다음과 같은 형태로 나타납니다.

  • 라이트맵 문제
    • 검은 오브젝트 / 검은 영역: 라이트맵 UV가 겹치거나, 라이트맵 해상도가 너무 낮거나, 라이트 빌드에 실패했을 때 발생할 수 있습니다.
    • 빛샘 (Light Leaks): 오브젝트 사이에 틈이 있거나, 라이트매스 샘플링이 부족할 때 빛이 새어 나옵니다.
    • 계단 현상 (Stair-stepping): 그림자가 매끄럽지 않고 계단처럼 끊겨 보이는 현상으로, 라이트맵 해상도나 그림자 설정 문제일 수 있습니다.
    • 그림자 깨짐 / 아티팩트: 라이트매스 설정이나 메시의 문제로 그림자가 부자연스럽게 깨져 보입니다.
  • 실시간 그림자 문제
    • 그림자 얼룩덜룩함 / 플리커링: 그림자 해상도가 낮거나, 그림자 맵 캐스케이드(CSM) 설정이 부적절할 때 발생합니다.
    • 피터 패닝 (Peter Panning): 오브젝트가 공중에 떠 있는 것처럼 그림자와 분리되어 보이는 현상으로, 그림자 바이어스(Bias) 설정이 원인입니다.
  • 간접광 문제
    • 과도한 간접광 / 부족한 간접광: Sky Light의 강도, Lightmass 설정 등이 부적절할 때 발생합니다.
    • 색 번짐 (Color Bleeding): 특정 색상의 오브젝트가 주변에 과도하게 색을 반사할 때 발생합니다.
  • 노출 문제
    • 장면이 너무 밝거나 어두움: 포스트 프로세스 볼륨의 노출(Exposure) 설정이 부적절하거나, 조명 강도가 잘못되었을 때 발생합니다.

뷰포트 시각화 모드 활용

언리얼 에디터의 뷰포트는 다양한 시각화 모드를 제공하여 조명 및 그림자 문제를 시각적으로 진단하는 데 큰 도움을 줍니다.

시각화 모드를 탐색해보겠습니다. 뷰포트 좌측 상단의 뷰 모드(View Mode) 드롭다운 메뉴를 클릭합니다. (기본적으로 Lit으로 설정되어 있습니다.)

Lighting Only (조명만)

  • 용도: 레벨의 순수한 조명 정보를 확인합니다. 재질의 색상이나 텍스처 없이, 빛과 그림자만으로 레벨이 어떻게 보이는지 확인할 수 있습니다.
  • 확인 사항: 특정 오브젝트가 예상보다 어둡거나 밝은지, 그림자가 올바르게 드리워지는지 등을 빠르게 파악할 수 있습니다.

Lit (기본)

  • 용도: 모든 조명, 재질, 텍스처, 후처리 효과가 적용된 최종 렌더링 화면을 보여줍니다.
  • 확인 사항: 일반적으로 가장 많이 사용하는 모드지만, 문제의 원인을 파악하기는 어렵습니다.

Detail Lighting (디테일 조명)

  • 용도: 조명 정보만을 재질의 디테일과 함께 보여줍니다. Lighting Only 모드보다 약간 더 재질의 질감을 살려 보여주지만, 재질의 기본 색상은 회색으로 통일됩니다.
  • 확인 사항: 오브젝트의 법선 맵(Normal Map)이 조명에 어떻게 반응하는지, 작은 그림자들이 잘 표현되는지 등을 확인하기 좋습니다.

Lightmap Density (라이트맵 밀도)

  • 용도: Static 조명 문제 진단에 매우 중요합니다. 오브젝트에 적용된 라이트맵의 밀도를 색상으로 시각화하여 보여줍니다.
  • 확인 사항
    • 초록색: 적절한 밀도 (최적).
    • 빨간색: 밀도가 너무 높음 (성능 저하).
    • 파란색: 밀도가 너무 낮음 (그림자 품질 저하, 계단 현상 발생 가능).
  • 해결책: 파란색으로 표시되는 오브젝트는 라이트맵 해상도(Lightmap Resolution) 값을 높여주거나, 라이트맵 UV가 적절한지 확인해야 합니다. 빨간색은 낮춥니다.
    • 스태틱 메시 에디터에서 조절: 에셋을 더블클릭하여 에디터를 열고, 디테일 패널의 Static Mesh Settings 섹션에서 Overridden Light Map Res 값을 조절합니다.

Optimizer View Modes (최적화 뷰 모드)

  • Light Complexity (조명 복잡도): 특정 픽셀에 영향을 미치는 동적 조명의 수를 색상으로 보여줍니다. (녹색: 낮음, 빨간색: 높음)
    • 확인 사항: 빨간색 영역이 많다면 해당 지역의 동적 조명(Stationary, Movable) 수를 줄이거나, Attenuation Radius를 조절해야 합니다.
  • Shader Complexity (셰이더 복잡도): 재질 셰이더의 복잡도를 색상으로 보여줍니다. (녹색: 낮음, 빨간색: 높음) 확인 사항: 빨간색 영역이 많다면 해당 재질의 셰이더 노드를 최적화하거나, 더 간단한 재질로 교체하는 것을 고려해야 합니다.

콘솔 명령어 활용

언리얼 엔진의 콘솔 명령어는 런타임에 다양한 렌더링 옵션을 조절하여 문제를 진단하는 데 매우 유용합니다.

콘솔 열기: 게임 플레이(PIE) 중이거나 에디터 뷰포트에서 ~ (틸드) 또는 ' (작은따옴표) 키를 눌러 콘솔을 엽니다.

그림자 관련 명령어

  • r.Shadow.DistanceScale [값]: 동적 그림자가 렌더링되는 최대 거리를 조절합니다. (기본값 1.0) 값을 줄이면 그림자가 더 가까운 거리에서 잘려나가 성능을 향상시키지만 시각적 품질이 저하될 수 있습니다.
  • r.Shadow.MaxCSMResolution [값]: 캐스케이드 그림자 맵(CSM)의 최대 해상도를 조절합니다. (기본값 2048) 값이 낮을수록 성능이 향상되지만 그림자 품질이 저하됩니다.
  • r.Shadow.CSM.MaxCascades [값]: 캐스케이드 그림자 맵의 캐스케이드 수를 조절합니다. (기본값 4) 수가 많을수록 먼 거리 그림자 품질이 좋지만 성능 부하가 큽니다.
  • r.Shadow.Bias [값]: 그림자 바이어스를 조절하여 피터 패닝(Peter Panning) 현상을 완화합니다. 값이 너무 낮으면 그림자가 오브젝트 내부로 파고들고, 너무 높으면 오브젝트에서 떨어져 보이는 현상이 발생합니다.

조명 관련 명령어

  • r.LightFunction [0/1]: 라이트 함수(Light Function)의 렌더링을 켜거나 끕니다. (예: 깜빡이는 조명, 투영되는 그림)
  • r.Exposure.Set [값]: 수동으로 노출을 조절하여 레벨의 밝기를 테스트합니다.
  • ShowFlag.AmbientOcclusion [0/1]: 앰비언트 오클루전 효과를 켜거나 끕니다.
  • ShowFlag.ReflectionEnvironment [0/1]: 반사 환경(Reflection Capture) 효과를 켜거나 끕니다.

일반 디버깅 명령어

  • Stat FPS: 현재 프레임 속도(FPS)를 표시합니다.
  • Stat Unit: CPU 및 GPU 시간 등 성능 통계를 표시합니다. 조명 관련 병목 현상을 파악하는 데 유용합니다.
  • ProfileGPU: GPU 프로파일러를 열어 GPU 렌더링 과정에서 어떤 부분이 시간을 많이 소요하는지 상세하게 분석할 수 있습니다.

문제 해결을 위한 단계별 접근

문제 진단
  • 어떤 유형의 문제인가? (라이트맵, 실시간 그림자, GI, 노출 등)
  • 문제는 특정 오브젝트에만 발생하는가, 아니면 레벨 전체에 걸쳐 발생하는가?
  • 문제는 Static 조명에서 발생하는가, Movable 조명에서 발생하는가?

시각화 모드 활용: 위에서 설명한 Lightmap Density, Light Complexity 등의 뷰 모드를 사용하여 문제의 원인을 시각적으로 확인합니다.

설정 조정
  • 라이트맵 문제: 해당 스태틱 메시의 Lightmap Resolution을 조정하고, 라이트맵 UV가 겹치지 않는지 확인합니다. World SettingsLightmass 품질 설정을 높여봅니다. 반드시 다시 라이트 빌드를 수행합니다.
  • 실시간 그림자 문제: 광원의 Dynamic Shadow Distance, Num Cascades, Shadow Bias 등을 조절합니다.
  • GI 문제: Sky LightIntensity, World SettingsLightmass 설정(Num Indirect Lighting Bounces, Quality)을 조정하고 라이트 빌드를 다시 수행합니다. (UE5의 Lumen 사용 시 Post Process Volume의 Lumen 설정 확인)
  • 노출 문제: Post Process VolumeExposure 설정을 조정합니다.

반복 및 테스트: 설정을 변경할 때마다 레벨을 플레이하거나 빌드하여 변경 사항이 문제 해결에 도움이 되었는지 확인합니다. 성능 변화도 함께 주시합니다.

콘솔 명령어 활용: 미세 조정이나 빠른 테스트를 위해 콘솔 명령어를 활용합니다.

디버깅은 한 번에 모든 값을 바꾸기보다 증상, 시각화, 설정, 성능 확인 순서로 좁히면 훨씬 안정적입니다.

문제가 반복될 때는 증상별로 가장 먼저 확인할 보기 모드와 설정값을 정해두면, 팀원이 바뀌어도 같은 기준으로 원인을 좁힐 수 있습니다.


조명과 그림자 문제는 뷰포트 시각화 모드, 콘솔 명령어, GPU 프로파일링으로 원인을 나누어 확인합니다. 밝기, 그림자 품질, 라이트맵, 동적 조명 비용을 함께 점검해야 합니다.