首页 / 资讯中心 / 文章详情

OptiScaler神经渲染色彩管线解析:OkLab色相校正与AP1色域压缩数学全解

OptiScaler神经渲染色彩管线解析:OkLab色相校正与AP1色域压缩数学全解 ★ FEATURED ARTICLE
【免费下载链接】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.项目地址https://gitcode.com/gh_mirrors/op/OptiScaler_DLSSNR点击查看免费下载OptiScaler 的神经渲染DLSS Neural Rendering分支让 DLSS 5 的神经渲染模型可以跑在 DX12 游戏的超采样输出之上而它画面稳、不偏色的秘密就藏在一条精心设计的色彩管线里。这篇文章带你完整拆解这条管线的数学基础白点归一化、软膝编码、双分支亮度比合成以及 OkLab 色相校正与 AP1 色域压缩是如何联手保住画面色彩的。一、为什么神经渲染需要一条色彩管线神经渲染模型nvngx_dlssnr.dllNGX 特性 18是在成品 sRGB 编码帧上训练出来的它只认识 0..1 范围内、亮度有界的成片。但 OptiScaler 超采样器的输出是线性、开口无界的线性光缓冲——高光可以轻松超过 1暗部数值可以接近千分之一。直接把这样的帧喂给模型等于让它看一张不存在的图片。所以整条管线做的事情可以概括为一句话把线性帧翻译成模型认识的代理图像proxy模型回答后再翻译回原始帧的线性空间并且翻译全程不能歪色。所有相关参数都集中在菜单的 DLSS Neural Rendering 分组里DlssNr_Menu.cpp配置项则对应 Config.h 中标记为removable as one block的[DlssNr]区块。二、管线全景Encode → 模型 → Resolve整条管线实现在一个预编译的 compute shader 里dlssnr.hlsl主机侧的常量缓冲定义在 DlssNr_Common.hWhitePoint、TransferStrength、ColourStrength等。运行模式枚举DlssNr_Common.h模式作用Encode帧 → 代理图归一化 编码Resolve代理 模型答案 原始帧 → 合成最终帧Downsample模型按更低分辨率工作时的代理降采样Meter/Calibrate读取游戏曝光、标定缓冲尺度合成阶段resolve的核心链路是白点归一化整帧除以一个白点数值把图片拉进 [0,1]双分支亮度比合成把模型答案按亮度比缩放回原始帧的亮度位置OkLab 色相校正防止缩放过程改写色相亮度比护栏 色彩强度混合限制单帧波动、控制模型色彩介入程度AP1 色域压缩把越界颜色安全地拉回可显示范围。三、白点归一化给开口缓冲找一个分母归一化的分母不是拍脑袋的常量。菜单里 White point from 提供三个来源DlssNr_Menu.cppPaper white only手动滑杆。不同游戏需要的数值差异巨大——Nioh 3 的线性缓冲峰值在两百左右需要约 240 的分母而 GTA V 的曝光算出来只要 2.7The games own exposure直接读游戏自己维护的 1×1 曝光纹理D3D12 下甚至在 shader 里实时读取消除 3~4 帧的 CPU 读回延迟A buffer the scan found针对算出曝光却不传出来的游戏由曝光扫描DlssNr_ExposureScan.cpp按形状匹配候选缓冲并锚定比例。分母选错的后果很直观偏小则帧永远归一化不掉亮度比算出几百OkLab 的立方根变换拿到远超设计范围的值——屏幕上就是一片绿偏。这也是为什么白点是整条管线的地基。四、Encode 编码软膝、Neutwo 与 Hybrid 三条曲线归一化之后还要把帧编码进 [0,1] 的 sRGB 空间。这是给模型看什么的关键决策gReversibleMode对应三个选项dlssnr.hlsl 软膝 SoftKnee默认Off亮度超过 0.75 后不再硬切而是按0.75 0.25 × (1 − e^-(luma−0.75)/0.25)指数回卷避免模型看到一片逐帧闪烁的平白另外用峰值通道整体缩放替代逐通道截断防止蓝色被截成青色dlssnr.hlsl。缺点是回卷把高光细节压进极窄的区间模型根本分辨不了。 Neutwo 可逆代理Neutwo(x) x·rsqrt(x² 1)把 [0, ∞) 无死区地映射到 [0, 1)高光层次完整保留且可精确反解。技巧同样是一个标量作用于峰值通道三通道比例不变、色相不弯dlssnr.hlsl。代价是中间调也被压缩柔光场景反而可能更差。 Hybrid折中方案推荐HybridCurve0.75 以下恒等中间调与 Off 完全一致以上只对超出部分施加 Neutwo拐点处一阶连续。一条在处处 ≥ Off 的曲线既不留中间调损失又拿回高光细节dlssnr.hlsl。五、双分支亮度比合成而不是相加模型返回的不是一帧差异而是一张完整的图。早期版本把它当差值加到帧上结果没有任何东西约束总和的落点——暖色主体可能带绿回来。现在的设计dlssnr.hlsl是把它当一张图用亮度比拉回原始帧的亮度位置原始亮度 代理亮度帧比代理暗ratio originalLuma / proxyLuma以帧自己的亮度为目标原始亮度 代理亮度帧有代理装不下的头roomratio (modelLuma (originalLuma − proxyLuma)) / modelLuma把这部分真实亮度叠在模型答案之上而不是缩放掉高光因此不会被压暗。在此基础上还有两道保险暗部底限kRatioFloor 1/512暗像素上微小的模型改动会产生巨大比值底限让比值随亮度趋零平滑收敛到 1消除沸腾噪块最大比值护栏boundedRatio clamp(amplified, 1/guard, guard)强度大于 1 时通过对比值取幂来放大而不是外推混合保证结果始终被护栏约束双向限幅避免暗部塌陷。色彩强度Colour strength则做两件不同的事0..1 时在仅亮度结果游戏自己的色相 模型的明度与完整模型色彩之间插值——两个端点都是合法图片中间点也是大于 1 时进入过饱和模式只在 OkLab 空间放大 a/b 分量L 与色相保持不变越界部分交给下一步 AP1 压缩滚出。上图是色彩处理不当的典型症状色调偏移、辉光丢失。神经渲染管线的每一步设计本质上都是在回答如何避免这类偏色。六、OkLab 色相校正色相从哪来就往哪放问题的根源对一个 RGB 三元组做整体比例缩放不会改变色相但把差异加上去会。缩放后的颜色再回混合时色相可能漂移。OkLab 校正HueOkLabdlssnr.hlsl的做法进 OkLab线性 RGB → LMSBjorn Ottosson 公布的矩阵→ 逐分量有符号立方根 → LabToOkLabdlssnr.hlsl。L 是亮度a 轴是绿↔品红b 轴是蓝↔黄只借方向不借幅度从模型自己的颜色correct取色度方向(a,b)/|chroma|从缩放后的颜色incorrect只取色度模长|chroma|回 RGB 并压色域ClampAp1(FromOkLab(...))。一个容易被忽略的细节方向必须先归一化再乘以模长而不是用两个模长之比去缩放。后者要除以correctChroma且只能用精确等于 0来防护——一个接近灰的像素色度约 1e-7会轻松绕开防护把数值噪声放大成四千倍的饱和色。《仁王3》夜景大量近无彩色像素正是这个 bug 的现场表现为被误报为绿色噪点。 归一化写法下方向向量构造即单位长度输出不可能超过incorrectChroma——数值上天然有界。七、AP1 色域压缩把不可能的颜色拉回可能的颜色合成可能产生负分量——那不是任何显示器能显示的颜色。早期实现是硬 clamp转 AP1 → 逐通道max(0)→ 转回来。但对饱和像素做逐通道操作恰恰就是色相扭曲器最先触墙的那个通道决定了其余通道的颜色。现在的ClampAp1dlssnr.hlsl改用中性轴压缩用 Hunt-Pointer-Estevez LMS 基基于 BT.709表达颜色并携带固定的 D65 适应状态18% 灰计算同亮度的 D65 中性色——所有颜色被拉向的锚点求最大标量 s使neutral (color − neutral) · s的每个通道都非负dlssnr.hlsl整个颜色乘这一个 s色相原样保留只有饱和度让步。关键性质所有分量非负时 s 1输出与输入逐位相同——安全到可以对每个像素无条件执行。色彩强度 1 的过饱和路径同样依赖它越界颜色在色域边界滚落为最大限度鲜艳但仍是真实颜色的结果而不是拍平一片死白。八、参数速查这些数学对应菜单里的什么菜单参数对应管线步骤建议White point from白点归一化优先游戏自己的曝光没有就用扫描锚定Detail strength双分支合成的混合端点0 超采样原样输出1 模型完整图片Colour strengthOkLab 混合 过饱和0 只拿模型的明度1 过饱和边界处滚落Reversible proxySoftKnee / Neutwo / Hybrid 编码Hybrid composed 兼顾中间调与高光Enlargement低分辨率模型答案的回放大方式模型低于 100% 时选 Matched residual这些旋钮的完整说明含每个参数的悬停帮助文本都在 DlssNr_Menu.cpp。九、小结OptiScaler 神经渲染色彩管线的精髓可以浓缩成三条设计原则合成是比例不是差值——模型答案是一张完整的图用亮度比拉回正确位置插值端点都是合法图片色相只借方向不借幅度——OkLab 空间里缩放只改饱和度色相永远来自模型自己的颜色越界靠中性轴压缩不靠逐通道截断——AP1 压缩对合规像素逐位无损只对越界像素让步饱和度。顺带说明这套色彩合成双分支比值、OkLab 校正、中性轴压缩源自 RenoDX 的 DLSS 5 插件clshortfuseOkLab 矩阵为 Bjorn Ottosson 公布常数AP1/sRGB/PQ 变换为标准色彩科学归属详见 RenoDX_ATTRIBUTION.txt模块整体设计说明见 dlssnr/README.md。理解了这些数学你就能明白为什么强度 0 时画面逐位不变色彩强度 0 时色相分毫不移——它们不是巧合而是管线的构造保证。赞分享【免费下载链接】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.项目地址https://gitcode.com/gh_mirrors/op/OptiScaler_DLSSNR点击查看免费下载相关推荐Natron Color 节点组完全指南色彩校正、OCIO 色彩管理与色彩空间转换Natron Color 节点组完全指南色彩校正、OCIO 色彩管理与色彩空间转换 导读 本文以 Natron 官方文档中的 Color 节点组 Docum音视频视频图形学图像处理桌面应用LightCraft 色彩管线解剖4096 级色调 LUT OkLab凭什么敢硬刚 Adobe 的闭源调色LightCraft 色彩管线解剖4096 级色调 LUT OkLab凭什么敢硬刚 Adobe 的闭源调色 LightCraft 是一个用纯 Rust告别色彩偏差Hyprland色彩校正全指南告别色彩偏差Hyprland色彩校正全指南 你是否曾遇到过显示器色彩失真的问题同一图片在不同设备上显示效果迥异专业设计工作中色彩还原度不足观影时明暗细节图形学操作系统上一篇如何使用Python脚本批量控制Easy Effects音频效果完整API调用指南下一篇Obsidian插件汉化终极指南三步打造全中文笔记工作空间创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站