基于物理的光照模型实现

技术方案概要介绍

随着计算机性能的提升和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和这张贴图结合使用,即可得到环境高光的结果。

3、创新点说明(从技术角度论述方案的创新之处)

修改了光照模型,使渲染效果更佳。使用cubemap来储存多次采样预处理结果,在实际使用中一次采样即可得到很好的结果,消耗非常小。
具体效果如下:

使用原始的phong光照模型

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

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



收益评估

以相当小的代价换取次世代的画面效果,使游戏对玩家的吸引度大大提升
 

改进计划

cubemap可以有多张,分布在场景的多个角落,且可以切换

猜你喜欢

转载自blog.csdn.net/lin_cheng_ming/article/details/80028444