154 lines
11 KiB
Markdown
154 lines
11 KiB
Markdown
|
## 前言
|
|||
|
动态光照需要使用多种照明技术协同工作,这一点与只需要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://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
|
|||
|
控制阴影边缘的锐化程度。
|
|||
|
#### 调整级联阴影以得到更好的效果
|
|||
|
通过调整上述设置,可以很好地调整阴影的出血值和精度。下一节将尝试调整到最佳成都,以获得更好的精度与阴影。找到一种适合任何特定游戏的平衡将需要耗费时间、精力来进行大量测试。
|
|||
|
|
|||
|
以下是默认设置下会出现的问题。
|
|||
|

|
|||
|
|
|||
|
调整后的结果
|
|||
|

|
|||
|
|
|||
|
#### 远距离阴影(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)
|
|||
|
### 距离场模型问题
|
|||
|
因为距离场使用体积贴图来存储空间信息,所以对于巨大物体(比如摩天大楼)应该把模型拆成小块,以减少性能损耗。
|
|||
|
|
|||
|
同理,模型的形状也不应该奇形怪状,这样会大大的影响距离场构建质量。
|
|||
|
|
|||
|

|
|||
|
### 植被渲染注意
|
|||
|
因为植被面数高、结构复杂等因为因素,不适合使用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://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选项
|