跳转至

Ludo Atlas · 从零写渲染器路线

图形学进阶的项目式路线:软件光栅化 → 实时渲染 API → 光追/现代 API,三个阶段、验收标准与资源。 配套:《技术实现手册》·《引擎源码阅读路线》·《开源精选与书籍推荐》(图形学书单)。 目标读者:有编程基础、想真正"写得出"图形学的开发者。全程约 9-12 个月,每周 4-6 小时。


1. 为什么写渲染器

看懂图形学文章和写得出渲染器,中间隔着一条河。写渲染器是少数能同时训练三件事的项目:

  • 数学落地:线性代数从"学过"变成"用过"。
  • 系统能力:资源管理、状态机、性能分析,全套走一遍。
  • 作品与谈资:图形、引擎、TA 岗位的面试硬通货,一个有血有肉的渲染器胜过无数形容词。

2. 路线总览

阶段 内容 参考周期 验收
一 软件光栅化器 4-8 周 渲染出带贴图光照阴影的经典模型
二 实时渲染 API(三选一) 3-5 个月 自建小场景 60fps 跑起来
三 进阶方向(选一) 按需 光追器 / 现代 API 重写 / 特性专精

顺序不要倒。先软件再硬件,是所有过来人的共识:阶段一让你在没有 API 魔法的情况下看清每个概念,阶段二才是在学 API 的表达方式。

3. 阶段一:软件光栅化器

路线:从 tinyrenderer 的思路出发,从画线开始,一行行写到完整渲染器。

课程内容与顺序:

  1. 画线(Bresenham 算法)与线框模型。
  2. 三角形光栅化,重心坐标法插值。
  3. z-buffer 深度测试:解决遮挡。
  4. 纹理映射与透视校正插值。
  5. 光照:Gouraud 到 Phong,法线与漫反射。
  6. 阴影贴图(软渲染版)与简单后效。

语言不限:C++ 最顺,Rust 亦可,甚至 Python 起步(性能不管,概念最大)。验收标准:渲染出经典的头部模型(贴图+光照+阴影齐全),并且每个算法都能在白板上手推出来。

资源:tinyrenderer 教程与代码(https://github.com/ssloy/tinyrenderer )。

4. 阶段二:实时渲染 API

三条路线选一条(按你的目标):

路线 代表教程 适合 说明
OpenGL LearnOpenGL 第一选,概念体系最完整 中文社区资料多,概念覆盖最全,面试概念基本从这里出
WebGPU / WebGL WebGPU Fundamentals / WebGL Fundamentals 前端背景、想跑在浏览器 现代 API 设计,跨平台演示方便
Vulkan Vulkan Tutorial 目标工业界引擎岗 显式内存与同步,门槛最高,建议有前两条之一的基础后再上

逐课清单(OpenGL 路线为参考):窗口与上下文 → 第一个三角形 → 着色器 → 纹理 → 相机 → 光照(基础/材质/光照贴图)→ 模型加载 → 深度测试与模板 → 混合 → 帧缓冲 → 阴影贴图 → 法线贴图 → PBR → 后处理(泛光等)。

验收标准:一个自制小场景:地板加模型、阳光加阴影、一档后处理、60fps 稳定。作品视频录下来,这是作品集素材。

5. 阶段三:进阶方向(选一深挖)

  • 光追:从 Ray Tracing in One Weekend 系列入手(https://raytracing.github.io/ ),用像素视角重学一遍光的传播。延伸项目:CPU 光追器 + 降噪。
  • 现代 API 重写:用 Vulkan 或 WebGPU 把阶段二的场景重做一遍,体感"显式控制"换来的是什么。
  • 特性专精:选一个图形特性挖到底(全局光照、阴影技术、体积雾、程序化天空),做 demo 加技术文章。
  • GPGPU:compute shader 玩粒子、流体、布料,打开"显卡不只画图"的门。

6. 学习方法

  • 跑通即改:每节课后必做三件事:改参数、加一个小特性、故意破坏它再修好。
  • 写笔记:每阶段至少三篇(概念理解、踩坑记录、作品展示)。写作是把"感觉会了"压回"真的会了"的检验。
  • 性能习惯从第一天养:记录帧时间,学会读 GPU 剖面数据,性能直觉是图形人的核心资产。
  • 数学遇到再补:线性代数跟着进度补(3Blue1Brown 系列、《3D 数学基础》见 《开源精选与书籍推荐》),不要先学三个月数学再动手,那是拖延症的高级形式。

7. 常见坑

  1. 只看不写,视频刷完自认为学会了。
  2. 跳过阶段一直上 Vulkan,被同步与内存管理劝退。
  3. 不做笔记,三个月后全部归零。
  4. 工具链折腾过度(窗口库、构建系统换来换去),核心内容零进展。
  5. 期望速成,两个月没看到"大作品"就放弃。
  6. 数学不补硬啃,卡在矩阵变换处反复阵亡。
  7. 不记录作品,面试时拿不出东西。
  8. 永远在抄教程,从不加自己的改动(面试官一眼看穿)。
  9. 只追画面效果,不会分析性能(图形岗必挂项)。
  10. 单线死磕不吃透就往下赶,欠账利滚利。

8. 资源入口

  • tinyrenderer(软光栅化):https://github.com/ssloy/tinyrenderer
  • LearnOpenGL:https://learnopengl.com/
  • WebGL Fundamentals:https://webglfundamentals.org/
  • WebGPU Fundamentals:https://webgpufundamentals.org/
  • Vulkan Tutorial:https://vulkan-tutorial.com/
  • Ray Tracing in One Weekend:https://raytracing.github.io/

书籍与更多开源项目见《开源精选与书籍推荐》;想读引擎源码配合服用见《引擎源码阅读路线》。