专栏/让你在和别人讨论游戏画面时脱颖而出——游戏引擎中基于物理渲染的基础部分(2)

让你在和别人讨论游戏画面时脱颖而出——游戏引擎中基于物理渲染的基础部分(2)

2018年04月03日 10:54--浏览 · --喜欢 · --评论
粉丝:4.8万文章:4


本篇上文内容请查看本人的专栏,亦或是直接进入CV312653

如果觉得是干货的各位观众们,请不吝啬地点一下推荐投个币吧,谢谢

五、双向分布反射函数(Bidirectional Reflectance Distribution Function,BRDF)

上述理论中只是粗略地描述了游戏引擎中对现实生活中光学现象的粗略模拟,而摘要中所提到的双向分布反射函数,则是计算入射光与反射光的函数:

 

△入射光照度微元与反射光照度微元比值



公式对于中学生以下的来说应该是看不懂的,不过可以简单归结为f(x)=k*x,f(x)为反射光照度,x为入射光照度,而BRDF——就是函数中的k,而k由入射角与物体材质共同决定。

那么就出现一个问题:如何模拟现实中各种物体的光泽?

我们可以想当然地测量出不同材质不同方向入射的k,再直接套用公式,运用到游戏计算中,但以目前显卡的浮点运算能力无法做到;或者我们可以从头开始,运用物理公式直接建立反射模型,但那样显卡更吃不消,所以目前游戏和电影中都采用了折中的方法:采用几个较典型的数据,建立简单的物理模型,降低渲染压力。

1、菲涅尔公式的理论

上文中已经提到菲涅尔公式,这里就直接给出公式:

    

△反射、折射瞬间的电矢量与入射电矢量之间的关系



而前面所涉及到的微平面理论,也运用在菲涅尔公式中,因为每一个微平面都被视作光滑平面,从而来计算个方向上的照度。

 

△几个较典型材质从0°到90°的反射分量曲线图


 

    作为BRDF理论模型的第一个部分,被称之为菲涅尔项(Fresnel Term)

同时,由于微几何体具有空间几何体构造,一些地方被遮挡,无法接受光照。同理,一些出射光也会因遮蔽而无法表现。

 

△入射光被遮挡部分
△出射光被遮挡部分


而被遮挡的入射光或出射光被称之为遮挡项或几何项(Geometry Term)

因此,f(x)=k*x的公式也就可以被简单扩写为

f(x)=k*x*η*η12*D

η为在理想微平面上的反射比例,η1为入射光未被遮住的比例,η2为反射光未被遮住的比例,D为某方向上的反射光。

关于D,就必须要提到理论镜面反射。在理论镜面反射中,反射光线要进入观察者的眼中,必须要满足镜面平面法向量正好与视线向量和入射向量的半角向量(数学中似乎没有该说法,多用于游戏引擎理论)在一条直线上。

那么D的意义就显而易见了:有多少个微平面的反射光恰好进入我们的眼睛,它们组成的集合就是D。这一项被称之为法线分部项(Normal Distribution Function,NDF)NDF是最重要的,其与菲涅尔项一同影响了高光的衰减程度和形状。

完整的BRDF公式如下:

 


知识水平所限,无法对其进行推导解释,以下是截自于网上的解释:

       分子从左至右便是菲涅尔项,几何项和法线分布项,菲涅尔项和其他两项相互独立,三项都能被任意替换,这个模型被称之为Cook-Torrance模型,是目前最为常用的微平面BRDF形式。有人会问分母中的那两项是啥,其中一项的来源是因为,微平面理论定义在半角向量,而在渲染中则是在入射及反射光方向空间计算,需要乘上对应的雅可比行列式变换空间微元。这一项也至关重要,没有的话就无法模拟出一个称之为off-specular peak的现象:对于粗糙材质(尤其是金属),当光线以较大的入射角入射时,反射光最强的方向并不在镜面反射方向。对于微平面理论模型Blinn-Phong便是根据这一现象推导出来的。另一项是则是伴随几何项的修正项

 

△上式为菲涅尔项的近似计算公式

2、BRDF的具体应用

    2.1理想点光源环境

    BRDF中的NDF项对整体画面影响十分巨大。

    在BRDF运用之前,物体材质的光照模型最初为Phong,效果如下图,由于把物体视为光滑平面,出射光永远关于入射光对称,导致高光形状为圆形。

 

△所谓的“塑料感”也由此而来


而后出现的Blinn-Phong模型改变了其不真实的效果,拖出了一条长长的尾迹。

从2013年开始,次时代游戏开始使用全新的NDF项——GGX(同时被称为Trowbridge-Reitz。简而言之,其特点就是使得高光处衰减(面与视线的夹角变化,照度随之变化)更快,尾迹处衰减更慢,更符合物理现实。

 

△Blinn-Phong效果

△GGX效果


因此,运用了更加精确的GGX光照模型和BRDF物理公式的情况下,游戏画面在近几年突飞猛进,能很轻松的做出物体真实的材质。

    在模拟多层混合材质上,GGX也有相当惊人的效果,大量游戏的皮肤也依靠此制作。

 

△运用了大量BRDF公式和GGX的《Uncharted 4》(神秘海域4)游戏画面

△《Ryse》中Marius的人头模型


 



下一章将讲述最后一部分关于复杂光照环境的情况,喜欢的可以点个赞投个币

(b站上应该没有多少这种文章,个人想法)

Thanks♪(・ω・)ノ


投诉或建议