博客 / 詳情

返回

【URP】Unity[後處理]色彩偏移,中間調,高光增強-Lift,Gamma,Gain

【從UnityURP開始探索遊戲渲染】專欄-直達

Lift、Gamma和Gain是Unity URP後處理系統中基於ASC CDL(美國電影攝影師協會色彩決策列表)標準的色彩分級工具,用於分別控制暗調、中間調和高光的色彩偏移與明度調整。以下是詳細解析:

核心功能與參數含義

Lift

  • 作用:控制暗調區域(Dark Tones)的色彩偏移和明度
  • 參數:

    • 軌跡球:選擇暗調色調偏移目標顏色
    • 滑塊:調整軌跡球顏色的明度值
  • 用例:增強陰影的冷色調(如電影感藍色陰影)

Gamma

  • 作用:通過冪函數調整中間調(Mid-range Tones)
  • 參數:

    • 軌跡球:選擇中間調色調偏移目標顏色
    • 滑塊:控制中間調明度
  • 用例:修正膚色偏黃問題

Gain

  • 作用:增強高光(Highlights)信號強度
  • 參數:

    • 軌跡球:選擇高光色調偏移目標顏色
    • 滑塊:調整高光明度
  • 用例:模擬陽光照射的暖色高光

發展歷史與技術背景

該技術源自電影工業的ASC CDL標準,用於跨平台色彩分級一致性。Unity HDRP/URP通過Volume系統將其引入實時渲染,替代了傳統分離色調(Split Toning)的非標準化操作。Gamma校正則源於CRT顯示器的非線性響應曲線(gamma≈2.2),現代渲染管線通過線性工作流(Linear Space)避免計算失真。

原理

Lift、Gamma和Gain是Unity URP後處理中基於ASC CDL標準的色彩分級工具,其底層原理涉及色彩空間轉換與影調分離控制:

底層原理

  • Lift

    • 原理:通過向量乘法調整暗調區域(RGB值<0.18),公式為output = input + (liftColor * (1 - input)),其中liftColor為軌跡球選擇的HDR顏色
    • 示例:設置lift為(0.1, 0, -0.05)會使陰影偏藍且降低暗部密度
  • Gamma

    • 原理:對中間調(0.18<RGB值<0.8)應用冪函數output = pow(input, 1/gammaValue),gammaValue通過滑塊與軌跡球顏色混合計算
    • 示例:gamma設為(0.9, 1.1, 1.0)會使紅色通道更亮、綠色更暗
  • Gain

    • 原理:對高光(RGB值>0.8)進行線性增強output = input * gainColor,gainColor包含軌跡球色相和滑塊明度
    • 示例:gain設為(1.2, 1.0, 0.8)會創建暖色高光效果

實現流程示例

  • 通過Volume系統訪問LiftGammaGain覆蓋層
  • 使用Vector4傳遞參數(RGB分量+Alpha保留)
  • 實時修改參數會立即影響渲染管線
  • LiftGammaGainExample.cs

    using UnityEngine.Rendering;
    using UnityEngine.Rendering.Universal;
    
    public class LiftGammaGainController : MonoBehaviour {
        public VolumeProfile profile;
    
        void Update() {
            if(profile.TryGet(out LiftGammaGain lgg)) {
                // 動態調整Lift(時間變化的藍色陰影)
                lgg.lift.value = new Vector4(
                    0.1f, 
                    0.05f * Mathf.Sin(Time.time), 
                    -0.1f, 
                    1f
                );
    
                // Gamma中間調增強
                lgg.gamma.value = new Vector4(1.1f, 1.1f, 1.1f, 1f);
    
                // 高光增益(金色高光)
                lgg.gain.value = new Vector4(1.5f, 1.3f, 0.8f, 1f);
            }
        }
    }

技術細節

  • 色彩空間‌:所有計算在線性空間(Linear Color Space)執行,需在Player Settings中啓用
  • 性能優化‌:每個參數的軌跡球計算在Shader中通過mix()函數插值實現,避免分支判斷
  • 混合模式‌:與Color Grading其他效果(如Tonemapping)按URP渲染順序疊加處理

典型應用場景

  • 電影感調色‌:Lift(-0.1,0,0.1)冷陰影 + Gamma中性 + Gain(1.3,1.2,1.0)暖高光
  • 風格化渲染‌:Gamma(0.8,0.8,1.5)增強藍色中間調,配合高對比度Lift/Gain
  • 晝夜轉換‌:通過腳本動態插值Lift值實現陰影色調隨時間變化

URP實現流程

基礎配置

  • 啓用URP管線的Post Processing功能
  • 攝像機勾選Rendering > Post Processing選項

Volume系統設置

csharp
// 創建Global Volume並添加Lift Gamma Gain覆蓋
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

public class SetupPostProcessing : MonoBehaviour {
    void Start() {
        var volume = gameObject.AddComponent<Volume>();
        volume.profile = ScriptableObject.CreateInstance<VolumeProfile>();
        volume.profile.Add<LiftGammaGain>(true);
    }
}

參數動態控制示例

csharp
// 運行時調整Gain參數
VolumeProfile profile = GetComponent<Volume>().profile;
if(profile.TryGet(out LiftGammaGain lgg)) {
    lgg.gain.value = new Vector4(1.2f, 1.1f, 0.9f, 1f);// RGB增益
}

完整示例項目配置

場景搭建

  • 創建URP項目(2021.3+版本)
  • 安裝Universal RPPost Processing

Volume配置步驟

  • Hierarchy右鍵 > Volume > Global Volume
  • Inspector中點擊Add Override > Color Adjustments > Lift Gamma Gain

參數聯動案例

  • 電影化調色‌:Lift偏藍(-0.1, -0.05, 0.1),Gamma中性(0,0,0),Gain偏橙(0.1, 0.05, -0.05)
  • 風格化場景‌:提升Gain亮度(1.5,1.5,1.5)增強卡通感

技術注意事項

  • 線性空間(Linear Color Space)下效果更準確,需在Project Settings > Player > Other Settings中設置
  • Shadow/Midtones/Highlights效果類似,但Lift Gamma Gain遵循工業標準,調色更可控

通過軌跡球和滑塊的組合控制,開發者可實現從自然色彩校正到藝術化風格渲染的全流程控制


【從UnityURP開始探索遊戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.