글로벌 일루미네이션과 반사 설정
간접광과 반사 방식의 품질·변화 대응·성능 비용을 비교하고 장면과 목표 플랫폼에 맞는 조합을 설정합니다.
기본 광원과 그림자 설정을 마쳤다면, 이제 장면의 사실감을 크게 높이는 두 가지 요소로 넘어갑니다. 바로 글로벌 일루미네이션(Global Illumination, GI)과 반사(reflection)입니다. 직접광만 있는 장면은 빛이 닿지 않는 곳이 지나치게 어둡고, 금속이나 물 같은 표면이 주변을 비추지 않아 어딘가 비어 보입니다. 간접광과 반사는 이 빈자리를 채워 화면을 풍부하게 만들지만, 어떤 방식으로 계산하느냐에 따라 성능 비용이 크게 달라집니다.
이 글에서는 간접광을 계산하는 라이트매스(Lightmass), 스카이 라이트, 루멘(Lumen)의 특징을 비교하고, 반사를 만드는 화면 공간 반사, 반사 캡처, 루멘 반사를 차례로 살펴봅니다. 그다음 간단한 시험 레벨에서 두 가지를 직접 비교해 봅니다. 무조건 높은 품질이 아니라, 장면의 의도와 목표 플랫폼에 맞는 조합을 고르는 것이 핵심입니다.
글로벌 일루미네이션이란
글로벌 일루미네이션은 직접광이 물체에 부딪힌 뒤 튕겨 나와 주변을 간접적으로 밝히는 현상을 흉내 내는 기술입니다. 예를 들어 햇빛이 빨간 벽에 부딪히면, 그 벽에서 튕겨 나온 붉은빛이 옆의 흰 바닥을 은은하게 붉게 물들입니다. 실제 세계에서는 늘 일어나는 일이라, 이것이 빠지면 장면이 납작하고 인위적으로 보입니다. 언리얼 엔진은 이 간접광을 계산하는 방법을 여러 가지 제공하며, 방법마다 특징과 비용이 다릅니다.
라이트매스: 미리 굽는 간접광
라이트매스는 Static과 Stationary 광원에서 나오는 간접광을 에디터에서 미리 계산해 굽고, 라이트맵 텍스처에 저장하는 방식입니다. 간접광을 미리 계산해 두므로 실행 중의 계산이 줄어들지만, 라이트맵의 메모리와 읽어 오는 비용은 남습니다. 시간을 들여 계산하므로 매우 부드럽고 사실적인 간접광을 얻을 수 있습니다.
대신 레벨이 크거나 품질을 높일수록 빌드 시간이 매우 길어질 수 있습니다. 또 정적인 환경에만 맞습니다. 빛이나 물체가 실행 중에 움직이면 간접광이 갱신되지 않아, 옮겨진 물체 주변에 예전의 간접광이 그대로 남는 어색한 결과가 됩니다. 그래서 주로 정적인 실내나 움직이지 않는 야외 배경에 씁니다.
라이트매스의 품질은 Window 메뉴에서 연 World Settings의 Lightmass 항목에서 조절합니다. Static Lighting Level Scale은 간접광 계산의 전체 해상도로, 값이 작을수록 세밀하지만 빌드가 오래 걸립니다. Num Indirect Lighting Bounces는 빛이 몇 번 튕길지로, 값이 클수록 사실적이지만 빌드 시간이 늘어납니다. Indirect Lighting Quality는 간접광의 전체 품질이고, Indirect Lighting Smoothness는 간접광이 얼마나 부드럽게 퍼질지입니다.
스카이 라이트: 하늘에서 오는 환경광
스카이 라이트는 하늘 전체에서 들어오는 주변광을 흉내 내어 간접광을 표현합니다. 레벨의 하늘이나 큐브맵을 캡처해 주변광을 만들기 때문에, 간단하게 장면 전체에 주변광을 더해 그림자 속이 새까맣게 보이지 않게 합니다. Real Time Capture를 켜면 낮과 밤이 바뀌는 환경에서도 주변광이 실시간으로 갱신되지만, 그만큼 비용이 늘어납니다.
하지만 스카이 라이트만으로는 물체끼리 빛을 주고받는 효과, 예를 들어 빨간 벽이 흰 바닥을 붉게 비추는 효과는 표현하기 어렵습니다. 하늘에서 오는 빛만 다루기 때문입니다. 디테일 패널에서는 Intensity Scale로 밝기를, Source Type으로 SLS Captured Scene과 SLS Specified Cubemap 가운데 빛의 출처를 고릅니다. 하늘이나 큐브맵의 환경 조명이 필요할 때 쓰며, 모든 프로젝트에 꼭 있어야 하는 액터는 아닙니다.
루멘: 실시간 간접광과 반사
루멘은 언리얼 엔진 5에서 도입된, 완전히 동적인 실시간 글로벌 일루미네이션과 반사 시스템입니다. 광원이 움직이거나 장면이 바뀌면 그에 맞춰 간접광과 반사를 갱신합니다. 그래서 정적인 라이트맵보다 변화에 대응하기 쉽고, 라이트 빌드도 필요 없어 작업 속도가 빨라집니다.
다만 루멘 글로벌 일루미네이션을 쓰면 미리 계산한 정적 조명은 쓰이지 않습니다. 또 루멘은 계산 결과를 캐시에 저장해 두고 조금씩 갱신하므로, 조명이 크게 바뀌면 그 변화가 화면에 반영되기까지 약간 늦어질 수 있습니다. 최신 그래픽 카드와 높은 사양을 요구하고, 처음 설정하고 최적화하려면 동작 방식을 이해해야 합니다.
루멘은 Edit 메뉴의 Project Settings에서 Engine의 Rendering으로 가, 간접광 방식(Dynamic Global Illumination Method)과 반사 방식(Reflection Method)을 Lumen으로 정해 켭니다. 높은 품질의 실시간 렌더링이 필요한 게임과 건축 시각화, 영상 제작에 주로 씁니다. UE 5.8에는 루멘보다 가벼운 중간 품질의 글로벌 일루미네이션인 루멘 라이트(Lumen Lite)가 베타로 추가되었는데, 베타 기능이므로 쓰기 전에 그 버전의 릴리스 노트에서 지원 범위를 확인합니다.
더 깊이: 루멘은 광선을 무엇에 쏘는가
루멘 기술 세부 문서에 따르면 루멘은 먼저 화면에 그려진 정보를 대상으로 광선을 추적하는 화면 추적(screen tracing)을 하고, 맞은 곳을 찾지 못하거나 광선이 표면 뒤로 지나가면 더 신뢰할 수 있는 방법으로 넘어갑니다. 그 방법은 둘입니다. 하드웨어 레이 트레이싱은 실제 삼각형을 대상으로 추적해 품질이 높지만 지원하는 그래픽 카드가 필요하고, 소프트웨어 레이 트레이싱은 메시마다 만든 부호 있는 거리 필드(signed distance field)를 대상으로 추적해 더 많은 하드웨어에서 동작합니다. 소프트웨어 방식을 쓰려면 프로젝트 설정의 Generate Mesh Distance Fields가 켜져 있어야 합니다.
하드웨어 레이 트레이싱에서 맞은 지점의 조명을 직접 계산하도록 설정한 경우가 아니라면, 광선이 맞은 지점의 조명은 표면 캐시(Surface Cache)에서 찾아 씁니다. 루멘은 메시마다 여러 각도에서 재질의 속성을 캡처해 두는데, 이 캡처 위치를 카드(Card)라고 부르며 기본적으로 메시 하나에 12장까지 놓습니다. 카드가 덮지 못한 부분은 Surface Cache 뷰 모드에서 분홍색으로 보이고, 이런 곳은 빛을 튕기지 않으며 반사에서는 검게 보입니다. 그래서 문서는 벽과 바닥, 천장을 따로 된 메시로 만들라고 권하며, 가구까지 포함한 방 전체를 메시 하나로 가져오면 루멘에서 제대로 동작하지 않는다고 설명합니다.
표면 캐시의 조명은 여러 프레임에 나누어 갱신되므로, 조명이 크게 바뀐 직후에는 간접광이 따라오는 데 시간이 걸릴 수 있습니다. 또 소프트웨어 방식의 품질은 거리 필드가 형태를 얼마나 잘 나타내는지에 달려 있어서, 얇은 벽이나 창문 메시처럼 거리 필드로 잘 표현되지 않는 형태에서는 빛이 새어 들어올 수 있습니다.
반사 설정
반사는 금속, 유리, 물처럼 매끄러운 표면이 주변 환경을 비추는 현상입니다. 언리얼 엔진은 반사를 만드는 방법도 여러 가지 제공합니다.
화면 공간 반사
화면 공간 반사(Screen Space Reflections, SSR)는 지금 카메라에 보이는 화면의 픽셀 정보로 반사를 계산하는 방식입니다. 이미 그린 화면을 다시 쓰므로 비교적 효율적이고, 실시간으로 갱신됩니다.
그 대신 카메라에 보이지 않는 물체는 반사되지 않습니다. 화면 밖에 있거나 다른 물체에 가려진 것은 화면 정보에 없기 때문입니다. 그래서 바닥에 비친 물체가 카메라를 돌리면 갑자기 사라지는 일이 생기고, 반사의 품질도 완벽하지 않을 수 있습니다.
SSR은 후처리 볼륨에서 다룹니다. Post Process Volume의 디테일 패널에서 Reflections 항목의 방식(Method)을 Screen Space로 정하고, Screen Space Reflections의 Intensity와 Quality 같은 값을 조절합니다. SSR은 이 방식을 지원하는 렌더링 경로에서, 화면 정보만으로 반사가 충분한 표면에 씁니다. 루멘이 기본인 프로젝트에 일률적으로 SSR을 켜는 것은 아닙니다.
스피어와 박스 반사 캡처
반사 캡처(Reflection Capture)는 한 지점이나 영역에서 주변 환경을 큐브맵으로 캡처해 두고, 그 범위 안의 물체가 반사에 쓰게 하는 방식입니다. 한 점을 중심으로 구 모양 범위에 쓰는 것이 스피어 반사 캡처(Sphere Reflection Capture)이고, 상자 모양 영역에 쓰는 것이 박스 반사 캡처(Box Reflection Capture)입니다.
반사 캡처는 화면 밖의 물체도 캡처해 두므로 SSR의 약점을 보완하고, 미리 캡처한 결과를 쓰므로 실행 중의 비용이 낮습니다. 하지만 캡처한 순간의 정적인 반사만 보여 주므로, 물체가 움직이거나 빛이 바뀌면 반사가 갱신되지 않아 어색할 수 있습니다. 또 캡처 액터를 알맞은 위치에 놓아야 합니다.
반사 캡처는 툴바의 추가(Add) 메뉴에서 Visual Effects 아래의 Sphere Reflection Capture나 Box Reflection Capture를 골라 놓습니다. 놓은 뒤에는 디테일 패널에서 스피어의 Influence Radius나 박스의 크기와 전환 거리를 조절해 반사가 적용될 범위를 맞춥니다. 이때 반사가 적용되는 영향 범위와, 언제 캡처했는지를 구분해서 봅니다. 실내의 방이나 복도처럼 특정 영역의 반사를 개선할 때 씁니다.
하드웨어 레이 트레이싱과 루멘 반사
레이 트레이싱은 광선을 실제로 추적해 화면 밖의 지오메트리까지 반사에 담을 수 있어, SSR의 정보 한계를 보완합니다. 다만 지원하는 하드웨어가 필요하고, 장면을 갱신하는 비용도 확인해야 합니다. UE4의 독립된 레이 트레이싱 반사(Ray Traced Reflections) 설정은 UE5에서 더 이상 권장되지 않는 경로이므로, 새 UE5 프로젝트에서는 루멘 반사의 지원 경로를 확인합니다.
하드웨어 레이 트레이싱을 쓰려면 프로젝트 설정의 Support Hardware Ray Tracing과 Use Hardware Ray Tracing when available이 켜져 있고, 대상 GPU와 렌더링 API가 지원해야 합니다. 루멘의 Ray Lighting Mode를 Hit Lighting for Reflections로 정하면, 반사 광선이 닿은 지점에서 조명을 직접 계산해 반사의 품질이 좋아지지만 장면과 설정에 따라 비용이 늘어납니다.
또 루멘의 간접광과 반사는 별개의 기능입니다. 루멘 글로벌 일루미네이션을 끄고 미리 구운 조명을 쓰면서 루멘 반사만 함께 쓰는 경로도 있는데, 이 조합에는 루멘의 하드웨어 레이 트레이싱이 필요합니다. 그래서 간접광 방식과 반사 방식을 같은 기능으로 취급하지 않습니다.
시험 레벨에서 비교해 보기
아래의 라이트매스 실습은 정적 조명을 허용하고 루멘 글로벌 일루미네이션을 끈 시험 레벨을 전제로 합니다. 지금 프로젝트의 설정을 먼저 확인하고, 미리 굽는 조명과 루멘을 비교할 때는 두 상태를 따로 기록합니다.
간접광 굽기
먼저 File 메뉴의 New Level에서 Basic을 골라 레벨을 만듭니다. 템플릿에 들어 있는 액터는 버전에 따라 다르므로, 디렉셔널 라이트와 스카이 라이트, 후처리 볼륨이 있는지와 각각의 이동성을 먼저 확인합니다. 그다음 큐브나 구, 색이 다른 재질을 입힌 스태틱 메시를 몇 개 배치해 빛이 튕기는 모습을 보기 좋게 만듭니다. 예를 들어 빨간색 큐브를 흰색 바닥 옆에 둡니다.
Build 메뉴의 Build Lighting Only로 라이트 빌드를 실행한 뒤, 빨간색 큐브 옆의 흰색 바닥을 봅니다. 바닥에 붉은빛이 은은하게 비친다면, 그것이 라이트매스가 계산한 간접광입니다.
이어서 Window 메뉴에서 World Settings를 열고 Lightmass 항목의 값을 바꿔 봅니다. Num Indirect Lighting Bounces를 1로 줄이고 다시 빌드해 간접광이 어떻게 달라지는지 보고, Indirect Lighting Quality를 높이고 다시 빌드해 간접광의 부드러움과 품질을 비교합니다. 빛이 튕기는 횟수에 따른 변화는 재질과 장면에 따라 다르고, 품질을 높이면 빌드 시간이 길어질 수 있습니다.
반사 비교하기
추가(Add) 메뉴의 Visual Effects에서 Sphere Reflection Capture를 골라 레벨 가운데에 놓습니다. 반사 캡처를 갱신하고 영향 반경을 조절하며, 주변 물체의 반사가 어떻게 바뀌는지 봅니다. 특히 금속 재질이나 유리 재질에 반사가 어떻게 나타나는지 확인합니다.
그다음 레벨의 Post Process Volume을 선택하고, 디테일 패널의 Reflections 항목에서 방식을 Screen Space로 정한 뒤 Intensity를 높여 반사의 강도를 조절합니다. 루멘과 비교하고 싶다면, 지원 조건을 확인한 별도의 설정에서 간접광과 반사 방식을 Lumen으로 바꾸고 동적 광원으로 살펴봅니다. 이때 앞에서 구운 정적 조명이 그대로 함께 더해진다고 생각하지 않습니다. 루멘 글로벌 일루미네이션을 켜면 구운 조명은 쓰이지 않기 때문입니다.
반사가 사라질 때 원인 가르기
SSR을 쓰는 시험 장면에서 반사되던 물체를 카메라 가장자리 밖으로 옮겨 봅니다. 물체는 장면에 그대로 있어도 화면 정보에서 사라지므로 반사가 끊길 수 있습니다. 같은 곳에 반사 캡처가 영향을 주고 있다면 캡처해 둔 모습이 남아 보일 수 있지만, 그것은 지금의 움직임을 추적한 결과가 아니라 캡처한 순간의 모습입니다.
그래서 반사를 살펴볼 때는 먼저 SSR, 반사 캡처, 루멘 가운데 어떤 반사 방식이 켜져 있는지를 적습니다. 그리고 반사에서 빠진 물체가 화면 밖에 있는지, 캡처한 뒤에 움직였는지, 지금의 추적 방식이 그 지오메트리를 지원하는지를 나눠 봅니다. 이렇게 원인을 가르면 품질 설정을 무작정 올리지 않아도 됩니다.
정리
- 글로벌 일루미네이션은 직접광이 튕겨 주변을 밝히는 간접광을 흉내 내며, 이것이 없으면 장면이 납작하게 보입니다.
- 라이트매스는 간접광을 라이트맵에 미리 구워 품질이 높지만 빌드 시간이 들고 실행 중의 변화를 반영하지 못하며, 품질은 World Settings의 Lightmass에서 정합니다.
- 스카이 라이트는 하늘의 주변광을 더하지만 물체끼리 빛을 주고받는 효과는 표현하기 어렵습니다.
- 루멘은 실시간으로 간접광과 반사를 갱신하고 빌드가 필요 없지만, 켜면 미리 계산한 정적 조명이 쓰이지 않고 큰 변화의 반영이 조금 늦을 수 있습니다.
- SSR은 효율적이지만 화면에 없는 것은 반사하지 못하고, 반사 캡처는 화면 밖도 담지만 캡처한 순간의 정적인 반사입니다.
- 하드웨어 레이 트레이싱 반사는 UE5에서 루멘 반사 경로로 확인하며, 루멘의 간접광과 반사는 별개의 기능입니다.
- 반사가 사라지면 어떤 반사 방식이 켜져 있는지부터 적고, 화면 밖인지, 캡처 뒤에 움직였는지, 지원하는 지오메트리인지를 나눠 봅니다.
연습 문제
1. 품질을 올리면 해결될까
SSR을 쓰는 장면에서 카메라를 돌리자 바닥에 비친 기둥의 반사가 사라졌습니다. 기둥은 지금 카메라의 시야 밖에 있습니다. SSR의 Quality만 높이면 이 문제가 해결될까요?
해설 보기
해결되지 않습니다. SSR은 지금 화면에 있는 픽셀 정보로 반사를 계산하므로, 시야 밖의 기둥은 품질을 아무리 높여도 정보가 새로 생기지 않습니다.
먼저 화면 정보의 한계 때문인지 판단하고, 기둥이 움직이지 않는다면 그 영역에 반사 캡처를 두고, 움직이는 물체까지 반사해야 한다면 지원되는 루멘 반사 경로를 검토합니다.
2. 옮긴 상자 주변의 이상한 빛
라이트매스로 간접광을 구운 방에서, 게임 실행 중에 빨간 상자를 방의 반대쪽으로 옮겼습니다. 상자가 원래 있던 자리의 바닥에는 여전히 붉은빛이 남아 있고, 새로 옮긴 자리 주변은 붉게 물들지 않습니다. 왜 그럴까요?
해설 보기
라이트매스의 간접광은 빌드할 때 라이트맵에 구워진 것이라, 실행 중에는 다시 계산되지 않습니다. 원래 자리에 남은 붉은빛은 상자가 Static이던 때의 빌드에서 구워진 것입니다. 실행 중에 상자를 옮기려면 상자가 Movable이어야 하는데, Movable 물체는 라이트맵에 구워지지 않으므로 새 자리에는 붉은 간접광이 생기지 않습니다.
상자를 Movable로 바꿨다면 먼저 라이트 빌드를 다시 해 원래 자리에 남은 간접광을 지웁니다. 물체가 실행 중에 움직이며 주변을 물들이는 간접광까지 보여야 한다면 루멘처럼 간접광을 실시간으로 갱신하는 방식을 검토하거나, 움직이는 물체가 간접광에 주는 영향이 눈에 띄지 않도록 설계합니다.
3. 구운 조명과 루멘을 함께 쓰려다
미리 구운 조명이 있는 레벨에서, 반사를 좋게 하려고 간접광 방식과 반사 방식을 모두 Lumen으로 바꿨습니다. 그러자 구워 둔 부드러운 간접광이 사라진 것처럼 보입니다. 무엇이 일어난 걸까요? 구운 간접광을 지키면서 반사만 루멘으로 쓰려면 어떻게 해야 할까요?
해설 보기
루멘 글로벌 일루미네이션을 켜면 미리 계산한 정적 조명이 쓰이지 않으므로, 구워 둔 간접광 대신 루멘이 실시간으로 계산한 간접광이 보입니다.
구운 간접광을 지키려면 간접광 방식은 루멘이 아닌 방식으로 두고, 반사 방식만 Lumen으로 정하는 경로를 씁니다. 이 조합에는 루멘의 하드웨어 레이 트레이싱이 필요하므로, 프로젝트의 하드웨어 레이 트레이싱 설정과 대상 GPU의 지원을 먼저 확인합니다.
루멘의 간접광과 반사 설정은 Epic의 루멘 글로벌 일루미네이션과 반사 안내에서 확인할 수 있습니다.
다음 글 조명과 그림자의 디버깅에서는 조명과 그림자가 의도와 다르게 보일 때 뷰 모드와 시각화 도구로 원인을 찾는 방법을 다룹니다.