BlueRoseNote/03-UnrealEngine/Rendering/Lighting/Ue4照明技术引导视频笔记.md

206 lines
12 KiB
Markdown
Raw Normal View History

2023-06-29 11:55:02 +08:00
# Ue4照明技术引导视频笔记(静态光照部分)
https://www.youtube.com/watch?v=jCsrWzt9F28&list=WL&index=7&t=0s
https://forums.unrealengine.com/unreal-engine/events/107078-training-livestream-lighting-techniques-and-guides-jan-24-live-from-epic-hq?134388=
https://cdn2.unrealengine.com/CommunityTab%2FEnglish%2F2017%2FJan+23%2FLiveStream_Lighting-11f85d1762b463154b5f53f7468e135f65955bed.zip
https://wiki.unrealengine.com/LightingTroubleshootingGuide
## Volume
### Lightmass Importance Volume
用于提高指定区域内的LightMap烘焙效果主要是间接照明区域外的默认为低质量效果。
### LightMass Character Indirect Detail Volume
提高区域内的间接光照缓存的密度(缓存点会更加密集)。
## 间接光照缓存
### 模型中光照选项
## LightMass设置
### 解决LightMass漏光问题
1、提高间接光照的质量WorldSetting-》Indirect Lighting Quality<br>
2、降低WorldSetting-》Indirect Lighting Smoothness的值(但是构建时间会增加)
3、尽量使用整块模型
## 地形阴影
### 远距离阴影(Far Shadow)
一般是方向光作用在地形上的阴影使用的是Cascaded Shadow Maps。<br>
相关选项有:
方向光源-》Cascaded Shadow Maps-》 Far Shadow Cascade Count阴影精细程度与Far ShadowDistance显示距离
可以通过show=》advanced=》ShadowFrustums显示阴影调试只对方向光有效。以此可以观察Cascaded的级数切换距离。
地形是默认开启Far Shadow的Actor需要手动开启。
## 自发光物体
后处理空间中除了设置GI倍率还可以自定义GI的颜色。
讲了自发光材质的GI这里有了个取巧的方式通过PostProcessVolume绑定自发光物体来调整Gi好尴尬
2017年的版本还是通过LPV来实现的GI。
## LightMass Debug
在构建选项里有一个Use Error Coloring选项可以用来标记UV不合格的物题但在产品级质量构建中则不会显示这些Debug标记。
## Lighting Info位于构建按钮菜单中
里面可以调整LightMap渲染密度选项、空间占用大小以及分辨率调整。
# Ue4照明技术引导视频笔记(动态光照部分)
https://www.youtube.com/watch?v=nm1slxtF_qA
https://forums.unrealengine.com/unreal-engine/events/113380-training-livestream-lighting-techniques-and-guides-2-dynamic-light-april-4-live-from-epic-hq?140547=
## 距离场光线追踪技术
首先需要开启距离场生成,在项目设置——渲染——灯光——勾选 生成模型距离场 选项。
级联阴影在显示远阴影时为了效果会增加阴影级数这样会增加消耗而距离场阴影的消耗相对较小所以会采样近距离级联远距离距离场阴影的配合方式。同时它可以解决因为屏幕空间渲染技术而导致的阴影失真的问题。另一个主要用处就是距离场AO了。或者可以使用距离场来写Shader。
模型距离场在模型Asset设置中有个分辨率缩放选项的分辨率会影响阴影效果投射到别的物题上的阴影与自阴影。从视频可以看出阴影缺少了很多细节而且并不正确。此时勾选Show——Visualize——MeshDistanceField查看模型距离场从而选择合适的分辨率对debug阴影有很大帮助。
### 如何开启
需要在灯光处勾选“Ray Tracing Distance Field Shadow”选项开启。
### 较为的使用场景
渲染树木植被等高面数、复杂物体的阴影。
### 植被渲染注意
对于树叶等需要双面渲染的物体需要在模型设置中勾选Two-Sided Distance Field Generation以生成正确的距离场。
### 级联阴影切换
可以对灯光中的Cascaded Shadow Maps——Dynamic Shadow Distance MoveableLight进行设置来达到级联阴影与软阴影的切换靠近物体会切换成级联阴影
### 几个调试用命令
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
### 其他注意事项
光源中的SourceRadius会对软阴影产生影响学过光追的人都知道为什么
## 胶囊阴影
因为也是一种软阴影方案所以光源的LightSourceAngle选项也会对此产生影响。
### 如何启用
1. 在角色Asset中指定ShaowPhysicsAsset。
2. 在角色Asset的Lighting选项卡中勾选Capsule Direct Shadow或者Capsule Indirect Shadow
## 接触阴影(Contact Shadows)
ContactShadowLength参数大于0时就会开启默认是关闭的。视频使用值为0.02
### 原理
将接触阴影的长度设为大于零的值后,渲染器将通过场景的深度缓存从像素的位置到光源进行光线追踪。举一个典型的例子来说,将接触阴影长度的最大值设为 1此处的 1 则代表光线遍历整个屏幕。而将接触阴影长度的值设为 0.5 则意味着光线遍历半个屏幕。注意:场景深度缓存中的获得的采样将保持不变,意味着增加接触阴影的长度时将出现更多噪点(穿帮)。长度为 0.75 的接触阴影比长度为 0.1 的接触阴影生成的噪点更多。
### 应用场景
1. 当前平台只支持一个光源且需要使用Marching实现的视差Shader。
2. 角色细节阴影与墙面植物(爬山虎)阴影。
## 级联阴影
级联阴影分为近阴影与远阴影。两者皆可以设置数量、过度距离以及过度参数(在光源中设置)。
当然想要真正显示远阴影则需要勾选物体中的Far Shadow选项。
## 其他技巧
### 天光(SkyLight)
天光也有距离场AO的选项在调试时需要关闭别的光源进行调试。
### HDRI Backdrop
https://docs.unrealengine.com/en-US/Engine/Rendering/LightingAndShadows/HDRIBackdrop/index.html
4.23处的新功能对于CAD产品展示有很大帮助。
# Wiki笔记
部分条目的解释有配图,我懒得贴了,所以推荐直接看原文。
## 问题解答
### 静态部分
#### 为什么我的阴影死黑?
在光照条件下深黑色阴影通常意味着没有填充光。这种情况经常发生在室外环境中一个方向的光代表太阳。UE4有一个内置的方法来提供一个影响填充光的世界我们把它称为天光。
#### 不想生成光照贴图
1. Rendering——Lighting——AllowStaticLighting确保引擎不会生成光照贴图。项目级
2. 打开世界设置——Lightmass——Force No Precomputed Lighting。(关卡级)
#### 双面渲染物体的阴影问题
1. 在StaticMesh——Lighting——LightMassSetting中勾选UseTwoSidedLighting。仅对静态光照
2. 在物体的材质选项中勾选TwoSided
#### 灯光上出现X标记
因为有超过4个光源重叠在一起这样会严重影响性能。动态光在该重叠区域会强制设为一个动态光源而静态光源会在烘焙光照时弹出重叠提示。
### 动态部分
#### 阴影不正确
##### 方向光
###### 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
阴影淡出参数。较高的值会使阴影显得较淡一些,而较低的值会使阴影显得较深一些。
###### Far Shadow
级联阴影的远阴影开关,可以解决当摄像机处于较远距离时,物体的阴影会消失的问题。
#### 调整级联阴影以得到更好的效果
通过调整上述设置,可以很好地调整阴影的出血值和精度。下一节将尝试调整到最佳成都,以获得更好的精度与阴影。找到一种适合任何特定游戏的平衡将需要耗费时间、精力来进行大量测试。
以下是默认设置下会出现的问题。
![image](https://d26ilriwvtzlb.cloudfront.net/a/ae/1AdjustingSettings2_ProblemAreas.png)
调整后的结果
![image](https://d26ilriwvtzlb.cloudfront.net/8/8c/1AdjustingSettings2_finalResult.png)
##### 对于所有的动态光源
###### Shadow Bias
控制阴影在场景中的精确程度。默认值是0.5,这是权衡了精度与性能的值。
###### Shadow Filter Sharpness
控制阴影边缘的锐化程度。
##### 为什么可移动光源在较远时其遮挡关系会出错
![image](https://d3ar1piqh1oeli.cloudfront.net/4/4a/1.png/642px-1.png)
![image](https://d3ar1piqh1oeli.cloudfront.net/0/09/4.png/642px-4.png)
为了解释这一点我们首先需要了解Ue4的渲染优化方法。引擎根据场景深度来判断场景中Mesh的可见性首先物体需要处于摄像机矩阵中如果Mesh过于远离摄像机Mesh将不会被渲染或是被遮挡。所以就会出现图中的现象。
你可能会注意到,当选择物体时,灯光恢复正常。这是预料之中的,因为它处于焦点状态。
解决方法是在Mesh属性界面调整Bounds Scale选项的大小。默认值设置为1.0。建议的调整范围为1.1、1.2左右,调整的量不宜过大,会影响性能与阴影质量。
可以viewport > Show > Advanced > Bounds 开启包围盒显示进行debug。
另一个解决思路就是使用聚光灯或者使用静态光烘焙光照贴图。
### 静态部分
你可以在世界设置中的LightMass调整以下参数以获得更好的效果
Indirect Lighting Quality设置成2或者更高。
Indirect Lighting Smoothness通常被设置为0.65~0.7之间。数值越低噪点会越多。
#### 如何控制静态照明的全局照明效果?以及光线反弹的美妙之处
默认情况下LightMass的光线反弹次数为3我们可以在Settings > World Settings > LightMass
中修改反弹次数以获得更好的效果。
光线的第一次反弹所需的计算时间是最长的。之后的反弹对实际构建时间的影响较小,但对视觉效果的影响也要小得多。
#### 解决阴影“脏”的问题
首先这种现象的原因与GI中的间接光照有关。
以下使用默认场景来创建2个测试用的关卡其中Mesh的光照贴图分辨率设为256后期空间开启人眼自适应。
![1st Interior Room, lit with direct and 1st bounce lighting](https://d3ar1piqh1oeli.cloudfront.net/4/42/3_Room1_Clean.png/553px-3_Room1_Clean.png)
<center>直接光照与一次反弹的间接光照</center>
![image](https://d3ar1piqh1oeli.cloudfront.net/c/c6/4_Room2_dirty.png/551px-4_Room2_dirty.png)
<center>只有一次反弹的间接光照</center>
一个较为暴力的手法就是提高光照贴图分辨率,但这不是最好的方法。因为这样做会增大内存消耗。
![image](https://d3ar1piqh1oeli.cloudfront.net/7/78/5_lightmap1024.png/550px-5_lightmap1024.png)
<center>光照贴图分辨率为1024的结果</center>
在WorldSettings——LightMass中可以对以下参数进行设置
##### Indirect Lighting Quality
控制间接光照的质量,以获得更佳的效果。
##### Indirect Lighting Smoothness
控制光照贴图中细节的平滑度。
##### Num Indirect Lighting Bounces
间接光照光线的反弹次数。
在对这些参数进行调整后即使是光照贴图分辨率为512其效果也比1024的好了。
![image](https://d3ar1piqh1oeli.cloudfront.net/0/0a/15_FinalResult.png/551px-15_FinalResult.png)
<center>光照贴图分辨率为512</center>
![image](https://d3ar1piqh1oeli.cloudfront.net/7/78/5_lightmap1024.png/550px-5_lightmap1024.png)
<center>光照贴图分辨率为1024</center>