Unreal Engine5 Lumenの仕組みと肝心なところ | ドクセル
www.docswell.com
Unreal Engine 5 Lumen의 구조와 중요한 부분
Epic Games Japan / Developer Relations Lead / Nori Shinoyama
언리얼 엔진 5에서 새로운 조명 시스템으로 Lumen이 도입되었습니다.
- 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 계산은 왜 무거운가?
지금까지의 GI 계산 방법
slide : https://www.docswell.com/s/EpicGamesJapan/K6GLEZ-lightmass
Youtube : https://youtu.be/ehY_2AvhqyY?si=uemvmTZOcGMojzvx
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도로 그려야합니다.
mesh를 덮는 카드를 미리 만들기
Card = 각 Mesh를 포함하는 평면 그룹
이 카드는 오브젝트의 그리는 스크린에 사용됩니다.
lumen Scene 구축 및 Lighting
Surface Cache
카드에서 추출한 머티리얼 데이터와 조명 결과
Tip : 다수의 바운스 실현
Lumen Scene 여러번 바운스 없음(Radiosity: Off)
Lumen Scene 여러번 바운스 없음(Radiosity: On)
주의: 카드로 그릴 수 없는 부분이 생길 가능성
위와 같은 카드에서
안쪽은 카드에 묘사할 수 없다 (마젠타 부분)
Lumen Scene 내부에서는 그 부분은 쉐이딩 정보가 없기 때문에 검게 표시된다
1. 장면 전체의 라이팅을 사전에 시뮬레이션 하시겠습니까? -> Cards로 간이 표현된 LumenScene으로 계산
2. 사전에 시뮬레이트된 세계에서 GI/Reflection을 취득할 것인가?
두가지 추적 방법
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 필요
* 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에 비해 정확도가 높음
● Global Trace
● 월드 전체의 Distance Field를 합성한 큰 “Global Distance Field”를 트레이싱
● 하나의 Distance Field를 보는 것만으로 비교적 처리가 가볍다
● 그러나 정밀도는 매우 거친
● Project Setting에서 Detail Trace를 사용할지 설정 가능
디스턴스 필드 표현을 개선하는 방법에는 2가지가 있습니다. 프로젝트들은 프로젝트 전체에 영향을 미치는 디스턴스 필드 복셀 밀도(Distance Field Voxel Density) 옵션 수치를 올려 개선을 도모할 수 있습니다. 또한, 스태틱 메시 에디터에 있는 디스턴스 필드 해상도 스케일(Distance Field Resolution Scale)을 조절하여 소프트웨어 레이트레이싱에서 문제를 일으키는 메시들에 대해서만 옵션을 지정할 수 있습니다. 디스턴스 필드의 해상도나 밀도를 올리는 것은 프로젝트의 크기를 키우게 될 것입니다. 출처 : https://tistory.jeon.sh/26
https://x.com/tempkinder/status/1529991835845685248
Tips: Screen Trace에 의한 잘못 반영
https://x.com/tempkinder/status/1503174649718329349
Lumen의 알고리즘 요약
Lumen의 실시간 정보
주요 분산 항목
● 화면의 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
Lumen과 관련된 다양한 설정
Profile / Debug View / 설정
● 사전에 Lumen Scene 업데이트
● 들어가는 객체의 계산
● 카드 업데이트
● Surface Cache
(= Lumen Scene 조명) 업데이트
● Screen의 Probe에서 GI 계산
● 화면에 라이트 프로브를 놓는다.
● Final Gather로 Lumen Scene 추적
● BentNormal/G-Buffer에서 풀 해상도로
Debug View
● 마젠타
● Surface Cache에서 계산할 수 없는 부분
● 황색
● Surface Cache에 포함되지 않은 객체
역자주 : Lumen 사용에서 주의해야 할 부분이 큰 단일 mesh를 사용해 구성할 경우 라이팅 정보 갱신이 어렵기 때문에 벽이나 바닥, 기둥등은 분할된 상태로 작업해야하는것이 유리하다.
LumenScene 조명시 Radiosity 계산용 Probe의 해상도 정의
Lumen Scene에 넣을 오브젝트의 거리와 화면상의 크기를 설정한다.
GI의 품질 조정
각 장면의 업데이트 빈도 변경
1프레임 내에서의 처리 부하 증감
주요 매개 변수의 변화를 이해하기 쉽게 동영상으로 만들었습니다. 확인한 동영상에 대한 링크를 붙여 둡니다. 그러니 참조 할 수 있으면 다행입니다.
https://x.com/tempkinder/status/1503976333365301248
https://x.com/tempkinder/status/1504266200276037634
https://x.com/tempkinder/status/1504264596852391939
https://x.com/tempkinder/status/1503687508554440704
번외편: Static Mesh Editor내 카드 설정
Lumen의 다양한 TIps (URL 소개 전용)
오픈 월드의 광대 한 렌더링에서
실내의 로컬 렌더링까지
인터랙티브 게임부터 정지영상 동영상까지
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은 지금도 예의 개발되고 있습니다! 앞으로의 개선에도 기대해 주세요!
'Technical Report > Unreal' 카테고리의 다른 글
How to make trippleA level interactive Snow in Unreal Engine (Deformable Snow) (0) | 2024.09.09 |
---|---|
[번역]Coding Standard (0) | 2018.02.22 |
[번역]Graphics programming 개요 (0) | 2018.02.22 |
UE4 Lightmass 및 GI (0) | 2016.01.13 |
UE4 Viewport Setting (0) | 2015.12.14 |