8.1 纹理分辨率与 mip 链字节账
纹理显存不是一个数字,而是一条从底级到 1×1 的 mip 链。本节用一份真跑的 S 层脚本,读共享真源复现 1024×1024 RGBA 全链基线 5592404 字节,再按贴图集逐张算整链字节与千分比,并用 P 层 TS 内核做跨语言逐位对照与漏算 1×1 的负例断言。
tag
纹理显存不是一个数字,而是一条从底级到 1×1 的 mip 链。本节用一份真跑的 S 层脚本,读共享真源复现 1024×1024 RGBA 全链基线 5592404 字节,再按贴图集逐张算整链字节与千分比,并用 P 层 TS 内核做跨语言逐位对照与漏算 1×1 的负例断言。
清单与目录必须互相对账:目录里多出的文件是漏登记,清单里悬空的条目是资产已被删。本节把《星屑旅店》的目录快照与清单各算一次差集,两个方向都报,用一份真跑的 S 层脚本和 P 层 TS 内核给出逐位一致的违例集合,并说明为什么只查一个方向会漏掉一半问题。
显式引用只写 refs 字段远远不够:图标会被打进图集、变体依赖基础资产、头像复用统一画框,这些都是隐式引用。本节把显式边与隐式边合起来建一张有向图,用 DFS 求强连通分量做环检测、逐边做悬空引用检测,并人为造一个环作为负例断言,证明检测器真的会失败。
资产清单不是给美术看的表格,而是给工具链吃的契约。本节把《星屑旅店》的 13 条资产样本固化成 JSON Schema 形态的字段规范,再用一份真跑的 S 层 Python 校验器和一份 P 层 TS 内核,逐字段拦下缺失字段、非法枚举、非幂次尺寸与不存在的色彩 token,并给出跨语言逐位一致的违例集合与负例断言。
名字判对了,还得放在对的目录里:讲清 kind 到目录的唯一映射、为什么目录必须纯小写(大小写混用是 URL 死链的头号来源),以及 @color/<token> 与 @asset/<id> 两条引用约束怎么和共享真源 visual_spec.json 对齐——目录错位、悬空引用、自引用都会被 lint 拦下。
色卡上的 hex 要变成代码里能引用的名字,中间要补一层分层:primitive → semantic → component。本节用《星屑旅店》的三层 token 表做引用完整性 lint、与 visual_spec.json 的同源校验,并推演改一个色卡会影响几个组件。
参考板不是一堆好看的图,而是一张可校验的表:每条参考都要有来源、授权、取色真源与用途。这一节给参考板定 schema、做整数校验,再用三个色彩维度把每条参考最近邻归到六套主题上,算出覆盖缺口与归属模糊的条目,最后用 PIL 把整板拼成一张图。
卷一交出的不是一本排好版的 PDF,而是一份可点数的清单:哪些是给人读的规范文本,哪些是机器校验的静态结构,哪些是能真跑的产物。本节用一份真跑的 S 层脚本与 P 层 TS 内核校验这份清单本身是否完整——字段齐全、kind 与 status 合法、id 唯一,且交给卷二的目标必须真实存在并已完成,缺一项就 fail。
Art Bible 不该是一本写给人读的口号集,而是一份每章都能对上一份可跑产物的模板。本节把《星屑旅店》前十五章的规范收成 12 个必填章,用一份真跑的 S 层脚本与 P 层 TS 内核做「模板章节 ↔ 规范产物」双向覆盖校验:缺章、缺产物、孤儿产物、文件不存在四类违例都会 fail。
回滚不是「把文件覆盖回去」:一次改版牵动新增/修改/删除三态,还会沿着引用关系把没直接变的资产一起拖下水。本节把两份资产快照做三态 diff,再用反向闭包生成回滚计划,用一份真跑的 S 层脚本和 P 层 TS 内核给出逐位一致的计划与违例,并用漏掉依赖者的负例证明门禁真的会 fail。
PSD、PSB、Aseprite、MOV 这类真身动辄几十兆,塞进主库会让每次克隆都慢到无法忍受。本节给《星屑旅店》定一套「主库只放指针、真身放远端」的协作法,用一份真跑的 S 层脚本和 P 层 TS 内核做指针清单与远端清单的双向对账,并算清仓库体积账。
版本号不是「最后一次保存」的时间戳,而是可解析、可排序、可对账的整数序。本节给《星屑旅店》的资产版本定一套 v<NNN>[_<变体>] 文法,用一份真跑的 S 层脚本和 P 层 TS 内核给出逐位一致的违例集合,并用乱序、跳号、重号、同号并行分支四条负例证明门禁真的会 fail。
评审开完会,问题必须有归属、有期限、有状态,决策必须能追到后续的资产变更。本节把《星屑旅店》的走查记录写成带状态机的 schema,用 S 层脚本算闭环率、逾期率与决策可追溯率,用 P 层 TS 内核做状态机合法性校验,并用两条非法跃迁负例证明跳步会被拦下。
评审最怕「我觉得不太行」——没有数字就没有返工依据。本节把《星屑旅店》的评审做成一张评分卡:每项给整数分与整数权重算加权分,通过或打回由「加权分达阈 且 无单项否决」两条规则决定。S 层算出加权分与判定,P 层复算同一套规则并用负例证明单项否决必须打回、加权刚好达阈必须通过。
评审不能随时拉个会了事,而要排成概念、制作中、接入前三个固定节点,每个节点各拦一类错。本节把《星屑旅店》三个节点的检查项、必需角色与否决权写成一份可校验的排班矩阵,用真跑的 S 层脚本与 P 层 TS 内核给出逐位一致的缺项与缺角色违例,并用两条负例证明门禁真的会 fail。
验收不是打勾,是算账。本节把《星屑旅店》的八批交付做成评分卡(整数分 ×10,加权后过线即通过)与返工归因分类账,用一份真跑的 S 层脚本算一次通过率、返工率与各类归因占比,并用 P 层 TS 内核复算到逐位一致;再故意造两份冲突账,证明评分与结论打架、归因不在允许集里都会被拦下。
技术规格表和交付物清单是两份各自演进的数据,只数个数会漏掉一半问题。本节把《星屑旅店》的四条规格与四份交付按 id 对齐,用一份真跑的 S 层脚本算缺项、多项与字段不一致三个方向,并用 P 层 TS 内核复算到逐位一致——缺项是规格没落地,多项是交了没要的东西,两者都必须被拦下。
外包需求靠口头传达必然返工。本节把《星屑旅店》的一张家具需求变成带字段的 Brief:参考图、尺寸、风格约束、交付格式、验收口径,并用一份真跑的 S 层脚本与 P 层 TS 内核校验必填字段、枚举取值、参考图与调色板 token 的引用完整性,再用一份故意写坏的样本证明四类违例都会被拦下。
图集怎么切,直接决定 drawcall:同一图集里的精灵可合批,跨图集必须拆。本节给出「按图集划分 → drawcall 数」的可跑账,并对比一张大图集与按类型/按主题切成多张小图集两套策略——装箱率与 drawcall 是一对必须一起算的取舍。
把一堆大小不一的图标装进 1024×1024 图集,并用一个千分比整数衡量装得好不好:先复现共享真源的基线 256/37/144,再用确定性货架装箱(高度降序 + 固定 tie-break)把 24 个混合尺寸图标装进 256/512/1024/2048 四档,给出可跑的 Python + TypeScript 装箱账。