GAMES101 - FinalProject - YXH_XianYu
Simple Rendering Homogenous Participating Media
我完成了 2.2.1 体积散射 的 退化版
-
- images文件夹下,存放各种不同参数的效果图(参数说明见文末)
演示视频
如何实现:
我在作业7框架的基础上进行修改
参考了《Rendering Participating Media with Bidirectional Path Tracing》来实现效果
- 跳过了论文的第4节,没有实现双向路径追踪
- 由于数学水平的限制,没有完全按照论文中的公式来实现体积散射
均匀介质的体积散射(主要修改了 Scene.cpp 中的 castRay函数)
若光线传播距离超过1000单位,则判断光线散射;
若光线传播距离不超过1000单位,则按照普通路径追踪递归处理。
光线根据 scattering函数(相位函数?),决定散射的方向
- scattering函数:在球面上随机一个方向,与光线传播方向取均值后,输出该向量。
获得光线散射出的方向后,递归处理新光线
递归公式 $L_{indir} = castRay(new_ray) * \Large\frac{\sigma}{\kappa}\normalsize * \frac{1}{RR} $
- $\Large\frac{\sigma}{\kappa}$: 散射的能量损失
非均匀介质的体积散射
- 没成功实现
- 思路一:利用一团团离散的、不同性质的介质团,来模拟非均匀介质
- 在 Scene.cpp 中,尝试实现了多种介质团,但无法模拟出尘土等介质
- 废弃代码位于 Scene.cpp 末尾
- 思路二:利用噪声函数,来模拟非均匀介质
- 在 Perlin.hpp 中,实现了三维柏林噪声函数,但无法模拟出尘土等介质,或是类似《大作业选题参考》中效果图的那种体积散射效果。
效果图分析