<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gameart on PlumePHP</title><link>https://plumephp.com/categories/gameart/</link><description>Recent content in Gameart on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 17 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://plumephp.com/categories/gameart/index.xml" rel="self" type="application/rss+xml"/><item><title>《游戏美术与技术美术》卷三《风格与品类美术实战》目录</title><link>https://plumephp.com/art-style-toc/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-toc/</guid><description>《游戏美术与技术美术》卷三《风格与品类美术实战》目录：16 章 48 节，从风格的可测三维与风格距离矩阵，经像素风、2D 手绘、低多边形、NPR 卡通、写实 PBR、厚涂手绘、体素，到等距 2.5D、二次元、暗黑、清新、复古赛博与品类差异，最后用 6 个主题包跑同一份规范并给出风格距离矩阵。按章节提供仿真、逻辑内核与原型；完整项目的配置组装与交付验收仍在补齐。</description></item><item><title>1.1 三个可测维度：色彩 / 形状 / 细节</title><link>https://plumephp.com/art-style-01-1-three-measurable-dimensions/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-01-1-three-measurable-dimensions/</guid><description>风格能不能被量成几个数？本节把第一卷的五维风格向量拆回人话——色彩（明度中位数 / 饱和度均值 / 色相跨度）、形状（描边占比）、细节（细节密度）三个可测维度，并做一次消融对照：只用色彩三维时最近一对会掉到可区分下限以下，补上形状与细节才恢复，这正是「三个维度一个都不能少」的整数证据。</description></item><item><title>1.2 风格向量与风格距离矩阵</title><link>https://plumephp.com/art-style-01-2-style-vector-distance-matrix/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-01-2-style-vector-distance-matrix/</guid><description>1.1 给了六个主题的五维向量，本节把它铺成一张 6×6 的风格距离矩阵：用声明权重 [2,2,1,3,3] 的加权 L1 整数均值再 ×10，判据是下限 800。15 对全部高于下限，最近一对 lowpoly/cozy-clean 是 1002；摘要指纹与卷二 16.2 独立复算逐位相同，这就是「同源但可区分」。</description></item><item><title>1.3 风格选择与项目约束</title><link>https://plumephp.com/art-style-01-3-style-choice-project-constraint/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-01-3-style-choice-project-constraint/</guid><description>距离矩阵回答「哪两套最像」，但项目要选的是「最合约束的那套」。本节把风格选择写成一笔可算的账：四道硬门槛（对比度 / 可区分 / 细节上限 / 明度下限）先过滤，过关者再按与项目目标向量的加权 L1 距离排序，预算内取最近者。结果是 cozy-clean，拟合度 969，比第二名近 136。</description></item><item><title>10.1 色彩与线条规范</title><link>https://plumephp.com/art-style-10-1-color-line-spec/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-10-1-color-line-spec/</guid><description>二次元的「好看」几乎全在画师手上，但色彩与线条里仍有一半能写成整数：角色色的饱和度上限与明度下限、色阶带的档数与档间明度差、线宽区间，以及线色不许近似纯黑、不许近似中性灰、色相必须落在冷色带内。本节把这些落成一份 D 层规范与一段可跑的 TypeScript 校验器，并说清本章为什么只走 D+P+X。</description></item><item><title>10.2 角色比例与面部规范</title><link>https://plumephp.com/art-style-10-2-character-proportion-face-spec/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-10-2-character-proportion-face-spec/</guid><description>10.1 管的是颜色与线宽，这一节管结构：角色的头身比、头高与全身高、面部三条特征线（眼 / 鼻 / 嘴）在头部框内的相对位置、双眼加眼距占头宽的比例，全部是整数。本节把它们落成一份 D 层比例表与一段可跑的 TypeScript 校验器，头身比恒等式与面部顺序都会被断言。</description></item><item><title>10.3 X：画质</title><link>https://plumephp.com/art-style-10-3-x-image-quality/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-10-3-x-image-quality/</guid><description>前两节把二次元里能写成数据的部分写完了：色彩、线色、色阶带、头身比、面部特征线。剩下的那一半——画质——本机根本做不了。本节整节标 X，逐条说明它为什么不可复现，并把「不许给不可复现的东西编一个数字」写成一条会失败的门禁：声明表里只要出现一个测量值字段，测试立刻报错。</description></item><item><title>11.1 低饱和色彩分级</title><link>https://plumephp.com/art-style-11-1-low-saturation-color-grading/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-11-1-low-saturation-color-grading/</guid><description>暗黑与恐怖的第一步不是换色相，而是把整块调色板压饱和度。本节从 retro-cyber 的暗色档出发，用整数地板除做分级：灰值加权和加按等级往灰值收，算出每个 token 分级前后的饱和度千分比与四个等级的平均饱和度，并让 Python 与 TypeScript 各自复算、逐位对齐。</description></item><item><title>11.2 亮度分布与对比度</title><link>https://plumephp.com/art-style-11-2-luminance-distribution-contrast/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-11-2-luminance-distribution-contrast/</guid><description>暗色主题的调色板几乎全落在低亮度区，文字能不能读只剩对比度这一根拐杖。本节用与卷一 ch4 同源的 WCAG ×10 整数口径，算分级后 token 的相对亮度千分比、亮度分带直方图与相邻亮度阶梯的最小间隔，并从只读真源取对比度下限，逐对检查暗色调色板是否达标。</description></item><item><title>11.3 视觉噪声与可读性平衡</title><link>https://plumephp.com/art-style-11-3-visual-noise-readability-balance/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-11-3-visual-noise-readability-balance/</guid><description>暗色底上的高细节有两个相反的失败模式：太密就成了视觉噪声，太淡又会看不见。本节对《星屑旅店》的每个图标算两笔独立的整数账——噪声千分比（笔画数乘笔画宽乘笔画均长除以图标面积）与细节对比度是否达到下限，并证明裁剪笔画救不了对比度不足，两条账不能互相抵消。</description></item><item><title>12.1 高明度低饱和调色板</title><link>https://plumephp.com/art-style-12-1-high-luminance-low-saturation-palette/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-12-1-high-luminance-low-saturation-palette/</guid><description>清新治愈的「高明度低饱和」不是形容词，而是可校验的整数：背景族明度有下限、中性角色饱和度有上限、强调色有数量上限。本节把三条约束写进 cozy-clean 主题，用 Python 真跑候选色审计并生成色卡 PNG，再用 TypeScript 校验器与 Python 落盘的 JSON 对拍，证明两侧的整数类违例集合与摘要逐位一致。</description></item><item><title>12.2 圆角与柔和过渡规范</title><link>https://plumephp.com/art-style-12-2-rounded-soft-transition-spec/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-12-2-rounded-soft-transition-spec/</guid><description>清新治愈的形状语言同样可以整数化：圆角取阶梯且不超短边一半、柔边宽取阶梯、过渡带数必须整除柔边宽（每带等宽整数像素）、模糊半径取阶梯、柔和风格禁粗描边。本节用 Python 真跑六块 UI 资产的规范审计并生成圆角样本 PNG，再用 TypeScript 校验器与 Python 落盘的 JSON 对拍。</description></item><item><title>12.3 一致性维护</title><link>https://plumephp.com/art-style-12-3-consistency-maintenance/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-12-3-consistency-maintenance/</guid><description>规范一旦铺到多个场景，一致性就不再靠人记：每个场景的 8 个 token 都要与主题逐通道比较，任何一通道偏移都判漂移；同时复算每场景 5 对对比度的最小值，低于下限即判违例。本节用 Python 真跑四个场景的一致性审计，再用 TypeScript 校验器与 Python 落盘的 JSON 对拍，证明两侧的整数类违例集合与摘要逐位一致。</description></item><item><title>13.1 霓虹调色板与色彩分级</title><link>https://plumephp.com/art-style-13-1-neon-palette-color-grading/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-13-1-neon-palette-color-grading/</guid><description>复古 / 赛博的霓虹感是可校验的整数约束：发光色饱和度下限 500‰、地色亮度上限 250‰，把「暗底高饱和」与「亮底低饱和」分开；再算 5 对 WCAG ×10 对比度与整数色彩分级。实测 retro-cyber 零违例，cozy-clean 有 4 项违例，分级改色却改不动地色亮度上限。</description></item><item><title>13.2 发光与溢出规范</title><link>https://plumephp.com/art-style-13-2-glow-bloom-overflow-spec/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-13-2-glow-bloom-overflow-spec/</guid><description>霓虹的「发光」在命令行里只算参数与账：4 层光晕累计 1250‰ 被 1000‰ 截断，丢失 250‰；光晕外扩环占 cell 面积 410‰，低于 500‰ 上限，反解最大半径 7px；图集每格四周 padding 6px 后槽位从 256 掉到 169，装箱率 144‰ 升到 203‰。</description></item><item><title>13.3 主题切换与变体管理</title><link>https://plumephp.com/art-style-13-3-theme-switch-variant-management/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-13-3-theme-switch-variant-management/</guid><description>6 个主题包共用一套结构（8 个 token 名、5 对对比度、同一图集与预算），切换只换取值不换规则：逐变体重跑门禁，6 个主题全部 0 失败对，最紧一对 pixel 的 danger/surface 恰好 45 等于下限；切换成本 8/8，每 token 在 6 变体下都有 6 个互异取值。W 层主题切换器切 retro-cyber ↔ cozy-clean，断言调色板真变。</description></item><item><title>14.1 品类与美术预算的关系</title><link>https://plumephp.com/art-style-14-1-genre-art-budget-relation/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-14-1-genre-art-budget-relation/</guid><description>同一支团队做休闲和做重度，能出的资产量差一倍。本节把品类写成一笔可复算的整数账：四分品类（休闲/中度/重度/独立）各给一个迭代的团队规模与资产需求，产能口径与卷二 14.1 同源（有效系数 595‰），算出利用率 781/1058/1092/966‰ 与吞吐 134/120/85/95，并给出档位加权几何预算 52500~123000 面。</description></item><item><title>14.2 品类与视觉可读性</title><link>https://plumephp.com/art-style-14-2-genre-visual-readability/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-14-2-genre-visual-readability/</guid><description>可读性不是调色板的绝对属性，而是调色板与观看条件的匹配。本节把四品类的观看条件（屏幕、单次注视时长、同屏元素数）折成四道整数门槛，对 6 个主题包做 6×4=24 格判定：休闲只过 2 格、中度 3 格、独立 2 格、重度 6 格——同一份调色板，换个品类判定就不同。</description></item><item><title>14.3 跨品类复用与移植</title><link>https://plumephp.com/art-style-14-3-cross-genre-reuse-porting/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-14-3-cross-genre-reuse-porting/</guid><description>跨品类移植不是复制粘贴，而是一笔账。本节把复用分成参数级/贴图层/几何层/全新建四层，各给一个整数改造系数，对四条迁移路径算改造人天：节省率从 379‰（中度→重度，要动几何）到 603‰（降级精简，只改参数），并给出层级成本结构与两条口径陷阱。</description></item><item><title>15.1 规范实例化：6 主题包</title><link>https://plumephp.com/art-style-15-1-spec-instantiation-six-themes/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-15-1-spec-instantiation-six-themes/</guid><description>同一份规范结构在 6 个主题下各实例化一次：命名段、预算、8 个色彩 token、5 对对比度、图集与两个风格参数拼成完整 spec。同一套五道闸门的 validator 跑 6 遍，六次全过，实跑结果逐行给出，并与 TS 侧做跨语言 digest 对拍。</description></item><item><title>15.2 同源可区分：风格距离矩阵</title><link>https://plumephp.com/art-style-15-2-same-origin-distinguishable-distance-matrix/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-15-2-same-origin-distinguishable-distance-matrix/</guid><description>把「同源但可区分」量成一个整数：五维加权 L1 的整数均值再 ×10，判据是下限 800。15 对全部高于下限，最近一对 lowpoly/cozy-clean 是 1002，摘要指纹与卷一、卷二、卷三 1.2 独立复算逐位相同；B 层再扫阈值与权重，证明三个可测维度一个都不能少。</description></item><item><title>15.3 风格迁移的边界与代价</title><link>https://plumephp.com/art-style-15-3-style-transfer-boundary-cost/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-15-3-style-transfer-boundary-cost/</guid><description>六套主题同出一份规范，换主题时哪些字段能跟着走、哪些必须重写？判据只有一条：叶子字段在 6 个实例上是否逐位相同。14 个结构叶子可迁移、代价 0；10 个风格叶子不可迁移、必须重写。同项目换主题要触碰 21 个点，跨项目迁移涨到 35，B 层再扫主题数与角色数看这笔账对什么敏感。</description></item><item><title>16.1 跨风格验收清单</title><link>https://plumephp.com/art-style-16-1-cross-style-acceptance-checklist/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-16-1-cross-style-acceptance-checklist/</guid><description>把跨风格验收做成一张可跑的清单：8 项判据分 static 与 per-theme 两类，命名、token 数、对比度、图集装箱率、mip 字节、最近邻距离全写成整数比较。同一张清单在 6 个主题包上各跑一遍，48 项判定全过；TS 内核与 Python 逐位一致，四条负例都能真的报错。</description></item><item><title>16.2 三卷总收官：一份规范的完整回放</title><link>https://plumephp.com/art-style-16-2-three-volume-finale-spec-replay/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-16-2-three-volume-finale-spec-replay/</guid><description>三卷总收官：把卷一 ch16 的规范装配、卷二 ch16 的四道闸门、卷三 ch16 的 8 项验收清单串成一条链，在 6 个主题包上各跑一遍，6×(2+4+8)=84 项判定全过。再独立复算 6×6 距离矩阵，摘要命中跨卷锚点 fa04e9418d9f3c2c；B 层扫阈值证明下限 800 不能松。</description></item><item><title>16.3 交付物与后续</title><link>https://plumephp.com/art-style-16-3-deliverable-and-next/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-16-3-deliverable-and-next/</guid><description>三卷的交付物收尾：12 项分三类（spec-text / schema / runnable-artifact），本套三卷即全部，故状态必须全部 done。S 层校验完整性、P 层与 Python 逐位一致，W 层用一张可切主题的单文件看板把清单、矩阵与交付物总览画出来；再给出四条延伸阅读。</description></item><item><title>2.1 分辨率、像素密度与调色板上限</title><link>https://plumephp.com/art-style-02-1-resolution-pixel-density-palette-limit/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-02-1-resolution-pixel-density-palette-limit/</guid><description>像素风的显示档位与调色板上限全是整数账：逻辑分辨率 320×180 配整数缩放倍率与黑边余量、8 个色彩 token 加明暗 ramp 的调色板用量、5 对 WCAG 对比度 ×10。本节给出可跑的 S 层脚本与 TS 校验器，跨语言逐位一致。</description></item><item><title>2.2 调色板量化与抗锯齿替代</title><link>https://plumephp.com/art-style-02-2-palette-quantization-antialias-alternative/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-02-2-palette-quantization-antialias-alternative/</guid><description>像素风用整数色差账回答「量化亏多少」：16 级色阶条映射到最近调色板色记总误差，再找最优两色对做有序抖动，抖动把误差从 381 降到 141；抗锯齿会造出 36 色而抖动新色数为 0。附可跑的 S 层脚本与 TS 校验器，跨语言逐位一致，测试六条全绿。</description></item><item><title>2.3 像素 tile 与 tile 预算</title><link>https://plumephp.com/art-style-02-3-pixel-tile-budget/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-02-3-pixel-tile-budget/</guid><description>像素 tile 的预算也是整数账：场景 tile 网格 cols×rows、逻辑屏能铺几整格与边缘半格、tileset 字节 = 唯一 tile 数 × tileW × tileH × bpp、图集占用千分比。附可跑的 S 层脚本与 TS 校验器，跨语言逐位一致。</description></item><item><title>3.1 扁平色块与线宽规范</title><link>https://plumephp.com/art-style-03-1-flat-color-linewidth-spec/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-03-1-flat-color-linewidth-spec/</guid><description>2D 手绘最容易失控的不是画得漂不漂亮，而是线宽、圆角与色块数各画各的。本节把这三样写成可校验的整数规范：线宽阶梯、圆角上限、每类资产的色块数上限，并用同一份规范真生成色卡与线宽样本 PNG；再用 TypeScript 校验器与 Python 落盘的 JSON 对拍，证明两侧的整数类违例集合与摘要逐位一致。</description></item><item><title>3.2 手绘资产的切分与复用</title><link>https://plumephp.com/art-style-03-2-handdrawn-asset-split-reuse/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-03-2-handdrawn-asset-split-reuse/</guid><description>手绘资产该拆成几个切分件、拆完有没有人复用，是两笔能算清的账。本节把「切分件数、复用率、单件重绘成本」写成整数模型：用 Python 算复用率与节省成本，用 TypeScript 复算并对拍，再用「只被用一次的件」这个信号抓出切分过度——拆了一堆没人复用的件，账面上看得见。</description></item><item><title>3.3 X：画质与笔触</title><link>https://plumephp.com/art-style-03-3-x-image-quality-brushwork/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-03-3-x-image-quality-brushwork/</guid><description>「画得好不好」没有可跑的数字，硬凑一个笔触指标比不写更危险。本节整节标 X：把 2D 手绘的画质与笔触显式划出可命令行复现的范围，只保留能静态校验的东西——笔刷参数声明表的结构、范围与诚实性。真实笔触质量需真实画师与真实环境，命令行不可复现；本节给出的是「不许过度承诺」的门禁，不是画质评分。</description></item><item><title>4.1 面数与顶点预算</title><link>https://plumephp.com/art-style-04-1-polygon-vertex-budget/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-04-1-polygon-vertex-budget/</guid><description>低多边形的面数预算好算，顶点预算却常被算错：平面着色要求每个面独立顶点，上传顶点数不是共享顶点数，而是面数的 3 倍。本节把《星屑旅店》lowpoly 主题的一屏 12 件家具算成两套账——面数 1200 过线、平面着色顶点 3600 爆线、索引共享 633 过线，并给出字节倍数与跨语言 digest。</description></item><item><title>4.2 平面着色与色块划分</title><link>https://plumephp.com/art-style-04-2-flat-shading-color-block/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-04-2-flat-shading-color-block/</guid><description>平面着色给每个面一个平色，色块划分就是决定这个面该归哪一档亮度。本节把一块 12 面 lowpoly 宝石按整数 shadeLevel 分成 4 个色块，算出每档面数与最大色块占比 416‰，用 PIL 按同一份 palette 真生成平面色样本 PNG，并给出跨语言 digest 与色块超预算的负例。</description></item><item><title>4.3 低多边形的引擎接入约束</title><link>https://plumephp.com/art-style-04-3-lowpoly-engine-integration-constraint/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-04-3-lowpoly-engine-integration-constraint/</guid><description>低多边形要进引擎，先过三道约束：顶点属性步长、材质槽数与顶点色。本节把《星屑旅店》一屏 12 件家具的四种顶点布局算成字节账，用顶点色把材质槽从 19 降到 12、清掉 counter 与 bed 两个超槽资产，并给出每顶点 4 字节的代价与跨语言 digest。</description></item><item><title>5.1 色阶带与描边参数</title><link>https://plumephp.com/art-style-05-1-ramp-band-outline-param/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-05-1-ramp-band-outline-param/</guid><description>NPR 卡通渲染把连续光照量化成几段色阶带、把轮廓画成一条描边。本节只做这两个参数的规范与整数账：四组色阶带变体的边界怎么定、为什么四组宽度都恰好和为 1000，描边宽度的千分比在四个高度下如何用整数上取整算出像素数，并用 PIL 依同一份参数真生成色阶带样本图。真实渲染观感标 X。</description></item><item><title>5.2 光照分层的视觉规范</title><link>https://plumephp.com/art-style-05-2-lighting-tier-visual-spec/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-05-2-lighting-tier-visual-spec/</guid><description>上一节把光照量化成色阶带，本节把光照拆成一层层：基础色、阴影、主光、边缘光、高光。每层一个整数参数，档位越高层越多。光照模型与后处理实现外链站内渲染原理专题，本节只做参数表与整数账——每层着色结果怎么算、为什么「阴影最暗、高光最亮」必须写成一条会失败的判据。真实渲染观感标 X。</description></item><item><title>5.3 X：真实渲染外链</title><link>https://plumephp.com/art-style-05-3-x-real-rendering-external-link/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-05-3-x-real-rendering-external-link/</guid><description>本章前两节算的都是参数与整数账，但 NPR 里有一整块本机算不了：真渲染一帧。本节专门做划界——把 NPR 相关主题分成「本书讲参数与账」「站内别处讲原理（外链）」「本机根本做不了（X）」三类，写成一张可校验的归属表，并把真渲染、真调参逐处标 X 与显式注明「需真实环境，命令行不可复现」。</description></item><item><title>6.1 贴图通道与打包</title><link>https://plumephp.com/art-style-06-1-texture-channel-packing/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-06-1-texture-channel-packing/</guid><description>写实 PBR 一个材质动辄五张贴图，通道打包是把它压回来的第一招。本节把「三张单通道贴图塞进一张 ORM」算成整数字节账，结论反直觉：未压缩时打包反而更大，压缩后打包省到三分之一；再用 PIL 真生成一张通道打包示意 PNG 并回读验证三通道与原图逐点相等。</description></item><item><title>6.2 材质分区与细节层级</title><link>https://plumephp.com/art-style-06-2-material-partition-detail-tier/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-06-2-material-partition-detail-tier/</guid><description>上一节把五张贴图压成三张，本节解决另一半问题：一个道具组到底该切几张材质。把「物理材质分区 × 细节层级」写成 D 层规格，再按每 slot 的分辨率与贴图集算出整链字节，逐位对账：细节密度均值、高细节层字节集中度、按分区合并后的槽位与字节降幅，并让超预算的槽位在账上直接报 OVER。</description></item><item><title>6.3 写实的性能代价</title><link>https://plumephp.com/art-style-06-3-realism-performance-cost/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-06-3-realism-performance-cost/</guid><description>前两节把贴图和材质都算成了字节，本节把「写实」相对扁平着色的代价算成一张整数账：常驻贴图数、显存字节、每像素采样数、着色器变体数、材质槽数五条可数轴，各算写实/基线的整数比值再加权成代价指数，并给出从朴素写实到逐项缓解的阶梯。真实帧时间与 GPU 占用属 X，命令行不可复现，本节只划界不伪造。</description></item><item><title>7.1 笔刷与色域参数规范</title><link>https://plumephp.com/art-style-07-1-brush-gamut-param-spec/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-07-1-brush-gamut-param-spec/</guid><description>风格化厚涂既没有可导出的模型，也没有可渲染的着色器，能写进规范的只有两样：笔刷参数与色域。本节把两者落成一份 D 层 JSON 规范与一段可跑的 TypeScript 校验器——笔刷的尺寸、间距与图层不透明度带，色域的饱和度上限、明度下限与色相带，全部是整数，并说清为什么这一章只走 D+P+X 而不硬凑一个 S 层。</description></item><item><title>7.2 手绘贴图的分层与复用</title><link>https://plumephp.com/art-style-07-2-handpainted-texture-layering-reuse/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-07-2-handpainted-texture-layering-reuse/</guid><description>厚涂最贵的不是笔刷，是「每个资产都从头画一遍」。本节把手绘贴图拆成图层角色与贴图页，落成一份 D 层清单与一段可跑的 TypeScript 校验器：图层角色序列必须与模板逐位一致，每个资产用到的贴图页数有上限，两级复用率是整数千分比——地板除，跨语言逐位一致。</description></item><item><title>7.3 X：笔触质量</title><link>https://plumephp.com/art-style-07-3-x-stroke-quality/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-07-3-x-stroke-quality/</guid><description>前两节把厚涂里能写成数据的部分写完了：笔刷参数、色域、分层与复用。剩下的那一半——笔触质量——本机根本做不了。本节整节标 X，逐条说明它为什么不可复现，并把「不许给不可复现的东西编一个数字」写成一条会失败的门禁：声明表里只要出现一个测量值字段，测试立刻报错。</description></item><item><title>8.1 体素网格与体素账</title><link>https://plumephp.com/art-style-08-1-voxel-grid-account/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-08-1-voxel-grid-account/</guid><description>体素风格看起来只是「把东西做成方块」，落到规范上却是一笔干净的整数账：格子里有多少体素、包围盒多大、多少个面被相邻体素挡掉、多少格完全埋在内部。本节把《星屑旅店》的体素灯具用 8 个轴对齐盒描述，光栅化成网格，算体素数、包围盒、暴露面与剔除面，并让 Python 与 TypeScript 各自独立复算、逐位对齐。</description></item><item><title>8.2 体素调色板与光照简化</title><link>https://plumephp.com/art-style-08-2-voxel-palette-lighting-simplification/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-08-2-voxel-palette-lighting-simplification/</guid><description>体素美术通常不做实时求值光照，而是把每个面朝向的亮度烘成固定档位。于是最终颜色数 = 基础色数 × 档位数——这条乘法就是调色板上限的账。本节用《星屑旅店》的体素灯具算这笔账：6 个面朝向直接着色会得到 18 色、越过 16 色上限，折叠成 4 个档位后回到 12 色，并让 Python 与 TypeScript 各自独立复算、逐位对齐。</description></item><item><title>8.3 体素的引擎接入</title><link>https://plumephp.com/art-style-08-3-voxel-engine-integration/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-08-3-voxel-engine-integration/</guid><description>引擎不吃体素，吃三角网格，所以体素美术的最后一关是「体素 → 网格」的转换账。本节用《星屑旅店》的体素灯具算两种路线：朴素路线每个暴露面出 1 个四边形（476 三角），贪心合并把同朝向同色共面的相邻面并成矩形（60 三角），合并率 873 千分比；再与三角预算和材质槽预算对账。</description></item><item><title>9.1 等距投影的整数变换</title><link>https://plumephp.com/art-style-09-1-isometric-projection-integer-transform/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-09-1-isometric-projection-integer-transform/</guid><description>等距（2.5D）是一套跨主题的投影，不是主题包：tile 宽高定死之后，cozy-clean 与 voxel 的屏幕坐标逐位相同。本节用与卷一 [16.2 双案例回放：《星屑旅店》6 主题的规范装配] 同源的整数变换，算《星屑旅店》8×8 地板的正变换、逆变换回程、包围盒与菱形填充率，并证明投影与主题正交。</description></item><item><title>9.2 等距 tile 与遮挡规则</title><link>https://plumephp.com/art-style-09-2-isometric-tile-occlusion-rule/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-09-2-isometric-tile-occlusion-rule/</guid><description>等距板只要有两格以上高度，就会出现遮挡。本节把绘制顺序与遮挡深度都写成整数规则：按 (tx+ty, tx) 升序落笔，深度数同屏幕列 (tx-ty) 上位于本格前方、blockHeight ≥ 1 的地块数，超过 cap 判越界；再用单文件 HTML 看板并排画两套主题，Playwright 断言整数账与 Python 逐位一致。</description></item><item><title>9.3 等距资产的制作约束</title><link>https://plumephp.com/art-style-09-3-isometric-asset-production-constraint/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-09-3-isometric-asset-production-constraint/</guid><description>等距资产不能随便画尺寸：底菱要落在半行网格上、宽度要偶数才能整数居中、锚点必须是底菱中心、单件还得装进图集格。本节把 C1–C6 这 6 条约束写成整数判据，对《星屑旅店》的 6 件等距资产逐件过账，让灯具半行不对齐、雨棚超格超宽这三条真实违例当场现形。</description></item><item><title>附录 A：风格参数表、量化规则与数据集索引</title><link>https://plumephp.com/art-style-appendix-a/</link><pubDate>Tue, 13 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/art-style-appendix-a/</guid><description>《游戏美术与技术美术》卷三《风格与品类美术实战》附录：全卷风格参数与公式索引、st&lt;章号&gt;_ 工具链命名约定、六层可运行性口径与逐层复现命令，并给出可跑的 S 层清点脚本与 P 层索引校验内核，两者对同一份工作区算出的清单与摘要逐位一致，并附一键复现与排错顺序。</description></item><item><title>《游戏美术与技术美术》卷二《技术美术与管线工程》目录</title><link>https://plumephp.com/art-ta-toc/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-toc/</guid><description>《游戏美术与技术美术》卷二《技术美术与管线工程》目录：16 章 48 节，从 TA 的能力模型与资产管线四阶段，经导入校验、依赖图环检测、图集与材质参数、LOD 与骨骼预算、动画与 UI 规范、清单与门禁规则引擎，到中台、产能排期、外包成本核算，最后收口到一条可回放的 10 阶段管线。按章节提供仿真、逻辑内核与原型；完整项目的配置组装与交付验收仍在补齐。</description></item><item><title>1.1 技术美术的三类工作：工具、管线、性能</title><link>https://plumephp.com/art-ta-01-1-ta-three-kinds-work/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-01-1-ta-three-kinds-work/</guid><description>技术美术常被当成「会写脚本的美术」或「懂美术的程序」，两种说法都没说清 TA 到底交付什么。本节把 TA 的工作拆成工具、管线、性能三类，落成一份有序归属规则表与一份投入账：为什么「性能分析工具」必须判成性能类，为什么千分比与回本轮数只能用整数地板除，以及一条可跑的 TypeScript 路由器如何与 Python 侧逐位对齐。</description></item><item><title>1.2 能力矩阵与产出物</title><link>https://plumephp.com/art-ta-01-2-capability-matrix-deliverables/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-01-2-capability-matrix-deliverables/</guid><description>把「TA 要会什么」写成一份带权重的能力矩阵，是本节的全部工作。难点不在列清单，而在怎么算「够不够」：平均分够不等于达标，只要有一项低于职级要求，这一项就整块不计入加权覆盖率。本节给出一份可断言的 TypeScript 能力矩阵内核与两条负例，并与 Python 侧逐位对齐。</description></item><item><title>1.3 TA 与美术、程序、策划的接口</title><link>https://plumephp.com/art-ta-01-3-ta-interface-art-program-design/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-01-3-ta-interface-art-program-design/</guid><description>「TA 要跟所有人沟通」是一句无法验收的话。本节把 TA 与美术、程序、策划之间的往返写成一份接口矩阵：每条接口有发起方、接收方、交付物、触发频率、门禁分级与失败模式，并给出一个可断言的 TypeScript 校验器与两条负例，把「接口」从散文变成能跑的判据。</description></item><item><title>10.1 安全区与刘海屏适配</title><link>https://plumephp.com/art-ta-10-1-safearea-notch-adaptation/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-10-1-safearea-notch-adaptation/</guid><description>同一套 HUD 要在刘海屏、挖孔屏、平板与折叠屏上都躲开遮挡。本节把安全区做成整数几何：屏幕减四边 inset 得安全矩形，元件按千分比锚点走整数地板除放进可用框，再用 AABB 相交对刘海做兜底，Python、TS 与浏览器看板三处逐位一致。</description></item><item><title>10.2 多分辨率资源分级</title><link>https://plumephp.com/art-ta-10-2-multi-resolution-asset-tier/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-10-2-multi-resolution-asset-tier/</guid><description>同一套 UI 图集要发到 720p 手机、平板和 4K 桌面，全档打包会白白多背几十 MB。本节把分级做成整数账：由屏幕与设计基准算缩放千分比，选最小且不小于它的档位，按档位比例算图集字节，再对照全档打包与按需打包的差额，Python、TS 与浏览器看板三处逐位一致。</description></item><item><title>10.3 UI 合批与性能</title><link>https://plumephp.com/art-ta-10-3-ui-batching-performance/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-10-3-ui-batching-performance/</guid><description>20 个 UI 元件按作者顺序摆出来要 12 个 draw call，超出 10 的预算；按图集与裁剪域稳定排序后降到 7 个。本节把合批做成可归因的整数账：相邻元件同图集同裁剪域才并批，断开按 atlas 优先于 clip 归因，Python、TS 与浏览器看板三处逐位一致。</description></item><item><title>11.1 清单与差异计算</title><link>https://plumephp.com/art-ta-11-1-manifest-diff-computation/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-11-1-manifest-diff-computation/</guid><description>热更新要下多少字节，取决于两份清单差在哪。本节把客户端已发布的 base 清单与目标 target 清单按 id 求并集，用 hash 判成 added/removed/changed/unchanged 四类，S 层 Python 与 P 层 TS 两侧的差异清单与 digest 逐位一致：并集 14、要下载 7 个资产共 230400 字节、下载占比 812‰。</description></item><item><title>11.2 增量更新与回滚</title><link>https://plumephp.com/art-ta-11-2-incremental-update-rollback/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-11-2-incremental-update-rollback/</guid><description>差异只说明「差在哪」，还要变成「怎么下、出错怎么退」。本节把 11.1 的 added+changed 按 id 贪心装批，单批不超 65536 字节、超预算资产独占一批：7 个资产装成 4 批，最大批 131072 字节；回滚是反向差异，用纯函数断言 apply(base, forward)==target 且 apply(target, rollback)==base。</description></item><item><title>11.3 版本一致性与缓存失效</title><link>https://plumephp.com/art-ta-11-3-version-consistency-cache-invalidation/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-11-3-version-consistency-cache-invalidation/</guid><description>更新完之后，客户端缓存里哪些该丢、哪些能留？本节用两条整数判据回答：hash 变则 version 必须增（否则 stale）、hash 不变则 version 不应增（否则 wasteful）；缓存以内容 hash 为键时只有 changed 失效。样本里 stale 1 / wasteful 1，两种键法命中率都是 461‰，但 path:version 键会喂陈旧内容。</description></item><item><title>12.1 规则引擎：命名/尺寸/引用/预算</title><link>https://plumephp.com/art-ta-12-1-rule-engine-naming-size-ref-budget/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-12-1-rule-engine-naming-size-ref-budget/</guid><description>前面各章的判据各自能跑，却没有一次检查能同时拦住命名、引用与预算。本节把第 3 章的命名文法、第 4 章的建图与环检测、第 5 章的 mip 字节账收进一台规则引擎，用一份 15 个资产的样本跑出 7 条 finding，其中 5 条硬失败即判门禁阻断，并给出跨语言逐位一致的 digest。</description></item><item><title>12.2 门禁的分级与阻断策略</title><link>https://plumephp.com/art-ta-12-2-gate-grading-blocking-policy/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-12-2-gate-grading-blocking-policy/</guid><description>同一份 7 条 finding 的清单，喂给三种阻断策略会得到三种结论：strict 全拦、ratchet 只拦新引入的、quota 因 warn 超配额拦。本节把策略抽成配置，用同一份清单跑出三种门禁结论，并用两条负例证明门禁不是恒返回 pass 的空壳——删掉 baseline 一条必须拦、把 warn 移出 blockOn 必须放。</description></item><item><title>12.3 误报与白名单治理</title><link>https://plumephp.com/art-ta-12-3-false-positive-whitelist-governance/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-12-3-false-positive-whitelist-governance/</guid><description>门禁一定会误报，白名单就是给经过判断的例外开的口子；但它一旦没有纪律就会烂成垃圾场。本节把白名单当成要检查的对象：4 条登记先过五道治理关（重复/级别不可压制/缺理由/缺负责人/过期），只有 2 条生效、压掉 2 条 warn，而 block 级硬失败永远压不住，门禁压完仍是 block。</description></item><item><title>13.1 中台要解决什么问题</title><link>https://plumephp.com/art-ta-13-1-what-platform-team-solves/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-13-1-what-platform-team-solves/</guid><description>「受影响项目多」不等于「该中台化」。本节把中台判据写成一笔整数账：年节省人天×100、回本月数×100、是否值得做，除法一律地板除；再用两条负例证明单轴判定会误收只影响一个项目的问题。TS 侧独立复算 Python 落盘的 JSON，整数逐位一致，digest 对拍。</description></item><item><title>13.2 工具链的分层与复用</title><link>https://plumephp.com/art-ta-13-2-toolchain-layering-reuse/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-13-2-toolchain-layering-reuse/</guid><description>工具链最大的隐性债是分层被悄悄破坏：低层反向依赖高层、同层互相耦合、单消费方的工具被塞进共享层。本节把依赖方向与复用判据写成可断言的整数账，并用负例证明环检测会放行反向依赖——分层判据必须是「单向向下」而不是「无环」，共享收益也按消费方数逐位算，过共享的工具必须下沉回本地。</description></item><item><title>13.3 工具的采纳率与维护成本</title><link>https://plumephp.com/art-ta-13-3-tool-adoption-maintenance-cost/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-13-3-tool-adoption-maintenance-cost/</guid><description>采纳率和维护成本最容易被写成口号。本节把它们变成可算的整数账：采纳率 = 活跃用户×1000 // 目标用户，节省人天×100 = 活跃用户×次数×分钟×100 // 一人天分钟数，工具有效率 = 节省人天×100×1000 // 维护人天×100，两轴各带下限落在四象限里，给出 promote / keep / observe / retire 四类决策，并用负例证明只看一个轴一定会误砍。</description></item><item><title>14.1 产能度量：人天与吞吐</title><link>https://plumephp.com/art-ta-14-1-capacity-person-day-throughput/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-14-1-capacity-person-day-throughput/</guid><description>产能账要能被复算，先得把「人天」拆成日历人天与有效人天。本节用《星屑旅店》一支示例团队，把出勤率、专注率、角色产能与资产需求写成全整数的人天×100 账，算出利用率 1058‰、吞吐 1.20 资产/人天，并说明为什么日历人天会让计划看起来比实际宽松。</description></item><item><title>14.2 排期与美术依赖</title><link>https://plumephp.com/art-ta-14-2-schedule-art-dependency/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-14-2-schedule-art-dependency/</guid><description>排期不是画一张甘特图，而是在依赖 DAG 上算关键路径。本节用《星屑旅店》九个美术任务的依赖图，算出最早开始、最晚结束与浮动时间（全整数），S 层 Python 与 P 层 TS 内核的 digest 逐位一致，并用三个负例证明检测器会拦下环、悬空依赖与紧截止导致的负浮动。</description></item><item><title>14.3 工业化与质量的一致性</title><link>https://plumephp.com/art-ta-14-3-industrialization-quality-consistency/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-14-3-industrialization-quality-consistency/</guid><description>工业化不是一次做到合格，而是每一批都合格。本节用《星屑旅店》16 个资产的实测记录，把命名、网格、线宽、色板四个维度的合规率算成整数千分比，得到一致性指数 890‰，并把同批按小组拆开算出跨批漂移 94‰；返工的 5.60 人天正好吃掉 14.1 有效产能的 156‰。</description></item><item><title>15.1 外包切分与计价模型</title><link>https://plumephp.com/art-ta-15-1-outsourcing-split-pricing-model/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-15-1-outsourcing-split-pricing-model/</guid><description>外包的第一件事不是找供应商，而是把工作切成「可独立验收、可独立计价」的包。本节用一份示例配置，把按件、按人天、里程碑分期、阶梯单价四种公开可观察的计价结构写成全整数模型，S 层 Python 算账、P 层 TS 复算，两侧 digest 逐位一致；所有单价与人天均为本套构造的示例参数，与真实报价无关。</description></item><item><title>15.2 成本结构与超支归因</title><link>https://plumephp.com/art-ta-15-2-cost-structure-overrun-attribution/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-15-2-cost-structure-overrun-attribution/</guid><description>15.1 算出的基线是「报价时的数」，结算是「实际花掉的数」，两者之差就是超支。本节把成本拆成基线 + 变更 + 超计划返工 + 管理分摊四个加项，再把超支分解到三个可归因桶，S 层 Python 与 P 层 TS 各自复算且 digest 逐位一致；所有数字均为本套构造的示例参数。</description></item><item><title>15.3 供应商验收与质量门</title><link>https://plumephp.com/art-ta-15-3-vendor-acceptance-quality-gate/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-15-3-vendor-acceptance-quality-gate/</guid><description>验收不是「看一眼觉得行」，而是一台可执行的门：每条规则给一个阈值，每件交付物给一组测量值，逐项判定后落到 pass / conditional / reject 三级，再按包聚合成验收率与批次门禁。本节用一份示例规则表跑 8 件交付物，S 层 Python 与 P 层 TS 各自复算且 digest 逐位一致。</description></item><item><title>16.1 管线装配与检查表</title><link>https://plumephp.com/art-ta-16-1-pipeline-assembly-checklist/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-16-1-pipeline-assembly-checklist/</guid><description>前十五章各写了一段管线，却没人说清谁先谁后、谁的输出喂给谁。本节把它们串成一条有向链，给出一张能跑的装配检查表：每个阶段标注它由本卷哪一节提供可跑脚本与档位，再用一份 S 层脚本与 P 层 TS 内核做四类对账——出处节是否真实、链路是否首尾相接、阶段号是否连续、首尾类型是否匹配。</description></item><item><title>16.2 双案例回放：6 主题走同一条管线</title><link>https://plumephp.com/art-ta-16-2-six-theme-same-pipeline/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-16-2-six-theme-same-pipeline/</guid><description>16.1 把管线串成一条链，但那条链只在默认主题上验过。本节做回放：同一份 visual_spec.json 换 6 个主题包，跑同一套四道闸门的管线 6 遍，六次全过；再算 6×6 风格距离矩阵（整数 ×10）证明「同源但可区分」，并复述跨语言纪律：整数逐位一致、色彩派生量容差内一致。</description></item><item><title>16.3 交付物与卷三衔接</title><link>https://plumephp.com/art-ta-16-3-deliverable-handoff-volume3/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-16-3-deliverable-handoff-volume3/</guid><description>16.2 证明了一条链能被同一套判据反复跑，但「跑得通」不等于「交得出去」。本节给卷二收尾：把全卷产出列成一张交付物清单，点名哪几批交给卷三《风格与品类美术实战》，并用一段 S 层脚本与一份 P 层 TS 内核校验清单完整性——字段齐全、kind/status 合法、id 唯一、接手目标存在且已 done。</description></item><item><title>2.1 资产管线四阶段：DCC → 导出 → 导入 → 运行时</title><link>https://plumephp.com/art-ta-02-1-dcc-export-import-runtime/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-02-1-dcc-export-import-runtime/</guid><description>资产从画师手里走到屏幕上要穿过四个阶段：DCC 制作、导出、导入、运行时。本节讲清每个阶段谁负责、产出什么、边界上要交接哪些字段，再用一份可跑的整数账把同一批《星屑旅店》资产在四阶段的顶点数与字节量算出来：顶点因 UV 缝与硬边膨胀多少千分比，运行时字节为什么几乎全由纹理决定。</description></item><item><title>2.2 导出设置：单位、轴向与坐标系对齐</title><link>https://plumephp.com/art-ta-02-2-export-unit-axis-alignment/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-02-2-export-unit-axis-alignment/</guid><description>单位和轴向看着只是导出面板上的两个下拉框，写错了就是落地灯十七米高、角色躺在地上。本节把单位换算、Y-up/Z-up 轴向置换、左手系/右手系镜像拆成三个正交问题，用一份可跑的整数账算出六种 DCC 约定各自的置换矩阵、行列式与镜像标志，并给出厘米→米与坐标置换的对齐结果。</description></item><item><title>2.3 X 范式：真实 DCC 不可复现</title><link>https://plumephp.com/art-ta-02-3-dcc-not-reproducible-x/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-02-3-dcc-not-reproducible-x/</guid><description>本机没有任何 DCC，真打开、真导出、真渲染都不可能复现——但「不可复现」不该是留白。本节把这件事写成方法：用一份导出清单承载真环境的声明值，用 schema 静态校验管结构与跨字段一致性，用数值对齐账把声明值与管线账预测值逐条对上，并把「无 DCC 环境不得声明可命令行复现」编码成一条会失败的门禁。</description></item><item><title>3.1 导入设置与 .meta 语义</title><link>https://plumephp.com/art-ta-03-1-import-settings-meta-semantics/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-03-1-import-settings-meta-semantics/</guid><description>导入是美术管线上的第一道闸门，而闸门的判据几乎全在侧车文件 .meta 里。本节给出一条可判定的判据——删掉后无法从源文件字节重算出来的才是契约字段，其余都是派生冗余——再用一份真跑的 Python 审计脚本与 TS 内核，在 9 条《星屑旅店》导入记录上报出 2 处契约缺失与 5 处派生漂移，两侧问题集合逐位一致。</description></item><item><title>3.2 导入期校验：尺寸、格式、命名</title><link>https://plumephp.com/art-ta-03-2-import-time-validation/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-03-2-import-time-validation/</guid><description>上一节判的是「字段对不对」，这一节判「值合不合规」。尺寸、格式、命名三类判据被写成一张全整数与字符串的规则表，再用一份真跑的 Python 规则引擎与 TS 内核在 9 条导入记录上跑出 8 条违例，八个规则码各命中一次；两侧违例集合逐位一致，且每条规则都配了一条能触发的负例。</description></item><item><title>3.3 导入失败分级与修复</title><link>https://plumephp.com/art-ta-03-3-import-failure-grading-fix/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-03-3-import-failure-grading-fix/</guid><description>前两节各报了 8 条问题，本节把它们合成一份分级清单：按一张可判定的映射表，每个规则码落到 block / warn / info 三级，并给出修复动作与能否自动修。16 条问题判成 block 3 / warn 11 / info 2，3 条 block 落在 2 条记录上，门禁直接判阻断；分级表未覆盖的规则码一律判失败。</description></item><item><title>4.1 依赖图：显式引用与隐式引用</title><link>https://plumephp.com/art-ta-04-1-dependency-graph-explicit-implicit/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-04-1-dependency-graph-explicit-implicit/</guid><description>管线打包前必须先知道谁引用谁。本节把清单里显式的 dependsOn 与三类隐式边（命名约定、目录归属、材质槽）合成一张有向图，用 S 层 Python 建图并分类计数、P 层 TS 内核复算，两侧边集合 digest 逐位一致，并说明隐式边为什么是管线里最容易漏的一环。</description></item><item><title>4.2 环检测与悬空引用</title><link>https://plumephp.com/art-ta-04-2-cycle-detection-dangling-ref/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-04-2-cycle-detection-dangling-ref/</guid><description>环意味着没有任何资产能先打包，增量构建会死循环；悬空引用则指向不存在的节点。本节用 DFS 三色标记（白/灰/黑）找环、逐边判悬空引用，并把环路径旋转到字典序最小节点做规范化，让环集合跨语言逐位一致。最后给出人为造环的负例断言：干净图不报、环图必报，证明检测器真的会 fail 而不是空转。</description></item><item><title>4.3 资源清理与不可达资产</title><link>https://plumephp.com/art-ta-04-3-unreachable-asset-cleanup/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-04-3-unreachable-asset-cleanup/</guid><description>从场景入口沿依赖边做前向可达，可达集之外的资产就是不可达资产，也是候选删除清单。本节用 S 层 Python 与 P 层 TS 各自算一遍可达集，断言删除不可达资产后入口仍可达、可达集逐位不变；最后讨论不可达不等于可删的三条边界，避免清理误伤预留资产、动态引用与热更分包。</description></item><item><title>5.1 装箱算法与装箱率</title><link>https://plumephp.com/art-ta-05-1-packing-algorithm-ratio/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-05-1-packing-algorithm-ratio/</guid><description>图集装箱是整数题，更是确定性题：同一批输入必须产出同一张布局。本节用《星屑旅店》的 31 个混合尺寸矩形，对比 shelf（货架）与 skyline（天际线）两种确定性装箱在 512/1024/2048 三档的装箱率，并用布局摘要 digest 把可复现性锁死，S 层与 P 层逐位一致。</description></item><item><title>5.2 mip 链与压缩格式字节账</title><link>https://plumephp.com/art-ta-05-2-mip-compression-byte-account/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-05-2-mip-compression-byte-account/</guid><description>mip 链的字节账是整数题：第 i 级尺寸是 ceil(w/2^i)×ceil(h/2^i)，未压缩按 bpp 逐级累加并按 4 字节对齐，块压缩按块向上取整。本节复现共享真源基线 5592404，给出四张纹理 × 八种格式的整数字节账与有效位深，压缩原理外链 graphics 专题。</description></item><item><title>5.3 图集变更的传播与回归</title><link>https://plumephp.com/art-ta-05-3-atlas-change-propagation-regression/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-05-3-atlas-change-propagation-regression/</guid><description>图集重打包后，UV 变了的区域会牵动所有引用它的 sprite、material 与 screen。本节把这份引用关系建成有向图，从变更 rect 沿反向边做 BFS，输出受影响资产清单与需要重跑的回归套件，并让同一份传播逻辑在 Python 与 TS 内核两处逐位一致。</description></item><item><title>6.1 材质参数表与默认值</title><link>https://plumephp.com/art-ta-06-1-material-param-table-default/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-06-1-material-param-table-default/</guid><description>材质参数表不是美术的内部草稿，而是美术与程序之间的契约：每个参数都要写明类型、取值范围、单位、默认值与是否暴露给美术。本节用《星屑旅店》三套材质做一份可跑的表校验，并让「默认值被改动」这件事在构建期就被摘要检测到，S 层与 P 层结果逐位一致。</description></item><item><title>6.2 参数对齐与打包</title><link>https://plumephp.com/art-ta-06-2-param-alignment-packing/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-06-2-param-alignment-packing/</guid><description>参数对齐不是玄学：一个常量寄存器是 16 字节 = float4，参数必须整块落在某个寄存器内、不许跨边界，放不下就顺延、余量作废。本节用《星屑旅店》的 10 个参数把「按逻辑顺序声明」与「按寄存器边界重排」各算一遍，给出可复现的整数账——naive 占 5 个寄存器、packed 占 4 个，S 层与 P 层逐位一致。</description></item><item><title>6.3 划界：编译与渲染原理外链</title><link>https://plumephp.com/art-ta-06-3-scope-boundary-external-link/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-06-3-scope-boundary-external-link/</guid><description>本节不是内容而是边界：第 6 章只讲参数表与默认值、参数对齐与打包，着色器编译、变体爆炸、渲染管线原理一律外链给 graphics 专题。把「什么归本章讲」编码成一张可断言的路由表——external 规则在前、this-book 在后，首个命中胜出；三条外链路径两两不同、全部在 public/ 产物中存在，越界与漏网都被断言挡住。</description></item><item><title>7.1 LOD 分级与误差指标</title><link>https://plumephp.com/art-ta-07-1-lod-tier-error-metric/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-07-1-lod-tier-error-metric/</guid><description>LOD 不是「离远了换低模」一句话，而是一张分级表加一个能算的误差指标。本节把家具轮廓归一化到规范轮廓，用整数 shoelace 逐级算面积损失千分比，给出 4 级 LOD 链的误差账，并由 P 层 TS 内核复算，两侧逐位一致，全程整数可复现。</description></item><item><title>7.2 屏幕占比与三角预算</title><link>https://plumephp.com/art-ta-07-2-screen-ratio-triangle-budget/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-07-2-screen-ratio-triangle-budget/</guid><description>屏幕占比是一屏三角预算的分配依据。本节用整数针孔相机把距离换算成占比千分比，按阈值表逐实例选级，把一屏 12 件家具的三角数合计到 1072，与 1200 的帧预算对账；并算出「全部拉到 LOD0」的最坏视角会爆到 3024，说明预算必须按最坏视角算。</description></item><item><title>7.3 LOD 切换的视觉跳变</title><link>https://plumephp.com/art-ta-07-3-lod-switch-visual-popping/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-07-3-lod-switch-visual-popping/</guid><description>LOD 切换那一帧的跳变不是玄学。同一段相机轨迹下，单阈值选级在阈值附近抖了 17 次，双阈值迟滞只切 1 次；相邻级的误差跳变里，LOD2 到 LOD3 的 75 千分比超过 60 的上限，被门禁判违例。本节把「切几次」与「跳多大」都变成整数账。</description></item><item><title>8.1 骨骼数与调色板上限</title><link>https://plumephp.com/art-ta-08-1-bone-count-palette-limit/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-08-1-bone-count-palette-limit/</guid><description>调色板是「一次绘制能送进顶点着色器的骨骼矩阵集合」。本节把它的上限从 uniform vec4 预算推导成整数公式，再逐个角色核对两条独立约束：档位骨骼预算与调色板上限。6 个角色里 1 个超预算、2 个因超过 64 根上限被迫拆成两个蒙皮段——预算合格不等于装得下。</description></item><item><title>8.2 蒙皮数据量与显存</title><link>https://plumephp.com/art-ta-08-2-skinning-data-vram/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-08-2-skinning-data-vram/</guid><description>蒙皮数据分两块：顶点上的蒙皮属性（4 索引 + 4 权重）与骨骼调色板（骨骼矩阵）。本节把两块都算成整数字节，并让索引位宽决定合法性：4 位最多 16 骨、8 位 256 骨。同一批角色用 idx8_w8 共 203616 字节、调色板只占 75‰，换 16 位索引加浮点权重则涨到 579936 字节。</description></item><item><title>8.3 划界：蒙皮数学外链</title><link>https://plumephp.com/art-ta-08-3-skinning-math-external-link/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-08-3-skinning-math-external-link/</guid><description>本节不是内容而是边界：第 8 章只讲骨骼数、调色板上限与蒙皮数据字节账，蒙皮矩阵数学、硬件 uniform 上限成因、骨骼贴图显存机制一律外链。把「什么归本章讲」编码成一张可断言的路由表——external 在前、this-book 在后，首个命中胜出；三条外链路径两两不同且全部在 public/ 产物中存在。</description></item><item><title>9.1 动画资源命名与状态绑定</title><link>https://plumephp.com/art-ta-09-1-animation-naming-state-binding/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-09-1-animation-naming-state-binding/</guid><description>本节把动画片段名文法定成 &lt;char&gt;_&lt;action&gt;[_&lt;dir&gt;][_v&lt;N&gt;]，用片段族把方向与版本变体收成一个可绑定的单位，再校验三类绑定缺陷：悬空绑定、孤儿片段族、方向缺档。11 个片段判出坏名 1、悬空 1、孤儿 1、缺档 1，两侧 digest 逐位一致。</description></item><item><title>9.2 混合空间与过渡规范</title><link>https://plumephp.com/art-ta-09-2-blend-space-transition-spec/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-09-2-blend-space-transition-spec/</guid><description>9.1 把片段绑到了状态，本节定状态之间怎么过渡、连续参数怎么在几个片段间混合。2D 四角样本的双线性权重全程整数地板除，Python 与 TS 逐位一致；7 条过渡判出悬空 1、超预算 1，非整除查询点的权重之和是 998 而非 1000，规范只承诺确定、不承诺归一。</description></item><item><title>9.3 动画事件与逻辑一致性</title><link>https://plumephp.com/art-ta-09-3-animation-event-logic-consistency/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-09-3-animation-event-logic-consistency/</guid><description>前两节把片段绑到状态、定了过渡与混合，本节管动画时间轴上的事件标记：帧号、类型、参数。六条资产侧校验把 8 个事件判出 4 类违例各 1 条——帧越界、同帧同类型重复、事件未按帧排序、vfx 引用不存在，两侧 digest 逐位一致，逻辑侧只需照单消费。</description></item><item><title>附录 A：管线 schema、规则表与公式索引</title><link>https://plumephp.com/art-ta-appendix-a/</link><pubDate>Tue, 13 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/art-ta-appendix-a/</guid><description>《游戏美术与技术美术》卷二《技术美术与管线工程》附录：全卷管线规则与公式索引、ta&lt;章号&gt;_ 工具链命名约定、六层可运行性口径与逐层复现命令，并给出可跑的 S 层清点脚本与 P 层索引校验内核，两者对同一份工作区算出的清单与摘要逐位一致，并附一键复现与排错顺序。</description></item></channel></rss>