BlueRoseNote/03-UnrealEngine/Rendering/Lighting/灯光知识与流程学习总结(四)——动态光照属性与工作流程.md

154 lines
11 KiB
Markdown
Raw Normal View History

2023-06-29 11:55:02 +08:00
## 前言
动态光照需要使用多种照明技术协同工作这一点与只需要LightMass的静态光照不同。所以这一章我将会总结一些有关动态光照相关的参数、使用场景与设置技巧。
### Daedalus51的流程
#### 1.2章节的流程
1. 去除干扰场景光照的后处理效果(本系列第一篇文章)
2. 检查贴图的固有色是否正确并进行调整。(本系列第一篇文章)
3. 调整天光以符合设计目标。(本系列第一篇文章)
4. 分别开启Visualize Distance Field Ambient Occlusion、Visualize Mesh Distance Field检查距离场以及对应效果。
5. 设置曝光相关属性。
6. 设置方向光与其他主光源的基础属性(方向、亮度等)
7. 给场景中的带有反射属性的物体添加反射球并调整属性。Daedalus51的流程中没有关闭空间反射如果你按照我之前写的关闭空间反射这里要记得开启之后开启Reflections模式查看场景反射情况。
8. 添加补光灯光,以及伪造灯光来增加气氛
9. 放置高度雾。(雾可以改变场景色调)
10. 后处理调色。
**如何补光**<br>
使用 关闭Cast Shadow、Min Roughness为1的点光源进行补光。这种灯光十分柔和可以用于提亮局部死黑部分。配合Light Channel可以只对某一些物体起作用。
**阴影建议**<br>
如果灯光开启了动态阴影那么请不要使用点光源而需要使用聚光灯。Daedalus51的理由是:点光源会向6个方向投射阴影类似Box对性能消耗较大。但事实上因为Ue4光照缓存机制所以只有第一次渲染才会有如此大的消耗
当若干几个物体较黑时可以考虑使用聚光灯并且设置Min Roughness为1,这样可以达到提亮物体的作用。
### 调试用命令
- r.Shadow.MaxResolution 可选参数256~2048默认2048
- r.Shadow.MinResolution 可选参数16~128默认32
- r.Shadow.FadeResolution 可选参数64~2048默认64
- r.Shadow.DistanceScale 可选参数0.5~2默认1
- r.Shadow.RadiusThreshold 可选参数0.01~0.5默认0.03
- r.Shadow.CSM.MaxCascades 可选参数1~16默认3
- r.Shadow.CSM.TransitionScale可选参数0~2默认1
- r.ShadowQuality 可选参数1~5默认5
- r.LightFunctionQuality 可选参数0~2默认2
- r.DistanceFieldShadowing True~False默认True
- r.DistanceFieldAO True~False默认True
- r.ParticleLightQuality 可选参数0~2默认1
- r.Shadow.UnbuiltPreviewInGame
- r.Shadow.UnbuiltNumWholeSceneDynamicShadowCascades
- r.Shadow.MaxCSMResolution
- r.CapsuleShadows
更多技巧请参考第二章的《有关Console命令的技巧》段落。
### 级联阴影(Cascaded Shadow Maps)
级联阴影分为近阴影与远阴影。两者皆可以设置数量、过度距离以及过度参数(在光源中设置)。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Lighting/级联阴影.png)
级联阴影技术介绍https://gameinstitute.qq.com/community/detail/117522
下面这部分内容总结于《Lighting Troubleshooting Guide》部分条目的解释有配图我也懒得贴了所以推荐直接看原文。<BR>
https://wiki.unrealengine.com/LightingTroubleshootingGuide
##### 方向光特有属性
###### Dynamic Shadow Distance Movable
以摄像机为起点的阴影覆盖距离该值为0则代表禁用该功能。
###### Dynamic Shadow Distance Stationary
以摄像机为起点的阴影覆盖距离该值为0则代表禁用该功能。
###### Num Dynamic Shadow Cascades
view frustum被分割成的级联的数量。更多的级联将导致更好的阴影分辨率但会显著增加渲染成本。
###### Cascade Distribution Exponent
控制级联的分布,是离相机更近(高值)还是更远(低值)。值1表示转换将与分辨率成正比。
###### Cascade Transition Exponent
级联之间的过度参数,较低的数值产生会较生硬的过度,而较高的数值会产生较平缓的过度。
###### Shadow Distance Fadeout Fraction
阴影淡出参数。较高的值会使阴影显得较淡一些,而较低的值会使阴影显得较深一些。
##### 对于所有的动态光源
###### Shadow Bias
控制阴影在场景中的精确程度。默认值是0.5,这是权衡了精度与性能的值。
###### Shadow Filter Sharpness
控制阴影边缘的锐化程度。
#### 调整级联阴影以得到更好的效果
通过调整上述设置,可以很好地调整阴影的出血值和精度。下一节将尝试调整到最佳成都,以获得更好的精度与阴影。找到一种适合任何特定游戏的平衡将需要耗费时间、精力来进行大量测试。
以下是默认设置下会出现的问题。
![image](https://d26ilriwvtzlb.cloudfront.net/a/ae/1AdjustingSettings2_ProblemAreas.png)
调整后的结果
![image](https://d26ilriwvtzlb.cloudfront.net/8/8c/1AdjustingSettings2_finalResult.png)
#### 远距离阴影(Far Shadow)
一般是方向光作用在地形上的阴影使用的是Cascaded Shadow Maps。<br>
相关选项有:<br>
方向光源-》Cascaded Shadow Maps-》 Far Shadow Cascade Count阴影精细程度与Far ShadowDistance显示距离
地形是默认开启Far Shadow的。如果想对Actor启用则需要手动开启。
#### 级联阴影调试
可以通过show=》advanced=》ShadowFrustums显示阴影调试只对方向光有效。以此可以观察Cascaded的级数切换距离。
### 距离场光线追踪技术
级联阴影在显示远阴影时为了效果会增加阴影级数这样会增加消耗而距离场阴影的消耗相对较小所以会采样近距离级联远距离距离场阴影的配合方式。同时它可以解决因为屏幕空间渲染技术而导致的阴影失真的问题。另一个主要用处就是距离场AO了。或者可以使用距离场来写Shader。
注意距离场技术只适用于Static Mesh。
### 如何开启
首先需要开启距离场生成,在项目设置——渲染——灯光——勾选 生成模型距离场 选项。
之后在需要的灯光处勾选“Ray Tracing Distance Field Shadow”选项开启。
### 距离场检查
距离场的构建质量将决定距离场相关技术的渲染效果。距离场分为模型距离场与全局距离场。你可以通过在Show > Visualize >中勾选Global Distance Field、Mesh Distance Field、Distance Field Ambient Occlusion来对渲染效果进行debug。尤其是AO一下子就能找到效果不好的地方。
Daedalus51推荐给这些选项设置快捷键来提高效率。在编辑器设置中搜索Visualize Global Distance Field、Visualize Mesh Distance Field、Visualize Distance Field Ambient Occlusion后设置快捷键即可。
如果距离场效果不佳可以在对应StaticMesh编辑器中设置Distance Field Resoulition Scale来调高分辨率记得按Apply Changes
### 距离场模型问题
因为距离场使用体积贴图来存储空间信息,所以对于巨大物体(比如摩天大楼)应该把模型拆成小块,以减少性能损耗。
同理,模型的形状也不应该奇形怪状,这样会大大的影响距离场构建质量。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Lighting/模型形状不佳而导致距离场构建不佳.png)
### 植被渲染注意
因为植被面数高、结构复杂等因为因素不适合使用LightMass、SSAO进行渲染但距离场AO却十分适合。
对于树叶等需要双面渲染的物体需要在模型设置中勾选Two-Sided Distance Field Generation以生成正确的距离场。
### 级联阴影切换
可以对灯光中的Cascaded Shadow Maps——Dynamic Shadow Distance MoveableLight进行设置来达到级联阴影与软阴影的切换靠近物体会切换成级联阴影
取值可以参考静态光照的Dynamic Shadow Distance属性。
### 其他注意事项
光源中的SourceRadius、SourceLength、LightSourceAngle会对软阴影产生影响学过光追的人都知道为什么
天光也有距离场AO的选项千万别忘记了。
## 胶囊阴影
这是骨骼物体的软阴影方案所以光源的SourceRadius、SourceLength、LightSourceAngle选项也会对此产生影响。
- Capsule Direct Shadow此属性将启用来自直接可移动光照的柔和阴影。
- Capsule Indirect Shadow此属性将启用来自预计算光照光照图和天光的柔和阴影。
- Capsule Direct Shadow Min Visibility调整胶囊阴影的明暗度
### 如何启用
1. 在角色Asset中指定ShaowPhysicsAsset。
2. 在角色Asset的Lighting选项卡中勾选Capsule Direct Shadow或者Capsule Indirect Shadow
### 接触阴影(Contact Shadows)
是一种为了弥补级联阴影的缺陷,用于补充角色细节、场景细节阴影的技术。它是一种根据深度信息进行着色的后处理渲染技术。
ContactShadowLength参数大于0时就会开启默认是关闭的。。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Lighting/接触阴影.png)
https://docs.unrealengine.com/zh-CN/Engine/Rendering/LightingAndShadows/ContactShadows/index.html
#### 原理
将接触阴影的长度设为大于零的值后,渲染器将通过场景的深度缓存从像素的位置到光源进行光线追踪。举一个典型的例子来说,将接触阴影长度的最大值设为 1此处的 1 则代表光线遍历整个屏幕。而将接触阴影长度的值设为 0.5 则意味着光线遍历半个屏幕。注意:场景深度缓存中的获得的采样将保持不变,意味着增加接触阴影的长度时将出现更多噪点(穿帮)。长度为 0.75 的接触阴影比长度为 0.1 的接触阴影生成的噪点更多。
#### 应用场景
1. 当前平台只支持一个光源且需要使用Marching实现的视差Shader。
2. 角色细节阴影与墙面植物(爬山虎)阴影。
### Light Propagation Volumes
### HDRIBackdrop
4.23的新功能这个东西会把地面部分的HDR投射到一个平面上这样场景中物体的阴影就可以投射到“HDR背景上”。适合于产品展示。奥秘就在这个环境球上。
当然Engine还提供了其他环境球可以根据需要选择。如何选择请参考文档https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/LightingAndShadows/HDRIBackdrop/
不过使用的时候需要注意以下设置:
- HDR贴图设置最大纹理尺寸Maximum Texture Size应与已导入HDR图像的较大分辨率值匹配。
- 应将 Mip生成设置Mip Gen Settings设为NoMipmaps以使用完全品质。
- 调整Hdr Size拍摄场景的大小
- 如果原始设置下如果摄像仪偏离Projection Center点远处的背景就会产生形变解决的方法是勾选Use Camera Projection选项