您的位置:首页 > 其它

Lighting and Material of Halo3

2009-12-09 20:47 309 查看
[关键东东]:
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在本文运用的非常多,做一个简单介绍
它是类似傅立叶展开的一种基函数展开
它很适合用低频的部分(一般就是用前3级甚至前2级展开)去表达平滑变化的信号,比如环境光,而且SH表达方式是非常占空间小(几个系数)运算快(同SH表达的其他东西做,就是dot就可以了)
用SphericalHarmonicsIrradianceEnvironmentMaps就把irradiance distribution用SH系数表达,用二次逼近多项式就够了。
对于shadow和inter-reflection(subsurface scattering一类的)用precomputed radiance transfer可以
当计算lighting时候,可以把其他部分像角度的cos值,material的BRDF用sh表达,结果就是dot就可以了,非常快捷
当然做计算的时候要统一空间,把lighting的空间转换通过SH来做也很方便(这个要再看一下)
最后是环境里面的lighting表示,主要是indirect lighting,这个基本就是irradiance volume那种,把场景分割成一堆cell,每个cell里面存lighting信息,然后去sample周围cell的lighting信息,进而计算光照结果
ATI的一个例子说用一些不是很规矩的cell,这样可以除去一些不必要的计算,算是一种优化
4, SH light map
普通的lightmap(像quake3)里面那种,直接存反射出来的光照结果,也就是exit radiance。
Halo3的存的是入射光信息,也就是还没算的光照信息(incident radiance),当然是以SphericalHarmonics的方式。
有了入射光照信息,bump map这样的东东可以正确渲染了。
效果很不错:



 这里还做了不少lightmap信息的压缩,最后可以到非常高的质量,同时贴图的体积和计算消耗也非常的低
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系数了。
计算过程中涉及到一些数学上的简略和优化,就不提了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  function 游戏 优化
相关文章推荐