루멘으로 리얼타임 글로벌 일루미네이션을 구현한 포트나이트 배틀로얄 챕터 4

그래픽 부문 엔지니어링 펠로우 Daniel Wright, 그래픽 부문 테크니컬 디렉터 Krzysztof Narkowicz |
2023년 1월 26일
안녕하세요. 루멘을 만들고 있는 엔지니어 대니얼 라이트(Daniel Wright)와 크지슈토프 나코비츠(Krzysztof Narkowicz)입니다. 루멘은 즉시 활성화할 수 있는 언리얼 엔진 5의 완전한 다이내믹 글로벌 일루미네이션 및 리플렉션 시스템입니다. 이번 블로그에서는 포트나이트 배틀로얄 챕터 4에서 루멘이 어떻게 작동하는지 알아보고, 팀이 챕터 4를 배포할 때 루멘에서 개선한 사항을 집중 조명합니다. 개선 사항은 언리얼 엔진 5.1에서 모든 개발자가 이용할 수 있습니다. 앞서 루멘을 소개하는 기술 블로그도 작성했는데, 시스템의 전반적인 개요를 살펴보고 싶다면 읽어 보시기 바랍니다.

Playstation 5, Xbox Series X, Xbox Series S용으로는 포트나이트 배틀로얄 챕터 4에 루멘이 활성화되어 배포됩니다. PC 및 클라우드 게임에서는 ‘글로벌 일루미네이션’ 퀄리티 세팅을 ‘높음’ 또는 ‘에픽’으로 설정할 경우 루멘이 활성화되며, 비디오 카드에서 지원하는 경우 하드웨어 레이 트레이싱을 사용하여 더 높은 퀄리티를 얻을 수도 있습니다.

포트나이트 배틀로얄 챕터 4의 루멘

챕터 4 이전까지 포트나이트는 차세대 콘솔에서도 언리얼 엔진 4의 다이내믹 라이팅만 이용할 수 있었습니다. 앰비언트 라이팅에는 디스턴스 필드 앰비언트 오클루전만 사용되었기 때문에 파란 스카이라이트가 건물 안으로 새어 들어와 인테리어가 차갑게 느껴졌었습니다. 챕터 4에서는 루멘이 글로벌 일루미네이션을 높은 퀄리티로 계산하여 따뜻한 햇빛 바운스와 디테일한 간접 섀도를 더합니다.
디스턴스 필드 앰비언트 오클루전 vs 루멘 글로벌 일루미네이션. 자동 노출은 루멘 GI와 함께 활성화됩니다.
글로벌 일루미네이션이 정확하게 작동하는 경우 실내 영역은 스카이라이트가 제대로 차단되기 때문에 실외에 비해 훨씬 어두워집니다. 따라서 자동 노출을 활성화해야 합니다.

이전 버전의 포트나이트에서는 차세대 콘솔의 리플렉션이 스크린 스페이스 리플렉션(Screen Space Reflections, SSR)으로 제한되었습니다. 이 이펙트는 화면에 있는 것만 반사했기 때문에 건물 안에 있을 때 스카이라이트 누수를 방지하기에는 부족했습니다. 또한 스크린 스페이스 리플렉션은 거울 표면에서만 좋은 결과를 제공하기 때문에 거친 표면에서의 반사 표현이 부족했습니다. 포트나이트 아티스트들은 이러한 제한을 실내에 사용된 머티리얼에 스페큘러를 거의 사용하지 않는 방법으로 우회해 작업했습니다! 루멘 리플렉션은 광택이 있는 표면에서 정확하게 레이 트레이스드 리플렉션을 제공하며, 실내에서도 금속과 매끄러운 머티리얼을 정확하게 렌더링합니다. 아티스트는 이제 라이팅에 대한 전체 머티리얼의 반응을 리얼타임으로 확인할 수 있습니다.
얼음 위의 스크린 스페이스 리플렉션 vs 루멘 리플렉션
루멘 리플렉션은 스크린 스페이스 리플렉션보다 훨씬 선명하고, 화면에 보이는 것을 반사하는 데 그치지 않기 때문에 물에도 많이 사용됩니다.
물 위의 스크린 스페이스 리플렉션 vs 루멘 리플렉션
포트나이트 배틀로얄에는 다이내믹 라이팅을 필요로 하는 게임 이벤트가 많습니다. 하루의 시간이 흐르고, 플레이어가 구조물을 만들거나 부술 수 있고, 문을 열 수도 있습니다. 루멘은 완전히 다이내믹하여 이러한 변화에 실시간으로 반응합니다. 루멘은 비용을 낮추기 위해 여러 프레임을 거쳐 분할 연산합니다. 이로 인해 발생할 수 있는 템포럴 누적 아티팩트는 포트나이트에서 목표로 하는 높은 프레임 레이트를 달성해 최소화합니다.

챕터 4를 향한 여정

언리얼 엔진 5.0 출시를 마무리한 뒤에는 포트나이트 배틀로얄 챕터 4에 주목했습니다. 포트나이트는 콘솔에서 최소 60fps를 목표로 하며, 이는 프레임당 16.67밀리초에 불과합니다. 격렬한 전투 도중에는 다이내믹 해상도와 게임플레이 비용을 위한 여분이 필요하므로 그보다 더 줄어듭니다. 원하는 렌더링 기능을 모두 고려하면 다이내믹 글로벌 일루미네이션 및 리플렉션에는 단 4밀리초밖에 남지 않습니다. 대단히 적은 예산입니다. AAA급 게임에서는 레이 트레이스드 리플렉션에만 4밀리초를 할당하는 것이 일반적입니다. 주어진 모든 최적화를 활용하면서 차세대 라이팅의 퀄리티가 저하되지 않도록 신경 썼습니다.

먼저 포트나이트 배틀로얄 챕터 4에 사용할 레이 트레이싱 메서드를 결정해야 했습니다. 이미 콘솔에서는 하드웨어 레이 트레이싱을 사용하여 루멘과 함께 매트릭스 어웨이큰스: 언리얼 엔진 5 익스피어리언스를 출시하면서 상당한 최적화를 달성한 적 있지만, 그 테크 데모의 예산은 30fps였습니다. 초기 테스트 후에 저희는 낮은 트레이싱 비용으로 인해 60fps를 달성하려면 루멘의 소프트웨어 레이 트레이싱이 필요하다고 판단했습니다. 그러나 소프트웨어 레이 트레이싱의 특징인 근사 추정적 방식 때문에 몇 가지 어려움이 발생합니다. 특히 폴리지 퀄리티와 물 리플렉션이 그렇습니다.

포트나이트 배틀로얄 챕터 4에는 숲이 있고, 잔디로 뒤덮인 구릉지가 있습니다. 저희가 루멘을 적용하여 출시했던 프로젝트 가운데 이만큼이나 폴리지가 많은 것은 없었기 때문에 이런 작업을 해 볼 기회가 없었습니다. 주된 문제 중 하나는 폴리지의 과도한 오클루전이었습니다.

루멘의 소프트웨어 레이 트레이싱은 글로벌 부호화 디스턴스 필드(Global Signed Distance Field)를 사용하여 씬의 표면을 나타냅니다. 부호화 디스턴스 필드는 불투명한 표면만 나타낼 수 있으며, 레이 마칭하면 바이너리 결과, 즉 히트 또는 미스가 제공됩니다. 이로 인해 군집으로 모델링된 폴리지 메시에서 매우 심한 오클루전이 나타납니다. 저희는 부호화 디스턴스 필드를 교차할 새로운 방법을 개발했습니다. 레이 마칭의 단계마다 교차 여부를 선택하는 방법입니다. 이는 확률적인 기법으로, 부호화 디스턴스 필드가 나머지 씬에 계속해서 잘 작동하도록 유지하면서 군집 지오메트리를 더욱 정확히 모델링할 수 있었습니다.
폴리지의 과도한 오클루전은 반투명 확률적 디스턴스 필드 인터섹션으로 해결했습니다.
비교적 해결하기 쉬운 문제도 있었습니다. 루멘은 소프트웨어 레이 트레이싱으로는 부족한 경우 씬에 디테일을 추가하기 위해 스크린 트레이스를 사용하지만, 잔디가 매우 디테일해서 스크린 트레이스가 상당한 에일리어싱을 일으켰습니다. 간단히 폴리지에서 스크린 트레이스의 히트를 생략하는 것만으로 이 아티팩트를 해결할 수 있었습니다.
스크린이 잔디를 트레이싱할 때 발생하는 심한 노이즈는 폴리지 히트를 생략하여 해결했습니다.
소프트웨어 레이 트레이싱의 또 한 가지 큰 문제는 리플렉션에서 나타나는 저해상도 표면 캐시 라이팅이었습니다. 루멘은 각 메시에서 상당한 고해상도 표면 캐시를 유지하여 레이 히트를 위한 라이팅을 효율적으로 제공하지만, 저희는 이를 훨씬 흐릿한 복셀화된 표현과 병합했습니다. 리버스 룩업 구조를 개발하여 레이 히트 시 메시별 표면 캐시를 직접 샘플링했고, 이를 통해 훨씬 정확한 이미시브 라이팅과 더 선명한 물 리플렉션을 얻었습니다.
스크린 트레이스는 시각화에서 비활성화하고, 레이가 루멘의 표면 캐시를 직접 샘플링할 때 소프트웨어 레이 트레이싱의 리플렉션이 더 선명합니다.
물 리플렉션의 경우, 루멘의 스크린 트레이스가 전경 오브젝트에 의해 방해를 받을 때마다 세로줄 무늬 아티팩트가 발생했습니다. 이는 움직이는 캐릭터에게 큰 방해가 됐습니다. 루멘의 스크린 트레이스는 오브젝트가 얼마나 두꺼운지 모르기 때문에, 나머지 레이에서는 종종 다른 색을 생성하는 소프트웨어 레이 트레이싱으로 전환해야 합니다. 훨씬 저렴하지만 정확성이 떨어지는 레이 교차 메서드인 스크린 스페이스 리플렉션에 비해서도 퇴보하는 것이었지만, 그 덕분에 전경 오브젝트 너머로 작업을 이어 나갈 수 있었습니다. 세로줄 무늬 문제는 소프트웨어 레이 트레이싱 히트에서도 스크린 컬러를 샘플링하여 불일치를 줄임으로써 해결할 수 있었습니다. 이 해결책은 정말로 출시 직전에 나왔기 때문에 UE 5.1 출시 버전에는 포함되지 않았습니다.
스크린 트레이스와 소프트웨어 레이 트레이싱 간의 불일치로 인한 세로줄 무늬는 레이 히트 시 스크린 컬러를 샘플링하여 최소화했습니다.
어떤 퀄리티 개선 사항은 예상치 못한 수확이었습니다. 루멘 GI는 4밀리초 예산에 맞추기 위해 강한 다운샘플링을 수행합니다. 이는 노이즈를 보다 두드러지게 하여 게임 경험에 방해가 됩니다. 저희는 NVIDIA의 스페이시오템포럴 블루 노이즈(Spatiotemporal Blue Noise)를 사용하여 노이즈를 크게 줄였습니다. 노이즈 패턴을 사전에 최적화하여 여러 프레임에서 누적됐을 때 빠르게 상쇄하는 기법입니다. 이를 통해 더 많은 빛을 추적하지 않고도 훨씬 깔끔한 간접광을 얻을 수 있었습니다.
스페이시오템포럴 블루 노이즈를 사용하면 문으로 들어오는 스카이라이트에 노이즈가 적어집니다.

아트 디렉션 제어

아티스트에게는 디렉셔널 라이트의 ‘간접광 강도’ 등 간접광을 아트 디렉션할 툴이 이미 있습니다. 포트나이트 아티스트 팀은 2.0 값을 사용하여 바운스 라이팅을 증폭하고 게임에 보다 따스한 느낌을 더했습니다. 하지만 실내 영역이 문제였습니다. 정확한 글로벌 일루미네이션을 사용하면 근처에 창문이나 광원이 없을 경우 지나치게 어두워졌습니다. 그로 인해 실내와 실외의 노출 차이가 굉장히 커졌습니다. 광원을 추가해서 이 문제를 해결할 수도 있지만, 그렇게 하면 섀도잉 비용이 늘어납니다.

저희는 루멘의 간접광을 제어할 새 방법을 개발했습니다. 포스트 프로세스 볼륨의 ‘스카이라이트 누수’와 ‘디퓨즈 컬러 부스트’입니다. ‘스카이라이트 누수’는 실내에 앰비언트 라이팅을 약간 추가하는 데 사용되며, ‘디퓨즈 컬러 부스트’는 여러 번 반사되는 간접광의 양을 증폭하는 데 사용됩니다. 두 옵션 모두 라이트를 추가하는 것과 달리 GPU 비용을 크게 높이지 않습니다. 포트나이트 아티스트들은 게임플레이 목적을 고려하여 실내 영역이 지나치게 어두워지지 않도록 스카이라이트 누수를 사용했습니다.
영역이 완전히 어두워지는 걸 방지하기 위해 스카이라이트 누수를 사용한 모습입니다.
정확한 글로벌 일루미네이션은 단일 노출값이 잘 작동하지 않는 고대비 라이팅을 생성합니다. 이미지에서 밝은 영역, 특히 하늘과 태양이 직접 비추는 모든 표면은 빛으로 인해 하얗게 타버리고, 어두운 영역은 노출이 부족해지는 현상이 발생합니다. 언리얼 엔진 5.0은 로컬 노출이라는 새 기능을 선보였습니다. 포트나이트 아티스트들은 이 기능을 사용하여 까다로운 하이 다이내믹 레인지 라이팅 조건에서 하이라이트 및 섀도 디테일을 보존할 수 있었습니다.
UE 5.0의 새로운 기능인 로컬 노출(Local Exposure)로 하이라이트와 섀도의 디테일도 보존됩니다. 루멘 사용 시 로컬 노출을 항상 설정해야 합니다.

퍼포먼스

루멘은 4K 출력을 위해 템포럴 업샘플링과 언리얼 엔진 5의 템포럴 슈퍼 해상도(Temporal Super Resolution, TSR)에 크게 의존합니다. 루멘을 완전히 더 낮은 퀄리티 세팅에서 4K 네이티브로 실행하기보단, 내부적으로 TSR을 사용하여 1080p로 렌더링하면 가장 좋은 최종 이미지 퀄리티를 얻을 수 있습니다.

루멘은 플랫폼의 디바이스 프로필에서 ‘글로벌 일루미네이션’ 및 ‘리플렉션’ 퀄리티 그룹을 ‘높음’으로 설정하여 차세대 콘솔에서 60fps를 목표하도록 환경설정할 수 있습니다.

; 루멘 GI 및 리플렉션 퀄리티를 높음으로 설정, 60fps 타기팅
+CVars=sg.GlobalIlluminationQuality=2
+CVars=sg.ReflectionQuality=2

루멘 글로벌 일루미네이션(Global Illumination, GI)의 다운샘플링 스케일은 일반적인 경우보다 훨씬 크기때문에 픽셀당 레이의 값이 16분의 1까지 줄어들 수 있습니다. 적은 수의 레이를 트레이싱할 때 간접광은 템포럴 안정성이 떨어지고 어두운 영역에서 노이즈가 눈에 띄게 됩니다. 스카이라이트 누수는 이 증가한 노이즈를 숨기는 데 유용한 툴입니다.
60fps 세팅 루멘 vs 30fps 세팅 루멘. 루멘은 30fps 세팅에서 작은 디테일을 더 잘 포착하고 템포럴 안정성이 훨씬 뛰어나지만, 스크린샷 비교에서는 잘 드러나지 않습니다.
포트나이트 배틀로얄 챕터 4를 만들 때는 루멘 GI를 여러모로 조금씩 최적화했지만, 전체 메서드를 비동기 연산 파이프라인으로 옮겼을 때는 0.8밀리초나 절감되며 속도가 가장 크게 향상되었습니다. 루멘에는 다양한 알고리즘을 위한 여러 연산 디스패치가 있으며, 그 사이사이에 GPU가 유휴 상태가 되는 시간이 잠깐씩이지만 누적되어 영향을 줄 수 있습니다.

또한 레이 트레이싱 디스패치에서는 일부 레이가 나머지보다 완료되는 데 오래 걸리면서 지연을 유발하는 경향이 있습니다. 이 작업을 비동기 연산 파이프라인으로 옮기면 GPU가 나머지 프레임 작업과의 격차를 메워 GPU의 프로세싱 기능을 더 잘 활용할 수 있습니다. 필요했던 수정 사항 중 일부가 UE 5.1 출시까지 완료되지 못했기 때문에, 비동기 루멘이 콘솔에서 디폴트로 활성화되는 것은 UE 5.2부터입니다.
루멘 작업은 이제 비동기 연산 파이프라인에서 처리되므로 GPU의 연산 성능을 더 잘 활용합니다.
루멘 리플렉션은 물을 제외한 곳들을 절반의 해상도로 렌더링하여 60fps 예산으로 스케일을 줄입니다. 루멘 GI가 거친 리플렉션을 만들어주지만, 선명한 리플렉션을 위해서는 루멘 리플렉션이 추가로 레이를 트레이싱해야 합니다. 리플렉션 비용은 리플렉션 레이가 필요할 정도로 매끄러운 머티리얼이 화면에 얼마나 많은지에 따라 크게 달라집니다. 1~2밀리초를 단축하는 주요 최적화 중 하나는 폴리지에서 리플렉션 레이를 더 자주 생략하는 것입니다. 폴리지는 베이스 패스와 섀도 뎁스에서 이미 비용이 많이 들며, 생략으로 인해 퀄리티가 눈에 띄게 낮아지지 않습니다.

Xbox Series S에는 특수한 과제가 있습니다. 테라플롭 GPU가 12개인 Xbox Series X와 달리 Series S에는 4개의 테라플롭 GPU가 있기 때문에 더 낮은 내부 해상도가 필요하지만 그것만으로는 부족합니다. 룩을 급격하게 바꾸는 디스턴스 필드 앰비언트 오클루전으로 되돌리고 싶지는 않았습니다. 그 대신 루멘 GI가 거친 리플렉션을 제공하는 모드를 개발했으며, 거울 리플렉션에는 스크린 스페이스 리플렉션을 사용했습니다. 그렇게 해서 루멘 리플렉션을 비활성화했을 때 1밀리초가 절감되면서도 스크린 스페이스 리플렉션만 사용할 때에 비해 보기 좋았습니다.
루멘 글로벌 일루미네이션은 엔진 퀄리티에서 루멘을 비활성화해도 거친 리플렉션을 제공합니다.
결국에는 차세대 콘솔에서 60fps 기준으로 루멘 GI와 리플렉션을 평균 비용 예산인 4밀리초에 성공적으로 맞출 수 있었습니다. 포트나이트 배틀로얄 챕터 4는 차세대 콘솔에서 4k의 55~60%에 해당하는 평균 내부 해상도를 달성하며 안정적으로 60fps로 실행됩니다.

퀄리티 최적화(Scaling down)

포트나이트는 다양한 플랫폼으로 배포되며 최상위 플랫폼에서만 루멘을 지원합니다. 게임 경험은 가능한 한 비슷해야 하며 아티스트가 플랫폼별로 라이팅을 다시 구성할 필요가 없어야 합니다. 저희는 ‘글로벌 일루미네이션’ 퀄리티 세팅에 따라 앰비언트 라이팅을 다음과 같이 최적화했습니다.

높음 및 에픽
  • 루멘이 활성화되어 완전한 글로벌 일루미네이션 제공
  • 루멘 스카이라이트 누수를 사용하여 어두운 영역이 완전히 까맣게 되지 않도록 방지
  • 자동 노출이 활성화되어 실내에 알맞은 노출 제공
  • 로컬 노출 활성화

중간
  • 대규모 AO에서 루멘 대신 디스턴스 필드 앰비언트 오클루전 활성화
  • 소규모 AO에서 스크린 스페이스 앰비언트 오클루전 활성화
  • 자동 노출 비활성화

낮음
  • 스카이라이트 섀도잉 안 함
  • 스카이라이트 섀도잉이 없으므로 중간 사양에 더 잘 맞도록 r.SkylightIntensityMultiplier=0.7로 스카이라이트 강도 완화

이번 포트나이트 배틀로얄 챕터 4의 루멘 개선 사항 요약이 유익하고 크로스 플랫폼 게임에서 루멘을 지원하여 배포하는 방법에 대한 질문에 답이 되었기를 바랍니다. 언리얼 엔진 개발자는 이미 언리얼 엔진 5.1에서 이러한 개선 사항 대부분을 이용할 수 있습니다. 자세한 내용은 루멘 문서를 참고하세요.

    지금 언리얼 엔진을 다운로드하세요!

    세계에서 가장 개방적이고 진보된 창작 툴을 받아보세요.
    모든 기능과 무료 소스 코드 액세스를 제공하는 언리얼 엔진은 제작에 바로 사용할 수 있습니다.