图形学(7)BRDF and Rendering Equation

由于表面不是完全光滑的,在宏观上光线射向一个粗糙物体后会产生漫反射而非镜面反射。考虑定义双向反射分布函数 \(f_r(p, \omega_i\rightarrow\omega_r)\),表示对于位置 \(p\) 的一个微元立体角 \(\omega_i\),从这个立体角入射的光的照度 \(dE_i\)\(\omega_r\) 的亮度的贡献 \(dL_r\) 的比值。

\[f_r(\mathbf p, \omega_i\rightarrow\omega_r)=\frac{\mathrm{d}L_r}{\mathrm{d}E_i}=\frac{\mathrm{d}L_r}{L_i\cos\theta_i \mathrm{d}\omega_i} \]

则一个点在某个方向的出射光等于该点法向量所在半球内的所有入射光贡献的积分,有渲染方程:

\[L_r(\mathbf p,\omega_r)=\int_{H^2}f_r(\mathbf p,\omega_i\rightarrow\omega_r)L_i(\mathbf p,\omega_i)\cos\theta_i\mathrm{d}\omega_i \]

加上物体的自发光 emit:

\[L_r(\mathbf p,\omega_r)=L_{emit}(\mathbf p,\omega_r)+\int_{H^2}f_r(\mathbf p,\omega_i\rightarrow\omega_r)L_i(\mathbf p,\omega_i)\cos\theta_i\mathrm{d}\omega_i \]

(原则上物体对光的衰减也就是“颜色”也包含在 BRDF 里面)

关于为什么 BRDF 是亮度除以照度:
如果 BRDF 是亮度除以亮度:\(f'_r(\mathbf p, \omega_i\rightarrow\omega_r)=\frac{\mathrm{d}L_r}{\mathrm{d}L_i}\)
那么同理渲染方程,我们应当有

\[L_r(\mathbf p,\omega_r)=\sum_{H^2}f'_r(\mathbf p,\omega_i\rightarrow\omega_r)L_i(\mathbf p,\omega_i) \]

这个求和显然不是 well-defined 的,除非几乎所有 \(f'_r\) 都为 \(0\),故这样定义的 BRDF 是没有意义的。
为了让求和和 BRDF 都有意义,我们必须使得求和中包含一个微分项 \(\Delta\omega\),也就是让 \(f'_r\) 多除一个 \(\mathrm d\omega\),即 \(\displaystyle\frac{f'_r}{\mathrm d\omega}=\frac{\mathrm dL_r}{L_i\mathrm d\omega}\),考虑照度与亮度的关系 \(\mathrm dE=L\mathrm d\omega\),我们直接把 \(f_r\) 定义为 \(\displaystyle f_r(\mathbf p, \omega_i\rightarrow\omega_r)=\frac{\mathrm{d}L_r}{\mathrm{d}E_i}=\frac{\mathrm{d}L_r}{L_i\cos\theta_i \mathrm{d}\omega_i}\) 即可。

这也告诉了我们测定 BRDF 的方式:在 \(\omega_i\) 方向放置一个足够小的点光源,然后在 \(\mathbf p\) 处测量照度,在射线 \((\mathbf p,\omega_r)\) 方向测量亮度,算出两者的比值即为 BRDF。

posted @ 2023-04-27 21:36  Watware  阅读(29)  评论(0编辑  收藏  举报