1、在完成了作业7的提高项———对物体采用微表面渲染以获得更多材质之后,渲染结果在Roughness较大时噪点较少,但在Roughness较小时噪点急剧增加。
2、于是决定改善采样函数sample() 和 pdf(), 采用了cos_weighted采样和NDF_weighted(法线分布函数,即D这一项)采样相结合的方式,来采样渲染方程。由于BRDF = Kd / PI + Ks * DFG / (cos1*cos2) , Kd / PI 采用cos_weighted采样, Ks * DFG / (cos1*cos2)采用NDF_weighted采样。具体实现是生成一个随机数a,若 a < Kd, 则用cos_weighted, 反之则使用NDF_weighted.
3、本以为实现了重要性采样之后,蒙托卡洛积分会更迅速收敛到渲染方程积分的真实值,从而使图像噪点大幅减少,没想到,试了几次 物体Roughness = 0.1, 墙壁Roughness = 0.8, SPP = 32 下得出的图像噪点都很大,甚至在物体Roughness较大时,物体表面的噪点比原本实现前的效果还差。附件附上具体实现代码,望助教或同学看到不吝赐教,我已经被折磨出痛苦面具了。
4、这里写一些上面没有提到的细节。在下面的代码中,我是把所有物体(包括墙面)都用微表面来建模的,舍弃了原本提供的diffuse材质。其次,castRAY()是求人眼发射出光打到的第一个点, 随后将该交点传入shade()函数,由shade()进行递归求交,这部分采用作业7 PDF中提供的伪代码实现。
Attachments:
You must be
logged in to view attached files.