Exemple #1
0
    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        this.CreateMaterials();
        if (this.m_Logic == null)
        {
            this.m_Logic = new DeluxeEyeAdaptationLogic();
        }
        DeluxeTonemapper component = base.GetComponent <DeluxeTonemapper>();

        if (component != null)
        {
            this.m_Logic.m_Range = component.m_MainCurve.m_WhitePoint;
        }
        RenderTexture temporary  = RenderTexture.GetTemporary(source.width / 2, source.height / 2, 0, source.format);
        RenderTexture temporary2 = RenderTexture.GetTemporary(temporary.width / 2, temporary.height / 2, 0, source.format);

        if (this.m_BrightnessMaterial == null)
        {
            Graphics.Blit(source, destination);
            return;
        }
        this.m_BrightnessMaterial.SetTexture("_UpTex", source);
        source.filterMode = FilterMode.Bilinear;
        this.m_BrightnessMaterial.SetVector("_PixelSize", new Vector4(1f / (float)source.width * 0.5f, 1f / (float)source.height * 0.5f));
        Graphics.Blit(source, temporary, this.m_BrightnessMaterial, 1);
        this.m_BrightnessMaterial.SetTexture("_UpTex", temporary);
        temporary.filterMode = FilterMode.Bilinear;
        this.m_BrightnessMaterial.SetVector("_PixelSize", new Vector4(1f / (float)temporary.width * 0.5f, 1f / (float)temporary.height * 0.5f));
        Graphics.Blit(temporary, temporary2, this.m_BrightnessMaterial, 1);
        source.filterMode = FilterMode.Point;
        if (this.m_LowResolution)
        {
            RenderTexture temporary3 = RenderTexture.GetTemporary(temporary2.width / 2, temporary2.height / 2, 0, source.format);
            this.m_BrightnessMaterial.SetTexture("_UpTex", temporary2);
            temporary2.filterMode = FilterMode.Bilinear;
            this.m_BrightnessMaterial.SetVector("_PixelSize", new Vector4(1f / (float)temporary2.width * 0.5f, 1f / (float)temporary2.height * 0.5f));
            Graphics.Blit(temporary2, temporary3, this.m_BrightnessMaterial, 1);
            this.m_HistogramMaterial.SetTexture("_FrameTex", temporary3);
            this.m_Logic.ComputeExposure(temporary3.width, temporary3.height, this.m_HistogramMaterial);
            RenderTexture.ReleaseTemporary(temporary3);
        }
        else
        {
            this.m_HistogramMaterial.SetTexture("_FrameTex", temporary2);
            this.m_Logic.ComputeExposure(temporary2.width, temporary2.height, this.m_HistogramMaterial);
        }
        RenderTexture.ReleaseTemporary(temporary);
        RenderTexture.ReleaseTemporary(temporary2);
        this.m_BrightnessMaterial.SetFloat("_BrightnessMultiplier", this.m_Logic.m_BrightnessMultiplier);
        this.m_BrightnessMaterial.SetTexture("_BrightnessTex", this.m_Logic.m_BrightnessRT);
        this.m_BrightnessMaterial.SetTexture("_ColorTex", source);
        if (this.m_ShowHistogram)
        {
            RenderTexture temporary4 = RenderTexture.GetTemporary(source.width, source.height, 0, source.format);
            Graphics.Blit(source, temporary4, this.m_BrightnessMaterial, 0);
            this.m_BrightnessMaterial.SetTexture("_Histogram", this.m_Logic.m_HistogramList[0]);
            this.m_BrightnessMaterial.SetTexture("_ColorTex", temporary4);
            this.m_BrightnessMaterial.SetFloat("_LuminanceRange", this.m_Logic.m_Range);
            this.m_BrightnessMaterial.SetVector("_HistogramCoefs", this.m_Logic.m_HistCoefs);
            this.m_BrightnessMaterial.SetVector("_MinMax", new Vector4(0.01f, this.m_HistogramSize, 0.01f, this.m_HistogramSize));
            this.m_BrightnessMaterial.SetFloat("_TotalPixelNumber", (float)(this.m_Logic.m_CurrentWidth * this.m_Logic.m_CurrentHeight));
            Graphics.Blit(temporary4, destination, this.m_BrightnessMaterial, 2);
            RenderTexture.ReleaseTemporary(temporary4);
        }
        else
        {
            Graphics.Blit(source, destination, this.m_BrightnessMaterial, 0);
        }
    }
Exemple #2
0
    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        CreateMaterials();

        if (m_Logic == null)
        {
            m_Logic = new DeluxeEyeAdaptationLogic();
        }

        DeluxeTonemapper tonemapper = GetComponent <DeluxeTonemapper>();

        if (tonemapper != null)
        {
            m_Logic.m_Range = tonemapper.m_MainCurve.m_WhitePoint;
        }


        RenderTexture ds0 = RenderTexture.GetTemporary(source.width / 2, source.height / 2, 0, source.format);
        RenderTexture ds1 = RenderTexture.GetTemporary(ds0.width / 2, ds0.height / 2, 0, source.format);

        if (m_BrightnessMaterial == null)
        {
            Graphics.Blit(source, destination);
            return;
        }

        m_BrightnessMaterial.SetTexture("_UpTex", source);
        source.filterMode = FilterMode.Bilinear;
        m_BrightnessMaterial.SetVector("_PixelSize", new Vector4(1.0f / source.width * 0.5f, 1.0f / source.height * 0.5f));
        Graphics.Blit(source, ds0, m_BrightnessMaterial, 1);

        m_BrightnessMaterial.SetTexture("_UpTex", ds0);
        ds0.filterMode = FilterMode.Bilinear;
        m_BrightnessMaterial.SetVector("_PixelSize", new Vector4(1.0f / ds0.width * 0.5f, 1.0f / ds0.height * 0.5f));
        Graphics.Blit(ds0, ds1, m_BrightnessMaterial, 1);

        source.filterMode = FilterMode.Point;
        if (m_LowResolution)
        {
            RenderTexture ds2 = RenderTexture.GetTemporary(ds1.width / 2, ds1.height / 2, 0, source.format);
            m_BrightnessMaterial.SetTexture("_UpTex", ds1);
            ds1.filterMode = FilterMode.Bilinear;
            m_BrightnessMaterial.SetVector("_PixelSize", new Vector4(1.0f / ds1.width * 0.5f, 1.0f / ds1.height * 0.5f));
            Graphics.Blit(ds1, ds2, m_BrightnessMaterial, 1);

            m_HistogramMaterial.SetTexture("_FrameTex", ds2);
            m_Logic.ComputeExposure(ds2.width, ds2.height, m_HistogramMaterial);


            RenderTexture.ReleaseTemporary(ds2);
        }
        else
        {
            m_HistogramMaterial.SetTexture("_FrameTex", ds1);
            m_Logic.ComputeExposure(ds1.width, ds1.height, m_HistogramMaterial);
        }

        RenderTexture.ReleaseTemporary(ds0);
        RenderTexture.ReleaseTemporary(ds1);

        m_BrightnessMaterial.SetFloat("_BrightnessMultiplier", m_Logic.m_BrightnessMultiplier);
        m_BrightnessMaterial.SetTexture("_BrightnessTex", m_Logic.m_BrightnessRT);
        m_BrightnessMaterial.SetTexture("_ColorTex", source);

        if (m_ShowHistogram)
        {
            RenderTexture tmp = RenderTexture.GetTemporary(source.width, source.height, 0, source.format);
            Graphics.Blit(source, tmp, m_BrightnessMaterial, 0);

            m_BrightnessMaterial.SetTexture("_Histogram", m_Logic.m_HistogramList[0]);
            m_BrightnessMaterial.SetTexture("_ColorTex", tmp);
            m_BrightnessMaterial.SetFloat("_LuminanceRange", m_Logic.m_Range);
            m_BrightnessMaterial.SetVector("_HistogramCoefs", m_Logic.m_HistCoefs);
            m_BrightnessMaterial.SetVector("_MinMax", new Vector4(0.01f, m_HistogramSize, 0.01f, m_HistogramSize));
            m_BrightnessMaterial.SetFloat("_TotalPixelNumber", m_Logic.m_CurrentWidth * m_Logic.m_CurrentHeight);
            Graphics.Blit(tmp, destination, m_BrightnessMaterial, 2);

            RenderTexture.ReleaseTemporary(tmp);
        }
        else
        {
            Graphics.Blit(source, destination, m_BrightnessMaterial, 0);
        }
    }