🐙

Unity URP の 無駄な ColorGradingLUT を減らす

2023/12/31に公開

問題

URP で PostEffect を有効にすると、ColorGrading を利用していなくても ColorGradingLUT で SetPass を 1 つ消費してしまう

バージョン

Unity 2023.2
URP 16.0.4
※これより古いバージョンでも同様に発生する

解決策

URP のパッケージの中身を変更する

  1. Runtime/UniversalRenderer.cs の Setup() 内で generateColorGradingLUT を false にする
        /// <inheritdoc />
        public override void Setup(ScriptableRenderContext context, ref RenderingData renderingData)
        {
            ...
            // TODO: We could cache and generate the LUT before rendering the stack
            //bool generateColorGradingLUT = cameraData.postProcessEnabled && m_PostProcessPasses.isCreated;
	    // 強制的に false にする
            bool generateColorGradingLUT = false;
            ...
  1. Shaders/PostProcessing/UberPost.shader の ApplyColorGrading() を呼んでいる行をコメントアウトする
            // Color grading is always enabled when post-processing/uber is active
            {
		// コメントアウト
                //color = ApplyColorGrading(color, PostExposure, TEXTURE2D_ARGS(_InternalLut, sampler_LinearClamp), LutParams, TEXTURE2D_ARGS(_UserLut, sampler_LinearClamp), UserLutParams, UserLutContribution);
            }

結果

ColorGradingLUT が無くなって SetPass が 1 つ減る

Discussion