上一篇完成了specular的环境光渲染。当然,在实际效果中,diffuse也是不可缺少的。在这套基于物理的环境光渲染中,也必须要有diffuse才完整。
Irradiance map
GPU Gems 2第10章详细描述了如何通过卷积cube map,得到irradiance map,并用于diffuse的环境光渲染。其基本原理就是,可以把cube map当作一个拥有无数方向光源的物体。场景中的任何一个点,都会受到cube map里所有方向光源的照射,累积起来得到最终结果。
从最基本的光照原理可以得出,对于一个点,只有normal方向的那个半球面会对这个点有影响。而且影响程度按照n dot l的大小来分布。各向同性的纯diffuse情况下,shading和视点方向无关。所以,这里可以用Spherical Harmonic(SH ...
上一篇把BRDF换成了更为常见的blinn-phong,推出了在上面进行importance sampling的公式,以及如何把结果存到一张查找表LUT上。更进一步的做法是把这张LUT拟合成一个曲面,这样就可以在shader中直接计算,省去一次纹理采样。Black Ops II也做了拟合,但它的方法是把F=0和F=1的曲线用F=0.04来表达,最终用一个很粗糙的插值来得到整个曲面。这里我打算用暴力的方法直接拟合整个曲面。
曲线拟合
LUT有两个通道,x表达scale,y表达bias。对于这两个通道,可以表达为f(n_dot_v, roughness)这样的一个函数。原始的LUT大小为128x128,实验中发现LUT本身很平滑,即使缩小到16x16,也不容易从最终渲染结果上看区别。所以这里我们选择16x16的大小作为拟 ...
上一篇重现了UE4的环境BRDF渲染框架。本篇会把GGX换成更常见的Blinn-Phong BRDF。在这个过程中,整个框架仍然保持不变,从importance sampling得到的ground truth开始,逐步推出用prefiltered环境光和预计算的LUT完成基于物理的环境光渲染。只是把BRDF换掉。
采样的细节
上一篇我只是简略地说了ground truth来自于采样1024次,但并没有给出如何计算采样点。这里会有具体的做法。
生成2D空间的随机点$\xi_{\theta}$和$\xi_{\phi}$
根据BRDF的概率密度函数pdf,从$\xi_{\theta}$和$\xi_{\phi}$计算importance sampling需要的球面坐标系$s_{\theta}$和$s_{\phi}$
把球面坐标系的$s_{\theta}$和$s_{\phi}$转换成直角坐标系的halfway
-re ...
本系列源自于对Real Shading in Unreal Engine 4和Getting More Physical in Call of Duty: Black Ops II的理解。打算按照以前游戏中基于物理的渲染的思路,介绍一下如何在游戏这样的实时应用中使用基于物理的环境光。
回顾
在游戏中基于物理的渲染中列出了渲染方程的简化版,这是整个基于物理的体系的源头。
$L_0(\mathbf{v})=\int_{\Omega} \rho(\mathbf{l},\mathbf{v}) \otimes {L}_{i}(\mathbf{l}) (\mathbf{n} \cdot \mathbf{l}) d \omega_{i}$
其中,根据microfacet理论,BRDF可以表达成:
$\rho(\mathbf{l}, \mathbf{v})=\frac{F(\mathbf{l},\mathbf{h})G(\mathbf{l},\mathbf{v},\mathbf{h})D(\mathbf{h})}{4(\mathbf{n} \cdot \mathb ...
KlayGE 4.5刚刚发布,KlayGE 4.6就进入了开发阶段。这里公开一下我对KlayGE 4.6的一些规划。和以前一样,欢迎有兴趣、有时间加入KlayGE 4.6开发阵营的朋友们继续参加。
KlayGE 4.6将会支持更复杂的场景,以及更好的移动平台支持。另外,从4.6开始,发布的Windows二进制文件将采用x64,并且不在采用v120_xp等支持WinXP的toolset。如果需要x86版或支持XP的版本,请自行从源代码编译出来。
时间线
这里列出几个重要的时间点,以供进度参考。
2014年11月31日,feature complete:所有功能都已经完成,没完成的推迟到下一个版本。
2014年12月15日,code complete:完成所有代码,除非特殊情况,否则不能在改变接口。
2014年12月31 ...