本节摘要:近几代 DirectX 的特性大更新有一个共同主题:把管线的固定规则交给数据与开发者决定。本节逐个拆解光线追踪(DXR)、可变速率着色(VRS)、网格着色器、采样器反馈与工作图——每个都回答"它改写了管线里的哪条规则、值不值得用"。
把新特性排成一列,会看到一条暗线:管线里"不可协商的固定部分"在不断缩水。光栅化时代,三角形必须经输入装配、固定光栅器、逐像素着色——路径唯一。然后:VRS 让"每个像素都要着色"不再神圣;网格着色器让"几何必须走输入装配"不再成立;DXR 让"画面只能由光栅化生成"成为历史;采样器反馈与工作图则把纹理使用与任务调度这两块最后的黑箱打开。理解每个特性的正确姿势,是找到它松开的是哪颗螺丝。
光线追踪管线的思路与光栅化相反:不从三角形出发,从视线出发——从相机或光源发射光线,与场景求交,命中后按材质着色,可继续反弹。DXR 把这条路径接进 Direct3D 12:加速结构(Acceleration Structure)是场景的求交专用组织形式,光线生成、命中、未命中着色器构成一套新的着色器家族。
必须建立的正确认知是:DXR 不是替代光栅化,而是补课。光栅化擅长"把可见面快速画出来",光线追踪擅长"回答光从哪来"——反射、软阴影、全局光照这些光栅化靠贴图与技巧近似的效果,光线追踪直接按物理路径算。实践形态是混合管线:主体场景光栅化渲染,反射与阴影等光照项用少量光线补足,兼顾画质与预算。工程代价也要认清:加速结构的构建与更新有成本(动态场景要每帧更新)、命中着色器分支发散伤并行效率(3.1 节的并发视角在此成为瓶颈来源)。

**可变速率着色(VRS)**松开的螺丝是"每像素一视同仁"。它允许以块为单位指定着色精度:画面中心与运动区域按全精度着色,边缘与快速移动区按粗块着色——人眼本来就看不清那里。收益直接:像素着色器工作量按视觉重要性分配,帧时间省下可观比例。适配场景是高速运动的游戏画面;静态画面与近距离观察场景收益缩水——用之前想清楚玩家的眼睛在看哪。一句话:VRS 省的是"看不出"的像素,别省在"看得清"的地方。
网格着色器松开的螺丝是"几何必须走固定输入装配"。它把几何处理改成计算式的两段:网格任务阶段决定"哪些该处理",网格着色器阶段成批输出图元。收益类型有两类:剔除前移(在 GPU 上按数据自由剔除,无用的网格连光栅化都不进)、程序化几何(细分、粒子、毛发这类难以用"三角形列表"描述的几何有了正路)。它尤其适合海量小物体的场景——传统绘制调用与输入装配对它们太重了。
VRS 的使用面貌很朴素:给画面切出粗细不一的着色网格,声明每块的速率:
一帧 VRS 的速率图(示意,数字为着色块大小): 画面中心(准星区) ......... 1×1 全精度:玩家盯着的战区 运动剧烈的外围 ............. 1×2 横向减半:动态模糊掩护 边缘视野 ................... 2×2 四分位:人眼余光区不敏感 极角与遮挡区 ............... 2×4 最低档:反正只闪现一瞬
速率图的生成可以由引擎按上一帧的运动矢量与视线焦点自动算,也可以按效果手工调。它代表的价值取向值得咀嚼:算力的 spending 从"几何正确"转向"感知正确"——像素级精确着色是几何时代的洁癖,感知上等效才是实时渲染的账本语言。
短期内不会,长期也难说"彻底"。原因在两者解决的是不同问题:光栅化是"给定三角形集合,快速覆盖可见像素"的投影机器,光线追踪是"给定光线,找出命中了什么"的查询机器。实时渲染的主体工作永远是前者——把海量几何铺满屏幕这件事,光栅化的硬件吞吐无可替代;后者负责前者答不了的光传播问题。行业确实在朝全路径追踪的方向演示(少数作品已做全程光线追踪),但那依赖降噪、采样与算力的同步跃迁,普及节奏以代际计。务实的结论:把光线追踪当光栅化世界的补光灯,把两者的组合当成未来十年的主流形态来理解工程——这与本节混合管线的分工图完全一致。
采样器反馈松开的螺丝是"纹理使用是黑箱"。它让 GPU 记录"这帧哪些 mip 级、哪些区域实际被采样了",程序读到反馈后再决定流式加载与驻留策略(6.3 节的呼吸系统拿到了眼睛)。纹理预算从"按距离猜"升级为"按实际使用调",显存利用率显著提高——开放世界与纹理密集场景的福音。
**工作图(Work Graphs)**松开的螺丝是"任务由 CPU 预编排"。传统模式下 CPU 决定每一步 Dispatch 的次序;工作图把任务依赖关系交给 GPU 自己展开——前一步产出决定下一步的工作量。它是 GPU 驱动渲染管线的又一基石,目前偏早期,先记住方向:调度的松手仍在继续。
这批特性看起来眼花,学习上的衔接却出奇地顺——因为每一个都能映射回前面章节的地基。DXR 的命中着色器仍是你熟悉的着色器语言与绑定体系(3.3 节),加速结构本身是一种资源、走熟悉的堆与状态管理(3.4、6.3 节);网格着色器是计算思想的几何版(4.3 节),它的调试依旧靠帧捕获与时序视图(5.2 节);VRS 只是给像素着色器的工作量分配加了粒度(6.1 节的带宽账换了算法)。换句话说,新特性没有另起炉灶,它们是同一套概念体系的增量语法。学习策略建议:先把前六章的地基打牢,再按项目需要逐个特性深入——地基不牢者追新特性,学到的只是参数记忆;地基牢者上手新特性,一眼认出"这是老概念的哪个零件换了个壳"。
特性虽好,上车前过三道校验。硬件覆盖:目标用户的 GPU 有几成支持?门槛特性只该出现在可配置的增强档。收益类型:这特性解决的是你的真实瓶颈吗?拿 6.1 节的归因方法先测——VRS 救不了带宽瓶颈的场景,网格着色器救不了 CPU 提交瓶颈。复杂度代价:加速结构、反馈回读、新调试路径都有学习与维护成本,团队能力与工期要兜得住。上车三校验之外再记一条团队心智:新特性落地时把"支持检测、降级路径、效果开关"三件套写进配置系统——支持的玩家拿到增强画质,不支持的自动走标准路径,同一份代码两个世界都体面。这三件套本质上是 2.3 节功能级别协商思想的现代重演:能力分级、按档渲染,图形行业的老智慧在新特性上从未过时。
新车看完,最后一站:跨平台与云渲染如何改写这套契约的边界,全书在此收束。