void DoColorGradingToneMapping(int sourceId) { ConfigureColorAdjustments(); ConfigWhiteBalance(); ConfigureSplitToning(); ConfigureChannelMixer(); ConfigureShadowsMidtonesHighlights(); //生成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))); //渲染ColorGrading和ToneMapping 到渲染纹理 ToneMappingSettings.Mode mode = settings.ToneMapping.mode; Pass pass = Pass.ColorGradingNone + (int)mode; buffer.SetGlobalFloat(colorGradingLUTInLogId, useHDR && pass != Pass.ColorGradingNone ? 1f:0f); Draw(sourceId, colorGradingLUTId, pass); //FinalPass buffer.SetGlobalVector(colorGradingLUTParametersId, new Vector4(1f / lutWidth, 1f / lutHeight, lutHeight - 1f)); //Draw(sourceId,BuiltinRenderTextureType.CameraTarget,Pass.Final); DrawFinal(sourceId); buffer.ReleaseTemporaryRT(colorGradingLUTId); }
void DoColorGradingAndToneMapping(int sourceId) { ConfigureColorAdjustments(); ConfigureWhiteBalance(); ConfigureSplitToning(); ConfigureChannelMixer(); ConfigureShadowsMidtonesHighlights(); 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) )); ToneMappingSettings.Mode mode = settings.ToneMapping.mode; Pass pass = Pass.ColorGradingNone + (int)mode; buffer.SetGlobalFloat( colorGradingLUTInLogId, useHDR && pass != Pass.ColorGradingNone ? 1f : 0f ); Draw(sourceId, colorGradingLUTId, pass); buffer.SetGlobalVector(colorGradingLUTParametersId, new Vector4(1f / lutWidth, 1f / lutHeight, lutHeight - 1f) ); if (bufferSize.x == camera.pixelWidth) { DrawFinal(sourceId, Pass.Final); } else { buffer.SetGlobalFloat(finalSrcBlendId, 1f); buffer.SetGlobalFloat(finalDstBlendId, 0f); buffer.GetTemporaryRT( finalResultId, bufferSize.x, bufferSize.y, 0, FilterMode.Bilinear, RenderTextureFormat.Default ); Draw(sourceId, finalResultId, Pass.Final); 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); }