Most of you have probably downloaded the 2.70 RC by now and probably started playing around with volumetrics in cycles. Immediately you probably noticed how slow it renders, although that was probably expected. Here are the results of a little test I did to find out exactly how to speed up volume rendering for the world up so that it’s actually usable.
The very first and foremost thing you need to know about volumetrics is the difference between Homogeneous and Heterogeneous volumes. Basically, a volume where the density is driven by some texture is a heterogeneous one, and a volume with consistent density is a homogeneous one. The difference in render time and quality is… well, quite drastic:
Homogeneous (2m 40s, 512 samples) vs Heterogeneous (1h 4m 55s, 128 samples)
Yep, you read that right. Under 3 minutes for homogeneous volume and over an hour for a quarter of the samples in the heterogeneous volume. The heterogeneous render seems to have a less dense volume, and I guess it does since it was driven by a noise texture where I couldn’t easily control the density and honestly couldn’t be bothered to wait long enough to give it a decent try. Continue Reading…
Brecht has begun adding all the Volumetrics work that all our great devs, Storm, Thomas, Stuart, Lukas and Brecht have been working on!
It’ll be a just little while before we have support for smoke simulation data, for now it’s just some basic absorption and soon some scattering and emission.
Commit from Brecht:
Cycles Volume Render: support for rendering of homogeneous volume with absorption.
This is the simplest possible volume rendering case, constant density inside
the volume and no scattering or emission. My plan is to tweak, verify and commit
more volume rendering effects one by one, doing it all at once makes it
difficult to verify correctness and track down bugs.
Documentation is here:
Currently this hooks into path tracing in 3 ways, which should get us pretty
far until we add more advanced light sampling. These 3 hooks are repeated in
the path tracing, branched path tracing and transparent shadow code:
- Determine active volume shader at start of the path
- Change active volume shader on transmission through a surface
- Light attenuation over line segments between camera, surfaces and background