IT培训-高端面授IT培训机构
云和教育:云和数据集团高端IT职业教育品牌
  • 国家级
    全民数字素养与技能培训基地
  • 河南省
    第一批产教融合型企业建设培育单位
  • 郑州市
    数字技能人才(码农)培养评价联盟

【技术分享】详解Unity 5中的全局光照(一)

  • 发布时间:
    2014-12-18
  • 版权所有:
    云和教育
  • 分享:

Unity5在图形仿真和光照特效方面做了重大改变。自从3.0版本开始,Unity的光照效果一直局限于烘焙好的光照贴图。但后续的时间里,我们在全局光照领域有了很大的提升与改进,现在,是时候将其中部分美好的特性从Unity的沙盒中开放出来了。其中之一的新图形特性就是基于新的和极大改善的光照流程基础上的全局实时光照。这也是本文的重点。

什么是全局光照?

GI算法是基于光传输的物理特性的一种模拟。他是一种模拟光在3D场景中各表面之间的传输的有效方式,他会极大的改善你游戏的仿真度。不仅如此,他还可以传达一种意境,如果巧妙的使用,可以有效得改善你的游戏体验。GI算法不仅考虑光源的直射光,而且还考虑场景中其他材质表面的反射光。传统上,在游戏中,由于实时性的约束,间接光照的模拟因性能消耗过大而被弃置一旁。

这些都是源于下面这个浅显的方程:

这个很简单。从某一观察点看到的光是从场景中物体表面点入射的光(Le)与从观察点上方的半球入射的光的叠加。Li描述的是从半球上某一角度w’ 入射的光。反射项p描述的是光线如何反射到观察点,这项的取值依赖于入射角w’和观察者的角度w。

细心的读者可能已经发现L(x,w)在方程的两边,而且有一个还在在积分式中。如果不是这种情形,我们也许已经计算出全局光照的结果。由于物理规律是不太可能去修改的,研究协会提出了一套解决方案。

其中最流行(最古老的)的是光线跟踪算法。这个算法从根本上改善了GI算法,在算法最困难的部分使用了一些比较耗时的技巧。光线跟踪在电影或者电视的CGI上使用了很多。尽管该领域涌现了大量的研究成果,但是一张图像的渲染还是要花费数秒的时间(哪怕使用非常先进的GPU)。

光线跟踪通常使用的是屏幕空间,所以,一张图像每一帧都需要重新渲染。这意味着,他完全支持完全动态的场景:灯光、材料、几何形状自由变换的动画。这也是一个缺点,因为每当摄像机移动的时候,一张新的图片需要被渲染,而这张新图像的收敛融合需要花费数秒钟的时间。这也导致他无法适用于游戏场景。

一张没有完全收敛融合的图像会有很多噪点,而且他是时间不相干的,所以,图像在完全收敛融合之前会有严重的闪烁。可以使用滤波来降低这种影响,但是不能彻底消除。下面是一些在不同收敛融合程度的图像。

最近,有了很多新的图像混合的算法,其中大部分都在GPU中运行,例如体椎追踪。这些算法中的大部分需要在具有一定内存大小的台式GPU上运行,他们只适合于高端PC系统。为了让全局光照在更多的平台(包括手机)下运行,这里做出了一些妥协。

Enlighten介绍:

Enlighten对于该问题提供了一套很好的解决方案。通过对问题的约束优化,他适用于各种尺度的终端机,从手机到街机,一直到高端的台式机。他已经被运用于Battlefield4,MoH Warfighter等AAA游戏。他是稳定可靠的。

他的基本思路是如果一些可见光是预计算的(上面那个GL方程右侧的积分体),那么在移动端实现实时光照就是可行的。

Enlighten允许的动态更改:

光源

环境光

材质属性(漫反射率和表面自发光)

GI仿真中的几何体部分必须被设置为静态的。但是动态的几何体可以使用GI根据静态几何体生成的光探针进行实时渲染。为了实现这个功能,Enlighten预计算GI实时仿真需要的数据。这个数据存储在一个实时模块中,该模块适用于大部分平台:SX, Windows, Linux, iOS, Android, PS Vita,PS3, PS4, Windows Phone, Xbox360 and XboxOne。WebGL目前正正在开发中,还不确定何时支持。

Enlighten输出数据如下:

实时光照

实时光探针

实时立体贴图

Enlighten受限于GI对于漫反射传输的计算。漫反射是最重要的传输方式,因为他包含了全局光照的信息。由于漫反射是低频的,所以实时光照贴图可以是一张实时更新的低分辨率图像。另外通过增加动态更新的立方贴图来实现镜面/光滑面的反射。在Heckbert notation中,Enlighten使用了光线追踪子集L(D)*(S|G)?E。这意味着Enlighten包含了大部分的GI效果。而缺失的效果中最重要的是镜面反射(俗称散焦),你得用些技巧来达到该效果。

下面是使用Enlighten,两种不同的光线设置渲染图像的例子。这些光线设置是完全动态的,而且之间的切换时瞬间的。

Viking Village – dawn

接下来的这个镜头,使用了更加明亮的蓝色天空和更高更强烈的阳光:

Viking Village – sunny day

下面这个镜头降低了阳光的强度,环境光为灰色且不饱和的。主要为环境光照:

Viking Village – overcast day

最后是一张日落时分温暖静谧的画面:

Viking Village – sunset

使用这种技术,可以赋予你游戏非常逼真的时间周期。(未完待续)