0%

科技向 | GAMES101大作业

GAMES101 - FinalProject - YXH_XianYu

Simple Rendering Homogenous Participating Media

  • 我完成了 2.2.1 体积散射退化版

    • introduction
  • 效果图binary_PM_2048p_spp512_sigma0.7_16dir

    • 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 中,实现了三维柏林噪声函数,但无法模拟出尘土等介质,或是类似《大作业选题参考》中效果图的那种体积散射效果。
  • 效果图分析

    • 参数说明:
      • *p:分辨率
      • spp*:采样率
      • sigma*:散射率/消光率。值过大,无散射效果;值过小,图像过暗。
      • *dir:”scattering函数”中,光线方向所占的权值。值过大,无散射效果;值过小,雾气透明度过低(若dir=0,则散射时光线随机弹射)
    • 效果图边缘的明显分界线,是因为散射距离过远,若散射距离为500,则整个场景都会被雾气覆盖
    • binary_PM_256p_spp64_sigma0.5_0dir_TheFirstFog
      • 256p, spp64, sigma0.5, 0dir
    • binary_PM_392p_spp256_sigma0.7_4dir
      • 392p, spp256, sigma0.7, 4dir
    • binary_PM_392p_spp256_sigma0.7_16dir
      • 392p, spp256, sigma0.7, 16dir
    • binary_PM_2048p_spp512_sigma0.7_16dir
      • 2048p, spp512, sigma0.7, 16dir