internal void UpdateSettings(PostProcessLayer postProcessLayer)
        {
            var volumeTrigger = postProcessLayer.volumeTrigger;

            if (volumeTrigger == null)
            {
                return;
            }

            // Reset to base state
            postProcessLayer.OverrideSettings(m_BaseSettings, 1f);

            var volumeLayer = postProcessLayer.volumeLayer;
            int mask        = volumeLayer.value;

            // Optimize me
            for (int i = 0; i < k_MaxLayerCount; i++)
            {
                // Skip layers not in the mask
                if ((mask & (1 << i)) == 0)
                {
                    continue;
                }

                // Skip empty layers
                var volumes = m_Volumes[i];

                if (volumes == null)
                {
                    return;
                }

                // Sort the volume list if needed
                if (m_SortNeeded[i])
                {
                    SortByPriority(volumes);
                    m_SortNeeded[i] = false;
                }

                // Traverse all volumes
                var triggerPos = volumeTrigger.position;

                foreach (var volume in volumes)
                {
                    if (!volume.enabled)
                    {
                        continue;
                    }

                    // Global volume always have influence
                    if (volume.isGlobal)
                    {
                        postProcessLayer.OverrideSettings(volume.settings, 1f);
                        continue;
                    }

                    // If volume isn't global and has no collider, skip it as it's useless
                    //var colliders = volume.colliders;
                    var colliders = m_TempColliders;
                    volume.GetComponents(colliders);
                    if (colliders.Count == 0)
                    {
                        continue;
                    }

                    // Find closest distance to volume, 0 means it's inside it
                    float closestDistanceSqr = float.PositiveInfinity;

                    foreach (var collider in colliders)
                    {
                        if (!collider.enabled)
                        {
                            continue;
                        }

                        var closestPoint = collider.ClosestPoint(triggerPos); // 5.6-only API
                        var d            = ((closestPoint - triggerPos) / 2).sqrMagnitude;

                        if (d < closestDistanceSqr)
                        {
                            closestDistanceSqr = d;
                        }
                    }

                    colliders.Clear();
                    float blendDistSqr = volume.blendDistance * volume.blendDistance;

                    // Volume has no influence, ignore it
                    // Note: Volume doesn't do anything when `closestDistanceSqr = blendDistSqr` but
                    //       we can't use a >= comparison as blendDistSqr could be set to 0 in which
                    //       case volume would have total influence
                    if (closestDistanceSqr > blendDistSqr)
                    {
                        continue;
                    }

                    // Volume has influence
                    float interpFactor = 1f;

                    if (blendDistSqr > 0f)
                    {
                        interpFactor = 1f - (closestDistanceSqr / blendDistSqr);
                    }

                    // No need to clamp01 the interpolation factor as it'll always be in [0;1[ range
                    postProcessLayer.OverrideSettings(volume.settings, interpFactor);
                }
            }
        }