Treyarch是《使命召唤:黑色行动》系列的开发商,使命召唤系列的成功不必细说,treyarch也是一个在技术上很有探索的公司,在《使命召唤:黑色行动》1中率先使用基于物理的光照系统,可以说对这个技术的流行起了巨大的推动作用(参见《引爆点》,卖座作品中使用好的技术,促成引爆点)。
这里谈的是全局光照技术
sum
主要是使用irradiance volume系列的技术,但是在编辑器,数据收集组织方式以及一些出现瑕疵的地方做了更好的处理,达到更加成熟的水准。
关于irradiance volume
这个概念已经出现相当多年了,本blog这里有介绍。
在实际游戏中,本blog中第一次介绍到是在black rock的09年siggraph上的文章
可以看这个图:
这是一个典型的情况(图来自farcry3的paper),就是把空间分割成一定的粒度(一个个小立方体,volume),然后在这个volume中收集光照信息,作为这个volume中物体的光照信息。
光照信息收集
光照信息的收集是ray-tracing+IBL(image based lighting)。
但是这个ray tracing不是我们常说的在cpu上面做的那种,是一个基于repproject-cubemap的方式来大大加速。
这个reproject cubemap在最近的反射中常常提到,比如这个
cubemap带上深度值之后就可以做到parallax correct。
场景里,放一系列的probe,做光照信息捕捉,拿到光照信息,更重要的是和场景模型相关的深度信息。
进而,我们做ray tracing,根据深度信息,决定到哪一个probe中的哪一个地方去取光照信息(称作reprojection),这个只要geometry不变,结果就不变,下图中每一个小点可以认为是一个trace的线。
然后可以反复做bounce(因为reprojection信息已经cache住了,所以后面做起来会比较快)。
存储光照信息
使用ambient cube来存储光照信息
一般有spherical harmonics系数等等,这个也并没有信息存储上的很大优势,甚至感觉只是说出来酷一点。
ambient cube就是贴图上直接存储6方向的光照信息,然后gpu中直接使用normal来读取,也可以利用到hardware trilinear filter非常的简单直接。
漏光问题解决
由于volume所覆盖的信息常常是粒度太大,导致粒度小得多的mesh,会有出现漏光,隔壁的光照过来等等。
也有一些算法可以处理,但是在产品角度来看,不能完美,这里高度的“可靠性”就非常的重要了。
这里的处理,是走工具路线;
可以自己把volume分割成多种形状,每个volume就不影响其形状以外的部分,这样就形成了对于漏光问题的“绝对控制力”。
ppt里没有说清除,放了一个问号,大概是有些简单情况,可以自动的生成volume,总不能每一个都美术来放置吧。
反射矫正
有了这个光照信息,对于原来的反射可以做一个亮度矫正,这个倒是赞。
可以看出左边明显是过亮的一个情况。