appleseed
appleseed copied to clipboard
Refactor volumes, add Rayleigh phase function, fix some bugs
Rework of volume rendering, including:
- Remove
RayTracer::march
method and treat volume scattering events in an uniform way with the other types of bounces. - Remove the possibility of several distance samples per ray. It was used to provide a way to reduce sampling variance for scenes with fog while making each ray more computationally heavy. This was removed in favor of tracing more rays as it is more efficient for complex scenes and fits to the fashion of modern path tracers like appleseed, as well as to drastically simplify the lighting code. Equiangular sampling still remains as an example of usage of the new volume API and for reducing the noise for single-scattering homogeneous media. However, it is now set as disabled by default, since it is less efficient for small enclosed volumes (Multiple scattering is the main option to move further and if we want to enhance it for fog rendering, we have to look for more advanced importance sampling methods)
- Remove
MaterialSampler
as it is not needed anymore. Add BSDF wrapper for phase functions. - FINALLY completely removed chromatic fireflies for multiple scattering. =)
Additionally:
- Rayleigh phase function was added for media with small particles (as more physically accurate version of isotropic scattering)
- Volumes can now be rendered even if the camera is enclosed inside them (solve #2057)
- Solve #2287
- Solves bug when the glass absorption is not fully accounted when there are lights behind glass:
Before:
After:
No absorption:
Scene (compare with no nee): incorrect_glass_transmittance_light_behind.zip
It looks like some reference images are much more noisy than before. Why?