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
效果如下,感觉不是太懂为什么是这样的,似乎光源都没了
参考资料