About
关于本书
- 英文名称
- Real-Time Rendering, Fourth Edition
- 原作者
- Tomas Akenine-Moller, Eric Haines, Naty Hoffman, Angelo Pesce, Michal Iwanicki, Sebastien Hillaire
- 翻译者
- Morakito
- 本地译本版本
- v1.1,更新时间 2025.3.12
这个中文译本覆盖 RTR4 第 1 章到第 26 章。附录、参考文献和勘误内容分别通过在线站点、 参考文献站点与参考文献合集补充。本页面先把 Chapter 0 前言放入站内,方便和交互实验互相跳转。
译本适合与参考文献合集搭配阅读:前者帮助建立章节脉络,后者用于追踪具体论文、技术报告和实现细节。
References
相关链接
Preface
序言
Chapter 0 的序言引用毛星云的自序,核心是从早年接触游戏、萌生游戏开发理想到长期学习和写作的经历。 这段文字把技术学习和创作动机放在一起:游戏画面带来的吸引力,最终转化为研习图形学、游戏编程和知识整理的持续行动。
序言也解释了中文资料的重要性。高质量英文资料往往门槛较高,早期中文资料又常常不够系统,这会让许多学习者在入门阶段受阻。 因此,译本的价值不只是把文本变成中文,也是在实时渲染、游戏开发和图形学学习之间搭一条更易进入的路径。
希望我们可以一起努力,翻过那座山。
Contents
目录
Chapter 1
Introduction 简介
全文实时渲染关注的是快速生成图像,并让用户的观察、输入和系统下一帧的输出形成连续反馈。 当这个循环足够快时,观看者不会把画面感知为一张张离散图片,而会进入一个可交互的动态过程。
帧率通常用 FPS 或 Hz 描述。低帧率只能提供有限的交互感,而游戏、虚拟现实和增强现实会追求更高且更稳定的帧率, 因为显示延迟直接影响动作反馈和沉浸感。电影常见的 24 FPS 可以通过快门重复照亮来降低闪烁, 但这类刷新率并不等同于应用真正生成新图像的显示速率。
本书讨论的实时渲染并不只是“画得快”,它通常指把三维场景转换为二维图像。交互性、三维场景和图形加速硬件共同构成了现代实时渲染的基本语境。 从早期消费级 3D 加速卡到今天电脑、手机和平板中的 GPU,硬件进步让实时图形从少数应用扩展到游戏、影视预览、工程可视化、XR 和设计工具中。
1.1 Overview
内容概述
第 1 章先建立全书地图:第 2 到第 4 章解释图形渲染管线、GPU 和变换;第 5 到第 12 章进入外观、纹理、阴影、颜色、 基于物理的着色、局部光照、全局光照和图像空间特效;第 13 到第 17 章扩展几何表示,包括点云、体素、体积、非真实感风格、 多边形处理以及曲线曲面。
后半部分更偏工程效率和系统能力:第 18 到第 20 章讨论管线优化、剔除、LOD 和高效着色;第 21 章覆盖 VR/AR 的稳定帧率问题; 第 22 到第 23 章介绍相交测试与图形硬件;第 24 章展望未来。碰撞检测和实时光线追踪作为额外章节通过配套网站提供。
1.2 Notation
符号和定义
本书在进入具体算法前先统一数学符号。角度和标量通常是实数;向量和点使用粗体小写字母; 矩阵使用粗体大写字母;平面、三角形、线段和几何实体也有固定的记法,便于后续章节在变换、相交测试和着色推导中保持一致。
齐次坐标用四个分量统一表示点和向量:最后一个分量为 0 时表示向量,为 1 时表示点。 这种表示法让点、向量和矩阵变换可以放在同一套计算框架中,是第 4 章变换内容的基础。
操作符方面,点乘、叉乘、转置、行列式、绝对值、范数、阶乘和二项式系数都会频繁出现。 着色计算还会常用限制操作:把负值截到 0,或者把输入约束在 0 到 1 的区间内。
1.2.2 - 1.2.3
几何定义与着色
几乎所有图形硬件的基本绘制图元都是点、线和三角形。一个模型或物体由几何实体组成; 场景则是待渲染物体、材质、灯光和观察信息的集合。物体可以是车辆、建筑、线条,也可以由曲线、曲面、细分曲面或更复杂的层级结构表示。
“着色”这个词在图形学中有两个常见含义。它可以指最终视觉外观的计算,例如着色模型、着色方程和卡通渲染; 也可以指渲染系统中的可编程组件,例如顶点着色器、片元着色器和着色器语言。阅读时需要根据上下文判断它指的是外观模型,还是 GPU 程序阶段。
Resources
深入阅读和资源
本章最后强调配套网站的重要性。实时渲染领域变化很快,书中会优先保留基础概念和不容易过时的技术, 而最新链接、补充资料、线性代数附录和各章资源则通过 realtimerendering.com 持续更新。
Chapter 2
The Graphics Rendering Pipeline 图形渲染管线
全文图形渲染管线是实时渲染的核心工具。它根据虚拟相机、三维物体、光源、材质、纹理和着色方程等信息, 把场景转换为一张二维图像。最终图像中的位置和形状主要由几何结构、环境和相机决定, 物体外观则由材质属性、光照、纹理和着色计算共同决定。
本章重点解释管线中每个阶段“做什么”,而不是深入实现细节。后续章节会继续展开各阶段的算法、API 用法和硬件实现。
2.1 Pipeline
渲染管线的架构
管线的意义在于把总任务拆成多个阶段,并让不同阶段并行处理连续输入。整体速度由最慢的阶段决定, 因此实时渲染中的性能分析经常要寻找瓶颈,而不是只看某个局部算法是否足够快。
FPS、Hz 和每帧耗时都可以描述渲染速度。FPS 常用于描述生成图像的速率,Hz 更多用于硬件刷新频率; 实际优化时,每帧耗时通常更直观,因为一帧中的工作量会随场景复杂度变化。
2.2 - 2.3
应用阶段与几何处理
应用阶段由程序控制,开发者可以通过算法和数据组织影响后续管线负载。例如剔除不可见物体、减少提交三角形数量、 更新相机和动画状态,都会直接影响 GPU 后续要处理的工作。现代 GPU 也可以通过计算着色器承担部分通用计算任务。
几何处理阶段负责逐顶点和逐三角形相关任务。顶点着色器会计算顶点位置,也会输出法线、颜色、纹理坐标等后续需要插值的数据。 一个模型通常先在模型空间中定义,经过模型变换进入世界空间,再经过观察变换进入相机或观察空间。
投影会把可视空间变换为规范可视体。常见投影包括正交投影和透视投影:前者保持平行线平行,常用于工程和编辑场景; 后者体现近大远小,是实时三维画面中最常见的相机模型。投影之后,裁剪会丢弃完全不可见的图元, 并把跨越边界的图元裁成位于可视空间内部的新图元。
几何处理的最后一步是屏幕映射:把规范设备坐标映射到窗口坐标。这里还会涉及像素中心、坐标原点和深度范围等 API 约定, 例如 OpenGL 和 DirectX 在屏幕坐标方向与深度范围上存在一些历史差异。
2.4 - 2.5
光栅化与像素处理
光栅化阶段接收已经变换和投影好的图元,找出它覆盖了哪些像素或采样点,并生成片元。 三角形设置会计算边界方程和插值所需的数据;三角形遍历会检查覆盖范围,并对顶点属性做透视正确插值。
像素处理阶段包含像素着色和合并。像素着色器使用插值后的数据计算颜色,纹理化是其中最常见、最重要的技术之一。 合并阶段则决定片元能否写入颜色缓冲,并处理深度测试、模板测试、alpha、混合和其他光栅操作。
z-buffer 是最常见的可见性算法。每个像素记录当前最近的深度值,新片元只有在更靠近相机时才会更新深度和颜色。 这个方法简单高效,也允许不透明物体以任意顺序渲染;但它只记录一个深度值,因此透明物体通常需要排序或使用顺序无关透明算法。
2.6 Review
回顾整个管线
一个模型从应用程序进入管线后,应用阶段先更新相机、物体状态和绘制数据;几何处理阶段把顶点与法线变换到合适空间, 完成投影、裁剪和屏幕映射;光栅化阶段把图元覆盖区域转换为片元;像素处理阶段计算颜色并通过深度、模板和混合规则写入帧缓冲。
帧缓冲是颜色缓冲、深度缓冲、模板缓冲等缓冲区的统称。为了避免用户看到逐步绘制过程,实时渲染通常采用双缓冲: 场景先绘制到后置缓冲区,完成后再与屏幕上显示的前置缓冲区交换。
Conclusion
总结与扩展阅读
本章描述的管线来自几十年来实时图形 API 和图形硬件的发展。它不是唯一可能的渲染管线; 离线渲染、光线追踪和路径追踪有不同的演化路径。现代实时渲染通常假设使用可编程 GPU, 开发者可以明确控制顶点、像素等阶段中的计算。
补充阅读可以关注 Blinn 的 A Trip Down the Graphics Pipeline、 OpenGL Red Book,以及 realtimerendering.com 上的渲染管线与引擎实现资源。
Chapter 3
The Graphics Processing Unit 图形处理单元
全文本章从数据并行的角度解释 GPU:大量着色器调用以成组线程执行,固定功能单元与可编程阶段共同组成现代图形管线。 阅读重点是理解数据怎样依次经过顶点、曲面细分、几何、像素与合并阶段,以及计算着色器如何把同一套并行硬件用于通用任务。
- 数据并行结构
- 可编程着色器
- 曲面细分与几何阶段
- 像素与合并阶段
- 计算着色器
Chapter 4
Transform 变换
全文变换把模型、相机和投影连接在统一的数学框架中。本章从平移、旋转、缩放和矩阵组合出发,继续讨论矩阵分解、四元数、 蒙皮与变形、几何缓存回放,以及正交和透视投影。关键实践是明确坐标空间、组合顺序和法线变换,避免看似细小却会贯穿整条管线的错误。
- 基本矩阵变换
- 四元数
- 顶点混合与蒙皮
- 变形和缓存动画
- 投影
Chapter 5
Shading Basics 着色基础
全文本章建立后续外观计算的共同语言:着色模型描述表面对光的响应,光源提供方向、颜色与衰减,实现时还要选择逐物体、逐顶点或逐像素的计算频率。 采样与抗锯齿、透明度和 Alpha 合成、线性颜色与显示编码则决定最终像素怎样稳定而正确地出现在屏幕上。
- 着色模型
- 光源与衰减
- 计算频率
- 抗锯齿
- 透明合成
- 显示编码
Chapter 6
Texturing 纹理
纹理把图像、程序信号和更高维数据映射到表面或空间。本章沿纹理管线梳理坐标、采样、过滤与 MIP 映射,随后扩展到程序化纹理、 纹理动画、材质与 Alpha 映射、凹凸和视差技术,以及用纹理表达光照。核心问题始终是“从哪里采样”和“一个像素覆盖多大纹理区域”。
- 纹理管线与过滤
- 图像和程序化纹理
- 材质与 Alpha 映射
- 凹凸和视差映射
- 纹理光源
Chapter 7
Shadows 阴影
阴影既提供光源遮挡关系,也强化物体的接触、尺度和空间位置。本章比较平面投影、阴影体和阴影贴图三类思路,重点展开阴影贴图的精度、偏移与走样问题, 以及 PCF、PCSS 和可过滤阴影表示如何近似软阴影;最后延伸到体积阴影和不规则 z-buffer。
- 平面阴影
- 阴影体
- 阴影贴图
- PCF 与 PCSS
- 可过滤与体积阴影
Chapter 8
Light and Color 光与颜色
本章把渲染中的数值与真实世界的光联系起来。辐射度量描述能量、通量、辐照度与辐亮度,光度学加入人眼响应; 从场景到屏幕还必须处理光谱、颜色匹配、颜色空间、曝光、色调映射与显示设备。理解这些量的单位和变换顺序,是可信光照与 HDR 输出的基础。
- 辐射度量
- 光度学
- 颜色感知
- 颜色空间
- 曝光与显示变换
Chapter 9
Physically Based Shading 基于物理的着色
基于物理的着色用守恒、互易和可测量参数约束材质响应。本章从光与相机进入 BRDF,系统解释菲涅尔反射、微观几何与微表面模型, 再讨论表面反射、次表面散射、布料、波动光学、分层材质以及材质混合和过滤。目标不是某一条固定公式,而是一套能在不同光照下保持一致的材质体系。
- BRDF
- 菲涅尔反射
- 微表面理论
- 次表面与布料
- 分层材质
- 材质过滤
Chapter 10
Local Illumination 局部光照
局部光照关注直接光和预先表示的环境光如何作用于当前表面。本章从面光源与环境光照开始,介绍球面及半球函数、球谐等紧凑表示, 再比较经纬度、球面与立方体环境映射,并说明预过滤环境贴图、分裂积分和 irradiance 环境映射如何服务实时图像照明。
- 面光源
- 球面函数
- 环境映射
- 预过滤环境贴图
- irradiance 表示
Chapter 11
Global Illumination 全局光照
全局光照考虑光在场景中的多次传输。本章以渲染方程为总框架,连接辐射度与光线追踪,并梳理环境光遮蔽、定向遮蔽、 漫反射和镜面全局光照的实时近似。预计算传输、光照探针、体素、屏幕空间反射和动态更新方法各自在范围、延迟、泄漏与成本之间取舍。
- 渲染方程
- 环境光遮蔽
- 预计算光照
- 动态漫反射 GI
- 镜面 GI
- 统一方法
Chapter 12
Image-Space Effects 图像空间特效
图像空间技术把已经生成的颜色、深度、法线和运动信息当作下一阶段输入。本章介绍通用滤波与双边滤波,解释重投影如何复用前一帧数据, 并把这些工具用于镜头光晕、泛光、景深和运动模糊。它们成本通常与屏幕分辨率相关,但必须面对遮挡、缺失信息和时间稳定性。
- 图像处理
- 双边滤波
- 时间重投影
- 泛光
- 景深
- 运动模糊
Chapter 13
Beyond Polygons 超越多边形
三角形不是表达复杂场景的唯一方式。本章覆盖固定视图效果、天空盒和光场,随后讨论 Sprite、图层、广告牌与 impostor 如何用图像代替几何, 以及位移、粒子、点和体素怎样在不同尺度表达细节。选择表示法时,需要同时考虑视角自由度、存储、更新频率和过滤方式。
- 天空盒与光场
- Sprite 和广告牌
- Impostor
- 粒子系统
- 点渲染
- 体素
Chapter 14
Volumetric and Translucency Rendering 体积与半透明渲染
本章把光从理想表面扩展到参与介质和半透明材料。吸收、外散射、内散射、透光率与相位函数构成理论基础,随后用于雾、体积光、天空和云; 表面部分则处理透明、折射、焦散、次表面散射、毛发与皮毛。统一视角是追踪光沿路径传播时不断变化的能量与方向分布。
- 光线散射
- 雾与体积光
- 天空和云
- 半透明与折射
- 次表面散射
- 毛发和皮毛
Chapter 15
Non-Photorealistic Rendering 非真实感渲染
非真实感渲染不以复制照片为唯一目标,而是把视觉风格和信息表达纳入渲染模型。本章从分段色调的卡通着色出发,比较基于几何和图像的轮廓检测, 再扩展到笔触表面、线条、隐藏线、光晕和文本。技术评价标准也随之变化:清晰、可控和风格一致往往比物理精确更重要。
- 卡通着色
- 轮廓检测
- 笔触风格
- 线条与隐藏线
- 文本渲染
Chapter 16
Polygonal Techniques 多边形技术
本章讨论三维数据进入实时管线之前和之后的几何工程问题:曲面如何细分为三角形,网格如何保持方向、实体性、平滑法线与无裂缝边界, 三角形带、索引缓冲和缓存友好布局如何减少传输与重复计算。简化、压缩和精度选择进一步决定资产在不同平台上的成本与质量。
- 数据来源
- 曲面细分
- 网格整合
- 索引与缓存布局
- 简化
- 压缩和精度
Chapter 17
Curves and Curved Surfaces 曲线和曲面
曲线和曲面用紧凑控制参数表达连续形状。本章从 Bézier、Hermite、Kochanek–Bartels 与 B 样条曲线进入参数曲面和 Bézier 面片, 然后讨论隐式表面、Loop 与 Catmull–Clark 细分。GPU 实现关心连续性、误差界、自适应细分和如何只在屏幕真正需要的地方生成几何。
- 参数化曲线
- Bézier 与 B 样条
- 参数化和隐式曲面
- 细分曲面
- 自适应细分
Chapter 18
Pipeline Optimization 管线优化
优化从测量而不是猜测开始。本章先介绍分析与调试工具,再通过改变应用、几何、光栅化、像素和合并阶段的负载定位瓶颈; 随后分别讨论内存访问、API 调用、状态切换、批处理、实例化、着色成本、帧缓冲与多处理。帧时间和稳定性比单独追求平均 FPS 更能说明体验。
- 分析与调试
- 瓶颈定位
- 帧时间测量
- CPU 与 API 优化
- GPU 各阶段优化
- 多处理
Chapter 19
Acceleration Algorithms 加速算法
加速算法通过尽早拒绝不可见或不重要的工作来扩大可渲染场景。本章从 BVH、BSP、k-d 树、八叉树和场景图等空间结构出发, 系统比较背面、视锥体、入口、小物体与遮挡剔除;随后用 LOD、虚拟纹理、流式传输和地形技术管理超出即时内存与计算预算的大型世界。
- 空间数据结构
- 视锥体与遮挡剔除
- 层次 Z 缓冲
- LOD
- 虚拟纹理
- 大型场景流式传输
Chapter 20
Efficient Shading 高效着色
当光源、材质和几何数量增长时,着色架构决定系统能否继续扩展。本章比较延迟着色、贴花、分块与聚类着色如何组织可见样本和光源, 并讨论延迟纹理、对象空间和纹理空间着色。共同思想是把昂贵工作推迟到信息更充分时执行,并让计算频率匹配信号变化频率。
- 延迟着色
- 贴花
- Tiled Shading
- Clustered Shading
- 延迟纹理
- 对象与纹理空间着色
Chapter 21
Virtual and Augmented Reality 虚拟现实和增强现实
VR 与 AR 把显示、跟踪、光学和实时渲染组合成闭环系统。本章先建立设备和物理要素的全景,再讨论 API 与硬件支持, 以及立体渲染、畸变校正、延迟补偿、注视点渲染和 AR 合成。稳定低延迟不是单一优化点,而是从传感器采样到光子输出的整条链路属性。
- 设备与跟踪
- 显示和光学
- XR API
- 立体渲染
- 延迟补偿
- 注视点技术
Chapter 22
Intersection Test Methods 相交测试方法
相交测试是拾取、剔除、碰撞与光线追踪的底层工具。本章先讨论包围体构造、几何概率和实现经验,再逐一推导射线与球、盒、三角形和多边形, 平面与盒、三角形与三角形、包围体之间、视锥体以及线和平面的测试。实际系统既要正确处理退化情况,也要让最常见拒绝路径足够便宜。
- GPU 拾取
- 包围体
- 射线相交
- 三角形测试
- 包围体测试
- 视锥体测试
Chapter 23
Graphics Hardware 图形硬件
本章深入 GPU 为何能高吞吐地执行图形和计算任务:大规模线程调度用并发隐藏延迟,寄存器和占用率限制同时驻留的工作, 内存层次、总线、缓存和压缩决定数据供给。后半部分把这些原则落到颜色、深度、纹理单元、具体架构案例和专用光线追踪硬件上。
- 光栅化硬件
- 调度与占用率
- 内存和总线
- 缓存与压缩
- 深度和纹理单元
- 光追架构
Chapter 24
The Future 未来
终章把注意力从已有算法转向仍在变化的边界:更逼真的光传输、更高效的表示、更自然的人机界面,以及研究、工具和硬件之间持续互相推动的关系。 它最终把问题交还给读者——实时渲染的未来不只由下一代设备定义,也由学习者选择研究、实现和分享什么来塑造。
- 开放问题
- 硬件与算法演进
- 研究和实践
- 读者的下一步
Chapter 25 · Online
Collision Detection 碰撞检测
这个在线扩展章节把碰撞系统分成宽阶段、中阶段和窄阶段:先快速找出潜在碰撞对,再用空间结构和精确几何测试缩小结果。 后续内容覆盖射线、BSP、限时检测、可变形模型、连续碰撞、碰撞响应与粒子系统,重点是在遗漏碰撞、误报、稳定性和帧预算之间建立可控流程。
- 宽中窄阶段
- 空间结构
- 连续碰撞
- 可变形模型
- 碰撞响应
- 动态相交测试
Chapter 26 · Online
Real-Time Ray Tracing 实时光线追踪
这个在线扩展章节从光线生成、遍历、相交和着色的基本循环进入现代实时光追 API。顶层与底层加速结构组织实例和几何, 各类光追着色器控制命中与未命中后的工作;一致性、采样数量、降噪和纹理过滤则决定低样本结果能否在实时预算内保持稳定。
- 光线追踪基础
- 光追着色器
- TLAS 与 BLAS
- 一致性
- 时空降噪
- 纹理过滤