概要介绍
随着计算机性能的提升和3D技术的发展,现代3D游戏不断追求对现实世界的真实模拟。在这种背景下,原来被广泛使用的blinn-phong光照模型由于其模拟度不够,已经无法满足新一代游戏要求。需要采用新的基于物理的光照模型,来模拟高光反射,提升画面质量
技术方案
光照模型使用了微表面BRDF,环境高光的大量采样使用预处理并储存在一张cubemap多层mipmap中来模拟
我们知道,计算高光光照的基本公式如下:

其中,关键部分是双向反射分布函数(BRDF)。根据微表面BRDF的理论,其BRDF表示为:

其中F为费涅耳系数,G是几何遮蔽函数,D是法线分布函数。
在本次的实现中,对费涅耳系数的模拟我们采用Schlick公式;几何遮蔽函数使用Schlick修改过的Smith模型;法线分布函数使用GGX。




以上是单条入射光的计算方式,为了计算所有方向的入射光,需要对入射半球做蒙特卡洛积分。

由于需要的采样数过多,不可能采用实时采样的方式,所以需要做数据的预处理。为了做到这一步,第一步是

这里把光照剥离出来,把环境光照根据GGX的分布函数采样之后,再按照roughness从0~1储存到一张cubemap的mipmap中。
对于第二个部分,通过分析,可以把BRDF分割成两个部分:

因此我们可以考虑将这两个部分预先计算,放到一张贴图里,使用cos(v,h),roughness作为横纵坐标。预计算结果如下:

最后使用的时候,只要把cubemap和这张贴图结合使用,即可得到环境高光的结果。
效果
使用cubemap来储存多次采样预处理结果,在实际使用中一次采样即可得到很好的结果,消耗非常小。
具体效果如下:
使用原始的phong光照模型

使用新的光照模型,无环境高光

新光照模型,且应用环境高光:

改进计划
cubemap可以有多张,分布在场景的多个角落,且可以切换
转载自公司内部创新