Idea for an improved sampler
Posted: Mon Aug 19, 2019 12:02 am
So, i've been getting myself familiar with monte carlo sampling for an unrelated machine learning project, and a thought struck me.
One of the biggest issues with the metropolis light transport algorithm in unidirectional path tracing is the fact that it's not noise aware; it's good at finding light paths, however it tends to focus too much on hotspots in the image. If an area of the image is noisy but comparatively dark, it takes an incredibly long time to converge, and the only method of increasing the quality of these dark and noisy areas is to push up the large mutation probability... but at that point, the sampler starts to behave more like a random sampler.
What if the metropolis sampler was combined with the noise aware sampling method? instead of large mutations being purely random, it could be guided by the noise aware sampling algorithm - It would still be an unbiased method, as the noise aware sampling method itself is unbiased, however it would mean that the metropolis sampler will spend more time making large mutations in areas that need more samples.
Assuming no one points out any serious flaws in this idea, i'll have a crack at implementing it - i'm not too familiar with the luxcore codebase, however it's a relatively simple change so i feel it'll be a good starting point for me to begin contributing to the project.
One of the biggest issues with the metropolis light transport algorithm in unidirectional path tracing is the fact that it's not noise aware; it's good at finding light paths, however it tends to focus too much on hotspots in the image. If an area of the image is noisy but comparatively dark, it takes an incredibly long time to converge, and the only method of increasing the quality of these dark and noisy areas is to push up the large mutation probability... but at that point, the sampler starts to behave more like a random sampler.
What if the metropolis sampler was combined with the noise aware sampling method? instead of large mutations being purely random, it could be guided by the noise aware sampling algorithm - It would still be an unbiased method, as the noise aware sampling method itself is unbiased, however it would mean that the metropolis sampler will spend more time making large mutations in areas that need more samples.
Assuming no one points out any serious flaws in this idea, i'll have a crack at implementing it - i'm not too familiar with the luxcore codebase, however it's a relatively simple change so i feel it'll be a good starting point for me to begin contributing to the project.