图形绘制技术Lab1
Comment图形绘制技术 Lab1
复杂光源的实现
1 恒定功率光源
根据
$$
\Phi_e = \int_{Area}\int_{Hemisphere}L_e(x, \omega)\cos\theta d\omega dA
=L\pi S
$$
可知 Radiance 为 $Power / (\pi * shape.getArea())$
结果:
2 球面光源
按俯仰角 $\phi$ 对球面面积进行微分,得到:
$$
dS = 2\pi R^2 \cos\phi\ d\phi = 2\pi R^2 d\sin\phi = 2\pi Rdz
$$
直观的理解是,将球面在 $z$ 轴上分割为高相等的无穷细的圆环,它们之间的面积相等。因而按 $z$ 坐标与方位角 $\theta$ 均匀采样可以等可能地采样到球面上的每一个点。
于是设置两个随机变量:$z = 1 - 2u, \theta = 2\pi v\ (u, v\in [0, 1])$
根据 $z$ 偏移量与方位角算出法向量,并乘以半径再加上球心 $\boldsymbol {pos}$ 得到交点。
pdf 即为 1 / 球表面积
结果:
3 三角形网格光源
首先在 TriangleMesh
中添加面积累加得到的数列,在构造函数中,对各三角形面积累加计算总面积,并构造数列。
然后使用 u * getArea()
,在数列中进行二分查找得到采样的目标三角形,编号为L。
为了在三角形内的采样均匀,计算新的 u
$$
u = \dfrac{u * getArea() - area_L}{area_{L + 1} - area_L}
$$
这样,对于任意的三角形,$u$ 仍然遵循在 $[0, 1]$ 间的均匀分布,虽然精度有所下降。
为了在三角形内均匀采样,需要判断 $u + v > 1$ 如果成立,则采样点超出三角形外。此时只要使得:
$u = 1 - u, v = 1 - v$,即可修正到三角形内并保持均匀采样。
pdf 即为 1 / 总表面积
结果: