《游戏美术与技术美术》卷二《技术美术与管线工程》目录

《游戏美术与技术美术》卷二《技术美术与管线工程》目录:16 章 48 节,从 TA 的能力模型与资产管线四阶段,经导入校验、依赖图环检测、图集与材质参数、LOD 与骨骼预算、动画与 UI 规范、清单与门禁规则引擎,到中台、产能排期、外包成本核算,最后收口到一条可回放的 10 阶段管线。按章节提供仿真、逻辑内核与原型;完整项目的配置组装与交付验收仍在补齐。

这是《游戏美术与技术美术》三卷本的第二卷。卷一《美术制作与视觉规范》回答的是「美术做出来的东西,凭什么说它『对』」——定 token、定预算、定命名、定评审。卷二回答的是下一句:这些规范怎么接进生产,从资产进管线那一刻起,每一步谁来挡、挡什么、挡不住怎么办。它不讲渲染原理(站内 graphics/ 专题与《游戏美术与技术美术》卷一的邻居们已经讲透),也不讲引擎实现,讲的是中间那一段:把「这个模型面数有点高」变成导入期就拦下的预算断言,把「这批资源引用坏了」变成能查出环与悬空的依赖图检查,把「这规则老误报」变成可治理的白名单。

卷二的 16 章分成四块:管线与闸门(第 1–6 章),预算与资产规范(第 7–12 章),组织、产能与外包(第 13–15 章),装配(第 16 章)。贯穿全书的仍是虚构的等距经营游戏 《星屑旅店》(stardust-inn)与工具链 prism(config/ + sim/ Python + core/ TypeScript + web/ 单文件 HTML),与卷一共用同一份 config/visual_spec.json。

这套书与站内既有内容的分工

站内已经有大量相邻内容,写清楚分工比重复写一遍更有价值。下面七处边界是本卷最容易混淆的,务必分清:

  • 《游戏美术与技术美术》卷一《美术制作与视觉规范》 是本卷的上游。卷一管「该定什么值」(调色板 token、面数与骨骼预算、命名规则、验收清单),本卷管「怎么把它接进管线」。凡是「这个数该定多少」翻卷一,凡是「怎么让它自动被挡住」看本卷。
  • 性能优化生产指南 与 移动端与 PC 性能预算管理 讲的是工程侧怎么把帧率做稳。本卷只做美术侧的账:LOD 分级与误差、骨骼与调色板上限、图集字节、合批归因——这些数字是工程预算的输入,不是替代。
  • graphics/ 渲染原理专题(45 篇)是原理的家:着色器编译、材质与光照、骨骼动画数学、后处理。本卷 6.3 与 8.3 整节做划界并外链,其余各章只做参数规范与预算,不重推原理。
  • 《游戏引擎实现原理》卷二《渲染引擎》 是引擎实现的家(56 篇)。它的 1.3 节把「算法不重推」写成可断言的路由表,本卷 6.3 照此写美术侧的镜像表;导入器、打包器、RHI、剔除属于实现,外链。
  • game/industry/ 的外包系列(外包切分 、供应商管理 、验收标准 )讲的是组织与流程的道理。本卷第 15 章讲的是可算的账:计价模型、超支归因分解、验收质量门判据。本章不写任何具体公司的产能与报价,只写公开可观察的计价结构与本套构造的示例参数。
  • 游戏美术风格规范:Style Bible 怎么写才真的有用 是口号式提纲。本卷第 12 章把「风格该有哪些维度」落成一台能跑出违例清单的规则引擎,第 16 章再把 6 个主题跑一遍。
  • 《游戏引擎实现原理》1.3 与 graphics 专题的分工表 是渲染侧那张表的原件。本卷 6.3 是它在美术管线侧的镜像:谁定规范、谁消费规范、谁不该被本卷重复。

一句话:本卷做的是「美术规范怎么变成一条跑得动的管线」,不是「渲染器怎么写」,也不是「怎么把画面做漂亮」。

明确不在本卷范围内

为了让边界清楚,下面这些这一卷不讲:

  • 渲染原理与着色器(色彩管理、光照模型、后处理、GPU 粒子)——站内 graphics 专题 与《渲染引擎》卷 已覆盖。
  • 引擎侧的管线实现(导入器源码、打包器、RHI、剔除、GPU Driven)。
  • 真实 DCC 操作(Blender / Maya / 3ds Max / Substance / ZBrush):本机一个都没有,也不打算安装,一律标 X;第 2.3 节专门把这件事写成 X 范式。
  • 真实 3D 渲染、真外包交付验收、真供应商产能与报价(X,需真实业务环境)。第 15 章所有具体数值均为本套构造的示例参数并在正文显式声明。
  • 具体引擎的 API 教程(Cocos / Defold / Unity 各有专书)。
  • 法律、税务与商务条款意见(第 15 章只给可核对的计价模型与验收项,不代替商务谈判)。

可运行性口径

本卷每节的代码块头部注释里都写着它属于哪一档。所有代码块都在本机实跑过,正文数字等于实跑输出;但「整卷项目复现」(把全部配置与共享模块组装起来一次性跑通)尚未完成,故本页不声称整卷可复现。

层含义怎么验证
S 仿真层Python 数值仿真:装箱率、mip 链字节与显存、LOD 误差、骨骼与材质槽预算、安全区几何、清单差异、规则命中、中台回本、关键路径、外包计价/opt/homebrew/bin/python3 sim/ta<章号>_*.py,产出 JSON + CSV + SVG
P 内核层TypeScript 配置驱动校验器:导入期校验、依赖图环检测与悬空引用、图集预算、材质参数断言、命名 lint、门禁分级、清单差异、装配检查表、跨语言摘要对照node --test 'core/test/ta<章号>_*.test.ts'(必须写全 glob;node --test <目录> 不发现 .ts)
W 网页层单文件 HTML 原型:安全区与刘海屏画布、多分辨率档位条、合批分带node web/build_ta10_safearea.mjs 产出 HTML,再用 NODE_PATH=/opt/homebrew/lib/node_modules node web/verify_ta10_safearea.mjs 无头断言
D 静态层导出清单、导入规则 schema、依赖图 schema、材质参数表、门禁规则表、装配检查表、交付物清单仅 schema / lint 校验,且必须能被 sim/ 与 core/ 同时读入
X 不可复现真 DCC 打开导出、真 3D 渲染、真外包交付验收、真供应商产能与报价正文每处显式标注「需真实环境,命令行不可复现」
B 基准跨语言色彩容差、主题切换后的预算漂移、风格距离阈值敏感性产出 JSON,软告警不硬失败,数字来自本机实跑

本卷的核心主张是**「一份规范驱动一条管线」:同一份 config/visual_spec.json(卷一落盘,本卷只读)被 ① S 层 Python 仿真、② P 层 TS 校验器、③ W 层浏览器看板三处消费;第 16 章再把全卷产物装成一条可回放的 10 阶段管线**,用 6 个主题包各跑一遍、6 次全过,并给出 6×6 风格距离矩阵证明「同源但可区分」。

三条跨语言纪律(与卷一、既有书稿并列):

  1. 预算与阈值一律整数:字节、面数、骨骼数、材质槽、像素数、人天×100、对比度×10、风格距离×10、千分比。除法整数地板除,禁浮点 → 逐位一致。
  2. 色彩真源 = sRGB 8-bit 整数三元组([r,g,b] 0–255,hex 只是显示形态)。感知量(linear / OKLab / ΔE / WCAG / 色盲 RGB)是派生量,跨语言按声明容差断言。正文一律不写「三处颜色完全相同」,只写「容差内一致,实测最大偏差 N」。
  3. 转换常数两语言同源:sRGB 阈值 0.04045 / 12.92、指数 2.4 / 1.055 / 0.055;OKLab 用 Ottosson 同一组矩阵常数;色盲用同一组 Brettel / Viénot 矩阵。禁一侧用库、一侧手写(本机也没有 colour 库,天然只能同源手写)。

同样适用两条纪律:不编造真实产能、成本与报价——所有真实 DCC、真实交付、真实供应商数字一律标 X 或显式声明为示例参数;仿真数字只作同机相对量级,S 层应记录环境与输入后复现,禁止写成「提升 N 倍」这类断言。

卷二结构总览(16 章)

章主题可运行性层级
1技术美术的能力模型S + P + D
2资产管线总览S + P + D + X
3资产导入与校验管线S + P + D
4命名与引用完整性(依赖图 / 环检测)S + P + D
5图集与纹理管线S + P
6材质与着色器参数规范S + P + D + X
7LOD 与几何预算管线S + P + D
8骨骼与蒙皮预算管线S + D + X
9动画与状态机资产规范S + P + D
10UI 管线与多分辨率适配S + P + W
11资源版本与热更新清单S + P + D
12资产自动化检查(CI 门禁)S + P + D
13美术中台与工具链S + P + D
14美术工业化与产能排期S + P + D
15外包管理与成本核算S + P + D + X
16装配:一条可运行的美术管线S + P + B

全书目录

前置

篇目核心内容
目录本页:定位、七处分工、可运行性口径与全书结构
附录 A:管线 schema、规则表与公式索引prism/ 全部文件索引、ta<章号>_ 命名约定与六层复现命令

第一部分:管线与闸门(第 1–6 章)

第 1 章 技术美术的能力模型——先把「TA 到底做什么」和「什么不归本卷」画清楚

第 2 章 资产管线总览——资产从 DCC 到运行时经过哪四步

第 3 章 资产导入与校验管线——把不合格的资产挡在门口

第 4 章 命名与引用完整性(依赖图 / 环检测)——引用坏了要能查出来

第 5 章 图集与纹理管线——省的是字节,也是批次

第 6 章 材质与着色器参数规范——只做参数表,不重推原理

第二部分:预算与资产规范(第 7–12 章)

第 7 章 LOD 与几何预算管线——分级、预算与跳变

第 8 章 骨骼与蒙皮预算管线——只做预算,不重推蒙皮数学

第 9 章 动画与状态机资产规范——资产侧命名与绑定

第 10 章 UI 管线与多分辨率适配——UI 是玩家摸得最多的一层

第 11 章 资源版本与热更新清单——清单是资产的账本

第 12 章 资产自动化检查(CI 门禁)——把规范变成会拦人的闸门

第三部分:组织、产能与外包(第 13–15 章)

第 13 章 美术中台与工具链——中台要解决什么问题,工具怎么分层与复用

第 14 章 美术工业化与产能排期——产能与排期都是可算的账

第 15 章 外包管理与成本核算——只算账,不编数字

第四部分:装配(第 16 章)

第 16 章 装配:一条可运行的美术管线——把前 15 章收成一条能回放的管线

附录

篇目核心内容
附录 A:管线 schema、规则表与公式索引本卷规则与公式索引、ta<章号>_ 命名约定、六层复现命令

三条阅读路径

路径 A:管线与闸门课(第 1–6 章顺序读)
从 TA 的三类工作与能力矩阵开始,经资产管线四阶段、导出单位与轴向对齐、真实 DCC 不可复现的 X 范式、导入设置与导入期校验、导入失败分级、依赖图的显式与隐式引用、环检测与悬空引用、不可达资源清理,到装箱率、mip 链字节账、图集变更传播、材质参数表与参数打包。这条路径回答「资产从进管线到进包,每一道闸门怎么立」。读完你能拿出一张资产管线图、一个能查出环与悬空的引用检查器,和一份可断言的参数表。

路径 B:预算与规范课(第 7–12 章顺序读)
从 LOD 分级与误差指标开始,经屏幕占比与三角预算、LOD 切换跳变、骨骼数与调色板上限、蒙皮数据显存账、动画命名与状态绑定、混合空间与过渡、动画事件一致性,到 UI 安全区与多分辨率分级、合批归因、清单差异与增量回滚、缓存失效、规则引擎与门禁分级、误报与白名单治理。这条路径回答「预算与规范怎么变成会拦人的门禁」。读完你能拿出一个规则引擎、一套分级阻断策略,和一份白名单治理办法。

路径 C:组织与装配课(第 13–16 章顺序读)
从中台判据与工具链分层开始,经采纳率与维护成本的整数账、产能人天与吞吐、依赖排期的关键路径计算、工业化与质量一致性,到外包切分与计价模型、成本结构与超支归因、供应商验收质量门,最后装成一条 10 阶段管线并回放 6 个主题。这条路径回答「管线怎么在组织里跑起来、怎么算账」。读完你能拿出一份中台投入回本表、一张关键路径排期,和一条 6 主题全过的可回放管线。

常见问题速查

你想解决的问题看哪节
TA 到底做什么?三类工作怎么分?1.1
能力矩阵怎么建、产出物怎么定义?1.2
TA 和美术、程序、策划的接口怎么划?1.3
一个资产从 DCC 到运行时经过哪几步?2.1
导出时单位、轴向、坐标系怎么对齐?2.2
为什么书里的 DCC 操作跑不起来?2.3
.meta 里的导入设置到底改了什么?3.1
导入期能自动校验哪些东西?3.2
导入失败了怎么分级、怎么修?3.3
资产之间的引用关系怎么建模?4.1
依赖成环、引用悬空怎么查?4.2
哪些资源是可以删的?4.3
图集怎么装箱才省面积?5.1
mip 链和压缩格式到底省多少字节?5.2
改了图集,谁受影响、怎么回归?5.3
材质参数表怎么定默认值?6.1
参数怎么对齐与打包?6.2
哪些内容该看 graphics/ 而不是本书?6.3
LOD 分几级、误差怎么量?7.1
屏幕占比和三角预算怎么挂钩?7.2
LOD 切换时画面跳变怎么控?7.3
骨骼数和调色板上限怎么定?8.1
蒙皮数据吃多少显存?8.2
蒙皮矩阵的数学该看哪一篇?8.3
动画资源怎么命名、怎么绑状态?9.1
混合空间和过渡参数怎么规范?9.2
动画事件和逻辑对不上怎么查?9.3
刘海屏、挖孔屏的安全区怎么算?10.1
多分辨率资源该出几档?10.2
UI 为什么合不上批?10.3
热更新清单怎么做差异计算?11.1
增量更新怎么回滚?11.2
版本不一致、缓存没失效怎么发现?11.3
资产自动检查的规则引擎怎么写?12.1
门禁该阻断还是告警?12.2
规则误报了怎么办?12.3
中台到底解决什么问题?13.1
工具链怎么分层、怎么判该不该复用?13.2
一个工具该推广还是该下线?13.3
产能怎么用整数账算?14.1
美术依赖的排期怎么算关键路径?14.2
工业化会不会牺牲质量一致性?14.3
外包该怎么切分、怎么计价?15.1
超支了,钱花在哪?15.2
供应商的货怎么验收、怎么设质量门?15.3
整条管线怎么装配、检查表长什么样?16.1
6 个主题怎么走同一条管线还不串味?16.2
这一卷交付了什么、卷三接什么?16.3

卷二工具链命名约定

本卷所有 prism/ 文件一律用 ta<章号>_ 前缀(如 config/ta10_safearea.json、sim/ta10_safearea.py、core/src/ta10/、core/test/ta10_*.test.ts),因为《游戏美术与技术美术》的卷一是 sp、卷三是 st。这样 node --test 'core/test/ta10_*.test.ts' 只会命中本卷第 10 章的测试,不会交叉匹配另外两卷。

注意前缀不要写成裸 ta*:node --test 接收的是 glob 而非目录,故必须写全 ta<章号>_*.test.ts。另外 web/ 层的文件名前缀不在首位(build_ta10_safearea.mjs / verify_ta10_safearea.mjs),清点脚本要同时认这两套命名,否则 web 层会被统计成 0。

三卷共用同一份 config/visual_spec.json 作为唯一真源,6 个主题包在 config/sp16_themes.json(卷一落盘)。改一个 token,仿真、内核、浏览器看板三处结果都变;第 16 章再用 6 个主题包把这条链路回放六遍。

完整文件索引、逐层复现命令与排错顺序见附录 A 。

在进入正文之前,先用下面这段 S 层环境自检脚本确认运行时齐备——它同时适用于三卷,并额外检查本卷最关心的四个 DCC 是否存在(预期全部不存在)。把它保存为 prism/sim/ta00_env_check.py 后运行 /opt/homebrew/bin/python3 sim/ta00_env_check.py,会打印解释器路径、numpy / pandas / Pillow 版本、DCC 探测结果与 Node 版本,任一不满足即非 0 退出。

#!/usr/bin/env python3
# file: sim/ta00_env_check.py
# tier: S
# verify: /opt/homebrew/bin/python3 sim/ta00_env_check.py
"""环境自检(卷二):确认《游戏美术与技术美术》三卷需要的运行时都在,并打印 prism 能力阶梯。

本机有两个 python3,不要混:
  /opt/homebrew/bin/python3 = 3.14.6(带 numpy / pandas / PIL),S 层仿真与 PIL 生成一律用它;
  /usr/bin/python3          = 3.9.6(系统自带,无 numpy/pandas),只能跑最朴素的脚本。

本机**没有** matplotlib / scipy / colour / cairosvg:图表一律纯 xml.etree 生成 SVG,
图像一律 PIL 生成 PNG。卷二以「清单 + 图 + 规则」为主,几何与字节账全部走整数。
"""

from __future__ import annotations

import os
import shutil
import subprocess
import sys

EXPECT_PY = "/opt/homebrew/bin/python3"


def main() -> int:
    ok = True

    # /opt/homebrew/bin/python3 是符号链接,比较时解析到真实二进制再判断
    real = os.path.realpath(sys.executable)
    print(f"python     {sys.version.split()[0]}  ({real})")
    if real != os.path.realpath(EXPECT_PY):
        print(f"           注意:正文脚本一律用 {EXPECT_PY},当前解释器不同")

    try:
        import numpy
        import pandas
        import PIL

        print(f"numpy      {numpy.__version__}")
        print(f"pandas     {pandas.__version__}")
        print(f"Pillow     {PIL.__version__}")
    except ImportError as e:  # noqa: BLE001
        ok = False
        print(f"FAIL 缺依赖:{e}(S 层与 PIL 生成需要 numpy / pandas / Pillow)")

    for mod in ("matplotlib", "scipy", "colour"):
        try:
            __import__(mod)
            print(f"{mod:<10} 已安装(本套不使用,图表与色度一律手写)")
        except ImportError:
            print(f"{mod:<10} 未安装(符合预期)")

    # 卷二的核心是「导出 → 导入 → 运行时」的清单与闸门,DCC 一律不在本机
    for tool in ("blender", "mayabatch", "3dsmax", "Substance"):
        where = shutil.which(tool)
        print(f"{tool:<10} {where if where else '未安装(符合预期,卷二一律按 X 层标注)'}")

    node = shutil.which("node")
    if not node:
        ok = False
        print("FAIL node 未安装(P 层需要 Node 26 或更高)")
    else:
        ver = subprocess.run([node, "-v"], capture_output=True, text=True).stdout.strip()
        major = int(ver.lstrip("v").split(".")[0])
        note = "" if major >= 26 else "  (低于 26,原生 TypeScript 不可用)"
        print(f"node       {ver}{note}")
        ok = ok and major >= 26

    print("prism 能力阶梯:S 仿真 / P 内核 / W 网页 / D 静态 / X 不可复现 / B 基准")
    print("OK 环境就绪" if ok else "FAIL 环境不满足")
    return 0 if ok else 1


if __name__ == "__main__":
    raise SystemExit(main())

实跑 /opt/homebrew/bin/python3 sim/ta00_env_check.py:

python     3.14.6  (/opt/homebrew/Cellar/python@3.14/3.14.6/Frameworks/Python.framework/Versions/3.14/bin/python3.14)
numpy      2.5.1
pandas     3.0.3
Pillow     12.3.0
matplotlib 未安装(符合预期)
scipy      未安装(符合预期)
colour     未安装(符合预期)
blender    未安装(符合预期,卷二一律按 X 层标注)
mayabatch  未安装(符合预期,卷二一律按 X 层标注)
3dsmax     未安装(符合预期,卷二一律按 X 层标注)
Substance  未安装(符合预期,卷二一律按 X 层标注)
node       v26.5.0
prism 能力阶梯:S 仿真 / P 内核 / W 网页 / D 静态 / X 不可复现 / B 基准
OK 环境就绪

这段脚本与卷一、卷三同源,是整套书稿的第一条可运行命令;本卷的 ta<章号>_ 脚本都建立在它验证过的同一套运行时之上。完整文件索引与逐层复现命令见附录 A 。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「gameart」更多文章

  1. 附录 A:风格参数表、量化规则与数据集索引
  2. 9.3 等距资产的制作约束
  3. 9.2 等距 tile 与遮挡规则