11.3 视觉噪声与可读性平衡
暗色底上的高细节有两个相反的失败模式:太密就成了视觉噪声,太淡又会看不见。本节对《星屑旅店》的每个图标算两笔独立的整数账——噪声千分比(笔画数乘笔画宽乘笔画均长除以图标面积)与细节对比度是否达到下限,并证明裁剪笔画救不了对比度不足,两条账不能互相抵消。
category
暗色底上的高细节有两个相反的失败模式:太密就成了视觉噪声,太淡又会看不见。本节对《星屑旅店》的每个图标算两笔独立的整数账——噪声千分比(笔画数乘笔画宽乘笔画均长除以图标面积)与细节对比度是否达到下限,并证明裁剪笔画救不了对比度不足,两条账不能互相抵消。
暗色主题的调色板几乎全落在低亮度区,文字能不能读只剩对比度这一根拐杖。本节用与卷一 ch4 同源的 WCAG ×10 整数口径,算分级后 token 的相对亮度千分比、亮度分带直方图与相邻亮度阶梯的最小间隔,并从只读真源取对比度下限,逐对检查暗色调色板是否达标。
暗黑与恐怖的第一步不是换色相,而是把整块调色板压饱和度。本节从 retro-cyber 的暗色档出发,用整数地板除做分级:灰值加权和加按等级往灰值收,算出每个 token 分级前后的饱和度千分比与四个等级的平均饱和度,并让 Python 与 TypeScript 各自复算、逐位对齐。
前两节把二次元里能写成数据的部分写完了:色彩、线色、色阶带、头身比、面部特征线。剩下的那一半——画质——本机根本做不了。本节整节标 X,逐条说明它为什么不可复现,并把「不许给不可复现的东西编一个数字」写成一条会失败的门禁:声明表里只要出现一个测量值字段,测试立刻报错。
10.1 管的是颜色与线宽,这一节管结构:角色的头身比、头高与全身高、面部三条特征线(眼 / 鼻 / 嘴)在头部框内的相对位置、双眼加眼距占头宽的比例,全部是整数。本节把它们落成一份 D 层比例表与一段可跑的 TypeScript 校验器,头身比恒等式与面部顺序都会被断言。
二次元的「好看」几乎全在画师手上,但色彩与线条里仍有一半能写成整数:角色色的饱和度上限与明度下限、色阶带的档数与档间明度差、线宽区间,以及线色不许近似纯黑、不许近似中性灰、色相必须落在冷色带内。本节把这些落成一份 D 层规范与一段可跑的 TypeScript 校验器,并说清本章为什么只走 D+P+X。
距离矩阵回答「哪两套最像」,但项目要选的是「最合约束的那套」。本节把风格选择写成一笔可算的账:四道硬门槛(对比度 / 可区分 / 细节上限 / 明度下限)先过滤,过关者再按与项目目标向量的加权 L1 距离排序,预算内取最近者。结果是 cozy-clean,拟合度 969,比第二名近 136。
1.1 给了六个主题的五维向量,本节把它铺成一张 6×6 的风格距离矩阵:用声明权重 [2,2,1,3,3] 的加权 L1 整数均值再 ×10,判据是下限 800。15 对全部高于下限,最近一对 lowpoly/cozy-clean 是 1002;摘要指纹与卷二 16.2 独立复算逐位相同,这就是「同源但可区分」。
风格能不能被量成几个数?本节把第一卷的五维风格向量拆回人话——色彩(明度中位数 / 饱和度均值 / 色相跨度)、形状(描边占比)、细节(细节密度)三个可测维度,并做一次消融对照:只用色彩三维时最近一对会掉到可区分下限以下,补上形状与细节才恢复,这正是「三个维度一个都不能少」的整数证据。
《游戏美术与技术美术》卷三《风格与品类美术实战》目录:16 章 48 节,从风格的可测三维与风格距离矩阵,经像素风、2D 手绘、低多边形、NPR 卡通、写实 PBR、厚涂手绘、体素,到等距 2.5D、二次元、暗黑、清新、复古赛博与品类差异,最后用 6 个主题包跑同一份规范并给出风格距离矩阵。按章节提供仿真、逻辑内核与原型;完整项目的配置组装与交付验收仍在补齐。
《游戏美术与技术美术》卷二《技术美术与管线工程》附录:全卷管线规则与公式索引、ta<章号>_ 工具链命名约定、六层可运行性口径与逐层复现命令,并给出可跑的 S 层清点脚本与 P 层索引校验内核,两者对同一份工作区算出的清单与摘要逐位一致,并附一键复现与排错顺序。
前两节把片段绑到状态、定了过渡与混合,本节管动画时间轴上的事件标记:帧号、类型、参数。六条资产侧校验把 8 个事件判出 4 类违例各 1 条——帧越界、同帧同类型重复、事件未按帧排序、vfx 引用不存在,两侧 digest 逐位一致,逻辑侧只需照单消费。
9.1 把片段绑到了状态,本节定状态之间怎么过渡、连续参数怎么在几个片段间混合。2D 四角样本的双线性权重全程整数地板除,Python 与 TS 逐位一致;7 条过渡判出悬空 1、超预算 1,非整除查询点的权重之和是 998 而非 1000,规范只承诺确定、不承诺归一。
本节把动画片段名文法定成 <char>_<action>[_<dir>][_v<N>],用片段族把方向与版本变体收成一个可绑定的单位,再校验三类绑定缺陷:悬空绑定、孤儿片段族、方向缺档。11 个片段判出坏名 1、悬空 1、孤儿 1、缺档 1,两侧 digest 逐位一致。
本节不是内容而是边界:第 8 章只讲骨骼数、调色板上限与蒙皮数据字节账,蒙皮矩阵数学、硬件 uniform 上限成因、骨骼贴图显存机制一律外链。把「什么归本章讲」编码成一张可断言的路由表——external 在前、this-book 在后,首个命中胜出;三条外链路径两两不同且全部在 public/ 产物中存在。
蒙皮数据分两块:顶点上的蒙皮属性(4 索引 + 4 权重)与骨骼调色板(骨骼矩阵)。本节把两块都算成整数字节,并让索引位宽决定合法性:4 位最多 16 骨、8 位 256 骨。同一批角色用 idx8_w8 共 203616 字节、调色板只占 75‰,换 16 位索引加浮点权重则涨到 579936 字节。
调色板是「一次绘制能送进顶点着色器的骨骼矩阵集合」。本节把它的上限从 uniform vec4 预算推导成整数公式,再逐个角色核对两条独立约束:档位骨骼预算与调色板上限。6 个角色里 1 个超预算、2 个因超过 64 根上限被迫拆成两个蒙皮段——预算合格不等于装得下。
LOD 切换那一帧的跳变不是玄学。同一段相机轨迹下,单阈值选级在阈值附近抖了 17 次,双阈值迟滞只切 1 次;相邻级的误差跳变里,LOD2 到 LOD3 的 75 千分比超过 60 的上限,被门禁判违例。本节把「切几次」与「跳多大」都变成整数账。
屏幕占比是一屏三角预算的分配依据。本节用整数针孔相机把距离换算成占比千分比,按阈值表逐实例选级,把一屏 12 件家具的三角数合计到 1072,与 1200 的帧预算对账;并算出「全部拉到 LOD0」的最坏视角会爆到 3024,说明预算必须按最坏视角算。
LOD 不是「离远了换低模」一句话,而是一张分级表加一个能算的误差指标。本节把家具轮廓归一化到规范轮廓,用整数 shoelace 逐级算面积损失千分比,给出 4 级 LOD 链的误差账,并由 P 层 TS 内核复算,两侧逐位一致,全程整数可复现。