206 lines
12 KiB
Markdown
206 lines
12 KiB
Markdown
|
# 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
|
|||
|
级联阴影的远阴影开关,可以解决当摄像机处于较远距离时,物体的阴影会消失的问题。
|
|||
|
|
|||
|
#### 调整级联阴影以得到更好的效果
|
|||
|
通过调整上述设置,可以很好地调整阴影的出血值和精度。下一节将尝试调整到最佳成都,以获得更好的精度与阴影。找到一种适合任何特定游戏的平衡将需要耗费时间、精力来进行大量测试。
|
|||
|
|
|||
|
以下是默认设置下会出现的问题。
|
|||
|

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

|
|||
|
##### 对于所有的动态光源
|
|||
|
###### Shadow Bias
|
|||
|
控制阴影在场景中的精确程度。默认值是0.5,这是权衡了精度与性能的值。
|
|||
|
###### Shadow Filter Sharpness
|
|||
|
控制阴影边缘的锐化程度。
|
|||
|
|
|||
|
##### 为什么可移动光源在较远时其遮挡关系会出错
|
|||
|

|
|||
|

|
|||
|
|
|||
|
为了解释这一点,我们首先需要了解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,后期空间开启人眼自适应。
|
|||
|

|
|||
|
<center>直接光照与一次反弹的间接光照</center>
|
|||
|
|
|||
|

|
|||
|
<center>只有一次反弹的间接光照</center>
|
|||
|
一个较为暴力的手法就是提高光照贴图分辨率,但这不是最好的方法。因为这样做会增大内存消耗。
|
|||
|
|
|||
|

|
|||
|
<center>光照贴图分辨率为1024的结果</center>
|
|||
|
|
|||
|
在WorldSettings——LightMass中,可以对以下参数进行设置:
|
|||
|
##### Indirect Lighting Quality
|
|||
|
控制间接光照的质量,以获得更佳的效果。
|
|||
|
##### Indirect Lighting Smoothness
|
|||
|
控制光照贴图中细节的平滑度。
|
|||
|
##### Num Indirect Lighting Bounces
|
|||
|
间接光照光线的反弹次数。
|
|||
|
|
|||
|
在对这些参数进行调整后,即使是光照贴图分辨率为512,其效果也比1024的好了。
|
|||
|

|
|||
|
<center>光照贴图分辨率为512</center>
|
|||
|
|
|||
|

|
|||
|
<center>光照贴图分辨率为1024</center>
|