6.3 划界:编译与渲染原理外链
本节不是内容而是边界:第 6 章只讲参数表与默认值、参数对齐与打包,着色器编译、变体爆炸、渲染管线原理一律外链给 graphics 专题。把「什么归本章讲」编码成一张可断言的路由表——external 规则在前、this-book 在后,首个命中胜出;三条外链路径两两不同、全部在 public/ 产物中存在,越界与漏网都被断言挡住。
category
本节不是内容而是边界:第 6 章只讲参数表与默认值、参数对齐与打包,着色器编译、变体爆炸、渲染管线原理一律外链给 graphics 专题。把「什么归本章讲」编码成一张可断言的路由表——external 规则在前、this-book 在后,首个命中胜出;三条外链路径两两不同、全部在 public/ 产物中存在,越界与漏网都被断言挡住。
参数对齐不是玄学:一个常量寄存器是 16 字节 = float4,参数必须整块落在某个寄存器内、不许跨边界,放不下就顺延、余量作废。本节用《星屑旅店》的 10 个参数把「按逻辑顺序声明」与「按寄存器边界重排」各算一遍,给出可复现的整数账——naive 占 5 个寄存器、packed 占 4 个,S 层与 P 层逐位一致。
材质参数表不是美术的内部草稿,而是美术与程序之间的契约:每个参数都要写明类型、取值范围、单位、默认值与是否暴露给美术。本节用《星屑旅店》三套材质做一份可跑的表校验,并让「默认值被改动」这件事在构建期就被摘要检测到,S 层与 P 层结果逐位一致。
图集重打包后,UV 变了的区域会牵动所有引用它的 sprite、material 与 screen。本节把这份引用关系建成有向图,从变更 rect 沿反向边做 BFS,输出受影响资产清单与需要重跑的回归套件,并让同一份传播逻辑在 Python 与 TS 内核两处逐位一致。
mip 链的字节账是整数题:第 i 级尺寸是 ceil(w/2^i)×ceil(h/2^i),未压缩按 bpp 逐级累加并按 4 字节对齐,块压缩按块向上取整。本节复现共享真源基线 5592404,给出四张纹理 × 八种格式的整数字节账与有效位深,压缩原理外链 graphics 专题。
图集装箱是整数题,更是确定性题:同一批输入必须产出同一张布局。本节用《星屑旅店》的 31 个混合尺寸矩形,对比 shelf(货架)与 skyline(天际线)两种确定性装箱在 512/1024/2048 三档的装箱率,并用布局摘要 digest 把可复现性锁死,S 层与 P 层逐位一致。
从场景入口沿依赖边做前向可达,可达集之外的资产就是不可达资产,也是候选删除清单。本节用 S 层 Python 与 P 层 TS 各自算一遍可达集,断言删除不可达资产后入口仍可达、可达集逐位不变;最后讨论不可达不等于可删的三条边界,避免清理误伤预留资产、动态引用与热更分包。
环意味着没有任何资产能先打包,增量构建会死循环;悬空引用则指向不存在的节点。本节用 DFS 三色标记(白/灰/黑)找环、逐边判悬空引用,并把环路径旋转到字典序最小节点做规范化,让环集合跨语言逐位一致。最后给出人为造环的负例断言:干净图不报、环图必报,证明检测器真的会 fail 而不是空转。
管线打包前必须先知道谁引用谁。本节把清单里显式的 dependsOn 与三类隐式边(命名约定、目录归属、材质槽)合成一张有向图,用 S 层 Python 建图并分类计数、P 层 TS 内核复算,两侧边集合 digest 逐位一致,并说明隐式边为什么是管线里最容易漏的一环。
前两节各报了 8 条问题,本节把它们合成一份分级清单:按一张可判定的映射表,每个规则码落到 block / warn / info 三级,并给出修复动作与能否自动修。16 条问题判成 block 3 / warn 11 / info 2,3 条 block 落在 2 条记录上,门禁直接判阻断;分级表未覆盖的规则码一律判失败。
上一节判的是「字段对不对」,这一节判「值合不合规」。尺寸、格式、命名三类判据被写成一张全整数与字符串的规则表,再用一份真跑的 Python 规则引擎与 TS 内核在 9 条导入记录上跑出 8 条违例,八个规则码各命中一次;两侧违例集合逐位一致,且每条规则都配了一条能触发的负例。
导入是美术管线上的第一道闸门,而闸门的判据几乎全在侧车文件 .meta 里。本节给出一条可判定的判据——删掉后无法从源文件字节重算出来的才是契约字段,其余都是派生冗余——再用一份真跑的 Python 审计脚本与 TS 内核,在 9 条《星屑旅店》导入记录上报出 2 处契约缺失与 5 处派生漂移,两侧问题集合逐位一致。
本机没有任何 DCC,真打开、真导出、真渲染都不可能复现——但「不可复现」不该是留白。本节把这件事写成方法:用一份导出清单承载真环境的声明值,用 schema 静态校验管结构与跨字段一致性,用数值对齐账把声明值与管线账预测值逐条对上,并把「无 DCC 环境不得声明可命令行复现」编码成一条会失败的门禁。
单位和轴向看着只是导出面板上的两个下拉框,写错了就是落地灯十七米高、角色躺在地上。本节把单位换算、Y-up/Z-up 轴向置换、左手系/右手系镜像拆成三个正交问题,用一份可跑的整数账算出六种 DCC 约定各自的置换矩阵、行列式与镜像标志,并给出厘米→米与坐标置换的对齐结果。
资产从画师手里走到屏幕上要穿过四个阶段:DCC 制作、导出、导入、运行时。本节讲清每个阶段谁负责、产出什么、边界上要交接哪些字段,再用一份可跑的整数账把同一批《星屑旅店》资产在四阶段的顶点数与字节量算出来:顶点因 UV 缝与硬边膨胀多少千分比,运行时字节为什么几乎全由纹理决定。
16.2 证明了一条链能被同一套判据反复跑,但「跑得通」不等于「交得出去」。本节给卷二收尾:把全卷产出列成一张交付物清单,点名哪几批交给卷三《风格与品类美术实战》,并用一段 S 层脚本与一份 P 层 TS 内核校验清单完整性——字段齐全、kind/status 合法、id 唯一、接手目标存在且已 done。
16.1 把管线串成一条链,但那条链只在默认主题上验过。本节做回放:同一份 visual_spec.json 换 6 个主题包,跑同一套四道闸门的管线 6 遍,六次全过;再算 6×6 风格距离矩阵(整数 ×10)证明「同源但可区分」,并复述跨语言纪律:整数逐位一致、色彩派生量容差内一致。
前十五章各写了一段管线,却没人说清谁先谁后、谁的输出喂给谁。本节把它们串成一条有向链,给出一张能跑的装配检查表:每个阶段标注它由本卷哪一节提供可跑脚本与档位,再用一份 S 层脚本与 P 层 TS 内核做四类对账——出处节是否真实、链路是否首尾相接、阶段号是否连续、首尾类型是否匹配。
验收不是「看一眼觉得行」,而是一台可执行的门:每条规则给一个阈值,每件交付物给一组测量值,逐项判定后落到 pass / conditional / reject 三级,再按包聚合成验收率与批次门禁。本节用一份示例规则表跑 8 件交付物,S 层 Python 与 P 层 TS 各自复算且 digest 逐位一致。
15.1 算出的基线是「报价时的数」,结算是「实际花掉的数」,两者之差就是超支。本节把成本拆成基线 + 变更 + 超计划返工 + 管理分摊四个加项,再把超支分解到三个可归因桶,S 层 Python 与 P 层 TS 各自复算且 digest 逐位一致;所有数字均为本套构造的示例参数。