本文为虚幻4官方光照教程学习笔记。
整理如下。
动态阴影的开销非常大!不需要产生阴影的光源尽量禁用阴影以节省开销。
Lightmass设置
Num Indirect Lighting Bounces(间接光照反射数量)
Indirect Lighting Quality(间接光照质量)
Num Sky Lighting Bounces(天空光照反射数量)
以上参数能有效提升光照贴图质量
Lightmass Importance Volume(Lightmass重要体积)
明确渲染范围,在该范围内提供最高的渲染质量
Lightmass Portal(Lightmass门户)
帮助把来自天空和大气的光照反射进室内——较为昏暗和缺少光照的室内,只有较小的窗子,使用Lightmass门户可以告知引擎将更多的光照射进室内。这样再经过室内反射,提高室内的可见度。
Lightmap(光照贴图)
定位方式——Settings-World Settings-Lightmass
虚幻4生成的光闸贴图要比一般的光照贴图复杂一些。会有一些颜色怪异的区域。实际上,虚幻4会为这张帖图生成两个不同版本。
光照贴图本质上是一张采集了颜色和阴影的图像,然后将它和模型纹理相乘。
所有需要通过引擎生成光照贴图的模型都需要准备供引擎使用的光照贴图UV坐标,我们查看模型是否准备好该UV通道:
打开某个模型的“静态网格体编辑器”(在底部Content Brower直接双击模型或在视口右键点击该模型-选择‘Edit [你的模型名字]’),顶部栏点击UV,查看是否存在UV channel 1。通常该UV通道会自动生成。如果不存在此用于生成光照贴图的UV通道,也可以手动生成,方式如下:
Details-LOD0-Build Settings(这里的窗口实际上在我们导入模型时也会自动弹出一次)-勾选Generate Lightmap UVs,也可以继续更改min Lightmap Resolution(最小光照贴图分辨率),这个分辨率需要根据模型大小已经我们的项目具体情况决定。
设置好之后回到顶部栏,打开UV内生成的新UV,就可以查看到引擎自动为该模型生成的Lightmap UV,这样这个模型就做好了生成光照贴图的准备。(这一步也可以在引擎外使用其他3D软件生成UV,如果项目对品质要求极高,也可以手动调整UV)
Volumetric Lightmap(体积光照贴图)
视口-Show-Visualize- Volumetric Lightmap
它会像这样显示出网格状的排列,它的密度是由Lightmass重要体积以及距离模型的远近决定的。它们储存了本次烘焙环境时刻的光照信息,这些信息时为场景中存在移动的动态物体准备的。
我理解这个工具类似于Unity中的光照探针,不过虚幻4可以自动生成,提及它只是为了方便理解引擎背后的工作原理,并且提示我们不要忘记在场景中可能存在的动态物体,它们的阴影生成方式与静态物体烘焙光照贴图不同。
点光源属性
Source Length 光源长度
Source Radius 光源半径
这两个参数配合调整,可以让光源适配一些特殊形状。
室外动态光照
将光源设置为固定或可移动光源时,光源
级联阴影贴图CSM属性
即根据阴影相对摄像机距离,调整阴影质量,以优化性能节省开销。
Dynamic Shadow Distance值越低,阴影消失的越早,但近距离观察时阴影越锐利,即阴影质量越高。
Num Dynamic Shadow Cascade指阴影贴图数量,将阴影分为几个层次逐级降低。
距离场阴影
Settings-Project Settings-检索distance
将其可视化的方式:视口-Show-Visualize-Mesh Distance Fields
实际上阴影是由非常不精确的近似模拟的模型网格体产生的,而不是模型本身。这种近似的模拟可以优化场景性能。
勾选RayTraced DistanceField Shadows(光线追踪距离场阴影),当摄像机距离超出时,级联阴影贴图转换为距离场阴影,但距离场阴影不再支持动态阴影。因此我们一般可以混合使用CSM和距离场阴影。在近距离时使用CSM,远距离时使用距离场阴影,在保证阴影质量的同时节省开销。
DFAO-距离场环境光遮蔽
不太常用。由天空光源产生,将天空光源设置为可移动。
这种属性试图利用室外光源和距离场网格体信息,实现室内的光线反射。
IES-丰富光照层次
Details-Light Profiles-IES Texture
最适用于SpotLight(聚光灯)
可以使用一些外部工具创建IES纹理,也可以在引擎内部创建
如果直接将光源属性设置为静态,IES属性会变灰。可以先将光源属性设置为固定或可移动,设置好IES后再将光有类型改为静态,依然可以烘焙出IES纹理。
Light Function(光照函数)
将材质和光照进行混合。
操作1:将材质配置成特殊的光照函数材质
操作2:准备一张光照纹理贴图,并将其串联到材质的自发光节点
操作3:创建一个SpotLight并将其设置为Movable(可移动),并将准备好的材质拖到该光源的光照函数材质栏(Light Function Material)
效果如下
操作4:调整材质,增加动态效果(以下部分涉及材质相关知识,需要另外学习)
调整Panner节点SpeedX/SpeedY属性值
此时已经可以看到动态效果,继续调整其他节点参数值达到更佳视觉效果
这种高级光照一般适用于水面散焦,火焰飘动的光照等
反射
为了制造反射效果,有以下几种制造反射效果的方案。
第一种:屏幕空间反射
如果模型所使用的材质光滑度够高,那么模型会实时反射出周边镜像,实际上是将周围的场景信息渲染到模型表面的像素点上,并与噪点融合,营造出反射的现象。
这种方案优点是提供实时的反射画面,缺点是噪点较强,反射画面不太清晰。
第二种:Reflection Capture(反射捕获)
调用方式:Visual Effect-Sphere Reflection Capture/BoxReflection Capture
球状和盒状的唯一区别只是形状不同,绝大多数时候我们使用球状反射捕获即可
将该Actor放置在需要清晰反射效果的模型周围,呈现效果如下:
使用反射捕获能够帮助我们得到更清晰锐利的反射效果。
反射分辨率调整:Settings-Project Settings-检索Reflection找到Reflection Capture Resolution
关于反射捕获需要注意它的缺点(优点就是反射画面清晰):
1. 反射画面会跟随反射捕获Actor移动,需要进行主观判断,无法提供精确的反射画面位置
2. 屏幕空间反射(UE4默认自带反射效果)是实时的,但反射捕获无法提供实时反射
第三种:Planar Reflection(平面反射)
只能用于平面的反射效果,即对象的表面是平整的。如:镜子,相框,水面,玻璃等。
这种方案的优点是我们可以自己选择是进行实时的反射渲染(开启逐帧渲染Capture Every Frame)还是进行一次渲染。缺点是实时反射渲染的性能开销会非常大,比较适用于小面积反射区域。且对反射物体的形状要求非常严格。
注:使用这种反射需要导Settings-Project Settings-检索global找到如下并开启
第四种:Scene Capture
用渲染目标捕获反射的一种方式。适用于需要实时高反射的表面,并且开销非常低。如监控画面。
这种方式不是很常用(我也不是很明白为什么,看起来好处多多),如果需要用到可能要单独了解一下这种方式。
大气雾Atmospheric Fog
将大气雾拖入场景中,同时还会生成地平线。此时的颜色与定向平行光源(Directional Light)有关。在Directional Light的细节面板中找到Atmosphere Fog/Sun Light(大气雾阳光),勾选之后,大气雾将自动把定向光源作为太阳光,根据太阳的方向和位置来调整大气的颜色。
生成的SunDisk可以在Directiional Light的Details面板中禁用。调整定向光的角度,甚至可以实现从日到夜的颜色过渡。
Exponential Height Fog 指数高度雾
比大气雾简单。这种雾会随着高度的增加之间降低浓度。这种特性在海拔差异大的场景中能得到有趣的利用。此时在Directional Light的细节面板中找到如下属性:
可以看到Light Shaft Occlusion(光束遮蔽)和Light Shaft Bloom(光束光晕)
开启光束遮蔽后,可以得到如下效果:
开启光束光晕的效果如下:
光束遮蔽透射出更暗的光线,而光束光晕透射出更亮的光线。也可以同时开启。
在指数高度雾的细节面板中可以开启体积雾属性。
将光束遮蔽,光束光晕以及体积雾同时开启时能得到较好的光线投射效果,即光线边缘更加锐利清晰。在光源属性下可以调节体积散射强度
如图左一为光源的体积散射强度为0时的效果。这个值可以调节光源对雾气的影响程度,制造出体积光的效果。如秋天雾气浓重的夜晚车前灯的效果。