185 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			185 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Lumen学习笔记(1)——官方文档与视频笔记
							 | 
						|||
| 
								 | 
							
								date: 2022-08-26 14:50:26
							 | 
						|||
| 
								 | 
							
								excerpt: 
							 | 
						|||
| 
								 | 
							
								tags: Lumen
							 | 
						|||
| 
								 | 
							
								rating: ⭐⭐
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								## 前言
							 | 
						|||
| 
								 | 
							
								其他lumen学习视频:https://www.youtube.com/watch?v=CFKNoeUPQGQ
							 | 
						|||
| 
								 | 
							
								Lumen | Inside Unreal https://www.youtube.com/watch?v=QdV_e-U7_pQ
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Lumen的设计目标:
							 | 
						|||
| 
								 | 
							
								- 大型开放世界
							 | 
						|||
| 
								 | 
							
									- 需要流式加载
							 | 
						|||
| 
								 | 
							
									- 需要控制百万级的实例物体
							 | 
						|||
| 
								 | 
							
								- 室内环境
							 | 
						|||
| 
								 | 
							
									- 实现实时GI十分困难
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								因为Lumen的关系,UE5改进了距离场系统,分辨率是UE4的2倍。这也让DFAO获益。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### 效果支持
							 | 
						|||
| 
								 | 
							
								- 反射
							 | 
						|||
| 
								 | 
							
									- 反射效果会带有GI,同时支持Clear Coat材质。
							 | 
						|||
| 
								 | 
							
								- GI 
							 | 
						|||
| 
								 | 
							
									- 支持对半透明物体、体积雾提供GI效果。但与不透明物体相比想过会差很多
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### UE5.0版本Lumen限制
							 | 
						|||
| 
								 | 
							
								-   流明全局照明不能与光照贴图中的[静态照明](https://docs.unrealengine.com/5.0/en-US/static-light-mobility-in-unreal-engine)一起使用。Lumen Reflections 应该在虚幻引擎 5 的未来版本中扩展为与光照贴图中的全局照明一起使用,这将为使用静态照明技术的项目提供进一步扩大渲染质量的方法。
							 | 
						|||
| 
								 | 
							
								-   Lumen Reflections 不支持多重镜面反射。与折射。
							 | 
						|||
| 
								 | 
							
								-  5.1才会支持薄片材质(用于制作树叶)。
							 | 
						|||
| 
								 | 
							
								-   Lumen[](https://docs.unrealengine.com/5.0/en-US/single-layer-water-shading-model-in-unreal-engine) 目前不支持 [单层水材质。](https://docs.unrealengine.com/5.0/en-US/single-layer-water-shading-model-in-unreal-engine)
							 | 
						|||
| 
								 | 
							
								-   Lumen 目前不支持场景捕捉或分屏。
							 | 
						|||
| 
								 | 
							
								-   Lumen与[Forward Shading](https://docs.unrealengine.com/5.0/en-US/forward-shading-renderer-in-unreal-engine)**不**兼容。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								- 对模型有一要求,如果是想汽车这种外壳薄、内部结构复杂的模型。作者说之后会去解决。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 开启方式
							 | 
						|||
| 
								 | 
							
								开启Lumen的相关选项:
							 | 
						|||
| 
								 | 
							
								- ProjectSettings-Rendering
							 | 
						|||
| 
								 | 
							
									- Global Illumination -> Dynamic Global Illumination Method -> Lumen
							 | 
						|||
| 
								 | 
							
									- Reflection -> Reflection Method -> Lumen
							 | 
						|||
| 
								 | 
							
									- Software RayTracing -> Generate Mesh Distance Fields -> True
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								硬件Lumen支持开启:
							 | 
						|||
| 
								 | 
							
								- ProjectSettings-Rendering
							 | 
						|||
| 
								 | 
							
									- Lumen -> UseHardware RayTracing when available -> True
							 | 
						|||
| 
								 | 
							
									- Hardware RayTracing -> Support Hardware RayTracing -> True
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								另外还可以通过PostProcessVolumn的相关选项开启(GI与Reflection),还可以设置质量。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 控制方式 
							 | 
						|||
| 
								 | 
							
								- 场景内的灯光属性
							 | 
						|||
| 
								 | 
							
								- 材质的BaseColor与Roughness
							 | 
						|||
| 
								 | 
							
								- 曝光
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 工作原理
							 | 
						|||
| 
								 | 
							
								分硬件光线追踪与软件光线追踪2种方式。同时Lumen也是一种混合方案。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Surface Cache
							 | 
						|||
| 
								 | 
							
								起名为Cards,生成方式为Mesh Capture的方式,它会在低分辨率下捕获材质信息。
							 | 
						|||
| 
								 | 
							
								- 可以使用`r.Lumen.Visualize.CardPlacement 1`显示构建方式。
							 | 
						|||
| 
								 | 
							
								-  `Show->Visualize->LumenScene`可以查看Surface Cache。当Lumen显示不正常时就可以使用这个工具来查找问题。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								注意:
							 | 
						|||
| 
								 | 
							
								1. `只能使用简单的内部结构的模型`,不然会导致SurfaceCache生成错误。
							 | 
						|||
| 
								 | 
							
								2. 对于高面数模型需要使用Nanite进行处理,不然效率会非常低。作者建议使用Nanite对场景模型进行高效的LOD设置(哪怕是个小模型)。
							 | 
						|||
| 
								 | 
							
								3. 实例化的静态网格物体必须是Nanite。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### 软件光线追踪
							 | 
						|||
| 
								 | 
							
								1. 首先使用深度缓存(屏幕空间)进行追踪。
							 | 
						|||
| 
								 | 
							
								2. 如过Ray Miss或者离开屏幕范围,就会使用ComputeShader对SDF进行追踪。(Mesh距离场与全局距离场)
							 | 
						|||
| 
								 | 
							
								3. 将光照的Ray Hits结果写入`Surface Cache`。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### 优化 
							 | 
						|||
| 
								 | 
							
								`ProjectSettings-Rendering-Lumen-SoftRayTracingMode`有`DetailTracing`与`GlobalTracing`选项,后者会跳过Mesh SDF直接去追踪全局距离场。对于一些模型叠加比较厉害的场景可以使用`GlobalTracing`来提高效率。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### 限制
							 | 
						|||
| 
								 | 
							
								1. 目前仅支持StaticMesh、StaticMeshInstance 、Landscape。
							 | 
						|||
| 
								 | 
							
								2. 不支持有WorldPositionOffset修改的材质。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### 硬件光线追踪 
							 | 
						|||
| 
								 | 
							
								- 最高质量,但是性能高消耗+显卡限制。
							 | 
						|||
| 
								 | 
							
								- 需要显卡支持Dx12。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								硬件光线追踪不会直接去追踪原始的Nanite模型(因为API不兼容问题),而是会去追踪Nanite提供的一个简化 几何代理版本。所以如果场景GI效果不佳,可以适当提高Proxy TrianglePercent比例,1% -> 2%~5%。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### 限制 
							 | 
						|||
| 
								 | 
							
								- EA版中 Instance 数量不能超过100000
							 | 
						|||
| 
								 | 
							
								- 高面数的骨骼模型在Lumen中会非常消耗资源
							 | 
						|||
| 
								 | 
							
								- 模型不能有大量的重叠(对于有大量重叠的场景可以考虑使用软件光线追踪)
							 | 
						|||
| 
								 | 
							
								- 速度比软件光线追踪慢50%,但更加精确
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Lumen Final Gather
							 | 
						|||
| 
								 | 
							
								RayTracing相当耗费资源,因此只能只能承担1/2 Rays per pixel,但室内场景中需要200+采样才会有可以接受的结果。因为需要尽可能得利用每一次Ray Hit取得的结果。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								一些常用的方法:
							 | 
						|||
| 
								 | 
							
								- Irradiance Fields(二阶球谐与体素GI?)
							 | 
						|||
| 
								 | 
							
									- 独特的扁平外观?distinctive flat look
							 | 
						|||
| 
								 | 
							
									- 缓慢的光照更新速度 
							 | 
						|||
| 
								 | 
							
									- 需要人工放置VolumnBox
							 | 
						|||
| 
								 | 
							
								- 屏幕空间降噪器
							 | 
						|||
| 
								 | 
							
									- 性能消耗很大
							 | 
						|||
| 
								 | 
							
									- 降噪在光追之后,效果很有限
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Lumen使用了**屏幕空间辐射度缓存** ,这样允许我们从很小的一组位置进行追踪。通常会将采样降低约1/16,并对每个采样点进行更多的光线追踪采样。(牺牲密度来提高精度) 之后使用插值的方式来填补周围像素。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Lumen还使用**世界空间的辐射度缓存**,也就是探针(数量较少),这些探针将会重复运用于多个像素。使用`r.Lumen.RadianceCache.Visualize 1`可以显示出探针。与VolumeLightMap不同,Lumn并不使用这些探针直接渲染GI效果,而是从像素开始RayTracing。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Lumen与降噪器效果比较:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Lumen Reflection
							 | 
						|||
| 
								 | 
							
								- 对于较为粗糙的物体(Roughness < 0.4),会使用额外的光线进行光线追踪,会耗费额外资源。
							 | 
						|||
| 
								 | 
							
								- 对于较为光滑的物体(Roughness > 0.4),会重用追踪结果,高光波瓣会收敛在diffuse上。(也就是说GI会考虑到高光)
							 | 
						|||
| 
								 | 
							
								- 降噪采用Spatial与Temporal降噪器
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								屏幕上一半的反射是由Lumen Finaly Gather提供的。这样是的Lumen GI与Lumen Reflection能很好的结合在一起,但这样也加重了Lumen的消耗。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								在默认情况下渲染反射效果时(即使打开光线追踪),当光线命中物体会直接从表面缓存获取到所有光照结果。这种方式的渲染效率是Rtx反射的两倍,但效果挺差的。将`Lumen Reflections-Quality`值提高到4时,Lumen会去实际计算反射结果,以提供更准确的效果。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								此时多重反弹的反射效果与天光依然由表面缓存提供。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### Lumen Reflection vs Ray Traced Reflection 
							 | 
						|||
| 
								 | 
							
								- Lumen Reflection Support 
							 | 
						|||
| 
								 | 
							
									- Screen Traces
							 | 
						|||
| 
								 | 
							
									- Software Ray Tracing
							 | 
						|||
| 
								 | 
							
									- Dynamic GI In Reflection(表面缓存)
							 | 
						|||
| 
								 | 
							
									- Shadowed Moveable Skylight In Reflection(表面缓存)
							 | 
						|||
| 
								 | 
							
									- Clear Coat 2 Layers of Reflections
							 | 
						|||
| 
								 | 
							
								- Ray Traced Reflections Support
							 | 
						|||
| 
								 | 
							
									- LightMap GI In Reflections 
							 | 
						|||
| 
								 | 
							
									- Multi-Bounce Reflections 
							 | 
						|||
| 
								 | 
							
								- Future:Lumen Reflections 
							 | 
						|||
| 
								 | 
							
									- Bring Over Remaining Feature From Ray Traced Reflection
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 最佳实践
							 | 
						|||
| 
								 | 
							
								- Emissive
							 | 
						|||
| 
								 | 
							
									1. 使用Lumen时,不要使用自发光材质模型代替灯光。(容易产生大量噪点)
							 | 
						|||
| 
								 | 
							
									2. 使用较大的自发光材质模型做出一些效果。比如夜晚房间中的电视机效果。以及场景中微弱补光。
							 | 
						|||
| 
								 | 
							
									3. 使用较小的自发光材质模型+灯光。
							 | 
						|||
| 
								 | 
							
								- BaseColor 
							 | 
						|||
| 
								 | 
							
									1. BaseColor与GI影响很大。
							 | 
						|||
| 
								 | 
							
									2. 非常暗以及糟乱BaseColor会产生很烂的GI效果。
							 | 
						|||
| 
								 | 
							
									3. 作者建议使用材质集+材质参数来调整MegaScane资产BaseColor贴图的亮度,这样可以保证所有材质的亮度保持统一。
							 | 
						|||
| 
								 | 
							
								- Indirect Lighting Intensity(灯光的选项)
							 | 
						|||
| 
								 | 
							
									1. 现在不支持屏幕空间追踪。(预览版)
							 | 
						|||
| 
								 | 
							
									2. 将其设置为1外的值会出现伪影。(预览版)
							 | 
						|||
| 
								 | 
							
								- Performance
							 | 
						|||
| 
								 | 
							
									1. Epic 质量为游戏主机上30帧的设置。
							 | 
						|||
| 
								 | 
							
									2. High质量为游戏主机上60帧的设置。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 其他
							 | 
						|||
| 
								 | 
							
								1. 是否支持物理灯光?作者认为是支持的,同时内部也有一些项目使用。但没有经过严格测试。可以确定Emissive材质物体会直接失效,因为Emissive物体也需要提高到相应的亮度才能显示。
							 | 
						|||
| 
								 | 
							
								2. 目前Lumen Reflection 不支持 LightMap,而且LightMap还会额外占用显存。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 王祢的讲解视频(详细的算法解释)
							 | 
						|||
| 
								 | 
							
								- UnrealCircleNanite技术简介 | Epic Games China 王祢
							 | 
						|||
| 
								 | 
							
								- UOD2021虚幻引擎5渲染特性解析 Lumen | Epic Games 王祢
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								1. RadianceCaching
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 中文直播
							 | 
						|||
| 
								 | 
							
								[中文直播]第42期 | Lumen高品质渲染解析 | Epic 纪大伟 https://www.bilibili.com/video/BV15d4y1V7p9?vd_source=d47c0bb42f9c72fd7d74562185cee290
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Ctrl+L调整灯光,勾选灯光选项。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## MeshCrad
							 | 
						|||
| 
								 | 
							
								1. MeshCrad构建数量,数量过多会卡。
							 | 
						|||
| 
								 | 
							
								2. `r.Lumen.Visualize.CardPlacement 1`显示构建的MeshCard。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## SurfaceCache
							 | 
						|||
| 
								 | 
							
								- 黄色:模型完全没有SurfaceCache
							 | 
						|||
| 
								 | 
							
								- 粉色:只有部分模型有SurfaceCache
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								解决错误
							 | 
						|||
| 
								 | 
							
								1. 在后期盒子里调整SceneDetail
							 | 
						|||
| 
								 | 
							
								2. 把错误的模型拆开。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 灯光矫正
							 |