Skip to main content

Chapter 136: Neural Rendering

神经渲染把机器学习模型放进图形管线,用训练得到的函数、压缩表示或图像重建器参与一帧画面的生成。读完本章后,读者应能定位一个 neural pass 放在 frame graph 的哪一段,判断它依赖哪些输入资源,区分它是在替代场景表示、材质求值、采样去噪、分辨率重建,还是只承担推理运行时加速。

本章用一帧低采样路径追踪室内场景作为贯穿材料:引擎以较低内部解析度渲染一张 noisy radiance buffer,同时输出 depth、normal、albedo、motion vector 和 exposure;随后一个 neural denoiser 稳定间接光,一个 neural upscaler 输出 4K,材质系统中若干复杂 layered material 被烘焙成 neural material,另有一个离线捕获的小型场景资产可用 NeRF 或 3D Gaussian Splatting 表示。这个 frame 能覆盖神经渲染的主要分歧:模型处理的是场景、材质、光照噪声、分辨率,还是 GPU 推理调度。

本章的结论是:神经渲染是一组管线插入方式,核心判断顺序是先确定模型替代哪类传统数据,再确认训练数据和推理输入,随后检查它对可控性、稳定性、延迟、显存、平台能力和 fallback path 的影响。把 neural rendering 直接理解成“AI 让画面更真实”会丢失工程边界;把它放回 frame、pass、buffer、texture、shader 和 runtime inference 之间的关系中,才能判断它适合承担哪段渲染工作。

136.1 Neural Scene Material Denoising Upscaling Runtime

Neural rendering 在工程中首先要拆成五类对象:neural scene representation、neural material、neural denoising、neural upscaling 和 inference runtime。它们都使用模型推理,但输入、输出和风险完全不同。统一判断方法是看模型接收什么资源、输出什么资源、放在 frame graph 哪个位置、是否需要按场景训练。

Neural scene representation 用模型或可学习参数表达空间中的几何、密度、颜色或辐射。NeRF 是典型入口,它把场景建模为一个连续函数,输入空间位置和观察方向,输出体密度与视角相关颜色;原始 NeRF 项目页 说明了这种 5D 坐标到 radiance/density 的映射,以及沿 camera ray 查询后用 volume rendering 合成图像的路径。对引擎而言,这类方法替换或补充的是 mesh、texture、material parameter 和 light transport cache 的一部分。它的资源边界来自相机位姿、训练图像、空间采样密度和推理成本。

Neural material 处理的是材质求值路径。传统材质通常由 texture、BRDF 参数、normal map、clear coat、subsurface 或 layered graph 组成;neural material 则把高成本材质行为烘焙为可学习表示,在 shader 或 ray tracing shader 中用小网络输出反射值、采样方向或纹理通道。NVIDIA 研究中的 Real-Time Neural Appearance Models 用 learned hierarchical textures 和 neural decoders 表达复杂外观,这说明 neural material 的工程目标通常是压缩复杂材质图和降低运行时求值成本。它仍要服务相同的 shading point:输入位置、法线、视线、光线方向、LOD 和材质坐标,输出可被 lighting pass 使用的反射或采样信息。

Neural denoising 处理的是随机采样不足带来的图像方差。低 sample count 的 ray tracing 或 path tracing 会生成 noisy radiance buffer;denoiser 接收 noisy color、albedo、normal、depth、motion vector、history 等特征,输出更稳定的 radiance 或 lighting buffer。这里模型替代的是手工滤波器、temporal accumulation 和 edge-aware filter 的部分逻辑。NVIDIA 的 DLSS Ray Reconstruction 官方页面把它描述为用 AI 替换手工调参 denoisers,在 sampled rays 之间生成更高质量像素;这类系统的质量依赖 feature buffer 对齐、历史帧重投影和模型训练覆盖范围。

Neural upscaling 处理的是分辨率重建。引擎用较低内部分辨率渲染 color buffer,再输入 motion vector、depth、exposure、jitter offset 和 history,让模型输出更高分辨率图像。它替代的是传统 spatial/temporal upscaler 的重建函数。官方 NVIDIA DLSS Developer 页面把 Super Resolution 描述为从低分辨率输入和运动数据构建高分辨率输出,并在 DLSS 4.5 中使用第二代 transformer model 提升稳定性、抗锯齿和清晰度。对 frame graph 而言,upscaler 通常靠近 post-process 后段,位于 tone mapping 前后取决于接口要求和引擎色彩管线。

Inference runtime 是上述模型能够落地的执行层。它包括模型格式、权重加载、GPU backend、tensor core 或 matrix unit 使用、command queue 位置、resource barrier、temporary buffer、batching 和 fallback path。推理运行时不决定模型语义,但决定模型能否在帧预算内稳定执行。一个 neural pass 若需要 2ms 推理、4 个 history texture、多个 intermediate tensor 和额外 queue synchronization,它对 frame pacing 的影响可能大于模型本身的视觉收益。

把贯穿材料中的一帧拆开,可以得到最小结构:scene representation 决定 camera ray 查询到的空间内容,material 决定每个 shading point 的反射响应,denoiser 修复低采样 lighting,upscaler 重建输出解析度,runtime 负责把模型当成 GPU workload 排进帧内。这五类对象处在不同层级,混在一起讨论会导致错误结论。

这张图的边界是单帧实时渲染。Neural scene representation 可能在离线训练后进入运行时,也可能作为单独资产渲染;neural material、denoising 和 upscaling 更容易被直接塞入现有 frame graph。runtime 横向支撑多个 pass,所以它的风险表现为帧时间波动、显存峰值、平台能力差异和模型版本管理。

136.2 传统渲染与神经渲染的对比

传统渲染以显式数据和手工模型为主:mesh 表示几何,texture 表示表面属性,shader 用明确公式计算光照,ray tracing 或 raster pass 按 API 状态执行。神经渲染把一部分显式规则换成训练得到的函数或参数表。它可以压缩难以手写的关系,也会引入训练成本、数据覆盖边界和推理稳定性问题。

在贯穿材料中,传统路径会把室内场景拆成 mesh、material、light、BVH、G-buffer 和 post-process。开发者可以逐步调试:mesh 错误看 vertex/index buffer,材质错误看 texture 和 shader 参数,阴影错误看 light 和 shadow map,噪声错误看 sample count 和 denoiser 输入。神经路径如果把某一段替换成模型,调试对象会变成训练数据、特征输入、模型版本、推理精度和 temporal feedback。工程可控性从“修改一段 shader 或一张贴图”转向“修改数据、约束和模型接口”。

训练成本是第一条边界。传统渲染的资产制作成本也高,但运行时 shader 通常按规则求值;神经场景表示则需要从多视角图像、camera pose 或合成数据中学习映射。NeRF 需要已知相机位姿和多视角图像才能优化 scene function;Instant Neural Graphics Primitives 通过 multiresolution hash encoding 把训练速度提高到秒级或分钟级量级,但它仍然需要场景数据和训练步骤。对生产管线而言,这会影响资产导入、版本缓存、QA 复现和增量更新。

可控性是第二条边界。传统 mesh 可以直接编辑顶点、材质参数和灯光;神经表示对局部编辑的响应较间接。调整一面墙的 roughness、替换一块地砖、指定某个 logo 的色彩,在传统材质系统里是参数操作;在 neural scene representation 里可能需要重新训练、局部微调或叠加显式编辑层。神经材质比神经场景更容易落地,因为它仍围绕 shading point 输入输出,可以保留 artist override 和传统 fallback。

运行时稳定性是第三条边界。传统渲染的错误多来自资源绑定、状态转换、精度、LOD、shader 分支和同步;神经渲染还会出现训练分布外输入、temporal hallucination、ghosting、细节过度平滑、模型版本差异和推理后端差异。对于贯穿材料中的 neural upscaler,低分辨率输入、motion vector 错误、透明物体、粒子、UI、快速曝光变化都会改变模型输出。问题表面像“画面抖动”,根因可能是 motion vector、history rejection、reactive mask 或训练分布。

二者的对比可以按同一组维度落到工程判断:

维度传统渲染路径神经渲染路径工程判断
表示方式Mesh、texture、shader、BVH、buffer网络权重、latent feature、Gaussian、learned texture、history tensor先确认模型替代哪种显式资源
生产成本建模、贴图、材质图、手工调参数据采集、位姿估计、训练、验证、导出资产是否需要频繁局部修改决定可行性
运行时输入API 状态、uniform、texture、vertex、ray传统资源加模型特征、history、pose、tensor输入越多,绑定和同步风险越高
可调试性工具能直接看 draw、resource、shader需要同时看 feature buffer、模型输出和传统 pass调试视图必须覆盖模型输入与输出
稳定性主要由规则、精度和状态决定还受训练分布、推理精度和历史反馈影响必须设计 validation image 与 fallback
平台适配受图形 API 和硬件 feature 限制还受 ML backend、矩阵硬件、模型格式限制capability profile 要同时覆盖 graphics 与 inference

神经渲染的价值通常出现在三种位置。第一种是传统规则难以表达,例如复杂视角相关外观和高维材质。第二种是传统 brute force 成本过高,例如低采样全局光照、路径追踪去噪和高分辨率输出。第三种是显式数据体积过大,例如多通道材质纹理压缩或体积场景表示。只要一个 neural pass 没有明确落在这三类位置之一,工程上就需要先证明它替换了哪段成本。

136.3 训练神经渲染模型流程

训练流程决定模型在运行时能处理哪些输入。对实时图形而言,训练流程应同时观察 loss 下降与数据覆盖范围,覆盖对象包括镜头运动、材质类别、光照范围、曝光变化、透明对象、粒子和 UI 混合。贯穿材料中的室内路径追踪帧可以作为训练设计模板:先定义模型要输出的 buffer,再围绕这个输出收集输入特征和 ground truth。

Dataset 是第一步。Neural scene representation 需要多视角图像和 camera pose;Neural material 需要材质样本、入射方向、出射方向、纹理坐标、LOD 和参考 reflectance;Neural denoising 需要 noisy input 与高 sample reference;Neural upscaling 需要低分辨率输入、高分辨率 reference、motion vector、depth、jitter、history 和 reactive mask。数据集是与管线语义对齐的资源集合,图片文件夹只是其中一种载体。

Camera pose 决定 scene representation 的几何一致性。NeRF 类方法把相机位姿用于生成 camera rays,每条 ray 上的采样点进入 scene function;位姿误差会表现为几何浮动、边缘重影和 view synthesis 错位。3D Gaussian Splatting 也从相机标定产生的 sparse points 出发,项目页说明它用 3D Gaussians 保留连续 radiance field 的性质,同时减少空空间计算,并用 visibility-aware rendering 支持实时合成。对资产管线来说,camera pose 是训练数据的一部分,不能在导出后再当成普通元数据随意修正。

Feature buffer 决定图像级模型能否区分边缘、材质和运动。Denoiser 只看 noisy color 会把纹理细节当成噪声;加入 albedo、normal 和 depth 后,模型才能把几何边界、材质纹理与采样噪声分开。Upscaler 只看当前低分辨率 color 会损失亚像素细节;加入 motion vector、history 和 jitter 后,它才能跨帧重建高频信息。这里的 feature buffer 必须与运行时完全同义:训练时的 normal 空间、depth range、motion vector 方向、曝光范围和运行时接口要一致。

Loss 是训练目标的可计算表达。图像模型常用 L1、L2、SSIM 或 perceptual loss;材质模型还需要约束能量、采样分布和 view-dependent response;scene representation 需要同时处理颜色误差、密度分布、几何一致性和空空间。loss 的选择会改变模型倾向:过强的平滑目标会提升指标但损失锐利纹理,过强的感知目标会产生细节幻觉,temporal loss 不足会产生闪烁。工程验收应把 loss 当成训练信号,把 validation render 当成最终证据。

Validation render 用来把训练结果放回 frame graph。对于贯穿材料,验证集至少要覆盖静态镜头、快速横移、镜面反射、薄几何边缘、透明粒子、明暗突变和 UI 叠加。每组验证都要保存模型输入、模型输出、reference、error heatmap 和 frame time。这样才能判断问题来自数据覆盖、feature 对齐、模型容量、推理精度,还是后处理顺序。

Export 把训练图转成运行时资产。导出内容通常包括权重、网络结构、feature layout、tensor shape、precision、normalization 参数、色彩空间约定、版本号和 fallback 配置。一个 upscaler 模型如果训练时输入 linear HDR color,运行时却给 tone-mapped LDR color,输出质量会系统性下降;一个 neural material 如果训练时假设 tangent-space normal,运行时传入 world-space normal,错误会沿着所有光照方向扩散。

Runtime inference 是训练流程的落点。模型进入引擎后会占用 command buffer 时间、临时显存、descriptor/argument binding、queue synchronization 和可能的 async compute 机会。对实时帧而言,训练出的模型需要满足固定预算:比如 denoising 1.2ms、upscaling 1.8ms、temporary memory 256MB、最大 history latency 2 帧。超出预算时,fallback path 可以降级到传统 TAAU、传统 denoiser、较低质量模型或关闭 neural material。

训练到运行时的完整链条可以写成:数据定义 → 位姿与特征对齐 → 训练目标 → 验证渲染 → 导出契约 → 推理集成 → fallback。只要链条中有一段没有明确契约,神经渲染问题就会从“模型效果不稳定”变成难以定位的系统问题。

136.4 神经渲染在实时图形中的应用示例

Neural upscaling 是当前最容易进入实时引擎的神经渲染形态。它保留传统 geometry、material 和 lighting 管线,只在图像重建阶段插入模型。引擎仍然渲染一张低分辨率 scene color,并提供 depth、motion vector、exposure、jitter 和 history;模型输出显示分辨率图像。它的收益来自减少主渲染分辨率下的 shading、ray tracing 和 bandwidth 成本;它的风险集中在 temporal stability、ghosting、alpha object、particle、UI 和 latency。DLSS、XeSS、FSR 等生态的具体实现不同,但工程接入都要围绕输入 buffer 语义、颜色空间、动态分辨率和后处理顺序建立契约。

Neural denoising 适合低采样 ray tracing 或 path tracing。贯穿材料中的室内场景如果每像素只追踪少量光线,indirect diffuse、glossy reflection 和 small light 会产生高方差。传统 denoiser 用空间滤波、temporal accumulation 和 feature-guided blur 稳定画面;神经 denoiser 用训练数据学习噪声与真实细节的区分。它的输入必须包含能保护边缘和材质的 feature buffer。它的输出应当进入后续 tone mapping 或 composite 路径,不能把 UI、debug overlay 和不具备 motion vector 的元素混入训练外输入。

Neural material 适合复杂 layered material、纤维、布料、车漆、皮肤微结构和扫描材质压缩。传统 shader graph 在这些场景里会产生多层 texture fetch、多次 BSDF 求值和复杂采样;neural material 可以把高维外观烘焙成 learned texture 与小 decoder,在运行时输出 reflectance 或 sampling distribution。材质模型进入实时路径后仍要满足 LOD、mipmap、anisotropy、normal mapping、energy conservation 和 artist override。材料压缩方向还包括 Random-Access Neural Compression of Material Textures,它把多个材质纹理及 mipmap chain 共同压缩,并用小网络按需解码,这类方案的核心问题是随机访问、显存节省和采样成本之间的平衡。

Neural radiance cache 适合把昂贵的多次反弹光照近似成可查询模型。Real-time Neural Radiance Caching for Path Tracing 采用在线训练方式,在渲染时适配动态场景,并用 self-training 提供低噪声目标。对引擎而言,它属于光传输缓存,位置早于后处理滤镜:path tracer 在某个 path vertex 查询网络,得到出射 radiance 的估计,再继续合成当前像素。它的风险是 bias、训练滞后、快速光照变化、动态几何和查询成本;它的收益是降低长路径采样成本和间接光噪声。

Gaussian splatting 提供了另一条实时神经场景路线。3D Gaussian Splatting 通常从多视角图像和相机标定得到 sparse points,再优化一组带位置、协方差、颜色与不透明度的 3D Gaussians,运行时通过 visibility-aware splatting 合成新视角。3D Gaussian Splatting 项目页 报告其目标是在 1080p 下实现高质量实时 novel-view synthesis。它与传统 mesh 管线的差别在于:渲染对象是大量可投影的椭球状 splats,编辑、碰撞、物理、动画和材质重光照需要额外系统支持。它适合扫描场景预览、空间捕获、虚拟参观和部分 XR 内容;如果项目需要精确拓扑、可交互破坏或严格材质参数,仍需要混合 mesh、proxy 和传统 shader。

这几类应用进入同一帧时,应按数据依赖排序。Neural material 发生在 shading 期间,neural radiance cache 发生在 ray/path 查询期间,neural denoising 发生在 noisy lighting buffer 之后,neural upscaling 发生在主渲染图像准备完成之后,Gaussian splatting 则可能作为一个独立 scene pass 先渲染到 color/depth,再与传统几何 composite。排序错误会让模型看到训练外输入,或让传统后处理破坏模型输出。

一个可复用接入顺序是:先只启用一个 neural pass,固定输入 buffer 和输出 buffer;接着加入 debug view,显示模型输入、模型输出、reference 或传统 fallback;随后记录 GPU timing、temporary memory 和 history lifetime;最后再打开多个 neural pass 的组合路径。组合路径的质量不能从单个 pass 质量推导,需要逐帧检查它们共享的 depth、motion vector、exposure 和 history 是否一致。

136.5 性能与精度问题的权衡

神经渲染的性能收益来自替换昂贵计算、减少显式数据访问或在低成本输入上重建高质量输出。它的成本来自模型推理、特征准备、临时内存、历史帧管理、资源同步和训练管线。权衡时要把“模型本身快不快”扩展成“整个 frame graph 是否更稳定”。

性能侧先看 GPU 时间。Neural upscaling 降低主渲染分辨率后,geometry、shading、ray tracing、render target bandwidth 都可能下降;但 upscaler pass 会新增推理时间。收益成立的条件是节省的主渲染时间大于推理和同步成本。Neural denoising 也类似:低 sample count 节省 ray traversal 与 shading 成本,denoiser 消耗 tensor 或 compute 资源。若场景本来受 CPU 提交瓶颈限制,降低像素工作量不会明显提升帧率。

显存侧要同时看常驻资源和瞬时资源。Neural material 或 neural texture compression 可能减少材质贴图体积,但模型权重、learned feature、temporary tensor、history buffer 和 fallback texture 也会占用显存。Neural upscaling 通常需要输入 color、depth、motion vector、exposure、history output 和 intermediate buffer。移动平台、集成 GPU 和 unified memory 系统还要考虑带宽与内存压力对 CPU/GPU 共享资源的影响。

精度侧要看误差类型。传统渲染误差常表现为 aliasing、shadow acne、banding、overdraw、precision z-fighting 或 BRDF 近似误差;神经渲染还会出现 hallucinated detail、temporal ghosting、view-dependent shimmer、over-smoothing、训练外材质失真和局部结构错判。对于贯穿材料,正确的验证应播放相机移动、曝光变化和物体运动,并对比 motion vector、history rejection 和模型输出差异,单张截图只能提供局部证据。

延迟侧要区分帧率和响应。Frame generation 或 heavy temporal reconstruction 可以提高显示帧数,但用户输入到真实模拟状态的响应仍受基础渲染帧率、队列深度和同步策略影响。对交互内容,神经 pass 的质量收益需要和 input latency 一起评估。画面更平滑但操作延迟增加时,体验结论应同时查看 FPS、基础渲染帧率和输入响应。

平台侧要建立 capability profile。一个项目如果同时支持 PC、console、mobile 和 WebGPU,需要分别记录 API 能力、shader model、matrix acceleration、half/FP8 支持、storage texture、barrier 模型、模型格式、vendor SDK 和 fallback。某个 vendor 的 neural rendering SDK 可以显著缩短接入路径,但工程文档要标明它对应的硬件和驱动边界。跨平台引擎更适合把 neural pass 抽象成接口:输入资源、输出资源、quality mode、required features、fallback pass 和 validation tests。

质量预算应使用可检查指标,而非主观描述。图像侧可以记录 PSNR、SSIM、LPIPS、temporal error、edge preservation 和 ghosting case;性能侧记录 GPU time、CPU submission、memory peak、bandwidth、queue wait 和 cache miss;产品侧记录艺术风格保持、可编辑性、动态场景表现和失败场景。指标不能替代肉眼复查,因为 neural model 可能在指标上更好,却生成不符合美术意图的局部细节。

最终判断顺序如下:先确认神经模型替换的传统成本,再测量它新增的推理和资源成本;先验证静态质量,再验证动态稳定;先单 pass 接入,再组合多个 neural pass;先建立 fallback,再扩大平台覆盖;先用 debug buffer 定位输入错误,再讨论模型容量。这个顺序能把神经渲染从“效果开关”变成可维护的渲染系统组件。

最小自检任务

你有一个实时路径追踪场景:内部 1440p 渲染,目标输出 4K;每像素 1 条 primary ray 和少量 indirect samples;当前画面存在反射噪声、相机横移时的边缘拖影,以及高频材质被抹平的问题。引擎已经能输出 color、depth、normal、albedo、motion vector、exposure 和 previous frame color。请设计一个神经渲染接入方案,说明 neural denoising、neural upscaling、neural material 是否都应该启用,先检查哪些输入资源,如何设置 fallback,并指出最可能的两个质量风险。

答案要点

先把问题拆到管线阶段:反射噪声属于低采样 lighting/ray tracing 输出,优先接 neural denoising;1440p 到 4K 属于图像重建,接 neural upscaling;高频材质被抹平可能来自 denoiser、upscaler 或材质 texture LOD,暂时不要立刻启用 neural material,先用传统材质 debug view 确认原始 albedo、normal 和 roughness 仍有高频细节。

第一轮只启用 neural denoising,输入 noisy color、normal、albedo、depth、motion vector 和 history,检查这些 buffer 的空间、方向、depth range、jitter 和曝光是否与模型接口一致。第二轮启用 neural upscaling,确认它接收 denoised color 还是 pre-denoise color,并保证 UI、debug overlay 和无 motion vector 的透明对象按接口要求处理。每一轮都保存模型输入、输出、传统 fallback 输出、GPU timing 和 temporal playback。

Fallback 可以分三档:denoiser 失败时回到传统 temporal/spatial denoiser,upscaler 失败时回到传统 TAAU 或 native/较低动态分辨率,平台缺少推理能力时关闭 neural pass 并提高 sample count 或降低输出质量目标。最可能的质量风险是 motion vector 或 history rejection 错误导致边缘拖影,以及 denoiser/upscaler 把材质高频细节误判为噪声并产生过度平滑。最终结论应由动态镜头验证,单帧截图只承担局部复查作用。

本章知识点总结

  • 对象拆分:神经渲染应先拆成场景表示、材质、去噪、超分和推理运行时五类对象。
  • 场景表示:NeRF 与 Gaussian splatting 替换的是空间内容表达和新视角合成路径。
  • 材质模型:Neural material 把复杂外观压缩为可学习求值器,但仍围绕 shading point 输入输出。
  • 去噪位置:Neural denoising 位于低采样 radiance buffer 之后,依赖 albedo、normal、depth、motion vector 和 history。
  • 超分位置:Neural upscaling 位于主渲染图像准备完成之后,用低分辨率输入和跨帧信息重建输出分辨率。
  • 训练契约:dataset、camera pose、feature buffer、loss、validation render、export 和 runtime inference 必须语义一致。
  • 传统对比:传统渲染依赖显式规则和资源,神经渲染引入训练分布、模型版本和推理后端边界。
  • 调试证据:神经 pass 的调试要同时查看模型输入、模型输出、传统 fallback、reference 和 GPU timing。
  • 应用排序:Neural material、radiance cache、denoising、upscaling 和 splatting 应按 frame graph 数据依赖排序。
  • 性能判断:收益成立需要节省的渲染成本大于推理、同步、临时显存和历史管理成本。
  • 质量风险:神经渲染常见风险包括 hallucinated detail、ghosting、over-smoothing、训练外输入和风格偏移。
  • 平台边界:跨平台接入要同时记录图形 API 能力、矩阵硬件、模型格式、vendor SDK 和 fallback path。
  • 验收顺序:先单 pass、再组合路径;先静态质量、再动态稳定;先输入 debug、再调整模型容量。