System Information 1:
Operating system: Windows-10-10.0.19041-SP0 64 Bits
CPU: Ryzen 9 3900X
GPU: GeForce RTX 2060 SUPER 451.67
System Information 2:
Operating system: Windows-10-10.0.18362-SP0 64 Bits
CPU: Intel i5 8400
Broken: version: 2.80, 2.81, 2.82, 2.83, 2.90 rB21cb6f09ffa8 (2020-08-25 16:00), 2.91.0 rB396d39c6b904 (2020-08-25 19:28)
Short description of error:
When a volumetric object is sufficiently large, the volumetric step size is large, and the density high enough (Desnity of around 1 or higher) rendering artifacts can occur when rendering with the CPU. I have been unable to replicate this issue using CUDA and OptiX (possible explanation later).
Here's a video demonstrating the artifacts and what happens as the size of an object decreases (left) and as the step size of the volume decreases (right).
The issue seems to stem from the use of "Equiangular" sampling on the volumetric objects. Changing the sampling method to "Distance" seems to resolve the issue. I assume "Multiple Importance" sampling (the default) is using Equiangular sampling in this situation. This does not appear to affect GPU rendering as the GPU can not use "Multiple importance" or "Equiangular" sampling (at least from my understanding).
Here's an example image showing "Equiangular/Multiple importance" and "Distance" sampling side by side.
This issue also seems to be harder to naturally reproduce in Blender 2.82 and earlier simply down to the fact the default step size in those versions of Blender tended to be smaller than those used in Blender 2.83 and later.
Exact steps for others to reproduce the error:
- Change the render engine to Cycles.
- Give an object a volumetric shader. I gave mine a spherical gradient texture to use as it's density with a colour ramp to add contrast.
- Add a sun lamp so it's easier to see the volume.
- Scale up the volume until rendering artifacts occur (I used a scale of ~500 with the default cube).
- You should now see artifacts in the volume if you render the scene.
- If you now play around with decreasing the volumetric step size, rendering the scene with a GPU, or changing the sampling method to "Distance", you should see that the artifacts disappear.
Here's an example scene with an animation: