0%

三个游戏的场景实现对比

由 astra 生成 · 更新于 2026-09-27 18:44(北京时间)

本文在六份独立分析完成后,比较同一问题在三个截帧中如何解决。单游戏公式、分支参数和原始程序由各自文档展开;这里集中解释设计差异、数据依赖和由此产生的约束,不以捕获编号或提交数量作为比较维度。

先读对应游戏的场景和角色,再读本篇;角色之间的横向差异另见 角色实现对比。

游戏与截帧 单独场景分析 单独角色分析
绝区零:蕾米大厅 场景实现 角色实现
原神:木偶雪城 场景实现 角色实现
终末地:竹林场景 场景实现 角色实现

1. 场景着色在哪里完成

要解决的问题 绝区零 原神 终末地
表面信息何时变成光照颜色? 场景材质先写烘焙光照量与表面颜色,脸部可直接写已着色颜色;后续再按类别补光 材质先组织颜色、法线和控制量,公共延迟光照按类别消费;专用角色材质保留自己的明暗规则 场景先做延迟光照,角色所在的后续几何路径直接补入着色颜色,同时写运动
静态环境照明如何接入? 按独立光照 UV 采样压缩烘焙光,解码到 HDR,并用法线方向修正 空间查询结构与屏幕反射/间接光结果共同参与;角色另采样场景颜色与阴影并平滑 按世界位置查询近、中、远三层体积,再按表面方向重建各颜色通道的一阶光照
阴影如何避免全部重新生成? 可见几何与阴影代理分开,局部缓存和逐对象解析接入屏幕阴影 把压缩烘焙阴影解压到图集,再与动态几何阴影共同使用 阴影图集按区域更新,同时供表面着色与雾体积使用
反射颜色从哪里来? 对镜像视点重新渲染场景,另有环境反射探针 延迟反射与空间数据链共同生成间接/反射结果;内部追踪规则未完全还原 屏幕追踪生成历史颜色采样坐标,从上一帧 HDR 取色并建立过滤层级
材质如何响应环境变化? 世界高度、表面朝向与湿润噪声共同改变颜色、法线和表面响应 高度层缓存、顶点遮罩和表面方向控制雪覆盖;雪细节还输出时序控制位 方向光照体积与积分雾直接进入后续几何着色,保持角色与所在空间的联系
如何避免历史拖影? 检查重投影后的像素身份,再按运动量和颜色邻域限制历史 先做空间边缘处理,再根据运动、覆盖标记和累积状态重建;材质高位决定部分历史策略 先比较前后深度、运动和分类,汇总有效性,再融合 HDR 历史
哪些数据必须保存到后面? 像素身份与颜色历史成对保存;离屏反射在主视图消费前有效 法线最后一次用于光照后才可改写成运动;角色环境结果先读旧值、后更新 旧 HDR 同时供反射和时序读取;光照场、雾体积与 Bloom 各层有不同保留范围

绝区零在普通材质阶段已经取得烘焙光,部分角色还直接写专用着色结果,因此后续光照需要识别哪些贡献已经存在。原神先组织公共材质数据,再把空间环境结果、阴影和专用材质控制结合起来;其中有些控制位一直影响到时序。终末地则先完成场景全屏光照,后续几何再直接消费环境输入、补入角色颜色和运动。

差别在于哪一个阶段拥有最终的材质求值权。将它们统一改成“所有物体先写底色,最后一个全屏程序完成照明”,会丢掉绝区零已有光照的语义,以及终末地后续几何的专用计算。

2. 相同格式不代表相同表面数据

实际用途 绝区零 原神 终末地
表面法线图:保存表面朝向,决定光照与遮蔽 RGB 直接编码方向,RGB10A2 材质阶段 RGB 直接编码方向,RGB10A2;后面复用为运动矢量图 RG 使用八面体编码,RGB10A2
材质颜色图:为后续着色提供表面颜色 RGBA8 sRGB;场景分支保存颜色,部分角色分支改作材质控制数据 RGBA8 sRGB;含角色已经过材质处理的颜色 RGBA8 sRGB
HDR 光照颜色图:存放已计算的亮度与颜色 RGBA16F;材质阶段已包含烘焙光/角色着色等结果 延迟光照独立生成 HDR 场景颜色 R11G11B10F;材质结束时近黑,后续逐步加入光照
运动矢量图:保存前后帧屏幕位移,定位历史像素 脸部已在材质扩展图的 RG 写压缩运动;后续另有运动与像素身份图供时序读取 光照后把原法线图改写为运动矢量与控制标记,RGB10A2 RGB10A2;同时包含时序分类,后续几何/效果继续更新
附加材质参数图:控制表面如何接受后续光照 RGB10A2在场景分支保存材质量、脸部分支复用为运动/标记;另有颜色图 alpha 控制量 第二着色/材质参数图 RGBA8 sRGB,附加材质标量图 R8 RGB10A2;完整反射/材质参数位域未全部解码
材质类别/扩展标记图:选择处理分支 材质图通道与模板分类共同承载 材质类别与时序控制 R8,打包扩展标记 R8 主运动图的附加通道与模板分类共同承载
相机深度与模板图:遮挡测试、空间位置重建与分类 D32S8 D32S8 D32S8

三个重要区别直接影响解码和阶段组织:

  • 方向编码不同。 绝区零、原神从 RGB 线性映射恢复法线;终末地从 RG 八面体编码恢复三维方向。把它们都当普通 RGB 法线,会使后者的光照和 AO 朝向错误。
  • 语义可以由材质类别决定。 绝区零场景在材质扩展图写表面参数,脸部却可在相同通道写运动/标记;HDR 附件里也分别存在烘焙光照量和已经着色的颜色。分类必须参与解读。
  • 语义也可以由使用时间决定。 原神先用一张纹理保存法线,公共光照消费完成后再改写成运动图。复用的是存储空间,前后两阶段使用的数学意义不同。

法线与运动数据的实际解码见独立场景分析。下面的配图按可见效果选择:材质到照明、遮蔽区域与时序输入输出分别说明其贡献。

3. 光照跟随表面 UV、空间位置还是环境反馈

材质阶段:已有光照 材质阶段:表面颜色 后续完成后的画面
材质阶段:已有光照 材质阶段:表面颜色 后续完成后的画面

观察 HIA 浮雕字、墙板凹处和吧台面。 左图已经具有明暗,但没有完整表面配色;中图保留红黄标牌、木地板与金属面分区;右图将这些数据与后续着色合成。前两图是同阶段的不同输出,说明光照量与表面颜色的分工;右图还包含后续灯光和后处理,不能当作单一效果开关实验。

环节 绝区零 原神 终末地
已确认的空间/烘焙照明输入 独立光照 UV 采样压缩烘焙光、天空遮蔽与环境探针 空间查询结构与屏幕输入联合产生间接/反射候选 按世界位置查询近、中、远三层光照系数
方向怎样参与 着色法线与几何法线夹角修正烘焙光;动态光另查候选列表 公共光照消费法线;空间间接链内部方向模型尚未完全解码 各颜色通道按 max(dot(方向系数,方向)+常量项,0) 重建
角色如何取得环境 专用材质同时消费阴影和角色数据 采集场景颜色/阴影,按不同规则汇总和平滑,再由角色读取 后续几何直接查询同一空间光照场与积分雾

绝区零的代表烘焙光使用 0.5×u/(1-u) 恢复 HDR,光照 UV 由实例独立变换;因此这部分照明与资产表面参数化关系紧密。终末地的输入则由世界位置寻址,方向系数再决定表面朝向的受光,近层边界向更粗覆盖平滑过渡。

原神角色传感器是场景与角色之间的反馈接口:采样材质颜色和阴影,不等于已经还原了完整物理入射光场。空间间接链与角色传感器应分别分析,不能把传感器的五点平均解释成整套场景 GI。

局部灯光方面,绝区零明确构建屏幕分区与世界网格两套候选列表:先包围范围粗筛,再按深度/格子相交过滤,消费者按压缩表头查列表。它解决“这里需要算哪些灯”,与“这里已有多少烘焙/环境光”是两个不同问题。原神和终末地不能因为有空间表或体积就自动套用同样的列表结构。

细节来源:绝区零灯光与烘焙材质、原神空间查询与环境反馈、终末地三层方向光照。

4. 表面怎样接受湿润、积雪与环境变化

光照前的材质颜色 最终雪城局部
光照前的材质颜色 最终雪城局部

观察中间栏杆顶面、两侧台阶和树冠。 材质阶段已经形成积雪与基底的颜色分区,最终画面再出现明显的蓝色环境受光和台阶阴影。这里能看出雪覆盖先进入材质、再参与光照;这是材质到最终输出的阶段对照,不是“关闭雪材质”的结果。

绝区零用世界高度、朝上程度与湿润噪声控制影响范围,随后同时修改颜色、表面响应参数和法线细节。湿润不是最终颜色上的单一深色遮罩,它可以把细微法线往平坦方向拉回。

原神的雪场景先把可接受的表面高度与层差写入缓存;可见雪材质再以顶点色、覆盖方向和法线控制两层表面的混合。本帧方向覆盖包含 顶点色.B×smoothstep结果,另一层遮罩又乘顶点色 B。底层和雪层各自有颜色、法线与控制量,闪光细节还写出供历史策略读取的高位分类。

终末地本次已深入确认的是位置/方向光照和雾如何进入表面与角色求值,尚未完整分析与湿润或积雪对应的天气覆盖材质。因此不能把“这一帧未还原”写成“该游戏没有对应能力”。

这些机制的共同点是环境先改变材质求值输入,再影响颜色与后续处理。覆盖规则、世界寻址和分类输出属于材质实现的一部分,不能只移植最后的颜色插值。

5. 阴影的区别在生产、缓存与消费者

问题 绝区零 原神 终末地
阴影深度从哪里来 可见几何、专用代理及附加角色阴影 动态几何和压缩烘焙结果 分区阴影视图与其他深度路径
已确认的缓存机制 局部图集/数组,屏幕解析后再按对象处理 烘焙数据按块查树,解码平面或小块量化深度后写入图集 不同区域更新,公共阴影供表面与雾读取
特殊的后续消费 角色分类、附加脸部阴影、对象级遮蔽 多尺度屏幕过滤,角色环境采样也读取阴影 几何遮挡同时改变表面受光与空气中的散射

原神的关键差异是压缩存储与实时比较采样之间多了一个解压层:静态阴影先以分块节点与载荷保存,使用前恢复成常规深度附件,从而与动态几何进入相同的比较采样和过滤路径。

绝区零的关键差异是可见形状、阴影代理和对象分类各有职责:需要保留代理对遮挡的表达,以及分类对后续作用范围的限制。终末地则展示了表面与体积共用遮挡信息:同一个阴影输入还决定雾里哪些空间能收到光。

图集布局能证明区块化使用,但单帧不能还原所有区块的刷新频率和分配策略。详细记录分别在三篇场景分析的阴影部分。

6. 反射颜色的来源决定依赖什么

机制 颜色来源 必须先有的数据 当前证据边界
绝区零镜像视图 从镜像视点重新完成场景着色 镜像视图的几何、深度、材质、光照和透明结果 与环境探针的全部材质混合规则未完整拆解
原神间接/反射链 屏幕数据与空间结构共同生成的候选颜色 法线/深度、场景颜色与空间查询结果 追踪、回退及漫反射/镜面分量分离仍有未知项
终末地历史取色 从上一帧 HDR 画面按追踪坐标读取 当前深度/法线、坐标及有效性数据、旧 HDR 坐标消费与过滤已确认,射线步进和未命中回退未完全还原

绝区零反射的可见性由另一个观察视点重新决定。终末地的重建则把“去哪里取色”与“取得什么颜色”分开:半分辨率坐标服务全分辨率取色时加入 2×2 子像素补偿,颜色再以 C/(1+max(C)) 压缩后进入过滤层级。

由输入来源可以推出,镜像分支需要额外视图内容,历史取色分支需要有效旧画面。单帧不足以比较二者实际耗时或未命中效果;尤其不能把尚未拆出的回退策略补成某种探针或光追实现。

终末地旧 HDR 同时供反射与时序读取,两个消费者都结束后才能换成新历史。这是它比“颜色历史只用于抗锯齿”更严格的读写依赖。

7. 环境遮蔽分别在近似什么

环境遮蔽系数预览 相同区域的最终地面
环境遮蔽系数预览 相同区域的最终地面

观察左下石块下沿、中央横向石阶和右侧长石阶。 遮蔽图的深色带对应这些接缝,白色区域表示较少遮蔽;右图给出它们在最终地面中的位置。系数图统一显示范围为 0–0.67。最终颜色还包含材质和直接阴影,所以这张配对图用于定位 AO 的作用区域,不把右图全部暗部归给 AO。

绝区零的屏幕遮蔽之外,角色还使用胶囊空间几何近似局部遮挡;原神将屏幕遮蔽与空间遮蔽场处理结合;终末地已能还原到方向搜索、历史拒绝、打包边缘和上采样的具体链路。

终末地的方向核心沿三个方向、三个距离、正负两侧取深度,再以法线和上下遮挡边界求遮蔽。后续步骤分工明确:

  • 运动和深度差分别衰减旧遮蔽的可信度;当前 3×3 范围约束历史值。
  • R8 边缘图用四个 2-bit 值表达相邻方向的连续性,滤波需要中心与邻居双方允许跨越边界。
  • 两轮保边后再五点上采样,最后一步不重新读取深度。

胶囊遮挡知道简化物体的空间形状,屏幕方向搜索知道当前视图中的深度邻域。它们近似的输入不同,可以互补;当前没有足够证据为绝区零和原神的全部 AO 核列出与终末地同等精度的参数表。

8. 雾的局部贡献与累计结果要分开

原神已确认先在三维网格中结合灯光、阴影、噪声和历史,经过后续体积处理再合成到表面。终末地进一步确认了局部散射/消光体积与沿视线累计体积的分工:

本层透射 = exp(-消光×层厚);累计散射要乘此前剩余透射,累计透射则继续乘本层衰减。

因此“局部体素有多强的雾”不等于“从相机到这个表面已经积累了多少雾”。角色直接读取累计颜色和透射时,才能与场景共享一致的视线衰减。绝区零本次能确认屏幕雾生成和合成,内部介质存储尚未完整还原,不能强行套成相同的体积结构。

9. 历史拒绝和颜色重建不是一个固定混合系数

时序融合输入 时序融合输出
时序融合输入 时序融合输出

观察左侧栏杆的细碎亮点与右侧雪坡。 输入保留大量孤立亮点和较硬的细边缘,融合后亮点更集中、局部纹理和轮廓也更柔和。这组同区域、同显示设置的图直接展示本次时序重建的变化,同时能看到细节变软的代价;单帧对照不证明运动中的拖影或闪烁表现。

机制 绝区零 原神 终末地
主运动的非线性解码 有符号平方,中心为 127/255 有符号平方,中心为 127/255 有符号四次方,中心为 0.5
强拒绝历史的主要依据 当前/历史像素身份差值超过 0.1 重投影越界、运动/覆盖控制与状态;分类影响颜色约束 当前/历史深度、运动与类别变化,另汇总低分辨率遮罩
历史颜色如何受当前画面约束 在压缩颜色域中进行邻域限制 当前 4×4 重建及条件式历史颜色区间 独立历史验证信息参与后续 HDR 融合
一个可确认的动态控制 历史基础比例 0.95-0.25×saturate(5000×速度) 累积量上限 12-10×saturate(6000×速度) 运动、深度和类别的变化先编码为有效性标记
必须同时保存的状态 颜色 + 像素身份 颜色 RGB、其 A 控制标记 + 两通道历史状态 HDR 颜色及附加状态 + 深度 + 运动/分类

这些控制量位于不同层次,不能只比数字大小:

  • 绝区零先检查历史身份差,再约束压缩颜色域里的旧值,最后按运动减少混合权重。
  • 原神先重建当前 4×4 邻域和五点历史颜色,再结合保留状态、覆盖控制与材质高位决定约束方式;最终当前比例为 W/(W+12H),W 是本次重建权重和,H 是受控制的历史累积量。
  • 终末地先从前后深度、运动与分类形成有效性信息,再汇总低分辨率遮罩供 HDR 颜色融合使用。

共同需要运动正确、历史版本一致、颜色处于正确处理阶段;各自拒绝依据和重建核则不能只换一组参数就相互替代。详细公式分别在三篇场景分析的时序部分。

10. 后处理顺序改变历史累计的对象

游戏 与本次主要历史融合的关系 直接含义
绝区零 HDR 时序之后继续主要泛光、运动模糊与最终颜色处理 身份历史与 HDR 颜色一起维护;角色颜色查表还可能更早发生
原神 运动模糊、泛光和最终颜色先完成,再做空间抗锯齿与历史重建 历史约束针对后处理颜色,不能直接按另一套 HDR 历史解释
终末地 HDR 验证/融合之后提取高亮、做多尺度 Bloom,再最终合成 高亮提取和过滤消费时序稳定后的 HDR

终末地 Bloom 的下降层保留细尺度结果,上升时用三次重建的粗尺度结果与它们混合;高亮预滤波还同时使用软阈值和亮点降权。这里已还原的是具体滤波和混合逻辑,而非仅有一条纹理尺寸清单。另两帧的整套 Bloom 核尚未以同等精度完成逆向,不能凭程序名宣称相同。

11. 实现时必须保留的阶段关系

数据关系 对应机制 打破关系会丢失什么
表面数据与类别一同读取 绝区零材质通道分支、原神材质高位、终末地模板筛选 同一数值被错误解释或进入错误着色路径
法线用完后才能改写运动 原神纹理顺序复用 光照读到位移,或时序仍读到方向
反射与时序读完旧 HDR 再换版本 终末地共享历史 反射与重投影使用不同帧或被覆盖的数据
局部雾更新先读已有累计体积 终末地体积反馈 前次反馈在消费前丢失
Bloom 下降层保留到对应上升 终末地多尺度合成 粗层无法与本层细节重新组合
角色环境先读已有反馈、后汇总 原神环境传感器 改变角色接受环境变化的时序与平滑行为

这些约束来自算法消费者,不来自资源名字。复制 shader 时同样需要保留分类、编码、颜色域与历史有效性;通道格式相同不足以证明可以共用解码器或临时存储。

12. 比较边界

本文比较的是三个具体截帧中已观察到的机制。没有连续帧就不能恢复完整缓存周期,没有可比计时就不能据此排名性能;未还原的分支不视为游戏缺失该功能。

原始输入、定位与状态由 证据索引 保存。需要某个游戏的实现细节时,以开头链接的独立分析为主;本篇保留机制之间的差异和相互约束。