今天介绍的是刺客信条4在Digital Dragon 2014分享的光照、天气以及大气相关的渲染方案,分享者是来自育碧(蒙特利尔)的图形程序员Bart Wronski,照例,这里对工作内容做一个总结:
- 基于FC3的方案改进而来,原方案采用SH2存储数据,精度较低,导致光照细节缺失较多,不能满足项目需要
- 将天光与方向光的贡献拆分开来,且假设天气只影响光照颜色与强度,不影响光照路径
- 整体实现思路给出如下:
- 依然采用probe来存储数据,probe只布设在navmesh周围,probe间隔两米
- 通过烘焙8套数据来实现对TOD的支持
- 采用Normalized Radiance来存储光照结果(取中性颜色即白色作为输入光颜色),同样存储四个方向(basis)的数据
- 之后在运行时基于天气对输出结果进行调制
- 在运行时会基于法线对四个方向的烘焙数据进行插值,得到最后的输出irradiance
- 由于只烘焙了一层probe,对于距离probe较远的位置(高度),会基于高度对结果进行调制
- 会导致结果精度下降,可以考虑烘焙多层probe来优化
- 数据以sector为单位进行存储,在运行时可以通过streaming进行加卸载更新
- 为了避免CPU/GPU传输导致的卡顿,会延迟数帧取用
- 通过环境光模拟多次反射的效果,避免死黑问题
- 运行时会基于法线对ambient cube进行采样,之后与天光遮蔽数据相结合(sky occlusion,俯视图的深度图),得到天光照明效果
- AO计算
- 将AO分为多种不同粒度的信号数据,不同粒度的AO采用不同的技术来实现。
- 粗粒度的AO用的是WorldAO,通过对天光遮蔽贴图进行高斯模糊来得到对AO的模拟
- 细粒度的AO用的则是SSAO
- 采用了泊松圆盘的算法,通过少量的采样点实现较好的AO效果
具体参见:【Digital Dragon 2014】 Assassin's Creed 4 lighting weather atmosphere