void OnRenderImage(RenderTexture src, RenderTexture dest) { if (silentError) { return; } if (!AmplifyUtils.IsInitialized) { AmplifyUtils.InitializeIds(); } if (m_highPrecision) { AmplifyUtils.EnsureKeywordEnabled(m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, true); AmplifyUtils.EnsureKeywordEnabled(m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, true); AmplifyUtils.CurrentRTFormat = RenderTextureFormat.DefaultHDR; } else { AmplifyUtils.EnsureKeywordEnabled(m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, false); AmplifyUtils.EnsureKeywordEnabled(m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, false); AmplifyUtils.CurrentRTFormat = RenderTextureFormat.Default; } float totalCamRot = Mathf.Acos(Vector3.Dot(m_cameraTransform.right, Vector3.right)); if (Vector3.Cross(m_cameraTransform.right, Vector3.right).y > 0) { totalCamRot = -totalCamRot; } RenderTexture lensFlareRT = null; RenderTexture lensGlareRT = null; if (!m_highPrecision) { m_bloomRange.y = 1 / m_bloomRange.x; m_bloomMaterial.SetVector(AmplifyUtils.BloomRangeId, m_bloomRange); m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomRangeId, m_bloomRange); } m_bloomParams.y = m_overallThreshold; m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, m_bloomParams); m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, m_bloomParams); int thresholdResDiv = 1; switch (m_mainThresholdSize) { case MainThresholdSizeEnum.Half: thresholdResDiv = 2; break; case MainThresholdSizeEnum.Quarter: thresholdResDiv = 4; break; } // CALCULATE THRESHOLD RenderTexture thresholdRT = AmplifyUtils.GetTempRenderTarget(src.width / thresholdResDiv, src.height / thresholdResDiv); if (m_maskTexture != null) { m_bloomMaterial.SetTexture(AmplifyUtils.MaskTextureId, m_maskTexture); Graphics.Blit(src, thresholdRT, m_bloomMaterial, ( int )BloomPasses.ThresholdMask); } else { Graphics.Blit(src, thresholdRT, m_bloomMaterial, ( int )BloomPasses.Threshold); } if (m_debugToScreen == DebugToScreenEnum.MainThreshold) { Graphics.Blit(thresholdRT, dest, m_bloomMaterial, ( int )BloomPasses.Decode); AmplifyUtils.ReleaseAllRT(); return; } // DOWNSAMPLE bool applyGaussian = true; RenderTexture downsampleRT = thresholdRT; if (m_bloomDownsampleCount > 0) { applyGaussian = false; int tempW = thresholdRT.width; int tempH = thresholdRT.height; for (int i = 0; i < m_bloomDownsampleCount; i++) { m_tempDownsamplesSizes[i].x = tempW; m_tempDownsamplesSizes[i].y = tempH; tempW = (tempW + 1) >> 1; tempH = (tempH + 1) >> 1; m_tempAuxDownsampleRTs[i] = AmplifyUtils.GetTempRenderTarget(tempW, tempH); if (i == 0) { if (!m_temporalFilteringActive || m_gaussianSteps[i] != 0) { if (m_upscaleQuality == UpscaleQualityEnum.Realistic) { Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithKaris); } else { Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithoutKaris); } } else { if (m_tempFilterBuffer != null && m_temporalFilteringActive) { float filterVal = m_temporalFilteringCurve.Evaluate(m_temporalFilteringValue); m_bloomMaterial.SetFloat(AmplifyUtils.TempFilterValueId, filterVal); m_bloomMaterial.SetTexture(AmplifyUtils.AnamorphicRTS[0], m_tempFilterBuffer); if (m_upscaleQuality == UpscaleQualityEnum.Realistic) { Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithTempFilterWithKaris); } else { Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithTempFilterWithoutKaris); } } else { if (m_upscaleQuality == UpscaleQualityEnum.Realistic) { Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithKaris); } else { Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithoutKaris); } } bool createRT = false; if (m_tempFilterBuffer != null) { if (m_tempFilterBuffer.format != m_tempAuxDownsampleRTs[i].format || m_tempFilterBuffer.width != m_tempAuxDownsampleRTs[i].width || m_tempFilterBuffer.height != m_tempAuxDownsampleRTs[i].height) { CleanTempFilterRT(); createRT = true; } } else { createRT = true; } if (createRT) { CreateTempFilterRT(m_tempAuxDownsampleRTs[i]); } m_tempFilterBuffer.DiscardContents(); Graphics.Blit(m_tempAuxDownsampleRTs[i], m_tempFilterBuffer); if (m_debugToScreen == DebugToScreenEnum.TemporalFilter) { Graphics.Blit(m_tempAuxDownsampleRTs[i], dest); AmplifyUtils.ReleaseAllRT(); return; } } } else { Graphics.Blit(m_tempAuxDownsampleRTs[i - 1], m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleNoWeightedAvg); } if (m_gaussianSteps[i] > 0) { ApplyGaussianBlur(m_tempAuxDownsampleRTs[i], m_gaussianSteps[i], m_gaussianRadius[i], i == 0); if (m_temporalFilteringActive && m_debugToScreen == DebugToScreenEnum.TemporalFilter) { Graphics.Blit(m_tempAuxDownsampleRTs[i], dest); AmplifyUtils.ReleaseAllRT(); return; } } } downsampleRT = m_tempAuxDownsampleRTs[m_featuresSourceId]; AmplifyUtils.ReleaseTempRenderTarget(thresholdRT); } // BOKEH FILTER if (m_bokehFilter.ApplyBokeh && m_bokehFilter.ApplyOnBloomSource) { m_bokehFilter.ApplyBokehFilter(downsampleRT, m_bloomMaterial); if (m_debugToScreen == DebugToScreenEnum.BokehFilter) { Graphics.Blit(downsampleRT, dest); AmplifyUtils.ReleaseAllRT(); return; } } // FEATURES THRESHOLD RenderTexture featuresRT = null; bool releaseFeaturesRT = false; if (m_separateFeaturesThreshold) { m_bloomParams.y = m_featuresThreshold; m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, m_bloomParams); m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, m_bloomParams); featuresRT = AmplifyUtils.GetTempRenderTarget(downsampleRT.width, downsampleRT.height); releaseFeaturesRT = true; Graphics.Blit(downsampleRT, featuresRT, m_bloomMaterial, ( int )BloomPasses.Threshold); if (m_debugToScreen == DebugToScreenEnum.FeaturesThreshold) { Graphics.Blit(featuresRT, dest); AmplifyUtils.ReleaseAllRT(); return; } } else { featuresRT = downsampleRT; } if (m_bokehFilter.ApplyBokeh && !m_bokehFilter.ApplyOnBloomSource) { if (!releaseFeaturesRT) { releaseFeaturesRT = true; featuresRT = AmplifyUtils.GetTempRenderTarget(downsampleRT.width, downsampleRT.height); Graphics.Blit(downsampleRT, featuresRT); } m_bokehFilter.ApplyBokehFilter(featuresRT, m_bloomMaterial); if (m_debugToScreen == DebugToScreenEnum.BokehFilter) { Graphics.Blit(featuresRT, dest); AmplifyUtils.ReleaseAllRT(); return; } } // LENS FLARE if (m_lensFlare.ApplyLensFlare && m_debugToScreen != DebugToScreenEnum.Bloom) { lensFlareRT = m_lensFlare.ApplyFlare(m_bloomMaterial, featuresRT); ApplyGaussianBlur(lensFlareRT, m_lensFlare.LensFlareGaussianBlurAmount); if (m_debugToScreen == DebugToScreenEnum.LensFlare) { Graphics.Blit(lensFlareRT, dest); AmplifyUtils.ReleaseAllRT(); return; } } //ANAMORPHIC GLARE if (m_anamorphicGlare.ApplyLensGlare && m_debugToScreen != DebugToScreenEnum.Bloom) { lensGlareRT = AmplifyUtils.GetTempRenderTarget(downsampleRT.width, downsampleRT.height); m_anamorphicGlare.OnRenderImage(m_bloomMaterial, featuresRT, lensGlareRT, totalCamRot); if (m_debugToScreen == DebugToScreenEnum.LensGlare) { Graphics.Blit(lensGlareRT, dest); AmplifyUtils.ReleaseAllRT(); return; } } if (releaseFeaturesRT) { AmplifyUtils.ReleaseTempRenderTarget(featuresRT); } //BLUR if (applyGaussian) { ApplyGaussianBlur(downsampleRT, m_gaussianSteps[0], m_gaussianRadius[0]); } //UPSAMPLE if (m_bloomDownsampleCount > 0) { if (m_bloomDownsampleCount == 1) { if (m_upscaleQuality == UpscaleQualityEnum.Realistic) { ApplyUpscale(); m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], m_tempUpscaleRTs[0]); } else { m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], m_tempAuxDownsampleRTs[0]); } m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], m_upscaleWeights[0]); } else { if (m_upscaleQuality == UpscaleQualityEnum.Realistic) { ApplyUpscale(); for (int i = 0; i < m_bloomDownsampleCount; i++) { int id = m_bloomDownsampleCount - i - 1; m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[id], m_tempUpscaleRTs[i]); m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[id], m_upscaleWeights[i]); } } else { for (int i = 0; i < m_bloomDownsampleCount; i++) { int id = m_bloomDownsampleCount - 1 - i; m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[id], m_tempAuxDownsampleRTs[id]); m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[id], m_upscaleWeights[i]); } } } } else { m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], downsampleRT); m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], 1); } if (m_debugToScreen == DebugToScreenEnum.Bloom) { m_finalCompositionMaterial.SetFloat(AmplifyUtils.SourceContributionId, 0); FinalComposition(0, 1, src, dest, 0); return; } // FINAL COMPOSITION // LENS FLARE if (m_bloomDownsampleCount > 1) { for (int i = 0; i < m_bloomDownsampleCount; i++) { m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[m_bloomDownsampleCount - i - 1], m_lensDirtWeights[i]); m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[m_bloomDownsampleCount - i - 1], m_lensStarburstWeights[i]); } } else { m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[0], m_lensDirtWeights[0]); m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[0], m_lensStarburstWeights[0]); } if (m_lensFlare.ApplyLensFlare) { m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensFlareRTId, lensFlareRT); } //LENS GLARE if (m_anamorphicGlare.ApplyLensGlare) { m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensGlareRTId, lensGlareRT); } // LENS DIRT if (m_applyLensDirt) { m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensDirtRTId, m_lensDirtTexture); m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtStrengthId, m_lensDirtStrength * MaxDirtIntensity); if (m_debugToScreen == DebugToScreenEnum.LensDirt) { FinalComposition(0, 0, src, dest, 2); return; } } // LENS STARBURST if (m_applyLensStardurst) { m_starburstMat[0, 0] = Mathf.Cos(totalCamRot); m_starburstMat[0, 1] = -Mathf.Sin(totalCamRot); m_starburstMat[1, 0] = Mathf.Sin(totalCamRot); m_starburstMat[1, 1] = Mathf.Cos(totalCamRot); m_finalCompositionMaterial.SetMatrix(AmplifyUtils.LensFlareStarMatrixId, m_starburstMat); m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensFlareStarburstStrengthId, m_lensStarburstStrength * MaxStarburstIntensity); m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensStarburstRTId, m_lensStardurstTex); if (m_debugToScreen == DebugToScreenEnum.LensStarburst) { FinalComposition(0, 0, src, dest, 1); return; } } if (m_targetTexture != null) { m_targetTexture.DiscardContents(); FinalComposition(0, 1, src, m_targetTexture, -1); Graphics.Blit(src, dest); } else { FinalComposition(1, 1, src, dest, -1); } }
private void OnRenderImage(RenderTexture src, RenderTexture dest) { if (this.silentError) { return; } if (!AmplifyUtils.IsInitialized) { AmplifyUtils.InitializeIds(); } if (this.m_highPrecision) { AmplifyUtils.EnsureKeywordEnabled(this.m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, true); AmplifyUtils.EnsureKeywordEnabled(this.m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, true); AmplifyUtils.CurrentRTFormat = RenderTextureFormat.DefaultHDR; } else { AmplifyUtils.EnsureKeywordEnabled(this.m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, false); AmplifyUtils.EnsureKeywordEnabled(this.m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, false); AmplifyUtils.CurrentRTFormat = RenderTextureFormat.Default; } float num = Mathf.Acos(Vector3.Dot(this.m_cameraTransform.right, Vector3.right)); if (Vector3.Cross(this.m_cameraTransform.right, Vector3.right).y > 0f) { num = -num; } RenderTexture renderTexture = null; RenderTexture renderTexture2 = null; if (!this.m_highPrecision) { this.m_bloomRange.y = 1f / this.m_bloomRange.x; this.m_bloomMaterial.SetVector(AmplifyUtils.BloomRangeId, this.m_bloomRange); this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomRangeId, this.m_bloomRange); } this.m_bloomParams.y = this.m_overallThreshold; this.m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams); this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams); int num2 = 1; MainThresholdSizeEnum mainThresholdSize = this.m_mainThresholdSize; if (mainThresholdSize != MainThresholdSizeEnum.Half) { if (mainThresholdSize == MainThresholdSizeEnum.Quarter) { num2 = 4; } } else { num2 = 2; } RenderTexture tempRenderTarget = AmplifyUtils.GetTempRenderTarget(src.width / num2, src.height / num2); if (this.m_maskTexture != null) { this.m_bloomMaterial.SetTexture(AmplifyUtils.MaskTextureId, this.m_maskTexture); Graphics.Blit(src, tempRenderTarget, this.m_bloomMaterial, 1); } else { Graphics.Blit(src, tempRenderTarget, this.m_bloomMaterial, 0); } if (this.m_debugToScreen == DebugToScreenEnum.MainThreshold) { Graphics.Blit(tempRenderTarget, dest, this.m_bloomMaterial, 33); AmplifyUtils.ReleaseAllRT(); return; } bool flag = true; RenderTexture renderTexture3 = tempRenderTarget; if (this.m_bloomDownsampleCount > 0) { flag = false; int num3 = tempRenderTarget.width; int num4 = tempRenderTarget.height; for (int i = 0; i < this.m_bloomDownsampleCount; i++) { this.m_tempDownsamplesSizes[i].x = (float)num3; this.m_tempDownsamplesSizes[i].y = (float)num4; num3 = num3 + 1 >> 1; num4 = num4 + 1 >> 1; this.m_tempAuxDownsampleRTs[i] = AmplifyUtils.GetTempRenderTarget(num3, num4); if (i == 0) { if (!this.m_temporalFilteringActive || this.m_gaussianSteps[i] != 0) { if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic) { Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 10); } else { Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 11); } } else { if (this.m_tempFilterBuffer != null && this.m_temporalFilteringActive) { float value = this.m_temporalFilteringCurve.Evaluate(this.m_temporalFilteringValue); this.m_bloomMaterial.SetFloat(AmplifyUtils.TempFilterValueId, value); this.m_bloomMaterial.SetTexture(AmplifyUtils.AnamorphicRTS[0], this.m_tempFilterBuffer); if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic) { Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 12); } else { Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 13); } } else if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic) { Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 10); } else { Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 11); } bool flag2 = false; if (this.m_tempFilterBuffer != null) { if (this.m_tempFilterBuffer.format != this.m_tempAuxDownsampleRTs[i].format || this.m_tempFilterBuffer.width != this.m_tempAuxDownsampleRTs[i].width || this.m_tempFilterBuffer.height != this.m_tempAuxDownsampleRTs[i].height) { this.CleanTempFilterRT(); flag2 = true; } } else { flag2 = true; } if (flag2) { this.CreateTempFilterRT(this.m_tempAuxDownsampleRTs[i]); } this.m_tempFilterBuffer.DiscardContents(); Graphics.Blit(this.m_tempAuxDownsampleRTs[i], this.m_tempFilterBuffer); if (this.m_debugToScreen == DebugToScreenEnum.TemporalFilter) { Graphics.Blit(this.m_tempAuxDownsampleRTs[i], dest); AmplifyUtils.ReleaseAllRT(); return; } } } else { Graphics.Blit(this.m_tempAuxDownsampleRTs[i - 1], this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 9); } if (this.m_gaussianSteps[i] > 0) { this.ApplyGaussianBlur(this.m_tempAuxDownsampleRTs[i], this.m_gaussianSteps[i], this.m_gaussianRadius[i], i == 0); if (this.m_temporalFilteringActive && this.m_debugToScreen == DebugToScreenEnum.TemporalFilter) { Graphics.Blit(this.m_tempAuxDownsampleRTs[i], dest); AmplifyUtils.ReleaseAllRT(); return; } } } renderTexture3 = this.m_tempAuxDownsampleRTs[this.m_featuresSourceId]; AmplifyUtils.ReleaseTempRenderTarget(tempRenderTarget); } if (this.m_bokehFilter.ApplyBokeh && this.m_bokehFilter.ApplyOnBloomSource) { this.m_bokehFilter.ApplyBokehFilter(renderTexture3, this.m_bloomMaterial); if (this.m_debugToScreen == DebugToScreenEnum.BokehFilter) { Graphics.Blit(renderTexture3, dest); AmplifyUtils.ReleaseAllRT(); return; } } bool flag3 = false; RenderTexture renderTexture4; if (this.m_separateFeaturesThreshold) { this.m_bloomParams.y = this.m_featuresThreshold; this.m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams); this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams); renderTexture4 = AmplifyUtils.GetTempRenderTarget(renderTexture3.width, renderTexture3.height); flag3 = true; Graphics.Blit(renderTexture3, renderTexture4, this.m_bloomMaterial, 0); if (this.m_debugToScreen == DebugToScreenEnum.FeaturesThreshold) { Graphics.Blit(renderTexture4, dest); AmplifyUtils.ReleaseAllRT(); return; } } else { renderTexture4 = renderTexture3; } if (this.m_bokehFilter.ApplyBokeh && !this.m_bokehFilter.ApplyOnBloomSource) { if (!flag3) { flag3 = true; renderTexture4 = AmplifyUtils.GetTempRenderTarget(renderTexture3.width, renderTexture3.height); Graphics.Blit(renderTexture3, renderTexture4); } this.m_bokehFilter.ApplyBokehFilter(renderTexture4, this.m_bloomMaterial); if (this.m_debugToScreen == DebugToScreenEnum.BokehFilter) { Graphics.Blit(renderTexture4, dest); AmplifyUtils.ReleaseAllRT(); return; } } if (this.m_lensFlare.ApplyLensFlare && this.m_debugToScreen != DebugToScreenEnum.Bloom) { renderTexture = this.m_lensFlare.ApplyFlare(this.m_bloomMaterial, renderTexture4); this.ApplyGaussianBlur(renderTexture, this.m_lensFlare.LensFlareGaussianBlurAmount, 1f, false); if (this.m_debugToScreen == DebugToScreenEnum.LensFlare) { Graphics.Blit(renderTexture, dest); AmplifyUtils.ReleaseAllRT(); return; } } if (this.m_anamorphicGlare.ApplyLensGlare && this.m_debugToScreen != DebugToScreenEnum.Bloom) { renderTexture2 = AmplifyUtils.GetTempRenderTarget(renderTexture3.width, renderTexture3.height); this.m_anamorphicGlare.OnRenderImage(this.m_bloomMaterial, renderTexture4, renderTexture2, num); if (this.m_debugToScreen == DebugToScreenEnum.LensGlare) { Graphics.Blit(renderTexture2, dest); AmplifyUtils.ReleaseAllRT(); return; } } if (flag3) { AmplifyUtils.ReleaseTempRenderTarget(renderTexture4); } if (flag) { this.ApplyGaussianBlur(renderTexture3, this.m_gaussianSteps[0], this.m_gaussianRadius[0], false); } if (this.m_bloomDownsampleCount > 0) { if (this.m_bloomDownsampleCount == 1) { if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic) { this.ApplyUpscale(); this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], this.m_tempUpscaleRTs[0]); } else { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], this.m_tempAuxDownsampleRTs[0]); } this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], this.m_upscaleWeights[0]); } else if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic) { this.ApplyUpscale(); for (int j = 0; j < this.m_bloomDownsampleCount; j++) { int num5 = this.m_bloomDownsampleCount - j - 1; this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[num5], this.m_tempUpscaleRTs[j]); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[num5], this.m_upscaleWeights[j]); } } else { for (int k = 0; k < this.m_bloomDownsampleCount; k++) { int num6 = this.m_bloomDownsampleCount - 1 - k; this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[num6], this.m_tempAuxDownsampleRTs[num6]); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[num6], this.m_upscaleWeights[k]); } } } else { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], renderTexture3); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], 1f); } if (this.m_debugToScreen == DebugToScreenEnum.Bloom) { this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.SourceContributionId, 0f); this.FinalComposition(0f, 1f, src, dest, 0); return; } if (this.m_bloomDownsampleCount > 1) { for (int l = 0; l < this.m_bloomDownsampleCount; l++) { this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[this.m_bloomDownsampleCount - l - 1], this.m_lensDirtWeights[l]); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[this.m_bloomDownsampleCount - l - 1], this.m_lensStarburstWeights[l]); } } else { this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[0], this.m_lensDirtWeights[0]); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[0], this.m_lensStarburstWeights[0]); } if (this.m_lensFlare.ApplyLensFlare) { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensFlareRTId, renderTexture); } if (this.m_anamorphicGlare.ApplyLensGlare) { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensGlareRTId, renderTexture2); } if (this.m_applyLensDirt) { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensDirtRTId, this.m_lensDirtTexture); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtStrengthId, this.m_lensDirtStrength * 1f); if (this.m_debugToScreen == DebugToScreenEnum.LensDirt) { this.FinalComposition(0f, 0f, src, dest, 2); return; } } if (this.m_applyLensStardurst) { this.m_starburstMat[0, 0] = Mathf.Cos(num); this.m_starburstMat[0, 1] = -Mathf.Sin(num); this.m_starburstMat[1, 0] = Mathf.Sin(num); this.m_starburstMat[1, 1] = Mathf.Cos(num); this.m_finalCompositionMaterial.SetMatrix(AmplifyUtils.LensFlareStarMatrixId, this.m_starburstMat); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensFlareStarburstStrengthId, this.m_lensStarburstStrength * 1f); this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensStarburstRTId, this.m_lensStardurstTex); if (this.m_debugToScreen == DebugToScreenEnum.LensStarburst) { this.FinalComposition(0f, 0f, src, dest, 1); return; } } if (this.m_targetTexture != null) { this.m_targetTexture.DiscardContents(); this.FinalComposition(0f, 1f, src, this.m_targetTexture, -1); Graphics.Blit(src, dest); } else { this.FinalComposition(1f, 1f, src, dest, -1); } }
private void OnRenderImage(RenderTexture src, RenderTexture dest) { if (!this.silentError) { if (!AmplifyUtils.IsInitialized) { AmplifyUtils.InitializeIds(); } if (this.m_highPrecision) { AmplifyUtils.EnsureKeywordEnabled(this.m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, true); AmplifyUtils.EnsureKeywordEnabled(this.m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, true); AmplifyUtils.CurrentRTFormat = RenderTextureFormat.DefaultHDR; } else { AmplifyUtils.EnsureKeywordEnabled(this.m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, false); AmplifyUtils.EnsureKeywordEnabled(this.m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, false); AmplifyUtils.CurrentRTFormat = RenderTextureFormat.Default; } float cameraRot = Mathf.Acos(Vector3.Dot(this.m_cameraTransform.right, Vector3.right)); if (Vector3.Cross(this.m_cameraTransform.right, Vector3.right).y > 0f) { cameraRot = -cameraRot; } RenderTexture renderTexture = null; RenderTexture texture2 = null; if (!this.m_highPrecision) { this.m_bloomRange.y = 1f / this.m_bloomRange.x; this.m_bloomMaterial.SetVector(AmplifyUtils.BloomRangeId, this.m_bloomRange); this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomRangeId, this.m_bloomRange); } this.m_bloomParams.y = this.m_overallThreshold; this.m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams); this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams); int num2 = 1; MainThresholdSizeEnum mainThresholdSize = this.m_mainThresholdSize; if (mainThresholdSize == MainThresholdSizeEnum.Half) { num2 = 2; } else if (mainThresholdSize == MainThresholdSizeEnum.Quarter) { num2 = 4; } RenderTexture tempRenderTarget = AmplifyUtils.GetTempRenderTarget(src.width / num2, src.height / num2); if (this.m_maskTexture == null) { Graphics.Blit(src, tempRenderTarget, this.m_bloomMaterial, 0); } else { this.m_bloomMaterial.SetTexture(AmplifyUtils.MaskTextureId, this.m_maskTexture); Graphics.Blit(src, tempRenderTarget, this.m_bloomMaterial, 1); } if (this.m_debugToScreen == DebugToScreenEnum.MainThreshold) { Graphics.Blit(tempRenderTarget, dest, this.m_bloomMaterial, 0x21); AmplifyUtils.ReleaseAllRT(); } else { bool flag = true; RenderTexture source = tempRenderTarget; if (this.m_bloomDownsampleCount > 0) { flag = false; int width = tempRenderTarget.width; int height = tempRenderTarget.height; int index = 0; while (true) { if (index >= this.m_bloomDownsampleCount) { source = this.m_tempAuxDownsampleRTs[this.m_featuresSourceId]; AmplifyUtils.ReleaseTempRenderTarget(tempRenderTarget); break; } this.m_tempDownsamplesSizes[index].x = width; this.m_tempDownsamplesSizes[index].y = height; width = (width + 1) >> 1; height = (height + 1) >> 1; this.m_tempAuxDownsampleRTs[index] = AmplifyUtils.GetTempRenderTarget(width, height); if (index != 0) { Graphics.Blit(this.m_tempAuxDownsampleRTs[index - 1], this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 9); } else if (!this.m_temporalFilteringActive || (this.m_gaussianSteps[index] != 0)) { if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic) { Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 10); } else { Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 11); } } else { if ((this.m_tempFilterBuffer == null) || !this.m_temporalFilteringActive) { if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic) { Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 10); } else { Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 11); } } else { float num6 = this.m_temporalFilteringCurve.Evaluate(this.m_temporalFilteringValue); this.m_bloomMaterial.SetFloat(AmplifyUtils.TempFilterValueId, num6); this.m_bloomMaterial.SetTexture(AmplifyUtils.AnamorphicRTS[0], this.m_tempFilterBuffer); if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic) { Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 12); } else { Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 13); } } bool flag2 = false; if (this.m_tempFilterBuffer == null) { flag2 = true; } else if ((this.m_tempFilterBuffer.format != this.m_tempAuxDownsampleRTs[index].format) || ((this.m_tempFilterBuffer.width != this.m_tempAuxDownsampleRTs[index].width) || (this.m_tempFilterBuffer.height != this.m_tempAuxDownsampleRTs[index].height))) { this.CleanTempFilterRT(); flag2 = true; } if (flag2) { this.CreateTempFilterRT(this.m_tempAuxDownsampleRTs[index]); } this.m_tempFilterBuffer.DiscardContents(); Graphics.Blit(this.m_tempAuxDownsampleRTs[index], this.m_tempFilterBuffer); if (this.m_debugToScreen == DebugToScreenEnum.TemporalFilter) { Graphics.Blit(this.m_tempAuxDownsampleRTs[index], dest); AmplifyUtils.ReleaseAllRT(); return; } } if (this.m_gaussianSteps[index] > 0) { this.ApplyGaussianBlur(this.m_tempAuxDownsampleRTs[index], this.m_gaussianSteps[index], this.m_gaussianRadius[index], index == 0); if (this.m_temporalFilteringActive && (this.m_debugToScreen == DebugToScreenEnum.TemporalFilter)) { Graphics.Blit(this.m_tempAuxDownsampleRTs[index], dest); AmplifyUtils.ReleaseAllRT(); return; } } index++; } } if (this.m_bokehFilter.ApplyBokeh && this.m_bokehFilter.ApplyOnBloomSource) { this.m_bokehFilter.ApplyBokehFilter(source, this.m_bloomMaterial); if (this.m_debugToScreen == DebugToScreenEnum.BokehFilter) { Graphics.Blit(source, dest); AmplifyUtils.ReleaseAllRT(); return; } } RenderTexture texture5 = null; bool flag3 = false; if (!this.m_separateFeaturesThreshold) { texture5 = source; } else { this.m_bloomParams.y = this.m_featuresThreshold; this.m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams); this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams); texture5 = AmplifyUtils.GetTempRenderTarget(source.width, source.height); flag3 = true; Graphics.Blit(source, texture5, this.m_bloomMaterial, 0); if (this.m_debugToScreen == DebugToScreenEnum.FeaturesThreshold) { Graphics.Blit(texture5, dest); AmplifyUtils.ReleaseAllRT(); return; } } if (this.m_bokehFilter.ApplyBokeh && !this.m_bokehFilter.ApplyOnBloomSource) { if (!flag3) { flag3 = true; texture5 = AmplifyUtils.GetTempRenderTarget(source.width, source.height); Graphics.Blit(source, texture5); } this.m_bokehFilter.ApplyBokehFilter(texture5, this.m_bloomMaterial); if (this.m_debugToScreen == DebugToScreenEnum.BokehFilter) { Graphics.Blit(texture5, dest); AmplifyUtils.ReleaseAllRT(); return; } } if (this.m_lensFlare.ApplyLensFlare && (this.m_debugToScreen != DebugToScreenEnum.Bloom)) { renderTexture = this.m_lensFlare.ApplyFlare(this.m_bloomMaterial, texture5); this.ApplyGaussianBlur(renderTexture, this.m_lensFlare.LensFlareGaussianBlurAmount, 1f, false); if (this.m_debugToScreen == DebugToScreenEnum.LensFlare) { Graphics.Blit(renderTexture, dest); AmplifyUtils.ReleaseAllRT(); return; } } if (this.m_anamorphicGlare.ApplyLensGlare && (this.m_debugToScreen != DebugToScreenEnum.Bloom)) { texture2 = AmplifyUtils.GetTempRenderTarget(source.width, source.height); this.m_anamorphicGlare.OnRenderImage(this.m_bloomMaterial, texture5, texture2, cameraRot); if (this.m_debugToScreen == DebugToScreenEnum.LensGlare) { Graphics.Blit(texture2, dest); AmplifyUtils.ReleaseAllRT(); return; } } if (flag3) { AmplifyUtils.ReleaseTempRenderTarget(texture5); } if (flag) { this.ApplyGaussianBlur(source, this.m_gaussianSteps[0], this.m_gaussianRadius[0], false); } if (this.m_bloomDownsampleCount <= 0) { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], source); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], 1f); } else if (this.m_bloomDownsampleCount == 1) { if (this.m_upscaleQuality != UpscaleQualityEnum.Realistic) { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], this.m_tempAuxDownsampleRTs[0]); } else { this.ApplyUpscale(); this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], this.m_tempUpscaleRTs[0]); } this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], this.m_upscaleWeights[0]); } else if (this.m_upscaleQuality != UpscaleQualityEnum.Realistic) { for (int i = 0; i < this.m_bloomDownsampleCount; i++) { int index = (this.m_bloomDownsampleCount - 1) - i; this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[index], this.m_tempAuxDownsampleRTs[index]); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[index], this.m_upscaleWeights[i]); } } else { this.ApplyUpscale(); for (int i = 0; i < this.m_bloomDownsampleCount; i++) { int index = (this.m_bloomDownsampleCount - i) - 1; this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[index], this.m_tempUpscaleRTs[i]); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[index], this.m_upscaleWeights[i]); } } if (this.m_debugToScreen == DebugToScreenEnum.Bloom) { this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.SourceContributionId, 0f); this.FinalComposition(0f, 1f, src, dest, 0); } else { if (this.m_bloomDownsampleCount <= 1) { this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[0], this.m_lensDirtWeights[0]); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[0], this.m_lensStarburstWeights[0]); } else { for (int i = 0; i < this.m_bloomDownsampleCount; i++) { this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[(this.m_bloomDownsampleCount - i) - 1], this.m_lensDirtWeights[i]); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[(this.m_bloomDownsampleCount - i) - 1], this.m_lensStarburstWeights[i]); } } if (this.m_lensFlare.ApplyLensFlare) { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensFlareRTId, renderTexture); } if (this.m_anamorphicGlare.ApplyLensGlare) { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensGlareRTId, texture2); } if (this.m_applyLensDirt) { this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensDirtRTId, this.m_lensDirtTexture); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtStrengthId, this.m_lensDirtStrength * 1f); if (this.m_debugToScreen == DebugToScreenEnum.LensDirt) { this.FinalComposition(0f, 0f, src, dest, 2); return; } } if (this.m_applyLensStardurst) { this.m_starburstMat[0, 0] = Mathf.Cos(cameraRot); this.m_starburstMat[0, 1] = -Mathf.Sin(cameraRot); this.m_starburstMat[1, 0] = Mathf.Sin(cameraRot); this.m_starburstMat[1, 1] = Mathf.Cos(cameraRot); this.m_finalCompositionMaterial.SetMatrix(AmplifyUtils.LensFlareStarMatrixId, this.m_starburstMat); this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensFlareStarburstStrengthId, this.m_lensStarburstStrength * 1f); this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensStarburstRTId, this.m_lensStardurstTex); if (this.m_debugToScreen == DebugToScreenEnum.LensStarburst) { this.FinalComposition(0f, 0f, src, dest, 1); return; } } if (this.m_targetTexture == null) { this.FinalComposition(1f, 1f, src, dest, -1); } else { this.m_targetTexture.DiscardContents(); this.FinalComposition(0f, 1f, src, this.m_targetTexture, -1); Graphics.Blit(src, dest); } } } } }