图形绘制技术 Lab1

复杂光源的实现
502023330051 孙博文

1 恒定功率光源

根据
$$
\Phi_e = \int_{Area}\int_{Hemisphere}L_e(x, \omega)\cos\theta d\omega dA
=L\pi S
$$
可知 Radiance 为 $Power / (\pi * shape.getArea())$

image-20240415213747112

结果:

1

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 / 球表面积

image-20240415213523699

结果:

2

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 / 总表面积

image-20240415213631568

结果:

3