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系数了。
计算过程中涉及到一些数学上的简略和优化,就不提了。
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系数了。
计算过程中涉及到一些数学上的简略和优化,就不提了。
相关文章推荐
- OpenGL学习脚印: 光照中材质和lighting maps使用(material and lighting maps)
- Oracle Bills of Material and Engineering Application Program Interface (APIs)
- Oracle Bills of Material and Engineering Application Program Interface (APIs)
- Oracle Bills of Material and Engineering Application Program Interface (APIs)
- Oracle Bills of Material and Engineering Application Program Interface (APIs)
- Usage and Characteritics of the Raw Material Mill
- An Introduction to Language Processing with Perl and Prolog: An Outline of Theories, Implementation,
- The study of chapter 13 in programming windows with mfc-printing with document and views
- Altlas M1 and Tips of Debugger Visualizers
- Chapter 2 – Types, Operators and Expressions of TCPL
- Chapter 4– Functions and Program Structure of TCPL (Part 10)
- Caused by: java.sql.SQLException: Out of memory; restart server and try again (needed 142328 bytes)
- 论文阅读:End-to-End Learning of Deformable Mixture of Parts and Deep Convolutional Neural Networks for H
- [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated..
- Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLIC )
- Read Design and Operation of TFT LCD Panels Notes
- The Study of Programming Windows with MFC--Imagelist and ComboBoxEx
- Grounding Data Converters and Solving the Mystery of "AGND" and "DGND"
- [Err] 1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for
- Android Out of Memory Error Causes, Solution and Best practices