[关键东东]:
lightmap存的是incident radiance in SH coefficient
预计算cook torrence BRDF
个人觉得这个 文章非常赞。
近期看了一些GI的文章,大多数就是集中在indirect lighting上,这个则从更基础的(也就是更本质,而不是更简单)角度出发,去看lighting和material 的 BRDF。
回顾早期学习real time rendering,对lighting and material的理解就是diffuse光照和specular光照,material的BRDF更是没有概念。
而且很长时间以来,游戏领域也是这两种direct lighting和phong BRDF占据统治地位。
BRDF定义:(from wikipedia)
The bidirectional reflectance distribution function (BRDF; ) is a four-dimensional function that defines how light is reflected at an opaque surface.
进入本篇论文:
1, 开篇提出游戏业主要使用的phong BRDF效果不错,但是仍旧不够realistic,在处理面光源(类似sky lighting),physical property like fresnel,上还不够好。
2,然后提出在效果和效率上都比较合适的一个BRDF----CookTorrance。
直接数学表达就略过吧。。。
3,SphericalHarmonics在本文运用的非常多,做一个简单介绍
4, SH light map
普通的lightmap(像quake3)里面那种,直接存反射出来的光照结果,也就是exit radiance。
Halo3的存的是入射光信息,也就是还没算的光照信息(incident radiance),当然是以SphericalHarmonics的方式。
有了入射光照信息,bump map这样的东东可以正确渲染了。
效果很牛:
5, Specular Reflectance
用GI和environmental lighting渲染glossy material是比较困难的,specular是视角相关的,而且glossy material分几个频段。
这里可说的不太多,environment map也是和一般游戏里一样,一个个offline弄出来的,存起来。
最后最精髓的地方是把整个cook torrence model给参数化成一些2D texture一共3k大小左右。
把BRDF投射到SH上之后,是一个跟视角有关的函数,这个函数是可以预先算出来的,这样给定一个视角,就可以通过sample texture来得到BRDF在这个视角上的SH系数了。
计算过程中涉及到一些数学上的简略和优化,就不提了。