본문으로 바로가기
반응형

https://www.docswell.com/s/EpicGamesJapan/5EV87K-UE5_Lumen101?fbclid=IwY2xjawINOzdleHRuA2FlbQIxMAABHWk-prDGeD2KP1GI-sW0CzTZeU64H1bv_2RZ9-qrFH9T2z6gdiDhGIUAxA_aem_PfZ9FR608yvwQNTpUCblBA#p1

 

Unreal Engine5 Lumenの仕組みと肝心なところ | ドクセル

 

www.docswell.com

 

Unreal Engine 5 Lumen의 구조와 중요한 부분
Epic Games Japan / Developer Relations Lead / Nori Shinoyama

언리얼 엔진 5에서 새로운 조명 시스템으로 Lumen이 도입되었습니다.

Next-Gen Visual - Lumen : 완전히 동적인 Global illumination Light도 world도 동적으로 변경가능 bake 없음, Lightmap UV 없음

 

Dynamic Global illumination 실현

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/lumen-global-illumination-and-reflections-in-unreal-engine?application_version=5.0

실외에서 실내까지 유연하게 대응 가능
Lighting from Emissive Materials
Reflection and Specular

 

  • Diffuse
    • Color Bleeding
    • Indirect Shadows
  • 무한(Infinite)의 Bounces
  • Shadows from Skylight
  • Indirect specular Reflection
    • Multi-Bounce Diffuse Reflection
  • Supported Platforms
    • PC/PS5/XSX, XSS
 

...어떻게? ··· 신경 써야 할 것은?

 

이 세션의 목표


기본 알고리즘을 이해하고 ...
● ProfileGPU 등으로 나오는 Lumen 관련 처리의 거친 이미지를 잡는다
● Debug View의 다양한 의미 이해
● Editor의 설정이 Lumen의 무엇을 설정하고 있습니까?
● Option : 유용하거나 알아야 할 Tips 소개

루멘의 드로잉 퀄리티와 퍼포먼스 체크의 확실히...

Lumen을 설정하는 방법 등은 공식 문서를. . .

 

 

비고

※ Lumen은 영상으로 본 분이 알기 쉬운 예가 많아, 동영상에의 링크로서 사시노야마의 Twitter에의 링크가 붙여지고 있습니다. Twitter를 하고 있지 않은 분도, 링크처에서 동영상을 보는 것이 가능하므로, 참고로 해 주시면 다행입니다.

 

 

목차

● GI 계산은 왜 무거운가?
● Lumen의 알고리즘 개요
● Lumen과 관련된 다양한 설정
● Lumen의 각종 TIps (URL 소개 전용)

 

GI 계산은 왜 무거운가?

조명은 크게 두가지로 나뉜다
직접광(Direct Lighting) 조명에서 직접(Direct) 조명 오브젝트에 닿은 이후 반사가 없기 때문에 그림자 부분은 까맣다.
어떤점의 라이트 결과를 알고 싶을때 라이트의 영향만 계산하면 됨
간접광(Indirect Lighting) 2차 반사. 반짝임. 여러 번 바운드된 조명 직접 빛으로 닿지 않는 장소에도 빛이 돌아간다.
어디에서 오는지 모르겠어요... 조명의 여러 번 반사를 미리 시뮬레이션해야합니다. 어떤 점의 조명 결과를 알고 싶을 때 ... 장면 전체를 보러 가야합니다.
참고: 반사/영상 (Reflection) 반사나 반영 포함도 GI와 동일. 어떤 점의 반사를 얻으려면 ... 장면 전체에서 반사하는 부분(및 그 부분의 음영도!)을 취득할 필요가 있다

지금까지의 GI 계산 방법

사전 계산으로 텍스처에 굽기 (Lightmap) 건축 시각화에서 Lightmass 연습 사용법 :

slide : https://www.docswell.com/s/EpicGamesJapan/K6GLEZ-lightmass

Youtube : https://youtu.be/ehY_2AvhqyY?si=uemvmTZOcGMojzvx

동적 변경은 불가능 빌드 시간 수 시간 단위로 증가 Lightmap용 텍스처에 의한 메모리 소비

Screen Space Global Illumination (SSGI)
● 스크린의 밝은 부분에서 인위적으로 GI 계산
● 스크린내의 정보 밖에 보이지 않기 때문에 빛이 화면에서 사라지면 GI가 소실
● 화면 밖을 고려할 필요가 없기 때문에 경량이지만, 어디까지나 인위적인 효과이기 때문에, 메인의 라이팅 환경으로는 사용하기 어렵다
https://youtu.be/yHqLFVMQO6k?si=XPf7FnBs4VXcLUEF&t=982

Path Tracer
● 정확한 계산으로 최고 품질의 그림을 만들 수 있습니다.
● 단, 1 프레임으로 완결하지 않고, 노이즈가 많은 프레임이 점점 깨끗해져 간다
● 즉, 사용자가 대화식으로 조작할 수 있는 콘텐츠에는 부적절하며 장시간 렌더링을 허용하는 스틸 이미지/동영상 등의 오프라인 렌더링을 위한 기능

 

지금까지 어떻게 대처해 왔습니까?

1. 사전 계산에 의한 라이트맵 작성
    a. 밤 등에 수십 시간에 걸쳐 GI를 계산. 텍스처에 베이킹.
   
b. 동적 변경 불가

2. 화면에서만 고려하는 GI(SSGI 등)
   
a. 화면에서 유사 GI.
   
b. 스크린에 비치지 않는 것은 기여하지 않는다. 매우 제한적인 것

3. 동영상/스틸 이미지용 Path Tracing
   
a. 진심으로 모든 레이를 정직하게 계산한다.
   
b. 물리적으로 가장 정확한 결과
   
c. 실시간으로 무리
   
d. 건축 및 동영상용

결론 : 현세대 GPU에서도 GI를 풀 해상도 / 1 프레임으로 렌더링하는 것은 무리

 

Lumen의 알고리즘 개요

알고리즘에서 두가지 Key point

이 두 가지를 해결해야합니다.
1. 장면 전체의 라이팅을 사전에 시뮬레이션 하시겠습니까?
2. 사전에 시뮬레이트된 세계에서 GI/Reflection을 취득할 것인가?

 

1. 장면 전체의 라이팅을 사전에 시뮬레이션 하시겠습니까?

Lumen Scene

Lumen이 GI와 Reflection을 계산하는 간단한 장면

전체의 라이팅은 이 Lumen Scene에서 계산 및 구축된다

전체 장면... 즉, 화면 밖의 오브젝트의 라이팅도 계산해야 하기 때문에 단순화를 위한 다양한 궁리가 되고 있다

어떻게 이 오브젝트의 360도 조명 데이터를 저장해야 할까?

장면 전체 그리기 어려움

스크린에서 보이는 세계뿐 아니라 스크린밖의 오브젝트들도 360도로 그려야합니다.

mesh를 덮는 카드를 미리 만들기

Card = 각 Mesh를 포함하는 평면 그룹
이 카드는 오브젝트의 그리는 스크린에 사용됩니다.

City Sample Card

 

lumen Scene 구축 및 Lighting

각 메쉬의 카드 모양 작성 / 사전준비(Editor)
시점이나 크기에 따라 오브젝트 선택
머티리얼 정보 등을 각 카드에 내보내고 이를 아틀라스화
Lighting !
Lumen Scene의 라이팅은 씬 전체의 Deferred Rendering이라고 할 수 있을지도. . .

 

각 오브젝트의
머티리얼과 위치 정보를 내보냅니다. . .
Lighting !!

 

Surface Cache
카드에서 추출한 머티리얼 데이터와 조명 결과

Lumen Scene 내에서 direct light를 계산한 후, Radiosity를 이용하여 Lumen Scene 내에서 다수의 반사를 실현하고 있다

Tip : 다수의 바운스 실현

Lumen Scene 여러번 바운스 없음(Radiosity: Off)
Lumen Scene
여러번 바운스 없음(Radiosity: On)

주의: 카드로 그릴 수 없는 부분이 생길 가능성

위와 같은 카드에서
안쪽은 카드에 묘사할 수 없다 (마젠타 부분)
Lumen Scene 내부에서는 그 부분은 쉐이딩 정보가 없기 때문에 검게 표시된다

 

1. 장면 전체의 라이팅을 사전에 시뮬레이션 하시겠습니까? -> Cards로 간이 표현된 LumenScene으로 계산

 

2. 사전에 시뮬레이트된 세계에서 GI/Reflection을 취득할 것인가?

저해상도의 라이팅 정보(Radiance Cache)를 계산하고, 전체화면의 Normal과 BRDF를 사용해 최종결과를 계산한다
이 저해상도 Radiance 정보는 LumenScene을 Ray Tracing 하여 추정한다.

 

어떻게 씬을 Tracing 할까?

두가지 추적 방법

1. Distance Field
2. Hardware RayTracing

Project Settings에서 Use Hardware Ray Tracing when available을 설정하여 HardwareRT를 사용할 수 있는 GPU에서는 HadwareRT를 사용

Distance Field?[각주:1]

● 사전 계산으로 생성된 오브젝트의 단순화된 표현
● 장점 : 빠르게 추적 가능
● 단점 : 사전 계산으로 인해 변형이 불가능 / 정확한 오브젝트 모양을 얻을수 없음

Hardware Ray Tracing

● 전용 하드웨어를 이용한 보다 정확한 트레이싱
● 장점 :  정확하게 추적 가능
● 단점 :  DistanceField에 비해 높은 부하가 발생하기 쉽다. 하드웨어 레이 트레이싱을 지원하는 최신 GPU 필요

Hardware Ray Tracing 적용

 

 * Lumen은 Distance Field에 의존하는 기술이 아님.

 

추적이 가능한 한 모든 데이터 구조나 알고리즘을 사용할 수 있다.

Lumen은 하드웨어 레이 트레이싱으로만 구현할 수 있다. 하드웨어 레이 트레이싱은 Lumen의 트레이싱 부분만 처리하므로 기존 레이 트레이싱 GI보다 훨씬 무거워지지 않는다.

 

 

Advance : DF를 로드하지 않는 CVar


● r.DistanceFields.SupportEvenIfHardwareRayTracingSupported
하드웨어 레이 트레이싱을 사용할 때 이 CVar를 0으로 시작하면 DistanceField가 로드되지 않는다.
DsitanceField와 관련된 기능을 사용할 수 없지만 메모리를 크게 줄일 수 있다.

 

Distance Field vs Hardware Ray Tracing

서로의 차이를 이해하고 어느 것을 사용할지 결정해야 한다.
특히 다음 세가지 포인트에 주의
 
● Processing Load
 
● Data Differences
 
● What can / cannot exist

Processing Load(처리 부하)
일반적으로 HWRT는 Distance Field보다 무겁다고 한다. 특히 HWRT에서는 레이트레용의 장면 구축 비용이나 메모리가 추가로 사용된다.
그러나 Epic은 Matrix Demo를 거쳐 다양한 최적화를 HWRT에도 실시하고 있다. HWRT는 무겁다고 결정해버리지 말고 하고 싶은 표현에 따라 프로파일링을 진행한 후 결정하는 것을 추천.

데이터 차이(Data Differences)
Distance Field는 어디까지나 오브젝트의 간이 표현이며, 실제의 폴리곤 메쉬 정도의 정확성을 가지지 않는다. 거울과 같은 선명한 반영은 Distance Field에서는 실현할 수 없다.

존재할 수 있는 것/할 수 없는 것(What can / cannot exist)
Distance Field는 사전 계산된 데이터이므로 SkeletalMesh 등 Distance Field에 없는 것은 반영되지 않는다.

 

그 밖에도 많은 제한이 있다 !
씬의 디자인이나 작성 방법에도 영향을 주기 때문에, 각각의 장점 단점을 이해해 여러가지 시험해 보세요!

 

 

Lumen Trace에 대한 Tips

 

Distance Field : Detail Trace 및 Global Trace



● Distance Field의 계산에서는, 근거리에 있는 각 메쉬를 Detail Trace한 후, 히트하지 않으면 Global Trace를 하도록 하고 있다


● Detail Trace(Default)
 
● 각 객체의 Distance Field를보고 레이의 히트 계산
 
● 복수의 Distance Field를 보므로 비교적 처리가 무겁다
     
● 특히 많은 물건이 겹치는 장면에서는. .
 
● Global Distance Field에 비해 정확도가 높음

Mesh Distance Field 시각화


● Global Trace
 
● 월드 전체의 Distance Field를 합성한 큰 “Global Distance Field”를 트레이싱
 
● 하나의 Distance Field를 보는 것만으로 비교적 처리가 가볍다
   
● 그러나 정밀도는 매우 거친

Global Distance Field 시각화

 

● Project Setting에서 Detail Trace를 사용할지 설정 가능

 

디스턴스 필드 표현을 개선하는 방법에는 2가지가 있습니다. 프로젝트들은 프로젝트 전체에 영향을 미치는 디스턴스 필드 복셀 밀도(Distance Field Voxel Density) 옵션 수치를 올려 개선을 도모할 수 있습니다. 또한, 스태틱 메시 에디터에 있는 디스턴스 필드 해상도 스케일(Distance Field Resolution Scale)을 조절하여 소프트웨어 레이트레이싱에서 문제를 일으키는 메시들에 대해서만 옵션을 지정할 수 있습니다. 디스턴스 필드의 해상도나 밀도를 올리는 것은 프로젝트의 크기를 키우게 될 것입니다. 출처 : https://tistory.jeon.sh/26

Project Setting : Distance field voxel density
Static Mesh Editor : Distance Field Resolution scale

 

패턴이 사라짐 / 붙어있음

 

Detail Trace가 있습니까? ? Lumen Scene에서 보면 퀄리티에 큰 차이가. . .

https://x.com/tempkinder/status/1529991835845685248

 

Detail Trace가 있습니까? ? 실제 장면에서 보면별로 신경이 쓰이지 않거나. . .

 

고대 골짜기 샘플에서는 메쉬가 많이 겹치기 때문에 Detail Trace의 부하가 높아지므로 Global Trace만을 채용
Lumen은 기본적으로 Screen Space를 먼저 추적하고 Screen 밖으로 나가야 할 경우 DF 또는 HWRT을 수행한다. 그 때문에, 스크린계 이펙트 고유의 결함이 보이는 경우가 있다. 그렇다면 Screen Trace 자체를 끄는 것도 고려하는 것이 좋다.

 

Tips: Screen Trace에 의한 잘못 반영

https://x.com/tempkinder/status/1503174649718329349

 

Lumen의 알고리즘 요약

각 메쉬의 카드 모양 작성
Lumen Scene 구축 및 조명
레이트레이싱으로 GI 계산
업 샘플링!

 

Lumen의 실시간 정보

이건 정말 1 프레임으로 계산할 수 있나? ? ?
다양한 내부 프로세스를 분산해 한 프레임내의 처리를 줄이고 있다!!

 

주요 분산 항목

 

● 화면의 GI 계산 부분 (Final Gather)을 수행하는 라이트 프로브 수
● Surafece Cache에 쓰여진 머티리얼 업데이트
● Lumen Scene 조명

프레임을 분산시키는 것은 조명 변화에 지연이 발생할 수 있다는 것 ...

 

프레임 분산 지연 예시

카메라 전환 시 지연

https://x.com/tempkinder/status/1526037005364174850

조명의 빠른 변화에 대한 지연

https://x.com/tempkinder/status/1503976333365301248

머티리얼 변경으로 인한 지연

https://x.com/tempkinder/status/1502821055202693126

(부하가 늘어나지만) 지연을 향상시키는 다양한 매개 변수가 있다. 자세한 것은 나중의 Tips 모음에서...

 

최적화 관점에서 본 Lumen 알고리즘

Lumen과 관련된 다양한 설정

 

Profile / Debug View / 설정


● 사전에 Lumen Scene 업데이트
  ● 들어가는 객체의 계산
  ● 카드 업데이트

● Surface Cache
 
(= Lumen Scene 조명) 업데이트

● Screen의 Probe에서 GI 계산
 
● 화면에 라이트 프로브를 놓는다.
 
● Final Gather로 Lumen Scene 추적
 
● BentNormal/G-Buffer에서 풀 해상도로

 

Debug View

 

Debug view : Surface cache[각주:2]

  마젠타  
  ● Surface Cache에서 계산할 수 없는 부분
● 황색
 
● Surface Cache에 포함되지 않은 객체

Lumen의 표시 / ● Surface Cache에 들어 있지 않은 부분은 라이팅 정보를 취득할 수 없기 때문에 새까맣게 되어 있는 것을 알 수 있을까 생각한다

 

역자주 : Lumen 사용에서 주의해야 할 부분이 큰 단일 mesh를 사용해 구성할 경우 라이팅 정보 갱신이 어렵기 때문에 벽이나 바닥, 기둥등은 분할된 상태로 작업해야하는것이 유리하다.

 

주의점: Surface Cache에 들어가지 않는 것은 안 되는가? City Sample에서도 의외로 Pink나 노란색이 많다. 최종 그림의 결과를 중시하는 것이 좋을 것 같다.

LumenScene 조명시 Radiosity 계산용 Probe의 해상도 정의
Lumen Scene에 넣을 오브젝트의 거리와 화면상의 크기를 설정한다.
GI의 품질 조정

각 장면의 업데이트 빈도 변경
1프레임 내에서의 처리 부하 증감

 

주요 매개 변수의 변화를 이해하기 쉽게 동영상으로 만들었습니다. 확인한 동영상에 대한 링크를 붙여 둡니다. 그러니 참조 할 수 있으면 다행입니다.

Final Gather Lighting Update Speed

https://x.com/tempkinder/status/1503976333365301248

Lumen Scene Lighting Update Speed

https://x.com/tempkinder/status/1504266200276037634

Lumen Scene Lighting Quality

https://x.com/tempkinder/status/1504264596852391939

Final Gather Quality

https://x.com/tempkinder/status/1503687508554440704

 

번외편: Static Mesh Editor내 카드 설정

각 메쉬 최대 얼마나 많은 카드를 만들 수 있습니까?

 

Lumen의 다양한 TIps (URL 소개 전용)

오픈 월드의 광대 한 렌더링에서
실내의 로컬 렌더링까지
인터랙티브 게임부터 정지영상 동영상까지

따라서 내부 설정을 매우 세밀하게 제어할 수 있습니다. 루멘을 조정하는 Cvar만으로도 200을 넘는다....


Twitter에 게시하고 Qiita에 요약합니다.

매일 얻는 지식을 추가하고 최대한 역참조가 가능한 형식을 목표로 합니다. 도움이 되셨으면 합니다.

● Lumen의 조명의 모호함을 개선하고 싶을 때
● Lumen의 조명 변화의 속도를 높이고 싶을 때
● Emissive 오브젝트 등 영향이 큰 오브젝트를 항상 Lumen 계산에 포함되도록 설정
● Lumen의 Reflection에서 반투명이 이상하게 반영되어 있을 때
● SkeletalMesh의 오클루전 등이 Lumen의 GI 내에서 나오지 않을 때
● Lumen을 HardwareRayTracing에서만 사용하고 DistanceField를 로드하지 않는 방법
● Lumen에서 캐릭터와 같은 동적 오브젝트의 반사에 대한 참고 사항(Hardware Ray Tracing 사용시)
● etc…

https://qiita.com/EGJ-Nori_Shinoyama/items/b6ac447162afb134fbc4

 

UE5のLumenに関するTips - Qiita

UE5のLumenに関して、Tiwtter上で呟いたTipsなどをこちらにまとめていこうと思います。見づらくてごめんなさい!Lumen GIやLumen Sceneなど全体の設定についてLum…

qiita.com

 

요약

● Lumen은 동적 GI를 실시간으로 실현하는 매우 강력한 UE5의 새로운 기능입니다.

● 그리고 다양한 장면에 대응하기 위해 처리 부하와 품질의 균형을 유연하게 설정할 수 있습니다

● 특히 고품질의 비주얼이나 엄밀한 처리 부하의 제어가 필요한 경우, 내부 거동을 어느 정도 이해해 두면 조정의 시간을 삭감할 수 있습니다

● 이 문서가 내부 거동을 이해하는 데 도움이 되었으면 좋겠습니다. 그리고 Lumen은 지금도 예의 개발되고 있습니다! 앞으로의 개선에도 기대해 주세요!

 

 

 

  1. SDF를 기본으로 하는 Software Ray Tracing 방식. SM5 이상부터 사용가능하며, Project setting에서 Generate Mesh Distance Field 옵션을 활성화하면 된다 [본문으로]
  2. r.Lumen.Visualize.CardPlacement 콘솔 커맨드로 시각화해 볼 수 있음 [본문으로]
반응형