0%
Theme NexT works best with JavaScript enabled
不同渲染方法在不同场景上的对比
mitsuba 0.6
说明
使用环境
场景文件
https://github.com/bacTlink/mitsuba-CPPM-scenes
一些问题
1 export LD_LIBRARY_PATH=~/mitsuba-VCM/dist/
1 scp -i rsa -P portNum -r localDir xx@xx.xx.xx.xx:serverDir
结果对比
mitsuba 是通过修改 integrator 来修改具体的配置的
artware 场景
path
路径追踪
Path tracer
mitsuba 的参数
maxDepth
integer
最大路径长度
rrDepth
integer
大于设定值之后,采用俄罗斯轮盘赌的方式以一定概率停止(5)
strictNormals
boolean
严格法线(false)
hideEmitters
boolean
隐藏直接光源(false)
严格法线:法线插值带来的问题,可能出现这样子的情况
根据插值法线,光线是从物体外面击中物体,但是根据实际的几何法线,光线是从物体里面击中的
设置为 true 会将这些光线去除
They can lead to paradoxical situations where a light ray impinges
on an object from a direction that is classified as “outside” according
to the shading normal, and “inside” according to the true geometric
normal.
配置文件
1 2 3 <integrator type ="path" > <integer name ="maxDepth" value ="5" /> </integrator >
1 ~/mitsuba-VCM/dist/mitsuba -o artware_PATH_maxdepth=5 artware_SPPM.xml
1 ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_PATH_maxdepth=5.exr
运行时间很短,效果如下,整个场景很暗,直接找到的有效路径很少
将最大深度修改为 33(和 SPPM 一致),效果如下
虽然场景亮了一些,效果还是不太好,还是找不到有效的路径
bdpt
双向路径追踪
Bidirectional path tracer
mitsuba 的参数
maxDepth
integer
最大路径长度
rrDepth
integer
大于设定值之后,采用俄罗斯轮盘赌的方式以一定概率停止(5)
lightImage
boolean
每条从 camera 除法的 subpath
是否直接对光源采样(true)
sampleDirect
boolean
是否采用直接采样策略(true)
1 2 3 <integrator type ="bdpt" > <integer name ="maxDepth" value ="33" /> </integrator >
1 2 ~/mitsuba-VCM/dist/mitsuba -o artware_BDPT_maxdepth=33 artware_use.xml ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_BDPT_maxdepth=33.exr
效果如下,和 path tracing
相比而言,能够获得更好的效果,简单体现在整体亮度更亮
而且能够较好的模拟焦散的现象,对于手电筒的发光也能较好的模拟
1 2 3 4 <integrator type ="bdpt" > <integer name ="maxDepth" value ="33" /> <boolean name ="lightImage" value ="false" /> </integrator >
1 2 ~/mitsuba-VCM/dist/mitsuba -o artware_BDPT_maxdepth=33_lightImage_false artware_use.xml ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_BDPT_maxdepth=33_lightImage_false.exr
结果如下,我们去除了路径对光源的直接采样,最终的结果没有这么亮,相当于能够采样到光源的路径变少了
但是为什么焦散现象也变少了,这个应该是 SDS 路径
1 2 3 4 <integrator type ="bdpt" > <integer name ="maxDepth" value ="33" /> <boolean name ="sampleDirect" value ="false" /> </integrator >
1 2 ~/mitsuba-VCM/dist/mitsuba -o artware_BDPT_maxdepth=33_sampleDirect_false artware_use.xml ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_BDPT_maxdepth=33_sampleDirect_false.exr
photonmapper
photon mapping
简单使用默认参数设置
1 2 3 <integrator type ="photonmapper" > <integer name ="maxDepth" value ="33" /> </integrator >
1 2 ~/mitsuba-VCM/dist/mitsuba -o artware_pm_maxdepth=33 artware_use.xml ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_pm_maxdepth=33.exr
结果如下,PM 算法
PM 作为一种无偏的算法,最大的问题就是会产生一种糊的感觉
但是由于加入了对于焦散的优化查找,最终也能模拟焦散的结果
传统的 PM 算法是模拟不了 焦散的现象的,参数如下
1 2 3 4 <integrator type ="photonmapper" > <integer name ="maxDepth" value ="33" /> <float name ="causticLookupRadius" value ="0.0" > </integrator >
1 2 ~/mitsuba-VCM/dist/mitsuba -o artware_pm_maxdepth=33_no_caustic artware_use.xml ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_pm_maxdepth=33_no_caustic.exr
ppm
Progressive photon mapping integrator
渐进式光子映射
多次累计,一起估计
1 2 3 4 <integrator type ="ppm" > <integer name ="maxDepth" value ="33" /> <integer name ="maxPasses" value ="100" /> </integrator >
1 2 ~/mitsuba-VCM/dist/mitsuba -o artware_PMM_maxPasses=100 artware_use.xml ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_PMM_maxPasses=100.exr
运行速度比 SPPM 慢很多,初始的建立以及每个 pass 都比较慢
效果如下
比 PM 的效果更好,而且不会导致内存爆炸的问题,运行速度比 PM 慢
噪点比较多,收敛的问题
sppm
Stochastic progressive photon mapping integrator
随机渐进式光子映射
分批生成,分批估计
服务器上给的参数直接尝试运行时间太久了,我们把 pass 修改为 100
1 2 3 4 5 6 7 8 9 10 <integrator type ="sppm" > <integer name ="maxDepth" value ="33" /> <boolean name ="strictNormals" value ="true" /> <integer name ="kNN" value ="10" /> <integer name ="maxPasses" value ="100" /> <integer name ="stepSnapshot" value ="10000" /> <integer name ="photonCount" value ="655360" /> <float name ="k" value ="0.8" /> <float name ="beta" value ="1.2" /> </integrator >
1 2 ~/mitsuba-VCM/dist/mitsuba -o artware_SPMM_maxPasses=100 artware_use.xml ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_SPMM_maxPasses=100.exr
运行时间相对较长,效果如下
SPPM 算法达到收敛需要比较长的时间,我们只是使用了 100
pass,因此图上还是出现了一些模糊的现象(有偏导致的)
增大 maxPasses = 1000,效果如下
我们可以看到整体而言,模糊程度比 100 小了好多,这是因为 PM 是一致的
当采样数足够多的时候,\(\Delta S\)
足够小,此时是正确的
但是出现了一些白色的亮点,这是由于高贡献路径采样概率小导致的,需要更多的采样数直至收敛才能解决
mlt
Path SpaceMetropolis Light Transport
利用 MCMC 算法能够比较快的从一条有效路径找到其他有效路径
1 2 3 4 <integrator type ="mlt" > <integer name ="maxDepth" value ="33" /> <boolean name ="twoStage" value ="false" /> </integrator >
1 2 ~/mitsuba-VCM/dist/mitsuba -o artware_MLT_not_2stage artware_use.xml ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_MLT_not_2stage.exr
运行很快
能够采样到一些概率较低的路径,但是整体而言效果并不是很好,可能需要其他算法的初始路径作为根据
2stage:第一遍得到一张低分辨率的图(用于估计分布),第二遍开始真正的渲染
1 2 3 4 <integrator type ="mlt" > <integer name ="maxDepth" value ="33" /> <boolean name ="twoStage" value ="true" /> </integrator >
1 2 ~/mitsuba-VCM/dist/mitsuba -o artware_MLT_2stage artware_use.xml ~/mitsuba-VCM/dist/mtsutil tonemap -f png -t artware_MLT_2stage.exr
效果如下,感觉不是太懂为什么是这样的,似乎光源都没了
参考资料