.. _render-cycles-integrator-light-paths:

***********
Light Paths
***********

.. reference::

   :Panel:     :menuselection:`Render --> Light Paths`


Ray Types
=========

Ray types can be divided into four categories:

#. Camera: the ray comes straight from the camera.
#. Reflection: the ray is generated by a reflection off a surface.
#. Transmission: the ray is generated by a transmission through a surface.
#. Shadow: the ray is used for (transparent) shadows.

Reflection and transmission rays can further have these properties:

- Diffuse: the ray is generated by a diffuse reflection or transmission (translucency).
- Glossy: the ray is generated by a glossy specular reflection or transmission.
- Singular: the ray is generated by a perfectly sharp reflection or transmission.

The Light Path node can be used to find out the type of ray the shading is being computed for.

.. figure:: /images/render_cycles_render-settings_light-paths_rays.svg
   :align: center

.. seealso::

   The object :ref:`ray visibility <cycles-ray-visibility>` settings.


Bounce Control
==============

The maximum number of light bounces can be controlled manually.
While ideally this should be infinite,
in practice a smaller number of bounces may be sufficient,
or some light interactions may be intentionally left out for faster convergence.
The number of diffuse reflection,
glossy reflection and transmission bounces can also be controlled individually.

Light paths are terminated probabilistically when specifying a minimum number of light bounces
lower than the maximum. In that case, paths longer than minimum will be randomly stopped when
they are expected to contribute less light to the image.
This will still converge to the same image, but renders faster while possibly being noisier.


.. _render-cycles-light-paths-transparency:

Transparency
============

The :doc:`/render/shader_nodes/shader/transparent` shader is given
special treatment. Rays pass straight through it, changing neither direction nor type
as if there were no geometry at all.

Alpha pass output is also different for the transparent
:abbr:`BSDF (Bidirectional Scattering Distribution Function)`.
Other transmission BSDFs are considered opaque,
because they change the light direction. As such they cannot be used for
alpha-over compositing, while this is possible with the transparent BSDF.

Note that, while semantically the ray passes through as if no geometry was hit,
rendering performance is affected as each transparency step requires executing the shader and tracing a ray.


Settings
========

Max Bounces
-----------

.. _bpy.types.CyclesRenderSettings.max_bounces:

Total
   Maximum number of light bounces. For best quality, this should be set to the maximum.
   However, in practice, it may be good to set it to lower values for faster rendering.
   A value of 0 bounces results in direct lighting only.

.. _bpy.types.CyclesRenderSettings.diffuse_bounces:

Diffuse
   Maximum number of diffuse bounces.

.. _bpy.types.CyclesRenderSettings.glossy_bounces:

Glossy
   Maximum number of glossy bounces.

.. _bpy.types.CyclesRenderSettings.transmission_bounces:

Transmission
   Maximum number of transmission bounces.

.. _bpy.types.CyclesRenderSettings.volume_bounces:

Volume
   Maximum number of volume scattering bounces.

.. _bpy.types.CyclesRenderSettings.transparent_max_bounces:

Transparent
   Maximum number of transparency bounces.

   Note, the maximum number of transparent bounces is controlled separately from other bounces.
   It is also possible to use probabilistic termination of transparent bounces,
   which might help rendering many layers of transparency.


.. _render-cycles-integrator-clamp-samples:

Clamping
--------

.. _bpy.types.CyclesRenderSettings.sample_clamp_direct:

Direct Light
   This option limits the maximum intensity a sample from rays which have not yet bounced can contribute to a pixel.
   It reduces noise at the cost of accuracy. Setting this option to 0.0 disables clamping altogether.
   Lower have a greater affect (dimmer samples) on the resulting image than higher values.

   .. note::

      This option provides a way to limit :term:`Fireflies`. However, note that as you clamp out such values,
      other bright lights/reflections will be dimmed as well.

      Care must be taken when using this setting to find a balance between mitigating fireflies and
      losing intentionally bright parts. It is often useful to clamp indirect bounces separately,
      as they tend to cause more fireflies than direct bounces. See the *Clamp Indirect* setting.

.. _bpy.types.CyclesRenderSettings.sample_clamp_indirect:

Indirect Light
   The same as *Direct Light*, but for rays which have bounced multiple times.


Caustics
--------

A common source of noise is :term:`Caustics`.

.. seealso::

   See :ref:`Reducing Noise <render-cycles-reducing-noise-clamp-samples>`
   for examples of the clamp settings in use.

.. _bpy.types.CyclesRenderSettings.blur_glossy:

Filter Glossy
   When using a value higher than 0.0, this will blur glossy reflections after blurry bounces,
   to reduce noise at the cost of accuracy. 1.0 is a good starting value to tweak.

   Some light paths have a low probability of being found while contributing much light to the pixel.
   As a result these light paths will be found in some pixels and not in others, causing :term:`Fireflies`.
   An example of such a difficult path might be a small light that is causing a small specular highlight
   on a sharp glossy material, which is observed through a rough glossy material.
   In fact in such a case there practically occurs a caustic.

   With path tracing it is difficult to find the specular highlight,
   but if you increase the roughness on the material, the highlight gets bigger and softer, and so easier to find.
   Often this blurring will hardly be noticeable, because it is blurred by the material anyway,
   but there are also cases where this will lead to a loss of detail in lighting.

.. _bpy.types.CyclesRenderSettings.caustics:

Caustics
   Reflective
      While in principle path tracing supports rendering of caustics with a sufficient number of samples,
      in practice it may be inefficient to the point that there is just too much noise.
      This option can be unchecked, to disable reflective caustics.
   Refractive
      The same as above, but for refractive caustics.


.. _bpy.types.CyclesRenderSettings.use_fast_gi:

Fast GI Approximation
---------------------

.. reference::

   :Panel:     :menuselection:`Render --> Light Paths --> Fast GI Approximation`

Approximate diffuse indirect light with background tinted ambient occlusion.
This provides fast alternative to full global illumination (GI),
for interactive viewport rendering or final renders with reduced quality.

.. _bpy.types.CyclesRenderSettings.fast_gi_method:

Method
   Fast GI approximation method.

   :Replace: Replace global illumination with ambient occlusion after a specified number of bounces.
   :Add: Add ambient occlusion to diffuse surfaces.

.. _bpy.types.WorldLighting.ao_factor:

AO Factor
   The strength of the ambient occlusion.

.. _bpy.types.WorldLighting.distance:

AO Distance
   Distance from shading point to trace rays. A shorter distance emphasizes nearby features,
   while longer distances make it also take objects farther away into account.

   This option can also be overridden per object
   in the :ref:`Object Properties <bpy.types.CyclesObjectSettings.ao_distance>`,
   which is useful when you have both small and large scale objects in the same scene.

.. _bpy.types.CyclesRenderSettings.ao_bounces:

Viewport Bounces
   Replace global illumination with ambient occlusion after the specified number of bounces
   when rendering in the 3D Viewport. This can reduce noise in interior scenes with little visual difference.

.. _bpy.types.CyclesRenderSettings.ao_bounces_render:

Render Bounces
   Number of bounces when rendering final renders.
