VCI - 12: 高级渲染 (Advanced Rendering)
课程: 北京大学视觉计算 (Visual Computing) 2025秋季 章节: 第12章 高级渲染 内容: 渲染方程、BRDF、微表面模型、纹理映射、光线追踪
目录
1. 光线追踪基础
1.1 光线追踪概述
光线追踪 (Ray Tracing) 是一种基于物理的渲染方法,通过模拟光线在场景中的传播来计算逼真的图像。与光栅化不同,光线追踪能够自然地处理:
- 软阴影 (Soft Shadows)
- 反射 (Reflections)
- 折射 (Refraction)
- 全局光照 (Global Illumination)
1.2 基本原理
光线追踪的核心思想:
- 从相机发出光线 — 对每个像素发出一条主光线
- 追踪光线 — 计算光线与场景的交点
- 着色计算 — 在交点处计算光线的贡献
- 递归追踪 — 沿反射/折射方向继续追踪
1.3 光线追踪的应用
视觉特效:
- Ex Machina (2014) — 机器人角色渲染
- Gravity (2013) — 空间场景光照
- The Lord of the Rings (2003) — 复杂场景渲染
视频游戏:
- Assassin’s Creed Odyssey (2018)
- Black Myth: Wukong (2024)
- Elden Ring (2022)
- 实时光线追踪通过GPU加速实现
科学可视化:
- 物理模拟结果可视化
- 医学影像渲染
- 建筑光照分析
2. 渲染方程
2.1 光学基础
辐射度量学 (Radiometry)
辐射通量 (Radiant Flux):单位时间内的能量,单位为瓦特 (W)
\[\Phi = \frac{dQ}{dt}\]辐照度 (Irradiance):单位面积接收的辐射通量,单位为 W/m²
\[E = \frac{d\Phi}{dA}\]辐射强度 (Intensity):单位立体角的辐射通量,单位为 W/sr
\[I = \frac{d\Phi}{d\omega}\]辐射率 (Radiance):单位立体角、单位投影面积的辐射通量,单位为 W/(m²·sr)
\[L = \frac{d^2\Phi}{dA \cos\theta \, d\omega}\]其中 $\theta$ 是光线与表面法线的夹角。
2.2 渲染方程
渲染方程 (Rendering Equation) 是计算机图形学中最重要的方程,描述了点p处沿方向 $\omega_o$ 发出的辐射:
\[L_o(p, \omega_o) = L_e(p, \omega_o) + \int_{\Omega} f_r(p, \omega_i, \omega_o) L_i(p, \omega_i) \cos\theta_i \, d\omega_i\]各项含义:
- $L_o(p, \omega_o)$ — 点p沿 $\omega_o$ 方向的出射辐射
- $L_e(p, \omega_o)$ — 点p的自发光
- $\int_{\Omega}$ — 对所有入射方向的积分
- $f_r(p, \omega_i, \omega_o)$ — BRDF (双向反射分布函数)
- $L_i(p, \omega_i)$ — 从 $\omega_i$ 方向入射到点p的辐射
- $\cos\theta_i$ — 余弦因子(表示入射角的影响)
2.3 渲染方程的含义
渲染方程表明:出射光 = 自发光 + 入射光经过表面反射的贡献
这是一个积分方程,因为:
- 入射光可能来自其他表面(需要递归求解)
- 需要对整个半球积分
2.4 蒙特卡罗积分求解
由于解析求解通常不可行,使用蒙特卡罗方法进行数值近似:
\[L_o \approx \frac{1}{N} \sum_{i=1}^{N} \frac{f_r(p, \omega_i, \omega_o) L_i(p, \omega_i) \cos\theta_i}{p(\omega_i)}\]其中 $p(\omega_i)$ 是采样方向的概率分布。
3. BRDF - 双向反射分布函数
3.1 BRDF定义
双向反射分布函数 (Bidirectional Reflectance Distribution Function, BRDF) 表示从入射方向 $\omega_i$ 来的光线有多少比例被反射到出射方向 $\omega_o$:
\[f_r(p, \omega_i, \omega_o) = \frac{dL_o(p, \omega_o)}{dE_i(p, \omega_i)}\]单位:sr⁻¹ (每立体角)
物理约束:非负性
\[f_r(p, \omega_i, \omega_o) \geq 0\]3.2 能量守恒
BRDF必须满足能量守恒定律——反射的能量不能超过入射的能量:
\[\int_{\Omega} f_r(p, \omega_i, \omega_o) \cos\theta_o \, d\omega_o \leq 1\]3.3 光学可逆性
根据光学中的可逆原理,BRDF关于入射和出射方向对称:
\[f_r(p, \omega_i, \omega_o) = f_r(p, \omega_o, \omega_i)\]3.4 标准反射模型
漫反射材料 (Diffuse / Lambertian)
完全漫反射材料的BRDF为常数:
\[f_r = \frac{\rho}{\pi}\]其中 $\rho$ 是反射率 ($0 \leq \rho \leq 1$)。
特点:
- 从任何方向看都有相同的亮度
- 服从Lambert余弦定律
- 常见于哑光表面
镜面反射 (Perfect Specular)
完全镜面反射的BRDF:
\[f_r(p, \omega_i, \omega_o) = \delta(\omega_i - \omega_r) / \cos\theta_i\]其中 $\omega_r$ 是根据反射定律计算的反射方向。
特点:
- 反射方向唯一确定
- 只在特定方向有反射
- 常见于镜子和抛光金属
光泽材料 (Glossy Material)
介于完全漫反射和完全镜面反射之间的材料。
特点:
- 在镜面反射方向附近有峰值
- 但不完全限制在单一方向
- 常见于陶瓷、塑料等
3.5 BRDF的测量
Stanford Gonioreflectometer — 在实验室中精确测量真实材料的BRDF。
过程:
- 固定入射光方向
- 在各种出射方向测量反射光强度
- 重复不同的入射方向
- 建立BRDF数据库
4. 微表面BRDF模型
4.1 微表面理论
虽然宏观上表面看起来光滑,但在微观尺度上存在许多微小的凹凸。微表面理论将这些微观结构建模为小的完全镜面反射器。
关键假设:
- 每个微小表面都进行完全镜面反射
- 微表面法线分布造成了宏观的漫反射或光泽特性
4.2 微表面BRDF的三个组成部分
1. 法线分布函数 (Normal Distribution Function, NDF)
描述微表面法线相对于宏观法线的分布。
Beckmann分布:
\[D(h) = \frac{1}{\pi \alpha^2 \cos^4\theta_h} \exp\left(-\tan^2\theta_h / \alpha^2\right)\]| 其中 $h$ 是半方向($h = \frac{\omega_i + \omega_o}{ | \omega_i + \omega_o | }$),$\alpha$ 是表面粗糙度。 |
GGX分布 (Trowbridge-Reitz):
\[D(h) = \frac{\alpha^2}{\pi(\alpha^2 \cos^2\theta_h + \sin^2\theta_h)^2}\]GGX在处理高光尾部时表现更好,更符合真实材料。
2. 几何函数 (Geometry Function, G)
描述微表面遮挡和自遮挡的影响。当光线在微表面凹陷中被挡住时,不会对反射贡献。
Smith’s Shadowing-Masking 函数:
\[G(\omega_i, \omega_o, h) = G_1(\omega_i) \cdot G_1(\omega_o)\]其中:
\[G_1(\omega) = \frac{1}{1 + \Lambda(\omega)}\]3. Fresnel项
描述光线在不同角度的反射比例。在掠射角(接近平行于表面),反射率增加。
Fresnel-Schlick 近似:
\[F(\omega_i, h) = F_0 + (1 - F_0)(1 - \cos(\omega_i, h))^5\]其中 $F_0$ 是垂直入射的反射率。
4.3 完整的微表面BRDF
Cook-Torrance模型:
\[f_r(\omega_i, \omega_o) = k_d \frac{\rho}{\pi} + k_s \frac{D(h) G(\omega_i, \omega_o, h) F(\omega_i, h)}{4(\omega_i \cdot n)(\omega_o \cdot n)}\]各项:
- $k_d$ — 漫反射系数
- $k_s$ — 镜面反射系数
- $D$ — 法线分布
- $G$ — 几何函数
- $F$ — Fresnel项
- $(\omega_i \cdot n)$、$(\omega_o \cdot n)$ — 入射和出射方向的余弦
4.4 数据驱动的BRDF模型
对于复杂材料,直接使用测量数据拟合BRDF:
过程:
- 在实验室测量真实材料的BRDF
- 存储为高维查找表
- 渲染时直接查表而不是计算
优点:
- 准确性高
- 对非标准材料有效
缺点:
- 存储空间大
- 难以进行实时渲染
- 难以在不同光照条件下插值
5. 纹理映射
5.1 纹理映射基础
纹理映射 (Texture Mapping) 是将2D图像粘贴到3D模型表面的过程。
参数化过程:
- 建立UV坐标 — 将3D模型表面映射到2D平面 $(u, v) \in [0,1]^2$
- 查询纹理 — 根据点的UV坐标从纹理图像中查询颜色
- 应用到模型 — 将纹理颜色用于着色计算
数学表达:
\[\text{Color}(p) = \text{Texture}(UV(p))\]5.2 纹理坐标的创建
展开法 (Unwrapping)
将3D模型表面”展开”成2D平面,最小化扭曲。
挑战:
- 如何在不过度拉伸或撕裂的情况下展开复杂表面
- 最小化面积和角度的扭曲
投影法
直接将3D坐标投影到2D平面:
- 平面投影 — 垂直投影到平面
- 柱面投影 — 投影到圆柱面
- 球面投影 — 投影到球面
5.3 纹理反射率属性 (Texture Reflectance Properties)
使用纹理控制材料的各种属性:
颜色纹理 (Diffuse/Albedo Map)
控制漫反射颜色 $\rho(u, v)$:
\[L_o = \int_{\Omega} f_r(u,v) L_i \cos\theta \, d\omega\]其中 $f_r$ 依赖于纹理的颜色值。
法线纹理 (Normal Map)
存储微小表面的法线信息,产生凹凸感而无需修改几何:
\[n(u, v) = \text{NormalMap}(u, v)\]在着色计算中使用这个扰动法线而不是几何法线。
优点:
- 增加视觉细节而不增加模型复杂度
- 计算高效
粗糙度纹理 (Roughness Map)
控制表面的微表面粗糙度参数 $\alpha(u, v)$:
\[\alpha(u, v) = \text{RoughnessMap}(u, v)\]光滑的区域 ($\alpha$ 小) 显示尖锐的高光,粗糙的区域 ($\alpha$ 大) 显示扩散的高光。
金属感纹理 (Metallic Map)
区分金属和非金属材料:
- 金属:反射率很高,反射颜色由金属类型决定
- 非金属:反射率低(通常 $F_0 \approx 0.04$),反射颜色为白色
自发光纹理 (Emissive Map)
为某些区域添加自发光:
\[L_o = L_e(u, v) + \text{...反射项...}\]5.4 纹理过滤和采样
纹理缩小 (Minification)
当纹理像素小于屏幕像素时(较远的物体):
- 最近邻 — 简单但有走样
- 双线性过滤 — 插值相邻4个像素
- 三线性过滤 — 在多个mipmap级别间插值
- 各向异性过滤 — 考虑观看方向
Mipmap
预先计算纹理的多个分辨率版本:
- Level 0 — 原始纹理 (1024×1024)
- Level 1 — 2×缩小 (512×512)
- Level 2 — 4×缩小 (256×256)
- …
根据距离自动选择合适的mipmap级别。
5.5 几何细节纹理化 (Texture Geometric Detail)
位移映射 (Displacement Mapping)
沿着表面法线移动顶点位置:
\[p'(u,v) = p(u,v) + h(u,v) \cdot n(u,v)\]其中 $h(u,v)$ 是从高度纹理读取的位移值。
优点:
- 真正改变几何
- 可以看到剪影边缘的细节
缺点:
- 需要细分网格
- 计算成本高
视差映射 (Parallax Mapping)
改进法线映射,考虑视点位置:
根据视线方向和高度纹理,调整UV坐标以创建深度错觉。
6. 环境和反射映射
6.1 环境映射 (Environment Mapping)
使用一张全景图像表示场景的光照环境。
立方体映射 (Cube Mapping)
将环境表示为立方体的6个面:
- 正X、负X — 右、左
- 正Y、负Y — 上、下
- 正Z、负Z — 前、后
优点:
- 离散性强,便于存储和查询
- 支持硬件过滤
球面映射 (Spherical Mapping)
环境存储在一张球形全景图上:
\[\text{dir} = (\sin\phi\cos\theta, \cos\phi, \sin\phi\sin\theta)\]其中:
- $\phi$ — 极角 (0到π)
- $\theta$ — 方位角 (0到2π)
6.2 反射映射 (Reflection Mapping)
对于反射性强的物体,使用环境映射计算反射:
\[L_o = f_r L_e(\omega_r)\]其中 $\omega_r$ 是根据反射定律计算的反射方向。
6.3 基于图像的光照 (Image-Based Lighting, IBL)
使用高动态范围 (HDR) 环境贴图作为场景的主要光源。
过程:
- 采样环境光 — 从环境贴图采样多个方向的光
- 计算着色 — 对每个方向求和贡献
- 预计算优化 — 使用球谐函数或立方体贴图mipmap预计算光照
优点:
- 自然的全局光照效果
- 与任何环境兼容
7. 光线追踪在生产中的应用
7.1 视觉特效 (Visual Effects)
静帧渲染 — 使用光线追踪计算高质量图像:
- 降噪 — 使用多个样本,然后应用降噪滤波器
- 自适应采样 — 在高频区域使用更多样本
- 缓存和重用 — 在序列帧间缓存计算结果
性能指标 — 以每像素样本数 (spp) 衡量:
- 低质量:1-4 spp
- 中等质量:16-64 spp
- 高质量:256-1024 spp
7.2 实时光线追踪 (Real-Time Ray Tracing)
现代GPU支持硬件光线追踪:
NVIDIA RTX — 专用光线追踪核心 AMD RDNA 2 — 光线加速器 Intel Arc — 光线追踪单位
应用:
- 实时反射和阴影
- 1080p 30-60 FPS(配合混合渲染)
- 游戏中的全局光照
7.3 混合渲染 (Hybrid Rendering)
结合光栅化和光线追踪:
- 光栅化主要内容 — 快速渲染基础几何和着色
- 光线追踪增强 — 仅对特定效果(如反射、阴影)使用光线追踪
- 降噪 — 使用深度学习模型降低光线追踪的噪声
优势:
- 比纯光线追踪快得多
- 相比纯光栅化视觉效果显著提升
总结
高级渲染是从物理原理到图像生成的桥梁:
- 渲染方程 — 统一的物理框架
- BRDF — 材料的光学特性描述
- 微表面模型 — 现代PBR的基础
- 纹理映射 — 高效的细节表达
- 环境映射 — 全局光照的实现
- 光线追踪 — 物理准确但计算密集
- 实时技术 — 平衡质量和性能
现代渲染通常采用物理基渲染 (Physically Based Rendering, PBR) 管线,确保材料在不同光照条件下的表现一致且可预测。
Enjoy Reading This Article?
Here are some more articles you might like to read next: