PhysicallyBased Lighting in Call of Duty: Black Ops
Dimitar Lazarov@Treyarch带来。
开发原则
treyarch开发过程中遵循这样的原则:“一起以效率为核心。”
很多地方有很多的
实际开发中也的确如此,基本上treyarch比较看重实际,crytek看重上流,两者在销量和口碑上都分别达到自己梦想了。
forward lighting
treyarch依旧使用forward lighting,对它们来讲想达到60fps,deferred lighting太费了,deferred lighting更适合把帧数从15帧拯救到30,而不是从50弄到60.
但是forward lighting在很多地方付出了不小的代价:
baked lighting
做了这几件事情:
radiance&irradiance
这里dimitar又给大家复习了下这两个概念:
runtime lighting
physicallybased的原因:
其他一些相关:
光照模型
microfacet理论,直接看klayge的wiki吧,说的清晰简单。
早起treyarch使用cook-torrance模型,这也是众多学院派所提倡和建议的,但是后面在研究深入了之后发现可以在quality和performance上做的更好。
因外BRDF里面的几个部分可以各自选择:
所以treyarch就在这一块多下了很多功夫。
EnvironmentMap
首先environement map怎么用的问题,b3d上问了一下,得到较为准确的答案,environement map要理解为是secondary specular,正如irradiance volume等是secondary diffuse一样的位置,作为primary specular light的补充存在的。
第一个问题就是environment map的压缩问题,大的resolution效果好,但是无法承受其消耗。
解决的办法是把environment map中的亮度在地图中除以averagediffuse lighting,然后进行存储,在使用的时候再通过乘以averagediffuse lighting转回来。
解除亮度之后呢,evironment map其实就变成environmentdistribution map了。
这个过程treyarch叫做normalization,但是这个之后怎么去节省内存,没说。。。估计是normalized color可以少一个通道等方法压缩。
这里还提到了一个工具是ati的CubeMapGen,可以生成CubeMap,prefiltermipmap, dxt自己的工具还有些问题,cubemapgen可以把这些处理好。
在sample cube map的时候和crytek一样,根据gloss的值来选择不同mipmap的texel来sample,对于很glossy的material,就会出现很大的mipmap 上sample的跳跃,也就是会造成texture cache trashing。
treyarch的解决办法是:variance to gloss---没有细说,应该是对gloss的方差严重的材质做一些blur。
fresnelfor glossy reflections
fresnel这里有这样几个选择:
一个效果上完美的solution是做多个cubemap sample,把它们用brdf做到一起,但是这个就太消耗了。
所以在要达到的目的清晰的前提下,treyarch采取的方法是把从prefilter的cubemap里读出的值来替代使用cube map多点sample,然后brdf,在积分的方法。
special cases
materialspecular color基本可以分成两个部分:
纯金属类的shader:没有diffusetexture,没有diffuse lighting
非金属类:没有specular texture,
美术方面
这部分很喜欢,程序员谈游戏开发只谈技术就太狭隘了。
这里技术上的革新给美术带来一些不适应,需要更多的培训和示例,在美术制作的时候需要一段时间来培养这种感觉,因为以前美术画一个东西出来什么样子心里能估个大概,但是刚转到新的技术上时候感觉要重新建立,所见即所得的工具非常重要。
diffusetexture,使用照片来做diffuse texture就不太行,因为照片里面已经包括了lighting信息,需要被仔细的校准。
specularmap,不再是specular_map_texel*pow(dot(h,l),spec_power)里面的那一项了。
这样也不再能把ao cook到spectex里了。
而且也没有gloss map重要。
glosstexture,最重要的也是最难做的map,
小结
physicallybased lighting消耗额外的%10--%20的ALU,但是效果上有较大提升,是一个高性价比的选择。