<!-- title: 从零造光线：一条光追神课深读 -->
<!-- domain: programming -->

# 从零造光线：一条光追神课深读

## 概述：为什么值得读这条视频

在图形学的所有主题里，"光线追踪"大概是最容易被术语吓退、又最容易被一句话讲明白的。说它难，是因为背后站着渲染方程和蒙特卡洛积分；说它简单，是因为它的核心思想只有一句：光是从光源出发跑到你眼睛里的，那我们就反过来，从眼睛出发，逆向把这条光路走一遍。

新西兰独立开发者 Sebastian Lague 的《Coding Adventure: Ray Tracing》就是用这条“逆向的光”串起来的一堂动画编程课。他没有写一行令人望而生畏的数学推导，而是带着观众用 C# 在 Unity 里从零写出一个光线追踪渲染器：先让一颗球出现在画面里，再让光在镜子和玻璃之间弹射，最后升级成电影工业同款的路径追踪。整条视频看下来，你会经历一次完整的“认知升级”：从“屏幕上有个像素”到“这个像素的颜色是成千上万条随机光路的平均结果”。

这条视频长期被视为图形学入门的最佳第一课之一，在编程社区被反复推荐。本文将按照视频的叙事顺序逐段拆解它讲了什么、背后的真实理论从哪来、哪些地方做了简化，以及你能从中带走什么可迁移的工程思维。

## 视频基本信息

| 项目 | 信息 |
|---|---|
| 标题 | Coding Adventure: Ray Tracing |
| 中译 | 编程冒险：光线追踪 |
| 频道 | Sebastian Lague（游戏开发与创意编程教育频道） |
| 发布时间 | 2020 年（据频道页面；本次未能实时核验精确日期） |
| 播放量 | 数百万量级，为其播放量最高的视频之一（据频道页面，未实时核验精确值） |
| 形式 | 约 10 分钟动画 + 代码演示，C# / Unity 实现 |

> 说明：本文写作时无法对视频页面做实时抓取核验，以上数据以频道页公开信息的量级为准，精确数值请以频道页面为准。视频内容描述基于该视频的公开内容。

## 核心主张拆解：一条光路，五级台阶

视频的叙事结构极其克制， essentially 是五级递进的台阶，每一级都建立在前一级的代码之上。

### 要点一：从“一个像素”开始——光线投射

视频的第一个画面不是炫酷场景，而是一片黑，然后出现一个相机和一颗球。Lague 的第一段代码做的事简单到近乎朴素：对屏幕上的每一个像素，从相机位置射出一根光线，穿过这个像素对应的方向，检查它是否击中那颗球。击中就涂上球的颜色，没击中就保持背景色。

这一步在图形学里叫“光线投射”（ray casting）。求交的数学工具是中学水平的二次方程：把光线方程代入球面方程，解出交点。视频在这里传递了一个关键的思维方式转换——**渲染不是“画东西”，而是“解方程”**。每个像素的颜色，都是一道几何题的答案。

### 要点二：递归弹射——真正的“追踪”

光线投射只能回答“这里有没有东西”，回答不了“这里是什么材质”。第二步，Lague 让光线在击中物体后**继续弹射**：击中镜面就按反射定律生成新的光线继续追踪；击中玻璃就同时生成反射和折射两束光（折射方向由斯涅尔定律决定）。每一条子光线重复同样的过程，直到达到预设的弹射次数上限。

这就是 Turner Whitted 在 1980 年提出的“递归光线追踪”的全部思想。视频用动画把这个递归结构画成了一棵不断分叉的光线树，观众第一次能“看见”递归——不是调用栈里的抽象概念，而是空间中真实生长的光路。

### 要点三：从一条光线到一万条——路径追踪登场

前两步得到的是干净但假的效果：完美的镜面、锐利的阴影。Lague 在视频后半段做了一个决定性的升级：**与其精确追踪一条光线，不如从每个像素随机发射成百上千条光线**，让它们在场景里随机游走，最后把所有结果取平均。这就是“路径追踪”，物理渲染工业的标准做法。

效果立竿见影：硬边阴影变成了自然的软阴影，塑料一样的材质变成了真实的粗糙感。代价同样立竿见影：图像上布满了雪花般的噪点。视频诚实地展示了这个 tradeoff——样本数越多，噪点越少，渲染时间越长。

### 要点四：随机，是这里最大的美德

视频最反直觉、也最深刻的一点在这里：**为什么随机会让画面更真实？** 因为真实世界的光照是一个连续的积分问题——一个点的亮度，等于它从整个环境（天空、灯光、其他物体的反光）接收到的光的总和。这个“总和”没有解析解。蒙特卡洛方法的思路是：不硬算积分，而是随机采样无数次，用平均值逼近真值。

软阴影就是最直观的例子：真实世界的光源有面积，阴影边缘的每个点“看得见”光源的一部分，所以是渐变的。随机采样的光线有的被挡住、有的没被挡住，平均下来自然就是渐变的。**物理的“笨拙感”，恰好是随机采样免费赠送的。**

### 要点五：噪声与收敛——工程账单

视频没有回避代价。样本数不足时画面噪点明显，Lague 展示了渐进式渲染：让画面边跑边 refine，样本不断叠加，噪点以肉眼可见的速度消退。他顺带提到了降噪器的存在——现实工业里，我们不会傻等一亿个样本，而是用少量样本加智能降噪拿到可用的图。

到这里，视频完成了一次完整的闭环：一个像素的颜色 = 一道几何题 + 一次积分估计。这也是整条视频最值得带走的心智模型。

## 知识与理论溯源：视频背后四十年学术史

Lague 的视频只有十来分钟，但它踩过的每个点，背后都是一篇里程碑式的论文或一位真实的历史人物。

**光线投射（1968）**。这一思想的最早系统应用通常追溯到 Arthur Appel 在 IBM 的工作。他在论文《Some Techniques for Shading Machine Renderings of Solids》中用“从视点发射光线判定可见性”的方式解决遮挡问题，是逆向光线思想的先声。

**递归光线追踪（1980）**。贝尔实验室的 Turner Whitted 发表《An Improved Illumination Model for Shaded Display》，第一次让光线在镜面反射与玻璃折射之间递归弹射。这篇论文通常被认为是现代光线追踪的开山之作——今天游戏玩家说的“RTX 开光追”，学术血统就来自这篇 46 年前的论文。

**蒙特卡洛方法（1940 年代）**。路径追踪的数学引擎是蒙特卡洛方法，由波兰裔数学家 Stanislaw Ulam 与 John von Neumann 等人在 1940 年代系统化发展，Ulam 与 Nicholas Metropolis 后来发表了名为《The Monte Carlo Method》的奠基性论文。名字来自摩纳哥的赌城——随机性就是这套方法的名字与灵魂。

**渲染方程（1986）**。加州理工学院教授 James Kajiya 在 SIGGRAPH 1986 发表《The Rendering Equation》，把“一个点向某个方向发出多少光”写成一个非常紧凑的积分方程：出射光 = 自发光 + 对整个半球方向上“入射光 × 双向反射分布函数 × 余弦项”的积分。路径追踪正是这个方程的一种无偏（低偏差）蒙特卡洛解法。Kajiya 论文里那句名言值得记住：“我们从光线追踪开始，最终也将以光线追踪结束。”（大意）

**物理渲染的体系化（2004 至今）**。Matt Pharr、Wenzel Jakob 与 Greg Humphreys 的《Physically Based Rendering: From Theory to Implementation》（PBRT）把上述理论编成了一本“带完整可运行源码的书”，其作者因该书对开源物理渲染教学的贡献获得过奥斯卡科学技术奖。这本书的免费在线版是光线追踪领域公认的最佳进阶读物。

**工业落地（2018 至今）**。NVIDIA 在 2018 年的 Turing 架构显卡上引入 RT Core 硬件光追单元，微软推出 DirectX Raytracing API，游戏业进入“混合渲染”时代——光栅化画主体、光线追踪补反射与阴影。电影业则走得更彻底：皮克斯的 RenderMan 从传统的 REYES 光栅化管线转向路径追踪，如今《玩具总动员》以来的几乎所有 CGI 大片，画面本质上都是蒙特卡洛积分算出来的平均值。

一条十分钟的独立开发者视频，就这样横跨了从 1940 年代的随机数学到 2020 年代 GPU 硬件的全部分水岭——这也是它被称为“神课”的底气。

## 批判性审查：哪些可信，哪些被简化

**证据充分的部分**。视频的物理与数学骨架完全正确：光线-几何求交、反射/折射方向的计算、蒙特卡洛积分收敛于真值、样本量与噪声的关系，全部对应真实且经过四十年检验的理论。视频展示的软阴影、粗糙反射等效果与理论预测一致，观众可以亲手复现。

**有意简化的部分**。其一，"from scratch"（从零开始）有修辞成分——Lague 借用了 Unity 作为宿主环境（相机、屏幕缓冲、交互都来自引擎），真正从零的只有渲染循环与数学。这不算造假，但“从零”的含义是“从零写渲染器”，不是“从零写引擎”。其二，视频为了叙事流畅，几乎跳过了加速结构：朴素做法中每根光线都要和场景里所有物体求交，复杂度随物体数线性增长，真实渲染器都依赖 BVH（层次包围盒）等空间加速结构把这一步降到对数级。视频的场景只有几颗球，所以这个问题不可见——但如果你照着写完拿去渲染百万面片模型，会立刻撞墙。其三，视频没有区分“有偏”与“无偏”估计、没有谈重要性采样等方差缩减技术，这些是路径追踪工程实践里真正烧脑的部分。

**存在争议的部分**。光追与光栅化之争至今没有终局。光栅化阵营的论点是：实时交互场景下，每像素成千上万条光线太贵，光栅化的近似性价比碾压；光追阵营的论点是：近似终究要为每个特效打补丁，而物理正确的统一模型随着硬件进步终将胜出。目前行业的主流答案是混合渲染，但十年后回头看，今天这场争论的结论未必成立。另外需要指出：视频中动画演示的“实时”效果是预渲染后加速播放的示意，并非真实帧率——独立开发者的视频中这种演示手法很常见，观众应当知情。

总体评价：这是一条教学意图明确、物理内核诚实、工程细节有意留白的入门视频。它的简化是教学取舍而非错误，而它留下的每一处空白，恰好都是你下一步该读什么的路标。

## 认知提升与实用启示：光追课的三件赠品

**一、蒙特卡洛思维：解析解没有，平均值有。** 视频最有迁移价值的不是图形学，而是“算不动就随机采样”的世界观。工程里大量问题没有解析解：系统在峰值流量下的响应时间分布、某个阈值策略的真实盈亏、复杂流水线的端到端延迟。与其建模到怀疑人生，不如构造一个能随机生成样本的过程，跑一万次取分布。蒙特卡洛方法的精神是：**答案的精度随样本量的平方根增长——粗略的答案很便宜，精确的答案很贵，而“知道多贵能买多少精度”本身就是一种工程能力。**

**二、最小实现学习法：看完≠学会，跑通才算。** Lague 整个 Coding Adventure 系列的方法论就是“亲手实现最小可行版本”。这条视频对应的练习量惊人地小：一个几百行的程序，就能渲染出令自己惊讶的图像。对任何你想学的领域，都值得问一句：这个领域的“两百行版本”是什么？写不出来，说明你还没真的理解；写得出来，理解会自己长出来。

**三、递归的优雅与预算。** 光线树的美在于递归定义的简洁，但真实的渲染器必须给弹射深度设上限——没有上限的递归既是性能灾难，也是逻辑灾难。这是所有递归系统的通则：网络请求的重试要有次数上限，分析任务的展开要有层数限制，Agent 的工具调用要有预算约束。**优雅的定义方式 + 残忍的截止条件，才是能在生产环境活下来的递归。**

## 视频论证结构图

```mermaid
flowchart TD
    A[一个像素是什么颜色] --> B[从相机反向发射光线]
    B --> C[与场景物体求交]
    C --> D{光线击中了什么}
    D -->|光源| E[直接光照]
    D -->|镜面或玻璃| F[按光学定律递归弹射]
    D -->|粗糙表面| G[半球随机采样]
    F --> H[递归深度到上限即止]
    G --> I[成千上万样本取平均]
    H --> I
    E --> J[像素最终颜色]
    I --> J
    I --> K[代价: 噪声与时间]
    K --> L[加样本与降噪收敛]
    L --> J
```

## 延伸阅读

1. **《Physically Based Rendering: From Theory to Implementation》免费在线版（pbr-book.org）** — 光线追踪领域公认的最佳进阶读物，理论、源码、习题三位一体，正是本条视频留下的空白（加速结构、重要性采样、降噪）的系统性答案。
2. **James Kajiya, "The Rendering Equation"（SIGGRAPH 1986）** — 一篇把整个领域装进一个方程的论文，读完视频后再读它的导言部分，你会对“渲染是什么”有一个全新的、更安静的理解。

## 参考来源

> 说明：本文写作环境的联网搜索与页面抓取渠道均不可用，以下为长期稳定的公开资源地址与经典文献信息，均为相关领域广为人知的一手或权威来源，但本次未能逐一实时核验；视频播放量等动态数据已按规则以量级标注，请以频道页面实时数据为准。

1. [Sebastian Lague - Coding Adventure 系列（YouTube 频道页）](https://www.youtube.com/@SebastianLague) — 本文解读视频《Coding Adventure: Ray Tracing》所在频道与系列
2. [Ray tracing (graphics) - Wikipedia](https://en.wikipedia.org/wiki/Ray_tracing_(graphics)) — 光线追踪技术史，含 Appel 1968 与 Whitted 1980 的脉络
3. [Rendering equation - Wikipedia](https://en.wikipedia.org/wiki/Rendering_equation) — Kajiya 1986 渲染方程的数学表述与解释
4. [Monte Carlo method - Wikipedia](https://en.wikipedia.org/wiki/Monte_Carlo_method) — 蒙特卡洛方法的历史（Ulam、von Neumann）与数学原理
5. [Physically Based Rendering 在线版](https://www.pbr-book.org) — PBRT 全书免费阅读，图形学标准进阶教材

---
> 本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵**爱卫生**（微信ID: gprshome201101）维护，聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。
> 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
