public bool Update(BuiltinSkyParameters builtinParams, PhysicallyBasedSky pbrSky)
            {
                if (builtinParams.frameIndex <= m_LastFrameComputation)
                {
                    return(false);
                }

                m_LastFrameComputation = builtinParams.frameIndex;

                if (m_LastPrecomputedBounce == 0)
                {
                    // Allocate temp tables if needed
                    if (m_GroundIrradianceTables[1] == null)
                    {
                        m_GroundIrradianceTables[1] = AllocateGroundIrradianceTable(1);
                    }

                    if (m_InScatteredRadianceTables[3] == null)
                    {
                        m_InScatteredRadianceTables[3] = AllocateInScatteredRadianceTable(3);
                    }

                    if (m_InScatteredRadianceTables[4] == null)
                    {
                        m_InScatteredRadianceTables[4] = AllocateInScatteredRadianceTable(4);
                    }
                }

                if (m_LastPrecomputedBounce == pbrSky.numberOfBounces.value)
                {
                    // Free temp tables.
                    // This is a deferred release (one frame late)!
                    RTHandles.Release(m_GroundIrradianceTables[1]);
                    RTHandles.Release(m_InScatteredRadianceTables[3]);
                    RTHandles.Release(m_InScatteredRadianceTables[4]);
                    m_GroundIrradianceTables[1]    = null;
                    m_InScatteredRadianceTables[3] = null;
                    m_InScatteredRadianceTables[4] = null;
                }

                if (m_LastPrecomputedBounce < pbrSky.numberOfBounces.value)
                {
                    PrecomputeTables(builtinParams.commandBuffer);
                    m_LastPrecomputedBounce++;

                    // If the sky is realtime, an upcoming update will update the sky lighting. Otherwise we need to force an update.
                    return(builtinParams.skySettings.updateMode != EnvironmentUpdateMode.Realtime);
                }

                return(false);
            }
        public override void Cleanup()
        {
            m_Settings = null;

            RTHandles.Release(m_GroundIrradianceTables[0]);    m_GroundIrradianceTables[0]    = null;
            RTHandles.Release(m_GroundIrradianceTables[1]);    m_GroundIrradianceTables[1]    = null;
            RTHandles.Release(m_InScatteredRadianceTables[0]); m_InScatteredRadianceTables[0] = null;
            RTHandles.Release(m_InScatteredRadianceTables[1]); m_InScatteredRadianceTables[1] = null;
            RTHandles.Release(m_InScatteredRadianceTables[2]); m_InScatteredRadianceTables[2] = null;
            RTHandles.Release(m_InScatteredRadianceTables[3]); m_InScatteredRadianceTables[3] = null;
            RTHandles.Release(m_InScatteredRadianceTables[4]); m_InScatteredRadianceTables[4] = null;

            m_LastPrecomputedBounce = 0;
            m_IsBuilt = false;
        }
 public PhysicallyBasedSkyRenderer(PhysicallyBasedSky settings)
 {
     m_Settings = settings;
 }