《计算机图形学》卷一《几何、变换与光栅化》全 50 篇。它回答一个问题:一次渲染,能不能被还原成一组可复现的整数,并且这件事可以被证伪?
站内的图形学内容基本落在两端:一端是现代图形 API 的实时渲染工程(graphics/ 专题 45 篇与《渲染引擎》55 篇,C++ / GLSL / WGSL / TypeScript,跑在 GPU 上,产出帧率与 draw call),一端是资产管线与预算闸门(《技术美术与管线工程》50 篇)。中间那一段——渲染算法本身的可算性与可证明性——没有人占。 而这一段恰恰是可以写成整数、逐字节比对、跑在 CPU 上、用命令行复现的一段。
做法只有一句话:一份场景规格,三种宿主消费。config/scene_spec.json 是唯一真源(71 个字段,全部是整数,浮点数为 0),它同时驱动三处——S 层 Python + numpy 的 CPU 软件光栅化器、P 层 TypeScript 定点光栅化内核、W 层浏览器 WebGL2 着色器。三处读的是同一个文件。
两条一致性纪律贯穿全卷:整数与定点逐位一致(Python 与 TypeScript 产出逐字节相同的像素缓冲,sha256 比对,这条是可证伪的——一旦某个运算顺序或舍入不同,摘要立刻不同),以及浮点按声明容差(GPU 的光栅化规则与 CPU 不同,不可能逐位一致,故一律用覆盖归属差异、MAE、PSNR 断言)。
贯穿全书的是程序化生成的虚构场景 《烛影山谷》(lantern-hollow)与工程 lantern:起伏地形 + 三个材质球 + 一盏方向光与环境光 + 一条相机路径,全部几何由整数噪声生成,不引入任何第三方素材。本页是《几何、变换与光栅化》的全书目录:按章节顺序列出全部 50 篇,点击标题直达正文,也可以从各节末尾的「阅读导航」按顺序通读,或先看目录篇
里的分工说明与可运行性口径。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《计算机图形学》卷一《几何、变换与光栅化》 |
| 篇数 | 50 篇(正文 16 章 48 节 + 目录篇 + 附录 A) |
| 贯穿案例 | 程序化场景《烛影山谷》(lantern-hollow,工程 lantern) |
| 核心主张 | 一份场景规格,三种宿主消费;两条一致性纪律 |
| 可运行性 | 六档 S / P / W / D / X / B |
| 前置 | 无(本卷是三卷本的第一卷) |
| 后继 | 卷二《着色、光照与纹理》(16 章 48 节);卷三《光线追踪与全局光照》(16 章 48 节) |
三卷怎么分
| 卷 | 书名 | 回答的问题 |
|---|---|---|
| 卷一 | 几何、变换与光栅化 | 一次渲染能不能被还原成一组可复现的整数 |
| 卷二 | 着色、光照与纹理 | 颜色从哪来,能不能写成可逐像素断言的量 |
| 卷三 | 光线追踪与全局光照 | 光能不能被还原成一个可估计的积分 |
与站内既有内容的分工
graphics/专题 的 45 篇讲的是现代图形 API 的实时渲染工程:管线阶段、MSAA/TAA、HDR 管线、延迟/Tiled、集群前向、GPU Driven、光追混合。本卷讲的是同一条管线在 CPU 上的整数实现——不调用任何图形 API,产出的是逐像素可断言的图像与中间缓冲,而不是帧率与 draw call。- 《渲染引擎》
55 篇用 TypeScript 从零造一个引擎(RHI 抽象、双后端、帧图、后处理)。那套是引擎架构;本卷是同一算法跨语言的逐字节证明——同一个场景在 Python 与 TypeScript 下必须给出同一个
sha256。 - 《技术美术与管线工程》 50 篇做的是管线闸门与预算(LOD 预算、三角预算、显存账)。那套管的是「画得完吗」;本卷管的是「算得对吗」。
- Unity/SRP 口径的渲染管线 是引擎层的管线配置;本卷第 16 章做的是可执行规格的三消费联调,与具体引擎无关。
- 术语上需要留意:站内的「抖动」「MVP」「批处理」「instancing」「投影」绝大多数是误报(分别是 jitter、Minimum Viable Product、batch processing、云实例、数据库 projection)。本卷的
MVP一律指 model-view-projection 矩阵合成。
本卷 16 章
第一部分 · 把渲染还原成整数(第 1–4 章)
- 第 1 章 渲染的最小模型
- 第 2 章 向量、点与齐次坐标
- 第 3 章 矩阵与变换管线
- 第 4 章 旋转与朝向
第二部分 · 从世界到屏幕(第 5–8 章)
- 第 5 章 相机与投影
- 第 6 章 三角形的光栅化
- 第 7 章 直线的光栅化
- 第 8 章 裁剪
第三部分 · 可见性与数值一致(第 9–13 章)
- 第 9 章 背面剔除与朝向
- 第 10 章 深度与可见性
- 第 11 章 抗锯齿与采样
- 第 12 章 纹理映射
- 第 13 章 光栅化的数值一致
第四部分 · 调试、几何与装配(第 14–16 章)
第 14 章 渲染器的调试视图
第 15 章 场景与几何的生成
第 16 章 装配:从零到第一帧
附录
可运行性
本卷沿用六档口径:S 是 Python + numpy 的 CPU 软件光栅化(numpy 向量化,800×600 全屏逐像素着色实测 5.44 ms/帧),P 是 TypeScript 定点光栅化内核(node --test,含与 S 层 sha256 逐字节相同的断言与负例),W 是浏览器 WebGL2 真渲染(Playwright 无头读像素,与 S 层按声明容差比对),D 是规格文本、schema 与清单,X 是需真实 GPU 环境、命令行不可复现的部分(正文逐处标注),B 是参数扰动与相变扫描(软告警不硬失败)。每一节至少有一个 S / P / W 档的代码块,且正文里的每个数字都来自本机实跑。
「渲染正确」在本卷是代理指标,不是「画得好看」:覆盖率一致性(CPU 与 GPU 不一致像素占比,千分比)、图像误差(MAE、PSNR、最大通道差)、定点不变量残差(重心坐标三权重之和 − 面积,恒为 0)、走样阈值(参数扰动下首次出现可见走样的参数值)。这些只用于相对比较,不做绝对化表述。
怎么读
想先看主张,从目录篇 开始,那里有三卷定位、两条纪律与六档口径。想直接动手,从第 1 章 把场景规格跑起来,再依次走 S / P / W 三层。只关心「为什么必须用整数」,看第 13 章 的定点与浮点分歧与第 13.3 节 的跨语言逐位一致验证。需要查字段与量纲,直接翻附录 A 。