icon
5장 : 조명과 그림자 설정

조명과 그림자의 디버깅


이전 절들에서 언리얼 엔진의 다양한 광원, 글로벌 일루미네이션, 그리고 반사 설정에 대해 자세히 알아보았습니다. 이제 레벨에 화려한 빛을 더하고 사실적인 그림자를 드리우는 기술을 익히셨을 겁니다. 하지만 조명은 매우 복잡한 시스템이기에, 예상치 못한 문제(버그)가 발생하기 쉽습니다. 그림자가 깨지거나, 빛이 새거나, 텍스처가 검게 보이거나, 특정 오브젝트만 밝게 보이는 등의 현상을 마주할 수 있습니다.

이 절에서는 언리얼 엔진에서 조명과 그림자 문제를 진단하고 해결하는 디버깅(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 설정을 조정합니다.

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

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


조명과 그림자의 디버깅은 언리얼 엔진 개발 과정에서 피할 수 없는 부분입니다. 이 절에서 배운 뷰포트 시각화 모드와 콘솔 명령어를 적극적으로 활용하여, 여러분의 레벨에 발생하는 빛과 그림자 문제를 효과적으로 진단하고 해결하는 능력을 키우세요. 꾸준한 연습과 시행착오를 통해 여러분은 더욱 뛰어난 레벨 디자이너이자 최적화 전문가로 성장할 수 있을 것입니다.