Adaptive sampling improvements
Posted: Wed Apr 03, 2019 2:10 am
Since Dade suggested that I could take a look at the adaptive sampling algorithm I have been working on a new solution that builds upon the current one without making any architectural changes.
There are some changes that I believe are improvements:
I believe a GPU implementation is feasible, since the logic is basically the same, and will work on it once the CPU version is considered functional.
If anyone is willing to test it, I can provide my builds for Linux, but not much else, sorry
This is a comparison with an average of 100 samples/pixel.
Current: New:
I will do an pull request so more people can opine on all the changes.
There are some changes that I believe are improvements:
- The pixel pass is kept individually now, instead of being shared with all other.
- The adaptiveness is based on a different metric, that I hope is more adequate than the current.
- The adaptiveness does not depend on the threshold value anymore, but it is statistics based.
- It is only implemented for the sobol sampler
- The code is still very untested and there are some hardcoded parameters
- The calculations are a bit more involved than what is currently being used. I think it is still plenty fast, and it is not even multithreaded yet
- The SobolSharedSampler may be slowing down the rendering a little bit. It may be possible to improve, but I would gladly accept the help from some more experienced eyes here
- Changing the metric breaks backwards compatibility regarding the halt thereshold parameter
- The sampling is proportional to the CONVERGENCE channel, while the previous sampled the pixels below the threshold. It is visually very different
I believe a GPU implementation is feasible, since the logic is basically the same, and will work on it once the CPU version is considered functional.
If anyone is willing to test it, I can provide my builds for Linux, but not much else, sorry
This is a comparison with an average of 100 samples/pixel.
Current: New:
I will do an pull request so more people can opine on all the changes.