渲染色彩管線解析:OkLab色相校正與AP1色域壓縮數(shù)學(xué)全解)
【免費(fèi)下載鏈接】OptiScaler_DLSSNROptiScaler bridges upscaling/frame gen across GPUs. Supports DLSS2/XeSS/FSR2 inputs, replaces native upscalers, enables FSR-FG/XeFG on non-FG titles. Supports Nukem mod for DLSSG-to-FSR3 FG. This fork adds support for neural rendering on dx12 games, more to come.項(xiàng)目地址https://gitcode.com/gh_mirrors/op/OptiScaler_DLSSNR點(diǎn)擊查看免費(fèi)下載OptiScaler 的神經(jīng)渲染DLSS Neural Rendering分支讓 DLSS 5 的神經(jīng)渲染模型可以跑在 DX12 游戲的超采樣輸出之上而它畫(huà)面穩(wěn)、不偏色的秘密就藏在一條精心設(shè)計(jì)的色彩管線里。這篇文章帶你完整拆解這條管線的數(shù)學(xué)基礎(chǔ)白點(diǎn)歸一化、軟膝編碼、雙分支亮度比合成以及 OkLab 色相校正與 AP1 色域壓縮是如何聯(lián)手保住畫(huà)面色彩的。一、為什么神經(jīng)渲染需要一條色彩管線神經(jīng)渲染模型nvngx_dlssnr.dllNGX 特性 18是在成品 sRGB 編碼幀上訓(xùn)練出來(lái)的它只認(rèn)識(shí) 0..1 范圍內(nèi)、亮度有界的成片。但 OptiScaler 超采樣器的輸出是線性、開(kāi)口無(wú)界的線性光緩沖——高光可以輕松超過(guò) 1暗部數(shù)值可以接近千分之一。直接把這樣的幀喂給模型等于讓它看一張不存在的圖片。所以整條管線做的事情可以概括為一句話把線性幀翻譯成模型認(rèn)識(shí)的代理圖像proxy模型回答后再翻譯回原始幀的線性空間并且翻譯全程不能歪色。所有相關(guān)參數(shù)都集中在菜單的 DLSS Neural Rendering 分組里DlssNr_Menu.cpp配置項(xiàng)則對(duì)應(yīng) Config.h 中標(biāo)記為removable as one block的[DlssNr]區(qū)塊。二、管線全景Encode → 模型 → Resolve整條管線實(shí)現(xiàn)在一個(gè)預(yù)編譯的 compute shader 里dlssnr.hlsl主機(jī)側(cè)的常量緩沖定義在 DlssNr_Common.hWhitePoint、TransferStrength、ColourStrength等。運(yùn)行模式枚舉DlssNr_Common.h模式作用Encode幀 → 代理圖歸一化 編碼Resolve代理 模型答案 原始幀 → 合成最終幀Downsample模型按更低分辨率工作時(shí)的代理降采樣Meter/Calibrate讀取游戲曝光、標(biāo)定緩沖尺度合成階段resolve的核心鏈路是白點(diǎn)歸一化整幀除以一個(gè)白點(diǎn)數(shù)值把圖片拉進(jìn) [0,1]雙分支亮度比合成把模型答案按亮度比縮放回原始幀的亮度位置OkLab 色相校正防止縮放過(guò)程改寫(xiě)色相亮度比護(hù)欄 色彩強(qiáng)度混合限制單幀波動(dòng)、控制模型色彩介入程度AP1 色域壓縮把越界顏色安全地拉回可顯示范圍。三、白點(diǎn)歸一化給開(kāi)口緩沖找一個(gè)分母歸一化的分母不是拍腦袋的常量。菜單里 White point from 提供三個(gè)來(lái)源DlssNr_Menu.cppPaper white only手動(dòng)滑桿。不同游戲需要的數(shù)值差異巨大——Nioh 3 的線性緩沖峰值在兩百左右需要約 240 的分母而 GTA V 的曝光算出來(lái)只要 2.7The games own exposure直接讀游戲自己維護(hù)的 1×1 曝光紋理D3D12 下甚至在 shader 里實(shí)時(shí)讀取消除 3~4 幀的 CPU 讀回延遲A buffer the scan found針對(duì)算出曝光卻不傳出來(lái)的游戲由曝光掃描DlssNr_ExposureScan.cpp按形狀匹配候選緩沖并錨定比例。分母選錯(cuò)的后果很直觀偏小則幀永遠(yuǎn)歸一化不掉亮度比算出幾百OkLab 的立方根變換拿到遠(yuǎn)超設(shè)計(jì)范圍的值——屏幕上就是一片綠偏。這也是為什么白點(diǎn)是整條管線的地基。四、Encode 編碼軟膝、Neutwo 與 Hybrid 三條曲線歸一化之后還要把幀編碼進(jìn) [0,1] 的 sRGB 空間。這是給模型看什么的關(guān)鍵決策gReversibleMode對(duì)應(yīng)三個(gè)選項(xiàng)dlssnr.hlsl 軟膝 SoftKnee默認(rèn)Off亮度超過(guò) 0.75 后不再硬切而是按0.75 0.25 × (1 ? e^-(luma?0.75)/0.25)指數(shù)回卷避免模型看到一片逐幀閃爍的平白另外用峰值通道整體縮放替代逐通道截?cái)喾乐顾{(lán)色被截成青色dlssnr.hlsl。缺點(diǎn)是回卷把高光細(xì)節(jié)壓進(jìn)極窄的區(qū)間模型根本分辨不了。 Neutwo 可逆代理Neutwo(x) x·rsqrt(x2 1)把 [0, ∞) 無(wú)死區(qū)地映射到 [0, 1)高光層次完整保留且可精確反解。技巧同樣是一個(gè)標(biāo)量作用于峰值通道三通道比例不變、色相不彎dlssnr.hlsl。代價(jià)是中間調(diào)也被壓縮柔光場(chǎng)景反而可能更差。 Hybrid折中方案推薦HybridCurve0.75 以下恒等中間調(diào)與 Off 完全一致以上只對(duì)超出部分施加 Neutwo拐點(diǎn)處一階連續(xù)。一條在處處 ≥ Off 的曲線既不留中間調(diào)損失又拿回高光細(xì)節(jié)dlssnr.hlsl。五、雙分支亮度比合成而不是相加模型返回的不是一幀差異而是一張完整的圖。早期版本把它當(dāng)差值加到幀上結(jié)果沒(méi)有任何東西約束總和的落點(diǎn)——暖色主體可能帶綠回來(lái)?,F(xiàn)在的設(shè)計(jì)dlssnr.hlsl是把它當(dāng)一張圖用亮度比拉回原始幀的亮度位置原始亮度 代理亮度幀比代理暗ratio originalLuma / proxyLuma以幀自己的亮度為目標(biāo)原始亮度 代理亮度幀有代理裝不下的頭roomratio (modelLuma (originalLuma ? proxyLuma)) / modelLuma把這部分真實(shí)亮度疊在模型答案之上而不是縮放掉高光因此不會(huì)被壓暗。在此基礎(chǔ)上還有兩道保險(xiǎn)暗部底限kRatioFloor 1/512暗像素上微小的模型改動(dòng)會(huì)產(chǎn)生巨大比值底限讓比值隨亮度趨零平滑收斂到 1消除沸騰噪塊最大比值護(hù)欄boundedRatio clamp(amplified, 1/guard, guard)強(qiáng)度大于 1 時(shí)通過(guò)對(duì)比值取冪來(lái)放大而不是外推混合保證結(jié)果始終被護(hù)欄約束雙向限幅避免暗部塌陷。色彩強(qiáng)度Colour strength則做兩件不同的事0..1 時(shí)在僅亮度結(jié)果游戲自己的色相 模型的明度與完整模型色彩之間插值——兩個(gè)端點(diǎn)都是合法圖片中間點(diǎn)也是大于 1 時(shí)進(jìn)入過(guò)飽和模式只在 OkLab 空間放大 a/b 分量L 與色相保持不變?cè)浇绮糠纸唤o下一步 AP1 壓縮滾出。上圖是色彩處理不當(dāng)?shù)牡湫桶Y狀色調(diào)偏移、輝光丟失。神經(jīng)渲染管線的每一步設(shè)計(jì)本質(zhì)上都是在回答如何避免這類(lèi)偏色。六、OkLab 色相校正色相從哪來(lái)就往哪放問(wèn)題的根源對(duì)一個(gè) RGB 三元組做整體比例縮放不會(huì)改變色相但把差異加上去會(huì)??s放后的顏色再回混合時(shí)色相可能漂移。OkLab 校正HueOkLabdlssnr.hlsl的做法進(jìn) OkLab線性 RGB → LMSBjorn Ottosson 公布的矩陣→ 逐分量有符號(hào)立方根 → LabToOkLabdlssnr.hlsl。L 是亮度a 軸是綠?品紅b 軸是藍(lán)?黃只借方向不借幅度從模型自己的顏色correct取色度方向(a,b)/|chroma|從縮放后的顏色incorrect只取色度模長(zhǎng)|chroma|回 RGB 并壓色域ClampAp1(FromOkLab(...))。一個(gè)容易被忽略的細(xì)節(jié)方向必須先歸一化再乘以模長(zhǎng)而不是用兩個(gè)模長(zhǎng)之比去縮放。后者要除以correctChroma且只能用精確等于 0來(lái)防護(hù)——一個(gè)接近灰的像素色度約 1e-7會(huì)輕松繞開(kāi)防護(hù)把數(shù)值噪聲放大成四千倍的飽和色?!度释?》夜景大量近無(wú)彩色像素正是這個(gè) bug 的現(xiàn)場(chǎng)表現(xiàn)為被誤報(bào)為綠色噪點(diǎn)。 歸一化寫(xiě)法下方向向量構(gòu)造即單位長(zhǎng)度輸出不可能超過(guò)incorrectChroma——數(shù)值上天然有界。七、AP1 色域壓縮把不可能的顏色拉回可能的顏色合成可能產(chǎn)生負(fù)分量——那不是任何顯示器能顯示的顏色。早期實(shí)現(xiàn)是硬 clamp轉(zhuǎn) AP1 → 逐通道m(xù)ax(0)→ 轉(zhuǎn)回來(lái)。但對(duì)飽和像素做逐通道操作恰恰就是色相扭曲器最先觸墻的那個(gè)通道決定了其余通道的顏色?,F(xiàn)在的ClampAp1dlssnr.hlsl改用中性軸壓縮用 Hunt-Pointer-Estevez LMS 基基于 BT.709表達(dá)顏色并攜帶固定的 D65 適應(yīng)狀態(tài)18% 灰計(jì)算同亮度的 D65 中性色——所有顏色被拉向的錨點(diǎn)求最大標(biāo)量 s使neutral (color ? neutral) · s的每個(gè)通道都非負(fù)dlssnr.hlsl整個(gè)顏色乘這一個(gè) s色相原樣保留只有飽和度讓步。關(guān)鍵性質(zhì)所有分量非負(fù)時(shí) s 1輸出與輸入逐位相同——安全到可以對(duì)每個(gè)像素?zé)o條件執(zhí)行。色彩強(qiáng)度 1 的過(guò)飽和路徑同樣依賴(lài)它越界顏色在色域邊界滾落為最大限度鮮艷但仍是真實(shí)顏色的結(jié)果而不是拍平一片死白。八、參數(shù)速查這些數(shù)學(xué)對(duì)應(yīng)菜單里的什么菜單參數(shù)對(duì)應(yīng)管線步驟建議White point from白點(diǎn)歸一化優(yōu)先游戲自己的曝光沒(méi)有就用掃描錨定Detail strength雙分支合成的混合端點(diǎn)0 超采樣原樣輸出1 模型完整圖片Colour strengthOkLab 混合 過(guò)飽和0 只拿模型的明度1 過(guò)飽和邊界處滾落Reversible proxySoftKnee / Neutwo / Hybrid 編碼Hybrid composed 兼顧中間調(diào)與高光Enlargement低分辨率模型答案的回放大方式模型低于 100% 時(shí)選 Matched residual這些旋鈕的完整說(shuō)明含每個(gè)參數(shù)的懸停幫助文本都在 DlssNr_Menu.cpp。九、小結(jié)OptiScaler 神經(jīng)渲染色彩管線的精髓可以濃縮成三條設(shè)計(jì)原則合成是比例不是差值——模型答案是一張完整的圖用亮度比拉回正確位置插值端點(diǎn)都是合法圖片色相只借方向不借幅度——OkLab 空間里縮放只改飽和度色相永遠(yuǎn)來(lái)自模型自己的顏色越界靠中性軸壓縮不靠逐通道截?cái)唷狝P1 壓縮對(duì)合規(guī)像素逐位無(wú)損只對(duì)越界像素讓步飽和度。順帶說(shuō)明這套色彩合成雙分支比值、OkLab 校正、中性軸壓縮源自 RenoDX 的 DLSS 5 插件clshortfuseOkLab 矩陣為 Bjorn Ottosson 公布常數(shù)AP1/sRGB/PQ 變換為標(biāo)準(zhǔn)色彩科學(xué)歸屬詳見(jiàn) RenoDX_ATTRIBUTION.txt模塊整體設(shè)計(jì)說(shuō)明見(jiàn) dlssnr/README.md。理解了這些數(shù)學(xué)你就能明白為什么強(qiáng)度 0 時(shí)畫(huà)面逐位不變色彩強(qiáng)度 0 時(shí)色相分毫不移——它們不是巧合而是管線的構(gòu)造保證。贊分享【免費(fèi)下載鏈接】OptiScaler_DLSSNROptiScaler bridges upscaling/frame gen across GPUs. Supports DLSS2/XeSS/FSR2 inputs, replaces native upscalers, enables FSR-FG/XeFG on non-FG titles. Supports Nukem mod for DLSSG-to-FSR3 FG. This fork adds support for neural rendering on dx12 games, more to come.項(xiàng)目地址https://gitcode.com/gh_mirrors/op/OptiScaler_DLSSNR點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Natron Color 節(jié)點(diǎn)組完全指南色彩校正、OCIO 色彩管理與色彩空間轉(zhuǎn)換Natron Color 節(jié)點(diǎn)組完全指南色彩校正、OCIO 色彩管理與色彩空間轉(zhuǎn)換 導(dǎo)讀 本文以 Natron 官方文檔中的 Color 節(jié)點(diǎn)組 Docum音視頻視頻圖形學(xué)圖像處理桌面應(yīng)用LightCraft 色彩管線解剖4096 級(jí)色調(diào) LUT OkLab憑什么敢硬剛 Adobe 的閉源調(diào)色LightCraft 色彩管線解剖4096 級(jí)色調(diào) LUT OkLab憑什么敢硬剛 Adobe 的閉源調(diào)色 LightCraft 是一個(gè)用純 Rust告別色彩偏差Hyprland色彩校正全指南告別色彩偏差Hyprland色彩校正全指南 你是否曾遇到過(guò)顯示器色彩失真的問(wèn)題同一圖片在不同設(shè)備上顯示效果迥異專(zhuān)業(yè)設(shè)計(jì)工作中色彩還原度不足觀影時(shí)明暗細(xì)節(jié)圖形學(xué)操作系統(tǒng)上一篇如何使用Python腳本批量控制Easy Effects音頻效果完整API調(diào)用指南下一篇Obsidian插件漢化終極指南三步打造全中文筆記工作空間創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考