posts

《计算机图形学》卷三《光线追踪与全局光照》· 全书目录与章节索引(50 篇)

《计算机图形学》卷三《光线追踪与全局光照》全 50 篇,三卷本收官。卷一已经把装配、深度与覆盖封版成一组可复现的整数,卷二把颜色还原成可算的量,本卷把光还原成积分:第一部分(第 1–4 章)从光线的最小模型起步——光线的表示与求交、相机与主光线、递归与深度限制,球平面与三角形的求交、Möller–Trumbore 的数值稳定性、容差与自交,包围盒与 BVH、BVH 的构建与遍历代价,硬阴影与阴影光线、镜面反射与折射、递归的光线树;第二部分(第 5–8 章)把渲染写成蒙特卡洛估计——积分与估计、方差与收敛、分层与低差异序列,渲染方程、路径采样、无偏性与偏差,概率密度与权重、余弦加权与光源采样、多重重要性采样,间接光照、辐射度方法、光子映射;第三部分(第 9–12 章)处理介质、程序化几何与质量度量——体积渲染方程、ray marching、体积阴影与散射,噪声的构造、分形与地形、程序化场景的生成,SDF 的构造与布尔运算、ray marching 求交、SDF 的法线与软阴影,最后把噪声与收敛的度量、参考解与误差、采样的停止准则做成可验证的判据;第四部分(第 13–16 章)做数值一致、两路径对照与三卷总收官。按章节提供仿真、逻辑内核与原型;完整项目的配置组装与交付验收仍在补齐。全书围绕程序化场景《烛影山谷》与工具链 lantern 展开。

《计算机图形学》卷三《光线追踪与全局光照》全 50 篇,三卷本收官。它回答一个问题:光能不能被还原成一个可估计的积分,并且这个估计是可度量、可复现的?

卷一把渲染的骨架封版了:装配、深度、覆盖全部落成整数,Python 与 TypeScript 产出逐字节相同的像素缓冲。卷二不碰骨架,只换着色环节,把「颜色从哪来」写成可逐像素断言的量。本卷换的是可见性本身:不再逐像素遍历屏幕、用边函数判定覆盖,而是逐像素发一条主光线,靠求交、递归与积分得到颜色。同一份 config/scene_spec.json 由此有了第三条消费路径。

这条路径的第一个可度量事实是加速结构值不值。本卷基线场景有 896 个三角形:不做加速,76800 条主光线每条都要测试全部 896 个三角形;套上 511 个节点的 BVH 之后,每条主光线只访问 42.1658 个节点、测试 14.58 个三角形。第二个可度量事实是跨语言仍然逐位一致:光追的除法链中间量已摸到 2^53,TypeScript 侧必须全程 BigInt(Number 的 >> 只有 32 位),两侧的像素缓冲 sha256 都是 213b413069ca66c9…,主光线数、阴影光线数、遮挡数、BVH 访问与测试计数全部逐条相同。

第三个事实要到第 5 章之后才出现:光是一个积分,而积分只能用估计。一旦引入蒙特卡洛,输出就不再是唯一确定的像素值,而是一个带方差的估计。本卷的后半程都在处理这件事——怎么让估计无偏、怎么把方差压下去、怎么判断「够了」、怎么在跨语言与跨宿主之间定义「一致」。这也是本卷与卷一、卷二最本质的区别:前两卷的判据是相等,本卷的判据有一半是收敛。

贯穿全书的仍是程序化生成的虚构场景 《烛影山谷》(lantern-hollow)与工程 lantern:起伏地形 + 三个材质球 + 一盏方向光与一盏点光源,全部几何与纹理由整数噪声生成,不引入任何第三方素材。本页是《光线追踪与全局光照》的全书目录:按章节顺序列出全部 50 篇,点击标题直达正文,也可以从各节末尾的「阅读导航」按顺序通读,或先看目录篇 里的分工说明与可运行性口径。

全书概览

项目内容
书稿《计算机图形学》卷三《光线追踪与全局光照》
篇数50 篇(正文 16 章 48 节 + 目录篇 + 附录 A)
贯穿案例程序化场景《烛影山谷》(lantern-hollow,工程 lantern)
核心主张一份场景规格,三种宿主消费;两条一致性纪律
可运行性六档 S / P / W / D / X / B
前置卷二《着色、光照与纹理》 (16 章 48 节)
后继无(三卷本收官)

三卷怎么分

卷书名回答的问题判据
卷一几何、变换与光栅化一次渲染能不能被还原成一组可复现的整数相等(逐字节)
卷二着色、光照与纹理颜色从哪来,能不能写成可逐像素断言的量相等 + 容差
卷三光线追踪与全局光照光能不能被还原成一个可估计的积分相等 + 容差 + 收敛

与站内既有内容的分工

本卷 16 章

第一部分 · 从光线到求交(第 1–4 章)

第二部分 · 把光写成积分(第 5–8 章)

第三部分 · 介质、程序化几何与质量(第 9–12 章)

第四部分 · 数值一致与三卷收官(第 13–16 章)

可运行性

本卷沿用六档口径:S 是 Python + numpy 的 CPU 光追器(实跑约 6.6–6.9 s/帧 @ 320×240,含 76800 条主光线与 77211 条阴影光线),P 是 TypeScript 定点光追内核(node --test,含与 S 层 sha256 逐字节相同的断言与负例,实跑约 1.2 s),W 是浏览器 WebGL2 片元着色器(SDF ray marching 与两路径对照,Playwright 无头读像素,与 S 层按声明容差比对),D 是规格文本、schema 与清单,X 是需真实 GPU 环境、命令行不可复现的部分(正文逐处标注),B 是参数扰动与相变扫描(软告警不硬失败)。每一节至少有一个 S / P / W 档的代码块,且正文里的每个数字都来自本机实跑。

「渲染正确」在本卷是代理指标,不是「画得好看」:BVH 遍历代价(每条主光线访问的节点数与三角形测试数)、图像误差(MAE、PSNR、最大通道差)、收敛误差(相对参考解的千分比)、方差(同一样本数下估计量的离散度)、停止阈值(首次满足误差判据所需的样本数)。这些只用于相对比较,不做绝对化表述。

怎么读

想先看主张,从目录篇 开始,那里有三卷定位、两条纪律与六档口径。想直接看本卷的入口实验,读第 3.3 节 ——它用一组遍历计数说明「加速结构值不值」这件事是可度量的。只关心「光为什么必须写成积分」,看第 6.1 节 。只关心「怎么知道采样够了」,看第 12.3 节 。想看三条路径的最终对账,直接翻第 16.2 节 。需要查公式与参数,翻附录 A 。

全部文章 game golang 客户端开发 Minigame Saas rust Python Java cg Typescript
cg

5.1 积分与估计

蒙特卡洛积分把「算一个积分」换成「估一个积分」:无偏估计量的均值收敛到真值,偏差则永远停在那里。本节讲清无偏性成立的条件,逐位核对 SplitMix64 的掩码语义——漏掉 `& RNG_MASK` 会让输出涨到 191 位、Q16.16 采样当场失效;再用 3 分箱卡方量出取模的量化偏置:值域 2^4 时 χ² = 15677,而 64 位拒绝采样只有 1.301。

13 分钟阅读
计算机图形学 光线追踪 书稿