现在的位置: 首页 > 综合 > 正文

Lighting and Material of Halo3

2013年08月22日 ⁄ 综合 ⁄ 共 1733字 ⁄ 字号 评论关闭

[关键东东]:

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{f_r(/omega_i , /omega_o)/ }) 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这样的东东可以正确渲染了。

 

效果很牛:

 

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系数了。

计算过程中涉及到一些数学上的简略和优化,就不提了。

抱歉!评论已关闭.