실시간 조명 및 사전 계산 조명
조명 디버깅까지 익혔다면, 이제 조명 처리 방식 자체를 선택해야 합니다.
이번 절에서는 실시간 조명(Real-time Lighting)과 사전 계산 조명(Precomputed Lighting)을 비교합니다. 두 방식은 품질, 유연성, 성능 비용에서 성격이 다르기 때문에 프로젝트 목표에 맞춰 조합해야 합니다.
즉, 이 절의 핵심은 기능 설명이 아니라 언제 어떤 방식을 선택할지 판단 기준입니다.
사전 계산 조명 / 베이크된 조명
사전 계산 조명(Precomputed Lighting)은 게임이나 콘텐츠가 실행되기 전에 에디터에서 조명 정보를 미리 계산하여 오브젝트에 저장하는 방식입니다. 언리얼 엔진에서는 주로 라이트매스(Lightmass) 시스템을 통해 구현됩니다.
사전 계산 조명 동작 원리
- 라이트 빌드: 에디터에서
Build Lighting과정을 통해 조명(특히Static및Stationary조명)의 직접광 및 간접광 정보를 계산합니다. - 라이트맵(Lightmap): 계산된 조명 정보는 주로
Lightmap이라는 텍스처에 저장됩니다. 각 스태틱 메시(Static Mesh)는 자신만의 라이트맵 UV 채널을 사용하여 이 텍스처를 참조합니다. - 버텍스 라이팅(Vertex Lighting): 매우 낮은 해상도의 오브젝트나, 라이트맵 사용이 비효율적인 경우 버텍스 단위로 조명 정보를 저장하기도 합니다.
사전 계산 조명 장점
뛰어난 성능 효율성: 조명 계산이 런타임에 거의 이루어지지 않으므로, 게임 실행 시 CPU 및 GPU 부하가 매우 낮습니다. 이는 특히 모바일이나 저사양 플랫폼에서 중요합니다.
고품질 간접광(Global Illumination): 라이트매스를 통해 복잡한 다중 반사 간접광(GI)을 매우 사실적이고 부드럽게 표현할 수 있습니다. 실시간 GI보다 훨씬 높은 품질을 적은 비용으로 구현할 수 있습니다.
부드러운 그림자: 미리 계산된 그림자는 계단 현상 없이 매우 부드럽고 사실적으로 보입니다.
사전 계산 조명 단점
정적인 환경에만 적합: 빛의 위치, 색상, 강도나, 빛에 영향을 받는 오브젝트의 위치가 런타임에 변하면 베이크된 조명과 그림자가 업데이트되지 않아 어색해집니다.
긴 빌드 시간: 레벨의 크기와 복잡도, GI 품질 설정에 따라 라이트 빌드 시간이 매우 오래 걸릴 수 있습니다.
메모리 사용: 라이트맵 텍스처가 저장되어야 하므로 추가적인 메모리를 사용합니다.
라이트맵 UV 필요: 모든 Static 메시에는 겹치지 않는(Non-overlapping) 라이트맵 UV 채널이 필수적입니다. (3장 4절 3D 모델 최적화 참고)
사전 계산 조명에 쓰는 액터
- Static (정적) 조명: 모든 빛과 그림자가 완전히 베이크됩니다.
- Stationary (정지) 조명: 간접광은 베이크되지만, 직접광의 그림자는 실시간으로 드리웁니다. (Static과 Real-time의 하이브리드)
실시간 조명 / 다이내믹 조명
실시간 조명(Real-time Lighting)은 게임이나 콘텐츠가 실행되는 동안 매 프레임마다 조명 정보를 계산하여 렌더링하는 방식입니다.
실시간 조명 동작 원리
- 쉐이더 계산: 오브젝트의 재질 쉐이더가 각 프레임마다 광원의 위치, 특성, 그리고 카메라 시점에 따라 빛과 그림자를 실시간으로 계산합니다.
- 그림자 맵 / 쉐도우 캐스케이드: 실시간 그림자는 주로 그림자 맵(Shadow Map)이나 캐스케이드 그림자 맵(Cascaded Shadow Maps, CSM)과 같은 기술을 사용하여 구현됩니다.
실시간 조명 장점
동적인 환경 지원: 빛의 위치, 색상, 강도가 실시간으로 변하거나, 오브젝트가 움직여도 조명과 그림자가 즉시 업데이트되어 매우 유연한 연출이 가능합니다. (예: 낮/밤 주기, 플레이어 손전등)
빌드 시간 불필요: 조명 빌드 과정이 없어 작업 흐름이 빠릅니다.
실시간 조명 단점
높은 성능 요구: 매 프레임마다 복잡한 조명 및 그림자 계산을 수행해야 하므로 CPU 및 GPU에 큰 부하를 줍니다. 많은 수의 실시간 조명은 프레임 속도를 크게 떨어뜨릴 수 있습니다.
간접광 표현의 어려움: 직접광은 쉽게 표현되지만, 빛의 다중 반사로 인한 사실적인 간접광(GI)은 구현하기 어렵거나, Lumen과 같은 고성능 실시간 GI 솔루션을 사용해야 합니다 (높은 사양 요구).
그림자 품질: 미리 계산된 그림자보다 품질이 떨어질 수 있습니다 (계단 현상, 필터링 문제 등). 이를 완화하기 위한 기술(CSM 등)도 성능 비용이 따릅니다.
실시간 조명에 쓰는 액터
- Movable (이동 가능) 조명: 모든 빛과 그림자가 완전히 실시간으로 계산됩니다.
하이브리드 조명 시스템 및 최적화 전략
실시간 조명 및 사전 계산 조명에서 에디터 설정, 월드 상태, 실행 결과를 정리한 것입니다.
대부분의 현대 게임은 사전 계산 조명과 실시간 조명을 조합한 하이브리드(Hybrid) 방식을 사용합니다.
각 조명 모빌리티의 역할 분담
-
Static (정적)
- 역할: 레벨의 기본 주변광과 정적인 오브젝트에 대한 간접광을 제공합니다.
- 활용: 건축물의 벽, 바닥, 천장 등 움직이지 않는 구조물, 고정된 환경 소품.
- 최적화: 가장 많이 사용되는 조명 모빌리티로, 성능 확보의 핵심입니다.
-
Stationary (정지)
- 역할: 레벨의 주요 광원(태양 등)으로, 베이크된 간접광과 실시간 다이내믹 그림자를 제공합니다.
- 활용: Directional Light, 레벨의 주요 포인트/스포트 라이트.
- 최적화: 레벨당 최대 4개의 겹치는 Stationary 라이트만 지원하므로, 이 수를 넘지 않도록 주의해야 합니다.
-
Movable (이동 가능)
- 역할: 플레이어의 손전등, 총구 화염, 폭발, 움직이는 차량 헤드라이트 등 런타임에 위치/강도가 변해야 하는 극히 일부 조명에만 사용합니다.
- 최적화: 최소한의 Movable 조명만 사용하고,
Attenuation Radius를 최대한 줄여 영향 범위를 제한합니다.
주요 최적화 팁 (재강조)
모빌리티 설정의 현명한 선택: 가능한 한 Static 조명을 많이 사용하고, 꼭 필요한 경우에만 Stationary나 Movable을 사용하세요.
라이트 빌드: Static 또는 Stationary 조명을 변경할 때마다 Build Lighting을 수행하여 최신 조명 정보를 레벨에 적용하고, 빌드 품질을 적절히 조절합니다.
라이트맵 UV 최적화: 모든 Static 메시가 적절한 라이트맵 UV 채널을 가지고 있는지, 겹치는 부분이 없는지 확인합니다. (3장 4절 3D 모델 최적화, 5장 4절 라이트맵 밀도 시각화 참고)
그림자 품질 vs 성능: Directional Light의 Dynamic Shadow Distance와 Num Cascades를 조절하여 그림자 품질과 성능 사이의 균형을 찾습니다. 불필요한 오브젝트의 Cast Shadows를 비활성화합니다.
Attenuation Radius 제한: Point Light 및 Spot Light의 Attenuation Radius를 필요한 만큼만 설정하여 오버랩되는 동적 조명의 수를 줄입니다.
Lumen (UE5): 언리얼 엔진 5를 사용하고 실시간 GI가 필수적이라면 Lumen을 고려하지만, 이는 높은 성능 요구사항이 따르므로 목표 플랫폼을 고려하여 결정해야 합니다.
프로젝트 전체 조명 전략은 정적 영역을 먼저 고정하고, 실시간 변화가 필요한 예외만 남기는 식으로 설계하면 관리가 쉬워집니다.
조명 모빌리티를 선택할 때는 품질만 보지 말고 빌드 시간, 메모리, 런타임 비용, 수정 빈도를 함께 비교해야 합니다.
실시간 조명과 사전 계산 조명은 언리얼 엔진 조명 시스템의 양대 산맥입니다. 이 두 가지 방식의 차이점을 명확히 이해하고, 여러분의 프로젝트 특성과 목표에 맞춰 어떤 조명 모빌리티를 선택하고 어떻게 조합할지 결정하는 것이 중요합니다. 효율적인 조명 설정은 시각적 품질을 극대화하면서도 게임의 안정적인 프레임 속도를 유지하는 데 결정적인 역할을 합니다.
실시간 조명 및 사전 계산 조명은 작업 장면, 성능 영향, 적용 범위, 검증 기준으로 점검합니다.
실시간 조명 및 사전 계산 조명에서 놓치기 쉬운 기준은 보충 점검 항목으로 다시 확인합니다.