虚幻引擎学习之路:渲染模块之全局光照明

简介:

关于全局光照

全局光照是增强渲染真实感的有效方法,也是游戏引擎中不可缺少的一部分。Unreal 4和Unity引擎都分别支持了全局光照效果。在Unreal 4引擎中,全局光照烘焙采用的是Lightmass,而Unity 2017中则采用了Enlighten或Progressive。下图显示了Unreal 4引擎使用全局光照的渲染结果图。

请输入图片描述
Unreal4引擎全局光照渲染结果,取自Unreal 4美术博客【1】

全局光照的算法有多种,Unreal 4引擎中Lightmass采用的是Photon Mapping算法【2, 3】,Unity引擎中Enlighten采用的是辐射度算法【4, 5】。由于辐射度算法主要针对的是漫反射表面,因此对于镜面反射表面Enlighten难以计算其对间接光照的影响。所以,Unity引擎在Shader中对于这部分间接光照提供了补偿方法,即“Meta Pass”。在Standard Shader中,自带有“Meta Pass”的定义。而对于自定义的Shader,如果需要使用Lightmap可以参考Standard Shader中的定义。Unreal 4引擎由于使用了Photon Mapping算法,则不需要考虑这一问题。

在接下来的内容中,本文将分两部分对Unreal 4引擎中的Lightmass全局光照系统的使用进行介绍,其中包括:静态物体全局光照、动态物体全局光照和阴影效果。在介绍的同时,本文也对Unity中的相应功能进行对比,从而让读者更好地对了解Unreal 4引擎中的全局光照功能。


静态物体全局光照

本节主要介绍Unreal 4引擎中静态物体全局光照效果。其中主要包括:Color Bleeding和Ambient Occlusion。然后,将对Unreal 4引擎中影响全局光照烘焙质量和时间的参数进行说明。最后,介绍Unreal 4引擎中对相同场景使用多套全局光照烘焙效果的功能。

2.1 Color Bleeding
在Unreal 4和Unity引擎中,静态物体的全局光照效果都采用了Lightmap烘焙的方法。Lightmap其实是一张记录了静态物体光照信息的纹理。对于静态物体,其位置和几何形状都不会发生改变。在光源位置方向也不变的情况下,引擎可以对光线在漫反射材质表面多次反射的过程进行预计算,从而获得物体表面最终的间接光照信息。在实时计算时,只需要将纹理中对应位置的间接光照信息解析出来,并与直接光照一起参与计算,就可实现漫反射表面不同颜色物体之间相互辉映的效果,其也被称为Color Bleeding效果。

在Unreal 4引擎中烘焙静态全局光照,只需将物体的属性设置为Static,并且将光源设置成Stationary,然后点击Build进行烘焙即可,如下图所示:

请输入图片描述

烘焙结束后,在编辑器的Console页面会显示烘焙数据,主要反馈相应的烘焙耗时和内存使用,如下图所示:

请输入图片描述

然后编辑器中即可看到烘焙效果:

请输入图片描述

相应的,Unity引擎的全局光照系统Enlighten也同样支持Color Bleeding效果,其烘焙效果如下图所示:

请输入图片描述

当Lightmap烘焙好之后,还可以在Unreal 4和Unity引擎中查看Lightmap纹理贴图。在Unreal 4引擎中,可以在World Settings->Lightmaps页面中查看,在Unity引擎中可以在Lighting->Global maps页面中查看,如下图所示:

请输入图片描述

Unreal 4和Unity引擎的Lightmap都采用了HDR格式,烘焙过程也是采用HDR渲染。在默认情况下两者Lightmap都包含了Directional信息,但都支持关闭Directional。Unreal 4引擎可以通过Project Settings->Platforms设置,Unity中可以通过Lightmapping Settings->Directional Mode设置,如下图所示:

请输入图片描述

2.2 Ambient Occlusion
Unreal 4和Unity引擎的全局光照系统都支持世界空间Ambient Occlusion的烘焙。在Unreal 4中其设置是在World Setting的Lightmap中,此处相当于Unity引擎中的Ambient Occlusion功能(Lighting->Lightmappings Settings页面中) ,如下图所示:

请输入图片描述

下图显示了Unreal 4引擎中,关闭和开启世界空间AO的渲染效果:

请输入图片描述

2.3 烘焙质量与时间
在Unreal 4引擎中,除了通过Lightmass Importance Volume提高烘焙质量和效率外,还可以通过调整参数获得不同质量的烘焙效果。Unreal 4引擎的World Settings中提供了一系列参数控制烘焙的质量,如下图所示,其中红框处的参数是对烘焙时间产生影响的重要参数。

请输入图片描述

通常情况下,质量越高对应烘焙的时间越长,对此,本文针对上述参数的不同设置进行了实验,对烘焙时间进行了统计,从而来说明这些参数对于烘焙效果的影响。其中Lighting Quality采用了Production等级,场景如下图所示:

请输入图片描述
请输入图片描述
请输入图片描述

下表显示了不同参数设置的烘培时间以及效果图:

请输入图片描述
表1:不同烘焙参数下的场景烘焙时间比较

- Static Lighting Level Scale 该参数表示了Irradiance Caching时的Recording Radius大小。它主要用于调节间接光照的精度,数字越小精度越高,同时带来的瑕疵也越多。其对预计算时间的影响较大,精度越高需要的预计算时间越长。表1中第一行和第二行数据则为不同Static Lighting Level Scale的烘焙时间比较,可以看出,该参数对于烘焙时间的影响较大

- Num Indirect Lighting Bounces 该参数表示了Photon Reflections的次数,次数越高间接光的亮度越高。但随着次数的增加,效果的变化程度递减。其对预计算时间的影响较小。表1中第一行和第三行数据则为不同Num Indirect Lighting Bounces,可以看出,当间接光反射次数增大时,场景的烘焙时间略有提升

- Indirect Lighting Quality 该参数表示了Final Gathering阶段的光线数目, Final Gathering阶段的作用是在最后计算Irradiance Caching 时,增加第一次Bounce的采样,如果不使用Final Gather,则第一次Bounce是Photon的反射,使用Final Gather则是Ray Trace的反射。增大其数值能够较少烘焙瑕疵,因此,其对预计算时间的影响很大。表1中第一行和第四行数据则为不同Indirect Lighting Quality的烘焙效果,从表中可以看出,Final Gathering阶段的光线采样数对烘焙时间影响很大,测试场景的烘焙时间增加了整整一倍时间

- Indirect Lighting Smoothness 该参数表示了在计算Irradiance Caching 时对Photon进行插值的比例(Interpolation ratio)。该数值越大,间接光照越平滑。其对预计算时间的影响较小。表1中第一行和第五行数据则为不同Indirect Lighting Smoothness的烘焙效果,从表中可以看出,其对于烘焙时间没有特别影响,时间几乎没有增加

2.4 Lighting Scenarios
在游戏制作过程中,有时会存在同一场景使用多套Lightmap的情况,如:模拟天气系统,以及一天中不同时段的光照等。在Unreal 4引擎中,可以利用Lighting Scenarios功能达到此效果。使用Lighting Scenarios时,首先需要创建不同的光照Level,然后在Level设置页面将其设置为Lighting Scenario类型,如下图所示:

请输入图片描述

另外,设置Level的加载方式为使用Blueprint加载:

请输入图片描述

接着,对不同Level设置不同的光照进行烘焙。烘焙结束后,在Persistent Level Blueprint中,添加Load Stream Level节点对Level进行加载,并设置要加载的Level名称Day,如下图所示:

请输入图片描述

当需要切换到夜晚的全局光照烘焙效果时,可使用该节点加载Night Level即可。渲染结果如下图所示,上下两图分别是白天和晚上的光照效果。

请输入图片描述
请输入图片描述
上图取自Unreal 4官方网站

小结:清晰的操作界面让Unreal 4引擎的烘焙功能足够简单、易用,其烘焙效果也十分惊艳,大家可以从上述的渲染效果种直接看到。但从我们的使用上来看,目前的烘焙效果是一次性计算完成,如果后续可以加入Progressive的烘焙方式,则会更加完美。


动态物体全局光照

对于动态物体全局光照,Unreal 4采用了在空间中分布光照探针,在烘焙时预计算间接光照,并利用PRT(Pre-computed Radiance Transfer)算法【6, 7】将光照信息用球面调和函数(Spherical Harmonics)进行存储。在实时光照计算时,再利用球面调和函数快速计算光照与材质的卷积得到间接光照效果。如果大家对于上述词汇比较陌生,那么大家可以想象Unity引擎中的Light Probe,这两种功能从本质上来说是一致的。目前,Unreal 4和Unity引擎中都使用了三阶球协函数进行表示。

在Unreal 4引擎中,提供了两种不同的方法渲染动态物体间接光照,ILC(Indirect Lighting Cache)和VLM(Volumetric Lightmap)。

3.1 ILC vs VLM
ILC是Unreal 4引擎4.18版本之前主要使用的方法。该方法会在场景中所有Static物体的上方设置了一系列光照探针。VLM是Unreal 4引擎在4.18以后新推出的方法。该方法不仅在Static物体表面,而且在空间中也设置了光照探针,如下图所示:

请输入图片描述
上图取自Unreal 4官方网站

其中,左图是ILC的光照探针分布,右图是VLM的光照探针分布。由于VLM在空间中分布更广,因此其获取的间接光照信息更准确。并且,ILC的光照插值计算是基于光照探针,而VLM的光照插值是基于渲染物体的像素,下图显示了两者在照亮场景中非静态物体时的不同效果:

请输入图片描述
上图取自Unreal 4官方网站

同时,VLM不仅能对动态物体产生间接光照,而且还对Fog产生间接影响,如下图所示:

请输入图片描述
请输入图片描述
上图取自Unreal 4官方网站

其中,左图是没有使用VLM计算间接光的效果,右图是使用了VLM计算间接光的效果。

小结:Unreal 4中光照探针在3D空间中是全自动自适应分布的,在保证视觉效果的情况下使用最少量的光照探针进行渲染,更重要的是,该操作可以避免大量的手工布置工作。另外,其对于雾效等环境的间接影响效果,让我们眼前为之一亮,该功能可以大幅提升特殊环境、特定场合的渲染质量。


阴影效果

本节将介绍Unreal 4引擎中的阴影效果,其中主要包括:Masked Shadow、面光源和半透明物体的阴影效果。

4.1 Masked Shadow
Unreal 4引擎对于树叶等使用Alpha Test方法渲染的物体的阴影能很好地渲染。通常情况下,采用Alpha Test渲染的物体都是在场景中渲染一个方形平面,然后在Shader中根据纹理的Alpha值来判断是否渲染某一像素,最后的渲染结果就会呈现出纹理中的形状。对于此类物体,Unreal 4引擎能很好地渲染出纹理中形状的阴影,如下图所示,其中,Unreal 4引擎的Shadow Map Texture Size为1024。

请输入图片描述

4.2 Area Light Shadow
Unreal 4引擎对静态物体阴影,在不开启Cascade Shadow Map的情况下,使用了一种叫做Signed Distance Field Shadow Map的方法进行渲染。它支持根据面光源的大小渲染出不同锐利程度的阴影。面积越小的光源其烘焙的阴影边缘越锐利,面积越大的光源其烘焙的阴影边缘越模糊,如下图所示:

请输入图片描述
请输入图片描述


其中,上下两图分别是Directional Light Area为1和3的渲染结果,其边缘模糊的柔和感非常自然。

4.3 Translucent Shadow
Unreal 4引擎对于半透明物体的阴影能够渲染出半透明影子的效果。该阴影效果只支持静态阴影,因此需要光源设置成Static,如下图所示:

请输入图片描述

然后,点击Build按钮烘焙,即可看到半透明阴影效果,如下图所示:

请输入图片描述

小结:Unreal 4引擎支持Masked Shadow、Area Light Shadow和Translucent Shadow等光影效果,并且将阴影的边缘处理的非常自然。


全局光照总结

Unreal 4引擎提供了完整的工具链来支持静态和动态物体的全局光照效果。在计算全局光照时采用了Photon Mapping算法,通过不同的参数设置可以达到不同质量的全局光照效果。Unreal 4引擎提供了同一场景使用不同全局光照设置的功能Light Scenarios,支持在不同全局光照效果进行切换。同时,其4.18版本提供了新的动态物体全局光照方法,该方法比之前的方法能够获取更精确的间接光照信息,并且对Fog等环境产生间接光照效果。另外,Unreal 4引擎提供了一些特殊阴影效果,如:Alpha Test的阴影,面光源阴影以及半透明阴影,其阴影边界的处理也是十分自然。Unreal 4引擎对于光影细节的处理和新功能所带来的强大效果,让我们在学习和使用过程中深感震撼。






原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
|
1月前
|
Windows
U3D引擎虚拟仿真课程加载缓慢怎么解决?实时渲染技术
针对以上问题,既要考虑原有资源的利旧使用,也要考虑用户使用的流畅体验。实时渲染云流化技术方案,可以很好地解决这两个问题。因为点量云流实时渲染系统,不仅仅是针对U3D/UE引擎,还可以是webgl网页的流化,直接将整个浏览器流化给用户来使用。这样可以将这些原来比较老的webgl课程放在服务器端,为服务器配置高性能的显卡和CPU ,在教学或者使用过程中直接使用服务器算力,用户侧只需要普通的电脑、平板等轻终端设备即可实时使用这些课程。而且高性能的显卡,一般可以支持数十个用户同时使用,可能一台服务器1-2张显卡就可以满足30-40个人使用(这里只是预估,具体以实际为准)。
15 0
|
6月前
|
监控 数据可视化 安全
如何使用webgl(three.js)实现煤矿隧道、井下人员定位、掘进面、纵采面可视化解决方案——第十九课(一)
three.js、webgl、3D煤矿隧道、三维井下人员定位、掘进面三维可视化、纵采面可视化、采集面可视化展示、设备检测、数字孪生、物联网3D、3d建筑、3d库房,bim管理系统
168 1
|
4月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
38 0
|
10月前
|
定位技术 API 图形学
unity-2D游戏官方案例--带视频案例(1)(层级渲染,物理碰撞,粒子动画,UI等多位基础一体化)
unity-2D游戏官方案例--带视频案例(1)(层级渲染,物理碰撞,粒子动画,UI等多位基础一体化)
131 1
|
11月前
|
JavaScript 前端开发 数据库
Unity3d(webGL)构建数字孪生小案例(包含完整的数据交互体系)附赠完整代码
Unity3d(webGL)构建数字孪生小案例(包含完整的数据交互体系)附赠完整代码,请关注公众号:拼搏的小浣熊,获取简化版的代码!
|
11月前
|
存储 数据挖掘 开发者
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen(2)
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen
|
11月前
|
存储 缓存 算法
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen(3)
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen
|
11月前
|
算法 图形学 开发者
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen(1)
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen
110 0
|
11月前
|
存储 数据挖掘 开发者
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen
JM
|
算法 图形学
实时全局光照技术(一)——开篇
去语雀阅读写在前面上图是计算机图形学领域里一篇经典论文的“预告图(teaser image)”,预告图通常是论文的结晶,放在开头用来吸引读者的。一些读者看到这张图片可能会想:“这张照片有什么吸引人的”?但是如果我说这不是照片,而是由计算机渲染出来的图片呢?计算机图形学论文的预告图一般是由论文中提出的技术渲染出来的,上图也不例外,但是它看起来太真实了,细节非常丰富(图中有标明),简直可以以假乱真!这
JM
400 0
实时全局光照技术(一)——开篇