void DoToneMapping(int sourceId) { PostFXSettings.ToneMappingSettings.Mode mode = settings.ToneMapping.mode; Pass pass = mode < 0 ? Pass.Copy : Pass.ToneMappingACES + (int)mode; Draw(sourceId, BuiltinRenderTextureType.CameraTarget, pass); }
void DoFinal(int sourceId) { ConfigureColorAdjustments(); ConfigureWhiteBalance(); ConfigureSplitToning(); configureChannelMixer(); ConfigureShadowsMidtonesHighlights(); //Get the rt for LUT int lutHeight = colorLUTResolution; int lutWidth = lutHeight * lutHeight; buffer.GetTemporaryRT(colorGradingLUTId, lutWidth, lutHeight, 0, FilterMode.Bilinear, RenderTextureFormat.DefaultHDR); buffer.SetGlobalVector(colorGradingLUTParametersId, new Vector4( lutHeight, 0.5f / lutWidth, 0.5f / lutHeight, lutHeight / (lutHeight - 1f) )); PostFXSettings.ToneMappingSettings.Mode mode = settings.ToneMapping.mode; Pass pass = Pass.ColorGradingNone + (int)mode; buffer.SetGlobalFloat( colorGradingLUTInLogId, useHDR && pass != Pass.ColorGradingNone ? 1f:0f ); //Debug.Log(useHDR); //draw color grading to LUT Draw(sourceId, colorGradingLUTId, pass); buffer.SetGlobalVector(colorGradingLUTParametersId, new Vector4(1f / lutWidth, 1f / lutHeight, lutHeight - 1f) ); //Set Final blend mode to zero one, for multi cam blending buffer.SetGlobalFloat(finalSrcBlendId, 1f); buffer.SetGlobalFloat(finalDstBlendId, 0f); //check if we are using FXAA, if so add one more layer buffer if (fxaa.enabled) { ConfigureFXAA(); buffer.GetTemporaryRT( colorGradingResultId, bufferSize.x, bufferSize.y, 0, FilterMode.Bilinear, RenderTextureFormat.Default); Draw(sourceId, colorGradingResultId, keepAlpha ? Pass.ApplyColorGrading : Pass.ApplyColorGradingwithLuma); } //Check if we are using scaled rendering if (bufferSize.x == camera.pixelWidth) { if (fxaa.enabled) { DrawFinal(colorGradingResultId, keepAlpha ? Pass.FXAA : Pass.FXAAWithLuma); buffer.ReleaseTemporaryRT(colorGradingResultId); } else { DrawFinal(sourceId, Pass.ApplyColorGrading); } } else { buffer.GetTemporaryRT( finalResultId, bufferSize.x, bufferSize.y, 0, FilterMode.Bilinear, RenderTextureFormat.Default ); if (fxaa.enabled) { Draw(colorGradingResultId, finalResultId, keepAlpha ? Pass.FXAA : Pass.FXAAWithLuma); buffer.ReleaseTemporaryRT(colorGradingResultId); } else { Draw(sourceId, finalResultId, Pass.ApplyColorGrading); } //addition scale draw bool bicubicSampling = bicubicRescaling == CameraBufferSettings.BicubicRescalingMode.UpAndDown || bicubicRescaling == CameraBufferSettings.BicubicRescalingMode.UpOnly && bufferSize.x < camera.pixelWidth; buffer.SetGlobalFloat(copyBicubicId, bicubicSampling ? 1f : 0f); DrawFinal(finalResultId, Pass.FinalRescale); buffer.ReleaseTemporaryRT(finalResultId); } buffer.ReleaseTemporaryRT(colorGradingLUTId); }