Journal

Random-Access Neural Compression of Material Textures

Karthik Vaidyanathan, Marco Salvi, Bartlomiej Wronski, Tomas Akenine-Möller, Pontus Ebelin, Aaron E. Lefohn

NVIDIA

一句话总结

为每个材质单独训练一个极小的 MLP 解码器,把整套材质纹理(含 mipmap 链)联合压缩成一个多层特征金字塔,实现比 BCx / AVIF / JPEG XL 更好的低码率画质,同时保留 GPU 纹理压缩那样的随机访问与实时解压能力。

研究背景

  • 领域现状:实时渲染画质逼近影视级,纹理数据量随之暴涨,磁盘、下载带宽与显存都成瓶颈。GPU 端仍沿用上世纪 90 年代的块压缩(BCx、ASTC 等),随机访问、数据局部性好,但压缩比只有 4×~8×,且最多 4 通道。另一边,自然图像压缩(AVIF、JPEG XL、神经图像压缩)能做到极低码率,却依赖熵编码与全局变换,不支持随机访问,也不为非彩色材质属性设计。
  • 核心痛点:现代 PBR 渲染的一套材质常包含 diffuse、法线、高度、AO、粗糙度、金属度等多张纹理(一个 texture set),通道数远超块压缩上限;而这些通道之间、mip 层级之间、空间上都存在大量冗余,传统方法无法充分利用。
  • 本文 idea:把一套材质的所有纹理及其整条 mipmap 链联合压缩,用一个针对该材质专门优化的小型 MLP 解码器还原。既借用块压缩的随机访问思想,又引入神经图像压缩的非线性变换能力。

方法

整体框架:压缩表示是一个量化特征金字塔,每个特征层含两张分辨率不同的 2D 特征网格;解压单个 texel 时,按目标 LOD 选定特征层,从中采样并插值特征向量,拼接上位置编码与归一化 LOD,送入一个共享的两层 MLP,一次性输出该 texel 在所有通道上的值。整个压缩表示(特征 + 网络权重)通过量化感知训练直接对每个材质端到端优化(autodecoder 框架,无编码器)。

flowchart LR
  A["特征金字塔<br/>(G0 高分辨 + G1 低分辨)"] --> B["模拟量化<br/>(训练加均匀噪声)"]
  B --> C["按 LOD 采样并插值<br/>+ 位置编码 + LOD"]
  C --> D["共享 MLP<br/>(两层 64 通道)"]
  D --> E["解压 texel<br/>(全通道输出)"]

关键设计:

  • 特征金字塔 + 双网格:每个特征层由高分辨网格 \(\boldsymbol{G_0}\)(保高频细节)和低分辨网格 \(\boldsymbol{G_1}\)(保平滑低频、抑制条带)组成,一个特征层通常覆盖两个 mip 层级。这种跨 mip 共享把传统 mipmap 链约 33% 的额外存储降到约 6.7% 甚至更低。网格分辨率远低于纹理分辨率,是压缩的主要来源。
  • 模拟量化:不用熵编码,而是对每张特征网格固定量化率,只优化失真。训练时向特征加均匀噪声模拟量化误差,反向传播后把特征裁剪回量化范围(在 backward 而非 forward 裁剪效果更好);采用非对称量化范围使零值对齐 bin 中心、量化到 4 级以下时误差更小。训练末期停止加噪、显式量化并冻结特征,再微调网络权重 5% 步数。
  • 采样与位置编码:高分辨网格 \(\boldsymbol{G_0}\) 用”学习式插值”(拼接 4 个邻近特征,让后续 MLP 依位置组合),低分辨网格 \(\boldsymbol{G_1}\) 用双线性插值以控制输入层开销。位置编码用基于三角波的高效变体,因为低频已由特征直接表示,只需编码超过网格 Nyquist 上限的高频,呈每 \(8 \times 8\) texel 重复的平铺模式。
  • 网络与实现:MLP 仅两层隐藏层、各 64 通道,输入维度为 \(4C_0 + C_1 + 12 + 1\);激活用 GELU,并给出低成本近似 hardGELU。压缩端用自定义 CUDA 内核,把网络各层、特征采样、损失与整个反向传播融合进单个 kernel,激活值全存寄存器,速度较 PyTorch 快约一个数量级。解压端把网络内联进材质着色器,用 SIMD 寄存器内 shuffle 完成矩阵输入的重排(绕开光追着色器无共享内存的限制),并提出随机采样滤波(stochastic filtering)以把解压成本与滤波解耦——对 \((u, v)\) 与 LOD 加噪后做最近邻采样,配合 DLSS 等时空重建抑噪。

实验结果

在 20 组多样材质(分辨率 \(2048^2\) 至 \(8192^2\)、通道数 3~12)上,与 BCx、ASTC、Basis Universal、AVIF、JPEG XL 对比。下表按大致相同存储档位比较平均 PSNR(越高越好),可见在低及中低码率区间 NTC 全面领先,仅在高码率区间略逊于纯图像压缩格式(而后者不支持随机访问)。

码率档 (BPPC) 方法 PSNR↑ (dB) 随机访问
~0.2 NTC 32.71 支持
~0.2 AVIF 29.49 不支持
~0.2 JPEG XL 27.87 不支持
~0.5 NTC 36.12 支持
~0.5 AVIF 33.10 不支持
~1.0 NTC 39.92 支持
~1.0 AVIF 34.01 不支持
~3.9 BC high 40.23 支持

其余关键结论用文字概括:NTC 0.2 档只用约 3.5 MB 就能获得比同存储 BC medium 更接近参考的画质,并额外解锁两级更高分辨率的 mip(16× texel);NTC 0.5 档可在 1/5 存储下达到 BC medium 的同等画质。感知指标(SSIM、LPIPS)上 NTC 在低/中低码率同样领先。压缩速度:自定义实现比 PyTorch 快约 10×,一套 4k、9 通道材质在 RTX 4090 上约 1~15 分钟压缩完成,1.0 档显存占用不到 2 GB(PyTorch 需约 18 GB)。解压性能:4k 材质集经随机采样滤波约 1.15~1.92 ms/帧,而 BC7 三线性滤波约 0.49 ms。通道数实验表明超过 2 通道后画质基本恒定,印证了强跨通道相关性。

亮点与局限

  • 亮点:
    • 首次把跨通道、跨 mip、空间三种冗余统一利用,在低码率下画质超越 AVIF/JPEG XL,同时保留随机访问,可直接替换 GPU 块压缩。
    • 每材质专属的极小解码器让解压真正实时、可内联进着色器;随机采样滤波把解压成本与滤波解耦。
    • 融合式 CUDA 训练把压缩时间压到分钟级、显存降一个数量级,具备工程实用性。
  • 局限:
    • 优势与通道数正相关,对单张 RGB 纹理或普通图像几乎没有压缩优势。
    • 总是解压全部通道,无法只取部分通道(如仅需 depth prepass 的不透明度图)。
    • 依赖通道对齐,对材质制作中的错位/单通道条带等瑕疵敏感,会放大为失败案例。
    • 软件滤波开销大,各向异性滤波在实时下几乎不可行;随机采样滤波会加重时空重建负担、可能引入闪烁。
    • 所有纹理须重采样到同一分辨率;低码率带来的额外细节只在近距离可见。

延伸思考

  • 这条”每资产专属小网络 + 内联进渲染管线”的思路与神经辐射缓存、Instant-NGP 等一脉相承,是把神经表示做进实时渲染而非离线重建的代表。NVIDIA 后续把它工程化为 RTX Neural Texture Compression,值得关注其在真实引擎里的落地(SIMD 发散、多材质并存的调度是关键工程难点,本文已指出但留作 future work)。
  • 用”渲染误差”而非 BRDF 属性相似度来驱动压缩(appearance-based loss),可能带来更贴合最终画面的内容自适应压缩;进一步可把解压与 BRDF 求值融合进同一个 MLP,形成端到端的神经材质求值。
  • 论文坦承在此低码率下无法同时兼顾色彩保真与高频细节,怀疑是信息论限制——这对后续设计更好的损失函数或可分频流式表示是一个有价值的开放问题。