首页 › 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 的工具调用要有预算约束。优雅的定义方式 + 残忍的截止条件,才是能在生产环境活下来的递归。

视频论证结构图

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 频道页) — 本文解读视频《Coding Adventure: Ray Tracing》所在频道与系列
  2. Ray tracing (graphics) - Wikipedia — 光线追踪技术史,含 Appel 1968 与 Whitted 1980 的脉络
  3. Rendering equation - Wikipedia — Kajiya 1986 渲染方程的数学表述与解释
  4. Monte Carlo method - Wikipedia — 蒙特卡洛方法的历史(Ulam、von Neumann)与数学原理
  5. Physically Based Rendering 在线版 — 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学通信知识星球海报-扫码加入