从《使命召唤》看PBR发展:PBR乃是“气宗”,难点不在实现

Frank 腾讯互娱工程师

▌Part1

 

游戏行业中,如果说一款游戏对于基于物理的光照(Physically Based Rendering,后面简称PBR),那大概是非使命召唤系列莫属了。

 

本期嘉宾:《Call of Duty: Black Ops》

 

虽然很早的时候Halo系列已经非常hardcore的开始使用PBR,但是那个时候游戏行业还在Phong模型+hack搞得不亦乐乎,很厉害,但多少有些超前了。

 

到了接近2010年的时候,siggraph中PBR专题已经越来越多,这股风潮从cg行业开始,加上理论逐渐成熟,如果单纯看理论的话,可以说已经非常扎实了,对于能看懂相关论文和介绍的人来说,已经不需要辩驳,就知道这个是必然趋势了。

 

也有了一些能出效果的游戏以及数不清的demo,但这始终缺乏说服力,在2011年《Call of Duty: Black Ops》在siggraph上面发表的《Physically Based Lighting in Call of Duty: Black Ops》,可以说给广大跃跃欲试的开发者以极强的信心了(COD都这么干了,还怕什么?)

 

这也正是当时在《天涯明月刀》里实现PBR的时间点。

 

PBR乃是“气宗”,难点不在实现

 

看看早期谈PBR的文章,很多都谈到升级PBR这件事情是最难的事情之一,而且难的不是技术部分,而是要在团队沟通上花很大精力(俗称“和美术吵架”)。

 

也常常听一些开发者直接说有没有PBR,好像PBR是一个像ik一样的,很具体的技术。

 

其实PBR更多的是一种思维方式,非常像金庸小说中的气宗:

 

非常明确的追求数学正确:整条pipeline,从制作到最后呈现,符合正确的数学模型

 

这里在相当程度上是颠覆了开发团队的习惯,之前开发团队尤其是美术方面,都是本着以“好看”为指引来构建如何去做,材质各种hack,都是OK的。

 

但是到了PBR阶段,画风一转,首先追求数学正确,在这个基础上再谈好看。

 

仿佛练熟了“胡家刀法”的人,被突然要求得变一变,要按着“九阴真经”走起,“要用意不用劲。随人而动,随屈就伸,挨何处,心要用在何处。”,这种转变在不了解其所以然的情况下,吃几个败仗,当然要骂娘了。

 

实现层面,尤其是2011年这个时代的PBR都是比较简单,处理好HDR、linear space calculation以及macrofacet的模型,基本就可以,其难度只需要刚毕业的学生就可以。

 

但在其推进层面,则是超难的一件事情。

 

“习惯于原先hack的美术们,对这个新系统的使用也颇有不习惯,工业光魔内部甚至引发了一场“圣战”,简而言之,费了好多力气才把新的系统(energy conservation, normalized specular等)推行下去。”

 

这可是让我们在电影院里高潮迭起的工业光魔......

 

在项目中推进一个新事物

 

早些年常常听到一些开发者说在其项目中如何快的实现了PBR,但是项目组如何的不理解不支持,最后导致难产。

 

这里就涉及到一个关键的问题,如何在项目中推进一个新的事物,基本需要

 

  • 道理站得住,且解释的明白——道理对的,团队不理解还是不行

  • 成功项目案例做支撑

  • 好的影响力——在项目里你是老板还是老“板儿“,那推进自然有天壤之别

 

所以当年即便一直跟进,已经很明确知道PBR乃大势所趋,但是依旧不能轻易在项目中来推进,直到《使命召唤》放出了他们的presentation。

 

带着解释清楚的道理,成功得不能再成功的《使命召唤》案例,在项目里开始推进PBR,然后......依旧很艰难。

 

对于习惯的改变大家本能是反对的,尤其是大家始终不能脱离开应该是“好看就好”为宗旨来构建该怎么做,数学模型太飘渺太束缚。

 

另外,《使命召唤》行,我们行么?会不会人家是因为其他一些我们不知道的因素。

 

所以一方面反复的解释沟通,做效果,一方面迅速在1、2周内完成所有升级。

 

争议,尝试,看效果,进度缓慢中进行。

 

这时倒是有一个很有意思的转折点,有一个美术始终不认可这种做法,并不按照给出的各项物理属性来制作物件,并在中午的环境下制作出一个确实很“带感的”场景,当时刺客信条有一个类似的场景,确实已经非常接近了。

 

然后我查看了各个物件的材质属性之后,就把光照环境切到晚上,于是“刺客信条”的画面即刻变成一锅“八宝粥”。

 

后面逐渐就顺利了,24小时的时间循环,风雨雷电,潮湿到结冰,一套材质始终表现很好。

 

复杂度杀手——数学

 

这里我们再回顾下早期CG行业引入PBR的时代背景,简言之就是项目组被复杂度压垮了。

 

当时也是shader等由艺术家来主导,怎么好看怎么来,在简单地动画拍起来没问题,然后动画变得越来越复杂,材质、场景、时段都在猛烈的增加,然后项目组就崩溃了。

 

白天好的材质,到了晚上就不行了,换个视角就不行了,整个一被绒线缠住的萌猫,被撸得一点脾气都没有。

 

然后开始PBR,事情就简单了。

 

其背后的原因,就是面对超大规模超高复杂度,就要有一个坚实的数学基础。

 

而没有数学正确的hack,则如同不能放之四海皆准的道理一样,本地可以,换个情况就“不准”了。

 

到了今天,除非二次元这种风格化的游戏,写实类几乎都是PBR的了,但这也并不意味着项目组得了其神韵,很多团队和开发者依旧无视项目的规模复杂度,在光照材质以外的地方,无视数学模型的在hack,在绒线里打滚。

 

so简言之,正确的数学模型才是应对规模和复杂度的正确姿势,宇宙通用语言就这么酷炫。

 

---

 

▌Part2

 

“没有最PBR,只有更PBR”

 

上一部分也聊到了,PBR不是一个具体的技术,而是类似“气宗”这样一种思维方式,要以数学正确为基础来构建解决方案。

 

所以这里就会有大量的流派出现,而不会如一些开发者所认为的,你也PBR了,我也PBR了,大家就一样的PBR了。

 

第n层PBR

 

Tim Sweeney在12年的D.I.C.E. Summit对于realtime rendering做了一个很好的比喻,他就像一个对于现实的泰勒展开。

 

 

实际中我们从上世纪90年代开始,就是一直在做这个事情,到了PBR也只是其中的一个阶段,在PBR内部,具体的数学模型,BRDF的表达上,还是会一层层的深入进去,倒是挺像武学中的一层层的,越练越牛啤呢。

 

"Material advances in Call of Duty: WWII"

 

这里就SledgeHammer在18年siggraph上的这个paper来看一窥现在这层PBR。

 

这里是在PBR的大框架下,在实时的,产品级别的前提下,不停的逐步推进物理准确性。

 

主要看点:

  • 目前PBR的进一步发展趋势,就是在更加细节的地方,物理更加正确。

  • Activision做R&D的方式,非常的严谨,和实验室发论文并无二致,非常喜欢,不过所以本篇文章偏理论,读者看着会比较枯燥,但必须疾呼这个其实很酷很牛逼的。

  • 工程上,每一个方面的提升,都是基于正确的理论,来做高效的近似,而不是“直接hack,看着挺好就挺好”。

 

主要内容

  • normal & gloss mipmapping

  • material surface occlusion

  • multiscattering diffuse BRDF

 

 

normal&gloss mipmapping

 

我们现在普遍使用的方式是normal map是normal map,gloss(roughness)是gloss,两者互相独立,那么在实际情况者面对这样的情况:

 

 

在远处就和实际情况不对。

 

这里sledge hammer的做法,其实在farcry和crytek的之前文章都有涉猎,在方向上是一致的:把normalmap看做gloss的一部分,尤其是远处的时候,normal的细节因为normalmap的mipmap的原因丢失,那么应该转入gloss的mipmap中去。

 

所以做出来的gloss就要考虑normal map进去,mip做出来这样:

 

 

最后效果对比再贴下:

 

 

文中也给出了gloss对normal的经验值:

 

 

文中进一步给出了更精准的数学推理和做法,上图的表就比较有应用作用了。

 

blending细节normal的时候,再次提到经典blog:

https://blog.selfshadow.com/publications/blending-in-detail/

 

 

material surface occlusion

 

这里也是考虑得颇为细致,赞一个。

 

就是normalmap可以用来在材质级别上去生成ao&self shadow信息,并且重新思考了ao的shading方式。

 

normal map->ao做法上这个顺序

  • normal map->heightmap

  • heightmap->ao

 

ao的shading

 

这个是我们常用的shading ao的方式,可见的部分是一个亮度,被occluded的地方,就是黑的,但是这个和实际情况不符,occluded的地方也是有反射的。

 

这里可以考虑到旁边材质的间接反射:

 

 

这样就精准了。

 

[ 对比图可以看到右边更符合现实了 ]

 

ao的应用

 

最后ao也是用在了specular occlusion上面

 

multiscattering diffuse brdf

 

 

这是一个早期开发时候的图,文中发现左边比右边亮,这个不符合我们的常识,右边是向阳的,应该更亮才对呀。


这里进一步就引发了对光照模型的探索,中间是明确区分了specular和diffuse,这个导致了不够能量守恒。

 

能量守恒

 

正确方式:

 

 

所以我们要根据specular的能量反射来调整diffuse lighting的量。

 

 

这个specular lighting的反射如何测定(或者游戏中现实的方式去决定),作者使用的是EnvBRDF的table来做specular的能量测定方式。

 

multiple scattering diffuse brdf

 

另外作者也进一步引进了Heitz的做法。

 

 

考虑到了能量在macrofacet之间的反射,要进一步将scatter考虑进来。

 

 

这里就是对于光照模型的运用,贴下ref就好了

[Mat03] A Data-Driven Reflectance Model

[Brd12] BRDF Explorer

 

---

 

▌Part3

 

"We shall PBR on the beaches, we shall PBR on the landing grounds, we shall PBR in the fields and in the streets, we shall PBR in the hills; we shall never Hack!!!"

 

前面聊了PBR的产生历史原因,逐步发展的更加正确完善数学模型,这里就是聊下PBR的应用广度。

 

早先我们所谈的PBR,更多的集中在典型的材质的反射模型,包括石头、金属、皮质等等,但这远不能完整的表达现实世界,更不能满足开发者的狂热幻想了。

 

我们可以看这些COD的材质所支持的:

 

[ 冰层的透射 ]

 

[ 旗子的准确opacity表达 ]

 

[ 枪表面非常复杂多样的材质 ]

 

所以游戏中PBR的继续发展方向之一就是,要在production限制(合理的开发效率和运行效率,我们始终不能脱离这点来谈任何东西)下,能够不断增强表达范围。

 

而且deferred shading这种比较限制表达的render pipeline看来要退出历史了。

 

这里我们可以结合siggraph17,由infinity ward带来的<Practical Multilayered Materials>

 

主要看点:

  • 更完善的材质属性和表达,包括了反射,透射和散射等

  • 更多层材质

  • 而且使用unified shading model

  • 整体向cg的方向在发展

 

details:

 

 

unified shader/parameter

 

activision这里的做法形式上是支持多种材质属性并且支持多层:

 

多属性

 

 

首先是将材质分成了三大类:

  • surface: normal/roughness

  • macro:density/thickness

  • micro:材质的介质属性

 

实际光照模型对于这些属性进行一个完整支持,并且支持多层:

 

[ 上图中下面一列的部分都是多层材质的结果(涂油漆的木头等等) ]

 

activision做法是,就是一层层的计算,计算包括:

  • 光的absorption,scattering

  • 积累光照的结果

 

forward lighting+

 

这些放在一起,deferred shading就不给力了,forward lighting来处理这些复杂的材质计算。

 

deferred shading从07年killzone2的paper开始正式流行,到现在的PBR的阶段,预计是要逐渐退出历史舞台了。

 

material compiler


形式上更加趋近于电影的方式。

 

具体的技术细节

 

 

opacity计算

 

这里就是考虑到alpha和thickness

 

直接代码吧:

 

 

 

thin fim layer

 

thin film这里讲得是材质表面上盖得另外一层比较薄的一层,但是会影响光的wavelength的这种材质。

 

这种材质的表达,会很大的影响材质的表达能力

 

 

hmm推理过程套路就还是那些,要点是我们要知道有这么个东西,而从早期pbr过来的时候,这些概念还比较缺乏,而直接上movie industry的一套,取舍的研究要做很久,知道那个在实际游戏中用那个不用即可,细节直接看论文吧,贴下代码:

 

阅读与本文标签相同的文章