【URP】Unity[后處理]色彩調整ColorAdjustments
【從UnityURP開始探索游戲渲染】專欄-直達
Unity URP中的Color Adjustments后處理效果用于調整最終渲染圖像的整體色調、亮度和對比度,是優化視覺表現的核心工具。其發展歷史可追溯至Unity 4.X時代的色彩校正曲線和3D查找紋理技術,早期通過手動調節RGB通道曲線實現基礎調色功能,而在URP中已整合為標準化體積框架下的模塊化組件。
底層原理
Unity URP中的Color Adjustments后處理效果基于渲染管線中的片段著色器操作,其核心原理是通過線性空間下的數學變換調整像素顏色值。該效果在色調映射階段前執行,作用于HDR顏色緩沖區的數據
- ?曝光調整?:通過
pow(2, postExposure)對RGB通道進行指數級亮度縮放,模擬相機曝光補償機制。計算過程發生在線性顏色空間,避免伽馬校正干擾。 - ?對比度計算?:采用中間灰值(0.5)作為基準點,使用
saturate((color.rgb - 0.5) * contrast + 0.5)公式擴展或壓縮動態范圍,其中saturate確保結果在[0,1]范圍內。 - ?色調/飽和度?:將RGB轉換到HSV色彩空間,調整H分量實現色相旋轉,S分量控制顏色純度,最后轉回RGB空間.
實現示例
以下為URP內置著色器中顏色調整的核心代碼邏輯:
-
?曝光計算?:采用2的冪次方實現物理正確的曝光模擬
-
?HSV轉換?:通過幾何插值法避免三角函數運算提升性能
-
?動態范圍保護?:使用
step()和saturate()防止數值溢出 -
ColorAdjustment.hlsl
// 線性空間下的顏色處理函數 half3 ApplyColorAdjustments(half3 color, float postExposure, float contrast, float hueShift, float saturation) { // 曝光調整 color *= exp2(postExposure); // 對比度計算 color = (color - 0.5h) * contrast + 0.5h; // RGB轉HSV half4 k = half4(0.0, -1.0/3.0, 2.0/3.0, -1.0); half4 p = lerp(half4(color.bg, k.wz), half4(color.gb, k.xy), step(color.b, color.g)); half4 q = lerp(half4(p.xyw, color.r), half4(color.r, p.yzx), step(p.x, color.r)); float d = q.x - min(q.w, q.y); float e = 1.0e-10; half3 hsv = half3(abs(q.z + (q.w - q.y)/(6.0 * d + e)), d/(q.x + e), q.x); // 色相/飽和度調整 hsv.x += hueShift; hsv.y *= saturation; // HSV轉RGB return HsvToRgb(hsv); }
該效果在URP渲染流程中通過Volume系統注入參數,最終由FinalPost.shader在渲染目標上執行全屏繪制。色彩調整的運算順序遵循:曝光→對比度→色調/飽和度→顏色濾鏡,確保各階段調整互不干擾.
核心參數與功能
- ?Post Exposure?:以EV單位調整場景整體曝光度,作用于HDR效果后、色調映射前,不影響處理鏈中其他效果。
- ?Contrast?:擴展(正值)或收縮(負值)色調范圍,增強視覺層次感。
- ?Color Filter?:通過顏色選擇器對渲染結果進行乘法著色,實現整體色調偏移。
- ?Hue Shift?:全局調整所有顏色的色相值,常用于風格化渲染。
- ?Saturation?:控制顏色強度,負值可生成灰度圖像。
實現流程示例
?創建后處理體積?
- 添加空GameObject并掛載
Volume組件 - 新建配置文件(如
ColorProfile),通過Add Override > Post-processing添加Color Adjustments效果
?相機配置?
- 啟用相機的
Post Processing選項 - 在
Volume Mask中匹配后處理體積的圖層(如PostProcessLayer1)
?參數調試?
- 調整
Contrast至1.2增強場景對比度 - 設置
Color Filter為淺藍色實現冷色調風格化
實際應用案例
- ?恐怖游戲?:降低飽和度至-30并微調色相,營造壓抑氛圍
- ?開放世界?:動態調整曝光度模擬晝夜光照變化
以下為完整URP實現代碼示例:
-
腳本掛載至含Volume組件的對象
-
通過Inspector動態修改參數值
-
支持運行時效果切換
-
ColorAdjustmentSetup.cs
using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class ColorAdjustmentSetup : MonoBehaviour { [SerializeField] private VolumeProfile profile; [SerializeField] private float contrast = 1.2f; [SerializeField] private Color colorFilter = new Color(0.8f, 0.9f, 1f); void Start() { if (profile.TryGet(out ColorAdjustments adjustments)) { adjustments.contrast.value = contrast; adjustments.colorFilter.value = colorFilter; } } }
該技術通過分離渲染管線與美術控制,實現了非破壞性工作流,成為現代游戲開發的標準實踐
【從UnityURP開始探索游戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,??)

Unity URP中的Color Adjustments后處理效果用于調整最終渲染圖像的整體色調、亮度和對比度,是優化視覺表現的核心工具。其發展歷史可追溯至Unity 4.X時代的色彩校正曲線和3D查
浙公網安備 33010602011771號