Lights - Arnold User Guide
These settings provide some general control over how lights are evaluated in Arnold.
Global Light Sampling
![]() |
![]() |
without Global Light Sampling | with Global Light Sampling (2x faster render time) |
In Arnold 7.2.1 we introduced the Global Light Sampling method, which analyzes the lights in the scene and automatically decides how best to distribute a globally specified number of light samples among all the lights in the scene. Unlike the older per-light sampling method which required setting a light samples value for every light, Global Light Sampling just requires setting this one value, making it easier to use and tune. What's more, it allows for the global number of light samples to be less than the total number of lights and therefore it produces significantly faster renders when there are many lights.
For the best performance, use adaptive sampling with Global Light Sampling. With Global Light Sampling, you typically have fewer light samples, so you would probably see more noise with fixed (non-adaptive) AA sampling.
This new method can be enabled by setting the Light Samples parameter in the options node to a value larger than 0. By default Light Samples is 0, in which case per-light sampling is used.
How it works
Per-light sampling works by looping over all contributing lights in the scene at each shading point, and sampling each light L
with the specified per-light sample count (L.samples^2
). It works well when there are just a few lights contributing to the shading point, but render time will increase as the number of lights increase.
Global Light Sampling instead estimates the light contribution by taking just a fixed number of light samples (specified via the global Light Samples parameter) and preferentially choosing to sample lights contributing the most at each shading point. When there are multiple lights in the scene this technique can be faster to render than per-light sampling, and can be significantly faster when there are a large number of lights.
Performance improvements
Here is an example of the improved render times when using Global Light Sampling. This scene has light counts ranging from 10 to 100,000 and is rendered with adaptive sampling (AA=4, AA_max=20) in order to run until it achieves the same noise level image in each case:
![]() |
![]() |
![]() |
![]() |
10 lights | 100 lights | 1000 lights | 10000 lights |
The render times for per-light sampling and Global Light Sampling, here with one sample per light, and Light Samples = 2 for Global Light Sampling are as below:
![]() |
We can see both techniques perform similarly for low light count. However, the render time for per light sampling scales roughly linearly in the number of the lights, while with Global Light Sampling the render time grows with light count at a much reduced rate. At 10k lights, the Global Light Sampling technique is over 100 times faster.
Best setting for light samples
When using the Global Light Sampling method, on CPU we recommend keeping Light Samples at 4 or less. On GPU we recommend keeping Light Samples at 1. Generally, if the main source of light is from a Skydome Light or Distant Light, 1 or sometimes even no global light samples work best; otherwise 4 for CPU and 1 for GPU tends to be near optimal. Very rarely do more samples significantly help, even if there are many lights.
With Global Light Sampling, the number of light samples affects noise and render times. The charts below show the speedups on CPU (relative to per-light sampling) for global light samples from 1 to 16. For most scenes, a value of 4 (the default in most Arnold plugins) gives a good speedup, and you can increase the Camera (AA) to deal with any noise.
![]() |
For GPU the situation differs slightly. In the bar-plot below we show speedups (relative to per-light sampling) in different scenes for 1, 4, 8, and 16 light samples. Unlike with CPU, for GPU using 1 light sample is often enough (except for Hangar and Tunnel scenes).
![]() |
In general, multiple factors influence efficiency:
- Amount of indirect illumination in the scene. As noise of indirect light contributions increases, you may be able to lower the number of global light samples.
- Complexity of light occlusion. We might have a very strong light in the scene, but it is occluded and thus no samples should be allocated to it. Or we might have lights in translucent or transparent opaque enclosures which would increase amount of indirect illumination in the scene. In such cases we might get better results with per-light sampling.
- Strength of illumination coming from lights not sampled by Global Light Sampling. For example, if a scene is mostly lit by environment and directional lights, then per-light sampling may be better (see the speedup graphs above for the GTC robot and Sophie scenes).
- Number of light samples. Too low can be less efficient because there is a fixed cost of the sampling setup at each shading point. Too high and the improved lighting quality is outweighed by the increased number of shadow rays (especially in scenes with strong indirect illumination).
Limitations
Global Light Sampling has limitations, which we will address in future versions:
- Environment maps and directional lights are not managed by the Global Light Sampling. Their samples parameter still has the usual effect when Global Light Sampling is on.
- nlights shader is not fully supported.
Global Light Sampling (GLS) on glossy materials
GLS now takes material glossiness into account when sampling, which greatly enhances the quality especially when many small lights are present. It causes small slowdowns for fixed AA renders, but for adaptive renders, it brings overall speedups. For example, with adaptive in the robot scene below we achieved 1.7x speedup. This feature can be enabled and disabled using GLS_glossy_enable
.
![]() |
![]() |
7.3.5, fixed AA | 7.3.7, fixed AA |
Camera(AA): 2, Specular: 1.
Low Light Threshold
Before introducing Global Light Sampling we used Low Light Threshold parameter to speed up rendering in many-lights scenes. It allows to trade off speed for bias by avoiding casting shadow rays for lights whose contribution is below a certain value. In some situations this does not introduce noticeable difference to the image, especially with lights of a finite area of influence, like a cityscape for example.
When using Global Light Sampling we recommend keeping the default value for the Low Light Threshold parameter as it performs well even with a large number of lights.
How it works
What is taken into account to discard a shadow ray is its maximum possible incoming irradiance, which is linearly related to the light's intensity and decreases with square of a distance. The specific number will vary depending on exposure and light intensity values, but the default value is reasonable for the default exposure/light intensity values.
Setting the threshold too high might cause some artifacts in the image such as visible boundaries of light's area of influence and overall changes of brightness. In that case the bias is perceptible and user is advised to lower the value of the threshold. The aim is to prune only lights that don't contribute to the final image.
In the example below, increasing the Low Light Threshold to 0.1 shows a good speedup in render time (in this case, more than twice as fast) with little noticeable difference in the image.
![]() |
![]() |
Low light threshold: 0.01 | Low light threshold: 0.1 |
A slightly higher threshold can offer significant rendering speed increases without noticeably darkening the image.
However, increasing the Low Light Threshold value too much can have an adverse effect on the lighting:
![]() |
Low light threshold: 1 |
The Utility shader's nlights color mode can be used to see how many lights are influencing a shading point when adjusting the Low Light Threshold.
![]() |