个人博客完整原文:https://alvincr.com/2021/02/ue4-1-rendering/
评价渲染工具的好坏参考:渲染质量、渲染功能及性能。
1 整体流程
AlvinCR认为渲染并不是一个具体步骤,而是与其相关的多个流程。
与渲染有关的一切都是使用r.rendering函数。
渲染的准备工作:
可视性(包括遮蔽)——>渲染——>基础通道(属于渲染过程,基础通道材质包含:几何体、绘制和调用、预计算光照)——>GBuffer(是一条基础通道,需要GBuffer是因为基础通道采用延迟渲染器)——>动态光照和阴影——>反射——>后期处理——>可拓展性及性能
2 具体过程
2.1 可视性
在渲染的之前,需要使用CPU进行计算,然后将需要渲染的帧提供给GPU,因此CPU必须在渲染前一帧之前完成相关计算,因为使用CPU可以明确物体的存在方式、位置及是否需要渲染。
功能:
距离剔除。超出距离限制的物品将会禁用,默认开启
视锥剔除。用于识别镜头内外需要渲染的对象
预计算可视性。适用于移动设备、低端设备
可视化剔除。核心单元,上面三项都是为可视化剔除工作,能够实现的基础在于:每个网格体都能准确隐藏和包含它背后的对象,因此能够使大部分遮蔽准确地识别。
2.2 渲染
渲染包括:Z通道和基础通道。Z通道作用:渲染景深;基础通道作用:渲染几何体的所有部分,会在渲染时逐一处理每个绘制调用。因此渲染的重点在于基础通道。
基础通道最主要的实现在于:绘制调用、基础通道材质(包括光照贴图)、动态实例化。
GBuffer
GBuffer是基础通道的一部分,下面简称GB,GB能够将自己渲染成同一画面的不同版本,通过GB的渲染可以得到:世界法线(缓冲A)、高光度和粗糙度以及金属度(缓冲B)、底色及光照(缓冲C)、其它Buffer(缓冲D、E等等)
这些缓存是由各个图像保存后得到的,可以设置其他延迟渲染。中间显示的图片是由四周的各个缓存整合得到的最终效果图,因此可以对已渲染的版本进行其它渲染操作。
2.3 动态光照阴影
通过动态光照阴影组合可以实现渲染阴影的效果,由于室内和室外的阴影渲染很难采用同一种方案进行,因此需要根据情况来采用不同的解决方法
直接光照。间接光照、介于光照与阴影、光照和阴影
www.alvincr.com
2.3.1 影响光照的因素
直接影响
- IES纹理用于得到更加逼真得光照效果,详情看附录
- 光照函数。支持使用材质与光照混合,可以用于生成水火的效果,还能实现云在地上的阴影效果。
间接影响
- 光照传播系统。过时程序,用于提供实时全局光照。
- 光追GI,目前并不常用
2.3.2 影响阴影的因素
直接影响:
- 法线动态阴影,默认使用缓存生成阴影缓存
- 级联阴影贴图,是三种不同的阴影贴图采用级联方式进行合并,将阴影分成低、中、高三种质量,能够在不同距离进行显示,因此专用于室外环境,
- 距离场阴影。由于阴影渲染必须考虑阴影的几何体贴图,因此会占用大量的资源,但是如果不考虑几何体本身,而是通过对阴影进行预测,那么渲染的速度会大幅提升。通过Mesh DistanceFiled函数可以视点与物体之间的距离,将网格体距离场信息存储在内存中,因此可以提升长时间运行的效率。虽然距离并不是很准确,但是用于远距离阴影足矣,这样就可以设置非常远的阴影了,不过不能用于骨骼网格体。
- 光追阴影。既可以单独使用,也可以混合使用。
- 嵌入式阴影。用于提升角色展示效果。
- 各对象本身阴影。用于提升角色展示效果。
- 接触阴影。用于产生细小的阴影。
间接影响:
- 胶囊体阴影。属于大幅简化的阴影,适用于所有骨骼网格体,因此对于生成大量单位的阴影并且阴影要求不高的时候,具有很好的效果。
- 距离场环境光遮蔽DFAO。适用于非常大并且非常重要的对象,对于精细的对象效果并不好,主要适用于天空光照等室外环境。它使用世界场景中的距离场网格体来给环境光遮蔽着色。
- 光追AO。
2.4 反射
采用堆叠设置方式,从而最大限度减少开销最高的效果。
反射捕获-》平面反射-》
- 反射捕获,性能开销最低,捕获的信息存储在硬盘中,因此可以在世界场景中放置大量的反射捕获。
- 平面反射。精度偏低,性能开销较大,只适用于完全平整的表面,例如地板。墙壁、金属表面并不适合。
- 屏幕空间反射。可以随时调整质量。
- 光追反射。
2.5 其它设置
可以设置天空和大气、指数高度雾和大气雾。
雾:
- 高度雾。用于设置远处和高处雾的淡出效果。
- 大气雾。
- 远距离雾。
- 指数高度雾。可以用来处理体积雾,会读取光照贴图及其设置,用于渲染
- 体积材质。
半透明:
- 材质:设置混合模式和着色模型。
- 半透明度:可以设置屏幕空间反射、光照模式、。其中光照模式主要使用:体积无方向、逐顶点体积无方向、表面向前着色(效果最好,开销最大)。
2.6 后期处理
- 标准色调映射器。执行色调映射实现颜色校正、色调校正、对比度校正。
- 泛光。包括:标准反光、卷积设置(游戏中默认不用,因为性能开销较大)
- 屏幕空间AO,SSAO。
- SSSSS,屏幕空间次表面散射。通常用于皮肤的屏幕空间特效,主要适用于人,树叶也可以。
- SSGI,屏幕空间GI。在整个屏幕空间内实现近似全局光照的效果。
- 景深。包括:高斯景深(用于游戏,效果较差,性能较好)、散射景深、圆形或过场动画景深。
- 曝光度。
- 可混合物。可以使用材质编辑器来进行后期处理,以此来实现各种特效效果。属于内置特效,因此包含在引擎之中,通过可混合物可以启用:粒子、晕映、镜头炫光、尘土遮罩、色差
2.7 性能
主要设置CVar
三:其它
- 统计数据面板。可以合并网格体
- 细节模式。
- 远阴影。类似于远处消退的级联影影贴图。
- 光照范围。可以设置最大绘制距离,还可以生成蓝图去检测距离。
- 材质开销。
- 半透明度。半透明材质的指数十分影响性能,因此在设置材质时应尽可能的关注。使用体积无方向进行测试的速度最快,但是显示的阴影十分模糊。
- 烘焙光照。