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); } }
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); } }