One of the new innovative features of V-Ray 6.1 is an initial experimental implementation of Intel’s Open Path Guiding Library. In this blog, we provide some more details about path guiding and the collaboration between Intel and Chaos in this integration. Portions of this blog post were contributed by Sebastian Herholz, an expert ray-tracing software engineer from Intel.
What is path guiding?
One of the most widely used techniques for producing photorealistic images in modern renderers is unidirectional path tracing. In a simplified description of this method, the renderer traces rays from the camera position through the pixels of the image into the scene.
These rays estimate a solution for the scene’s light transport defining the value/color of a pixel. At each intersection of a ray with the scene geometry, the renderer computes direct illumination from scene light sources and bounces those rays off surfaces to compute global illumination, reflections, and refractions.
In a scene with a complex lighting situation and uniform path tracing, only some paths reach the lit areas and contribute meaningfully to the image. This leads to a very noisy result.
The resulting images are very convincing but may contain noise. This noise requires sufficient samples per pixel to reduce to a desired level. The noise generally depends on how well the renderer can explore the light transport in a scene, i.e., if it is able to shoot/direct rays into regions of the scene that significantly contribute to the value of a pixel (e.g., light sources or objects reflecting direct or indirect light). The “difficulty/complexity” of the lighting situation plays a big role — scenes with uniform illumination need fewer samples to achieve a desired noise level compared to scenes with complex indirect illumination like a small bright patch illuminated by sunlight, for example. While path tracers are good at handling direct illumination coming from the scene light sources, indirect illumination from brightly lit surfaces may take many more samples to clean up. This is because the renderer has no information about the indirect illumination and must typically rely on the reflection characteristics of the local material to explore it.
With path guiding, more paths reach the lit areas of the scene and contribute to the final result which leads to a less noisy image.
Path guiding is a method to improve the rendering quality by helping the renderer to overcome its limitation of not having any information about the indirect illumination of a scene. Path guiding learns an approximation of indirect illumination of the scene in a rendering prepass or online during rendering iterations. During rendering, when the renderer needs to decide in which direction to shoot the next ray, the approximation of the indirect illumination is used to guide rays into important directions (e.g., toward brighter regions of the scene). This ‘guiding’ of rays leads to a significant noise reduction and cleaning up images faster, especially in scenes with complex lighting situations that are not covered by other rendering optimizations such as the adaptive dome light sampling in V-Ray and Corona or one-click caustics.
Why V-Ray uses
Path guiding is the result of decades of research. However, production rendering adoption just started recently (reference: Path guiding in production | ACM SIGGRAPH 2019 course) .
Unfortunately, there does not exist ‘the one’ path guiding approach that is robust and efficient enough to be widely adopted across the industry. This is why Intel created the open-source Intel Open PGL project to develop, together with the rendering community, a path-guiding framework that is robust and efficient enough to be used in daily production. Intel aims to make the Intel Open PGL project the premier solution for path guiding in the rendering community, just as Intel® Embree (embree.org/) is for ray tracing/intersection kernels.
Chaos chose to implement Open PGL because it demonstrated promising results and provided an API that allowed it to be integrated relatively easily into production renderers like Corona and V-Ray. Further on, the previous experience with the Embree project demonstrated the clear advantages of a community-driven solution — a robust and performant library with contributors from various industries.
How Intel Open PGL is developed
Sebastian Herholz and Addis Dittebrandt, another Intel ray tracing engineer, lead the main development work. Contributions are provided from the Blender community and now also the Chaos community.
Technical details and how it works
Intel's Open PGL approximates the scene's light distribution to guide the sampling decisions at ray intersection into directions of high importance (i.e., with strong indirect illumination). The approximation of the scene's light distribution is either learned online during rendering or, as in the case of the V-Ray integration, in a rendering pre-pass.
To represent the approximation of the high-dimensional light distribution (i.e., light field) of the entire scene, the spatial domain of the scene is first subdivided into smaller regions, where each region stores an approximation of the local incoming light distribution. These approximations are similar to light probes, valid for positions across their corresponding region.
During rendering, whenever a new direction is sampled, the light distribution at the current intersection point is queried and used to guide paths in important directions with a high contribution to the rendered image (,). By guiding paths that interact with surfaces and volumes, Intel Open PGL increases the sampling quality in complex indirect illumination scenarios such as multi-bounce diffuse illumination, multi-scattered volumetric illumination, and even simpler direct and indirect caustic effects.
Implementation of Intel Open PGL in V-Ray 6.1
V-Ray 6.1 implements an initial experimental version of Open PGL for the CPU version of V-Ray. For the moment the training samples are generated during V-Ray’s light cache building pass so the path guiding option can be found in the light cache settings:
This allows path guiding to be used both for progressive and bucket rendering modes once the light cache has been computed. Both diffuse reflections (GI) and glossy reflections can be made more photorealistic by the path guiding, as well as sampling of indirect illumination in volumes. The aim is to reduce the noise from such effects in order to achieve faster render times. Path guiding is supported for the VRayMtl material, the VRayEnvironmentFog atmospheric effect, and the VRayVolumeGrid.
Because the path guiding library is trained during the light cache calculation phase, increasing the light cache subdivs typically leads to faster final render times since the guiding engine has more data to work with.
The path guiding implementation is still experimental and in development. As such, the results are very scene-dependent - in some scenes, it can improve render times significantly while in others it doesn't help too much. The best results we have seen are in situations in which large portions of the scene are lit through indirect lighting. Below are some examples of scenes where path guiding improves render times quite a bit.
Render with V-Ray adaptive dome light and path guiding through OpenPGL
(scene purchased from Turbosquid: http://www.turbosquid.com/3d-models/scenes-loft-3d-model/685003)
Compared to a non-adaptive render, both the path guiding and the V-Ray adaptive dome light help to reduce render times significantly. Each provides a substantial speed boost on its own but they also combine nicely to produce the fastest result. In the table below, the VRaySampleRate render element is shown along with the render times for different combinations of settings. The scene is set to render with a maximum of 40 AA subdivs per pixel (i.e. 1600 samples per pixel). The light cache was set to 3000 subdivs (i.e. 9 million image samples). With the non-adaptive result in the top-left corner, even that many samples are not enough to completely reach the desired (variance-based) noise threshold in some parts of the image (i.e. the parts that are colored in red).
The renders below show the effect of the light cache subdivs on the efficiency of the path guiding. More light cache subdivs give more training samples to the path guiding library so it is better able to guide the rays during the final rendering.
Render with adaptive dome light and path guiding through Open PGL
(Sibenik cathedral scene from the Radiosity Competition: (http://hdri.cgtechniques.com/~sibenik2/)
In this example, both path guiding and adaptive dome light help to reduce the render times although in this lighting situation the path guiding has a much larger impact - this is because a large part of the environment is blocked due to geometry outside the interior. The scene is set to render with 30 AA subdivs (maximum of 900 samples per pixel) and a noise threshold of 0.03. Path guiding helps to reduce the number of required samples significantly in order to achieve the same noise level. The light cache was set to use 3000 subdivs (i.e. 9 million image samples).
For this scene, using the default light cache subdivs value of 1000 does not really allow the path guiding to improve the rendering much. However, using more subdivs results in better path guiding as more information about the scene is available.