体数据 = 标量场 + 规则网格
最常见的体数据是把空间切成小立方体,每个小格存一个数值 —— 这就是体素(Voxel),类比像素的 3D 版本。所有体素连起来构成标量场 f(x,y,z):CT 里是 Hounsfield 单位,MRI 里是信号强度,气象里可以是温度或水汽密度。
- 分辨率决定细节:如 512×512×300 已是近 8000 万体素
- 间距(spacing)不一定各向同性,层厚常大于面内像素
- 标量本身没有颜色,颜色是后面“赋予”的
渲染的知识看着散,是因为缺一条主线。这套内容按一条链排:大章一先立主线——渲染方程与光传输;大章二走网格渲染;大章三、四换介质情形走体渲染;大章五回到场景做应用与选型。顺序就是总览页目录的顺序:顺读是课程,跳读是手册;每节都有公式、算例与动画。诊断场景始终一条原则:先保真,再好看。
把数据想成一团有颜色的雾:每个位置都有密度。光线穿过雾时,前面的雾会遮挡后面、也会被后面透过来的光点亮 —— 体渲染算的就是这件事。
与面渲染最大的区别:面渲染只保留等值面,体渲染保留整条光线上的信息,所以能做半透明分层、密度渐变与内部透视。
最常见的体数据是把空间切成小立方体,每个小格存一个数值 —— 这就是体素(Voxel),类比像素的 3D 版本。所有体素连起来构成标量场 f(x,y,z):CT 里是 Hounsfield 单位,MRI 里是信号强度,气象里可以是温度或水汽密度。
面渲染先提取一个阈值对应的表面(如骨骼表面),再用光照画这张皮 —— 快、边界锐利,但阈值之内/之外的信息全丢了。直接体渲染(DVR)不提取表面,每条视线都穿过全量数据做积分,因此能同时呈现皮肤、肌肉、骨骼的半透明叠加。
采样点往往落在体素之间,需要插值。顺序不同,结果差别很大:
体渲染里一个采样点贡献多少,不只看它自己的不透明度 α,还看它前面已经累积了多少遮挡。前面越不透明,后面贡献越小 —— 这就是前向后合成(Front-to-Back Compositing),也是能做早期终止优化的根本原因:累积不透明度接近 1 时,后面再算也是浪费。
全站只有这一份目录,顺序就是阅读顺序:每节只用前面已经定义过的概念。大章页只列本章小节,术语与动画的完整清单在附篇,这里不重复。
后面十节看起来方法各异,其实都在解同一个方程。这一节先把主线立住:图像是什么、光在路上会遭遇什么、渲染方程的每个符号是什么意思。读完再进具体算法,每一节的开头都会回到这里对表。
相机和眼睛都不“看物体”,它们只在成像面上记录:沿某个方向到达传感器的光有多少、是什么颜色。这个量叫辐亮度(Radiance)L,单位 W/(m²·sr)——同时编码了能量强度与传播方向,是渲染里唯一被反复搬运的核心物理量。
把四件事排进时间顺序——发射 → 传播 → 在表面或介质里散射/被吸收 → 再传播 → …… → 到达传感器——就是光传输。渲染方程是这条链的数学总账。
Lo(x, ωo) = Le(x, ωo) + ∫Ω fr(x, ωi, ωo) · Li(x, ωi) · cosθi dωi逐符号读:
· Lo(x, ωo) — 点 x 沿方向 ωo 离开的辐亮度,这正是要算的答案
· Le — 点 x 自身发射的辐亮度(非光源处为 0)
· ∫Ω … dωi — 对点 x 上方半球 Ω 的所有入射方向积分求和
· fr — BRDF:入射方向 ωi 的光有多大比例被反射到 ωo,由材质决定
· Li(x, ωi) — 从 ωi 方向打到 x 的辐亮度——它本身又是别处的 Lo,方程因此递归:这正是多次弹射(全局光照)的来源
· cosθi — 入射方向与法线的夹角余弦:光越斜,摊在单位面积上越薄
设墙面一点 x 不是光源(Le=0),漫反射材质反射率 ρ=0.8,其 BRDF 为常数 fr = ρ/π ≈ 0.255。一盏灯从 θi=37°(cosθi=0.8)方向照来,在它张的立体角 Δω=0.5 sr 内辐亮度 Li=6,其余方向无光。积分退化为一次乘法:
把场景表面离散成三角形,逐个投影到屏幕;积分只保留光源直达项,间接光靠阴影图、探针等技巧补。解得最粗,但快到能每秒算 60 张以上——2.1。
从像素反着追光的来路,在交点处真的去收集其他方向的光:确定性递归是 Whitted 光追(2.2),随机采样估全积分是路径追踪与全局光照(2.3)。
当“表面”不复存在、空间里处处是半透明介质时,方程变形成沿光线的体渲染积分:每一点既吸收又发射(还可散射)。3.1–4.3整组都在解它,方程在3.2写全。
| 路线 | 遍历顺序 | 反射 / 阴影 / 透明 | 速度特征 | 最适合 |
|---|---|---|---|---|
| 光栅化 | 对象序:逐三角形投影到屏幕 | 靠阴影图、反射探针、排序等技巧模拟 | 最快,硬件管线专为它设计 | 游戏、交互应用、面渲染 |
| 光线追踪 | 图像序:逐像素发主光线 + 次级光线 | 原生支持,物理自然 | 中—慢,靠 BVH 与硬件 RT 核心加速 | 高质量实时、建筑与产品可视化 |
| 路径追踪 | 图像序 + 随机弹射积分 | 完整 GI、焦散、多次散射 | 最慢,以小时计或重度降噪 | 影视离线、科学参考解 |
| 体积分(DVR) | 图像序:逐像素沿线积分连续介质 | 透明是原生语义;阴影/散射需额外积分 | 取决于步数与跳跃效率 | CT/MRI、流体、气象等体数据 |
for 每个像素 p:
构造 p 的视线(原点 = 相机, 方向 = 穿过 p)
L ← 沿视线估算到达相机的辐亮度 # ← 所有算法只在这里不同
像素值 ← tonemap(L) 并量化到 0–255
估算 L 的三种实现 = 本书三条路:
光栅化: 枚举三角形, 谁覆盖 p 就算谁的直接光
光线追踪: 求最近交点, 递归/随机收集 L_i
体渲染: 沿线步进, 逐段累积发射并扣减透过率1.1立了主线:逐像素估算辐亮度。光栅化选的估法是对象序——不逐像素找光,而是枚举每个三角形、问它盖住哪些像素,并在覆盖处只算光源直达的那部分积分。少算的部分(间接光)用技巧补,所以它快;也所以它只是近似。
模型变换、视图变换、投影变换,把 3D 顶点送到裁剪空间,计算光照或传递插值属性。
顶点组装成三角形,裁掉视锥外部分,做背面剔除与视口变换。
三角形覆盖哪些像素就生成哪些片段(fragment),深度、法线、UV 在三角形内插值。
每个片段查纹理、算光照、写颜色与深度。现代 GPU 的可编程着色器主要工作在这里。
深度测试、模板测试、透明混合、抗锯齿解析,最终写入帧缓冲显示。
光栅化管线一句话:以对象为序枚举三角形,再问“它盖住哪些像素”——快、硬件友好,所以游戏与实时系统默认用它;阴影、反射等全局效果需要额外技巧补。
着色回答“一个点在给定光照下多亮、什么颜色”。演进路线是一条从“像”到“准”的线:
PBR 不是某个单独算法,而是一套约束:能量守恒、菲涅尔效应、微平面理论。工业标准是金属度–粗糙度工作流:
边界:PBR 管的是表面材质。把它套到体数据上要小心——体素没有表面微结构,医学 DVR 的颜色来自传递函数的人为赋值,不服从 PBR 的物理语义。
锯齿、闪烁、摩尔纹本质都是采样率低于信号频率。解法只有两类:渲前滤波,或提高采样再解析:
网格(Mesh)是面渲染的数据结构:用顶点与三角形逼近表面。顶点带位置、法线、UV、切线、颜色、骨骼权重,经顶点/索引缓冲(VBO/IBO)送入 GPU;索引复用顶点、条带化与缓存友好的排布直接决定带宽。下面六步与上面的五步管线一一对应,逐步展开。
| 管线架构 | 怎么做 | 优势 | 代价 / 适用 |
|---|---|---|---|
| 前向渲染 Forward | 每个物体绘制时遍历所有影响它的光源,一次算完着色 | 透明、MSAA、多材质天然友好,实现简单 | 光源一多成本 ∝ 物体×光源;适合光源少的场景与移动端 |
| 延迟渲染 Deferred | 先把位置/法线/材质写入 G-Buffer,再在屏幕空间对可见像素统一算光照 | 光照成本只与像素数和光源覆盖有关,几百盏动态光可行 | 显存带宽大、透明需单独前向补、MSAA 难;主流大世界游戏的选择 |
| Forward+ / Clustered | 把视锥切成块/簇,预先为每块建光源列表,前向着色时只遍历本块光源 | 兼得前向的透明/MSAA 与近延迟的光源扩展性 | 实现复杂度最高;现代引擎(与延迟并存)的常见答案 |
三角形屏幕坐标 A(0,0)、B(10,0)、C(0,10),取内部点 P(2,2)。重心坐标 = 对顶子三角形面积占比:总面积 50,子面积 PBC=30、PCA=10、PAB=10,得权重 (u,v,w) = (0.6, 0.2, 0.2)(和为 1 ✓)。
设三顶点某属性(如纹理 U)为 0、1、0。屏幕空间直接插值:0.6×0 + 0.2×1 + 0.2×0 = 0.20。但透视下这是错的:属性定义在三维表面上,必须先除以齐次 w 再插值、最后除回来。设三顶点裁剪 w 为 1、2、1(B 更远):
noperspective 时才关掉。输入: 三顶点(已变换到裁剪空间, 带属性 attr 与齐次 w)
1. 透视除法 → NDC → 视口映射到屏幕坐标
2. 按绕序判正/背面, 背面直接丢弃 (culling)
3. 求屏幕包围盒, 逐像素用边函数测覆盖:
像素在内 → 得重心坐标 (u, v, w_b)
4. 深度 z 用重心线性插值; 与深度缓冲比较:
更远 → 丢弃; 更近 → 更新深度缓冲
5. 属性做透视校正插值:
attr = (u·a₁/w₁ + v·a₂/w₂ + w_b·a₃/w₃)
/ (u/w₁ + v/w₂ + w_b/w₃)
6. 片段着色: 纹理采样 + BRDF 直接光 → 写颜色与光栅化相反,光线追踪以图像为序:每个像素发射主光线,求与场景的最近交点,再发阴影光线、反射/折射光线递归求解。路径追踪进一步用蒙特卡洛采样随机弹射光线,数值求解渲染方程,物理最完整。
左:单采样下斜边呈阶梯并随亚像素移动而爬行;右:多采样按覆盖率混合后边缘平稳。把动画暂停在任意时刻对比像素格,差别最直观。
Cost(切分) = Ctrav + (SAL/SAP)·NL·Chit + (SAR/SAP)·NR·Chit符号:Ctrav 多测一个节点的固定开销;SAP/SAL/SAR 父/左/右包围盒表面积——一条随机光线命中父盒后落进子盒的概率 ≈ 子盒表面积占比;NL/NR 子盒内三角形数;Chit 一次射线–三角形求交的开销。构建时枚举候选切分面,取代价最小的;两个子盒都比不切分还贵时就停(成为叶子)。
选切分:父盒 SAP=100、含 12 个三角形,Ctrav=Chit=1。候选 A:左 SA=40 装 3 个、右 SA=70 装 9 个 → 代价 = 1 + 0.4×3 + 0.7×9 = 8.5。候选 B:左右 SA 各 55、各装 6 个 → 代价 = 1 + 0.55×6 + 0.55×6 = 7.6。B 胜出:SAH 惩罚的不是“盒大”,而是“光线大概率落进去却还要测很多三角形”。不切分的代价是 12,两者都值得切。
走遍历:场景 12,000 个三角形建成 BVH。一条光线:测根盒(命中,1 次)→ 测两个子盒(左中、右不中,右子树 5,800 个三角形整棵剪掉)→ 沿左路继续下钻……全程约 11 次盒测试 + 3 次三角形求交就找到最近交点,对比暴力遍历的 12,000 次求交——这就是光追可行的全部原因。
渲染方程把出射光写成自发光 + 半球上所有入射光经 BRDF 的积分——全局光照(GI)就是求这个积分里“光弹射多次”的部分:
⟨F⟩ = (1/N) · Σi=1..N f(xi) / p(xi), xi ~ p符号:F 是要求值的积分(如渲染方程的半球积分);f(xi) 是第 i 个采样点处的被积函数值;p(xi) 是抽到这个样本的概率密度(pdf)——除以它是为了纠偏:容易抽到的方向样本多,就要按概率打折,否则高估;N 样本数。估计无偏(期望等于真值),误差(标准差)∝ 1/√N:降一半噪声要 4 倍样本,这是所有路径追踪成本曲线的根。
漫反射点 ρ=0.8(fr=ρ/π),用余弦加权采样方向:pdf p(ω)=cosθ/π。代入估计量,单样本贡献 = fr·Li·cosθ / p(ω) = (ρ/π)·Li·cosθ / (cosθ/π) = ρ·Li——cosθ 与 π 恰好抵消,这正是余弦加权被称为“为漫反射量身定做”的原因。
光线以步长 Δs 前进,在每个采样位置用三线性/高阶插值取标量值。
传递函数把标量(+梯度)映射为颜色 RGB 与不透明度 α。
用梯度当法线,做漫反射/镜面反射,可选环境光遮蔽与阴影。
沿光线按前→后或后→前累积颜色与透明度,得到像素值。
离开数据体、或累积 α≈1 时停止,避免无效采样。
C = ∫₀ᴸ C(s) · α(s) · exp( − ∫₀ˢ α(t) dt ) ds
C(s) 该点发射的颜色(经传递函数 + 着色)
α(s) 该点的不透明度 / 消光系数
exp(−∫α) 从该点到眼睛还剩多少透过率
L 光线在体内的总长度离散化后就是熟悉的迭代:C ← C + (1 − A) · αᵢ · Cᵢ A ← A + (1 − A) · αᵢ 其中 A 为已累积不透明度。
真实光在介质里有吸收、发射、散射、反射四件事。经典 DVR 只保留吸收 + 发射,忽略散射 —— 假设每个体素自己发光、同时吸收穿过它的光。这个简化让积分可沿单条光线独立求解,才有了实时交互。
同一份数据,换一条传递函数,看到的器官完全不同。它是体渲染里最重要、也最难调的一步。
1D TF:横轴是标量值,纵轴是不透明度,再配一条颜色曲线。把骨骼标量区间拉高 α、软组织压低,就能“透过皮肤看骨头”。本质是窗宽窗位的彩色、非线性推广。
2D TF:横轴标量、纵轴梯度幅值。均匀组织内部梯度低、组织交界梯度高 —— 用梯度这一维,就能只强化边界、抑制内部噪声,临床上对血管与器官轮廓尤其有效。
自动 TF 设计(基于直方图、聚类、信息熵)是长期研究方向,但临床落地仍以预设 + 交互微调为主。
T(s) = exp( − ∫₀ˢ σt(t) dt ) αi = 1 − exp( −σt,i · Δs )符号:σt 消光系数(1/长度),介质“有多挡光”;T(s) 光走过路程 s 后剩余的比例;αi 第 i 个步段(长 Δs)的不透明度。第二式就是3.1 α 校正公式的来源:α 随步长指数变化,把它展开成 (1−α)Δs/Δs₀ 正是同一件事。均匀介质时积分退化为 T = e−σt·s:σt=0.5/mm 的组织,2mm 厚只剩 e−1≈37% 的光能穿过。
第一步,查传递函数:设 1D TF 的不透明度控制点为:空气 −1000 HU→0、脂肪 −100 HU→0.05、软组织 40 HU→0.15、骨 400 HU→0.85,控制点间线性插值。某采样点 HU=200,落在软组织与骨之间:比例 (200−40)/(400−40)=0.44,α₀ = 0.15 + 0.44×(0.85−0.15) = 0.46(对应参考步长 1mm)。当前步长 2mm,校正:α = 1 − (1−0.46)² = 0.71。
第二步,逐步合成:一条光线依次遇到 5 个采样点(α 已校正,C 为该点经 TF 得到的亮度),按下表迭代 C ← C + (1−A)·α·Ci,A ← A + (1−A)·α:
| 采样点 | αi | Ci | 本步贡献 (1−A)αC | 累积 A | 累积 C |
|---|---|---|---|---|---|
| 1 | 0.10 | 0.20 | 0.020 | 0.100 | 0.020 |
| 2 | 0.45 | 0.60 | 0.243 | 0.505 | 0.263 |
| 3 | 0.80 | 1.00 | 0.396 | 0.901 | 0.659 |
| 4 | 0.30 | 0.50 | 0.015 | 0.931 | 0.674 |
| 5 | 0.05 | 0.30 | 0.001 | 0.934 | 0.675 |
输入: 光线 (原点 o, 方向 d), 步长 Δs, 传递函数 TF
1. 求光线与数据体包围盒的交段 [t_near, t_far]
2. C ← 0; A ← 0; t ← t_near (+ 随机抖动, 见3.1)
3. 当 t < t_far 且 A < 0.98:
s ← 三线性采样标量(o + t·d) # 重采样
(rgb, α₀) ← TF(s, 梯度幅值) # 分类
α ← 1 − (1−α₀)^(Δs/Δs₀) # 步长校正
rgb ← 着色(rgb, 梯度, 光源) # 3.3
C ← C + (1−A)·α·rgb; A ← A + (1−A)·α # 合成
t ← t + Δs
4. 像素 ← C 与背景按 A 混合输出DVR 与 MIP 走同一条光线、用同一批采样,差别只在合成规则——并排看最清楚。
采样点从前到后依次贡献颜色,前方累积的不透明度 A 不断吃掉后方的权重 (1−A)·α。
不累积、不混合,只维护一个“至今最大密度”;最终像素等于全程峰值,与峰值出现的位置无关。
| 方法 | 原理一句话 | 优势 | 代价 / 局限 | 典型场景 |
|---|---|---|---|---|
| 光线投射 Ray Casting / Marching | 图像序:每个像素发一条光线,沿线步进采样并合成。GPU 并行天然契合。 | 画质最高、支持任意 TF 与着色、易做空间跳跃 | 采样数 ∝ 分辨率×步数,大数据需加速结构 | 现代 DVR 事实标准 |
| 纹理切片 Texture-based Slicing | 用一组平行于视面的多边形切片采样 3D 纹理,靠硬件混合合成。 | 实现简单、老硬件也能跑、混合免费 | 视角切换有 popping、着色与跳跃难做 | 早期 GPU、嵌入式 |
| 抛雪球 Splatting | 对象序:每个体素投成一个带足迹的雪球 splat, splat 之间混合。 | 只处理非空体素、渐进细化方便 | 排序与足迹计算复杂、易有伪影 | 稀疏数据、历史方案 |
| Shear-Warp | 把体数据错切到易于逐片扫描的坐标系,先合成中间图再 warp 回正。 | CPU 时代最快、缓存友好 | 画质与灵活性受限,GPU 时代已淘汰 | 经典教材、历史实现 |
| 等值面提取 Marching Cubes | 不做体积分,先按阈值抽三角面,再走传统面渲染管线。 | 边界锐利、可测可打印、可与手术规划对接 | 丢内部信息、阈值敏感、拓扑噪声 | 骨骼、植入物、3D 打印 |
每条光线只取沿途最大标量值,不做透明度累积。高密度结构(造影血管、骨)极醒目,计算最便宜。
完整的发射–吸收积分 + 传递函数。有深度、有层级、能半透明,是“体渲染”狭义所指的方法。
沿任意平面重切数据体,得到轴/冠/矢或斜位、曲面断层图。不是投影,是“换个方向看切片”。
光线投射与步进采样的可调演示在 3.1模拟器(可切换 DVR / MIP / 等值面并调步长);下面是其余四种算法各自的过程动画。
一叠平行于视面的切片从前到后依次采样 3D 纹理并硬件混合,视点一动整叠切片跟着重排。
对象序:每个体素投成带高斯足迹的圆盘 splat,按深度排序后依次泼溅混合,重叠处密度自然叠加。
先把体数据按视线错切成易逐片扫描的形状,合成中间图后,再 warp 拉回正确视角。
逐个体元看 8 个角点的标量与阈值关系,查表在边上插值出交点、连成三角片;动画以二维等值轮廓类比三维过程。
采样点几乎总落在体素之间,把离散格点恢复成连续函数的过程叫重构,用的权重模板叫重构核:
经验起点:步长取体素尺寸的 0.5–1 倍;先保证不漏,再谈提速。
固定步长让误差呈规则图案,人眼对规则图案极其敏感。给每条光线的采样起点加一个随机偏移(jitter),伪影被打散为均匀噪声,再靠多帧累积平均掉——这是交互 DVR 与体路径追踪(4.2)共用的基本招式:宁要可平均的噪声,不要成图案的错误。
拖动步长、切换合成模式,看同一条光线如何得到完全不同的像素 —— 这是理解采样误差最快的方式。
下方为合成密度截面(两团高密度 + 背景)。中线为当前光线,圆点为采样位置。
步长越大越快,但越容易跨过薄结构(欠采样 → 断裂、木纹伪影)。步长小于体素尺寸约 0.5–1 倍是常用起点。
实际 α 需按步长做校正:α' = 1 − (1−α)Δs/Δs₀,否则改步长就会改亮度 —— 这是最常见的实现 bug。
A = 0.00 · 透过率 100%
传递函数给出的 α 永远对应一个参考步长 Δs₀。设某组织在 Δs₀=1mm 时 α₀=0.55。步长减半到 0.5mm 时若直接用 0.55,每毫米走两步、等效遮挡翻倍,图会整体变“厚”。正确校正来自 Beer–Lambert(3.2):
为避免重复定义,这里只立采样约定,展开在对应节:
标量场的梯度 ∇f 指向密度增长最快的方向,与等值面垂直,天然可当法线用:中心差分在采样点邻域估梯度,再代入 Phong / Blinn-Phong 做漫反射 + 高光。
与近年的 3D Gaussian Splatting 区分:3DGS 是用显式高斯基元拟合外观做新视角合成,不求解体渲染积分,也不保证密度物理量守恒 —— 两者问题定义不同,不能互相替代来谈“准不准”。
I = ka + kd·max(0, N·L) + ks·max(0, N·H)n, N = −∇f/|∇f|符号:∇f 采样点处标量场梯度,取负并归一化得“法线” N(指向密度下降方向,即朝向观察者一侧的表面朝向);L 指向光源的单位向量;H 光源与视线方向的半角向量(Blinn 形式,比 Phong 的反射向量更稳);ka/kd/ks 环境/漫反射/镜面系数;n 高光指数,越大光斑越锐。点积 N·L 就是渲染方程里的 cosθ 在采样点的落地。
采样点沿 x 的邻居标量为 f(x−1)=80、f(x+1)=120,中心差分 ∂f/∂x = (120−80)/2 = 20;同理 ∂f/∂y=−6、∂f/∂z=10。梯度 ∇f=(20, −6, 10),幅值 √(400+36+100)=√536≈23.2,法线 N = −∇f/23.2 ≈ (−0.86, 0.26, −0.43)——指向密度降低的一侧。
结构仍是以像素为序发主光线沿线积分,但每个采样点不再假设“光源直达”,而是再向光源发一条阴影光线、在介质中积分出这段路的透过率,得到真实的体积阴影;需要反射/折射感时还可按散射方向继续追踪。这就是把面光追的次级光线思想搬进连续介质:
光学上把能与光相互作用的介质叫参与介质(Participating Media)。其行为由辐射传输方程(RTE)描述,工程上抓三个量就够:
散射不是均匀改向。相函数 p(θ) 给出光被散射到与原方向夹角 θ 的概率分布,是介质的“方向指纹”:
路径追踪不在固定步长上积分,而是随机采样光的命运:按消光分布抽一个自由程长度,前进到作用点,按反照率决定被吸收终止还是按相函数抽新方向继续弹,直到命中光源或被俄罗斯轮盘赌终止。每像素重复成百上千条路径取平均,统计上收敛到 RTE 的解:
p(θ) = (1/4π) · (1 − g²) / (1 + g² − 2g·cosθ)3/2符号:θ 散射方向与原方向的夹角;g 各向异性参数,等于散射角余弦的平均值 ⟨cosθ⟩,范围 (−1, 1):g→1 几乎全向前散射,g=0 各向同性,g<0 偏后向。它是介质的物理参数(由粒子大小与折射率决定),不是调“通透感”的美术滑杆。
| 维度 | 光线投射 DVR(第三、五节) | 体光线追踪 | 体路径追踪 |
|---|---|---|---|
| 光照模型 | 发射–吸收,σs=0,可选梯度着色与 AO 近似 | 吸收 + 单次散射,阴影光线积分透过率 | 完整 RTE:多次散射、介质 GI、焦散 |
| 确定性 | 确定性,同参数同结果 | 确定性,同参数同结果 | 随机性,结果含噪声,随种子与 spp 变化 |
| 误差形态 | 步长与插值误差,成图案、来源可分析 | 同左,另加阴影光线步长误差 | 无偏但高方差:误差是噪声,去噪可能引入偏差 |
| 成本 | 最低,实时交互标配 | 中—高,采样点×光源数倍增 | 最高,离线或低 spp + 去噪的实时近似 |
| 典型场景 | 医学 DVR、科学可视化交互 | 需要真实体积阴影的高质量预览、光学仿真 | 影视云雾烟火、光学/辐射传输科学计算的参考解 |
主光线每到一个采样点,就向光源发阴影光线,在雾中积分出透过率——被浓雾挡住的点贡献被压暗。
光子在介质中按自由程前进、按相函数改向(随机游走);叉号是 Delta Tracking 的空碰撞——被拒绝、不改方向、继续前进。
前五节讲的是“算什么”,本节讲“怎么算得起”。顺序是刻意的:正确性(积分与校正)→ 单帧加速(提前终止、空间跳跃、预积分)→ 规模(砖块调度、多体与 4D)。顺序反过来,先做的加速会把正确性 bug 藏进结构里,极难定位。
单点采样默认一个步长内密度恒定,步长稍大就出木纹、阶梯与薄壁漏采。预积分离线把“从标量 sf 到 sb、长度 Δs 这段介质积多少分量”算进查找表:2D 表存颜色与 α 的区间积分,渲染时用步段前后两个标量查表。
造影血管、分割掩膜这类数据,90% 以上体积对当前 TF 是全透明的。空间跳跃预先为每个空间块记录标量 min–max,经 TF 得到该块的最大可能 α;若为 0,光线整段跳过。
前向合成才有提前终止:累积 A 越过阈值后,后方贡献低于人眼/量化可分辨范围,继续采样纯浪费。工程上阈值常取 0.98–0.995(对应 8-bit 输出的半个到一个量化级),比等到 1.0 省得多、画质无可感差异。
多体融合:CT + PET、双能量 CT、术前 MRI + 术中数据叠加显示,前提是空间配准对齐到同一坐标系。融合策略分两层——采样层每条光线在每个体里各采一次、各自查 TF;合成层按优先级或混合权重合并。难点不是渲染,是配准误差会直接变成重影,融合图必须能随时切回单体核对。
时变(4D)体数据:心脏周期、呼吸门控、造影剂流入过程,多出一维时间。做法包括关键帧插值、按相位预加载砖块、时间维也做 min-max 跳跃。交互原则:播放时降分辨率保流畅,暂停定格时渐进渲满——与静态大数据的渐进策略同构。
全书收官节(5.1)。前面十节把方法讲透,本节只做两件事:把方法放回医学读图这条真实链路里看位置与红线;再给一张选型总表,让“什么问题用什么方法”有据可查。先把临床工作流摆正,再谈新方法:渲染图是读图的辅助层,不是诊断的证据层。
NeRF 与 3D Gaussian Splatting 改变了新视角合成,但它们和 DVR 解决的不是同一个问题。分清“拟合外观”与“呈现测量数据”,就不会用错工具。
| 维度 | 传统体渲染(DVR) | NeRF 类神经辐射场 | 3D Gaussian Splatting |
|---|---|---|---|
| 输入 | 已标定的体数据:CT/MRI 体素值本身就是测量结果 | 多视角照片 + 相机位姿,体密度与颜色由网络拟合 | 同为多视角照片,显式高斯基元的位置/协方差/颜色由优化拟合 |
| “密度”的语义 | α 由传递函数从真实标量映射,可回溯到 HU 等物理量 | 网络输出的 σ 只为重现照片,无物理单位、不可标定 | 高斯的不透明度同为拟合参数,优化目标只有图像重建误差 |
| 能做什么 | 任意视角、任意切面、任意 TF 重映射,随时回到原始数值核对 | 训练视角分布内的新视角合成出色;分布外与无观测区域会编造内容 | 实时新视角合成,速度远胜 NeRF;同样只在观测覆盖内可信 |
| 误差形态 | 误差可分析:采样、插值、TF 选择,来源明确、可复现 | 误差是数据驱动的:欠观测处平滑或幻觉出结构,外观合理但未必真实,且难以给出误差界 | |
| 适用 | 医学诊断辅助、科学测量、工业 CT 检测——一切要对数值负责的场景 | 实景三维重建、文博数字化、影视预演等外观优先场景 | 实景漫游、电商与空间展示等实时外观场景 |
诊断判读的对象是测量值本身:一个结节的有无、一个 HU 值的高低,直接对应后续处置。任何“看起来更清晰”的生成式增强,只要改动了数值或补出了未观测结构,就破坏了证据链。因此:
全书方法的最终对照。先问数据从哪来、结论要不要对数值负责,再对号入座。
| 你的问题 | 选这个 | 为什么 | 出处 |
|---|---|---|---|
| 实时交互的表面场景(游戏、漫游) | 光栅化(+ 探针/屏幕空间 GI,关键效果补光追) | 唯一能稳定每秒 60 帧的路线;间接光用预计算与近似补,成本可控 | 2.1、2.3 |
| 要真实的反射/折射/阴影质量,又要接近实时 | 混合管线:光栅化打底 + 光线追踪 | 次级光线是光追的原生能力;每像素 1–4 条光线 + 去噪是当前预算甜点 | 2.2 |
| 影视级画面或光传输的科学参考解 | 路径追踪(表面)/ 体路径追踪(介质) | 无偏估计渲染方程/RTE,误差形态只有噪声、可随样本收敛,其余方法以其为标尺 | 2.3、4.2 |
| 医学体数据的诊断判读 | 断层/MPR 定性质 + DVR/MIP 看关系 | 判读对象是测量值本身;确定性积分可复现,参数可复述,误差来源可分析 | 4.1、本节前半 |
| 造影血管快速筛查看走行 | 薄层 MIP(必要时 MinIP 看气道) | 最高密度结构最醒目、计算最便宜;深度判断再切 DVR/断层补 | 4.1 |
| 要硬边界模型:测量、3D 打印、手术规划 | Marching Cubes 等值面 + 光栅化 | 输出三角网格才能进测量与制造链路;阈值选择必须回原始数据核对 | 4.1 |
| 多视角照片重建实景、自由漫游展示 | NeRF / 3DGS | 没有“原始体素”要保真,外观与速度正是它们的强项;观测覆盖外不可信 | 本节前半 |
| 数据大过显存还要交互 | DVR + 砖块分页 + 多分辨率渐进 | 方法不用换,换的是数据调度:缺砖先用父节点顶替、停稳后细化 | 4.3 |
以下四张卡按统一模板(概念 → 公式 → 动画 → 手算 → 坑 → 关系)补齐本节此前只有文字的过程;正文原有定义不重复,以首次出现处为准。
概念顶点从模型空间到屏幕要过四道变换,每道只做一件事:摆位、换观察者、压成视锥、归一化。
公式pclip = P · V · M · plocal;NDC = pclip.xyz / pclip.w。
手算 / 读图点 (1,0,0,1) 经 M 平移 (2,0,0) 得 (3,0,0,1);只看 x:每步都是线性组合,手算时先写齐次坐标再逐乘。
常见坑把乘序写反(M·V·P)是最常见的黑屏原因;透视除法忘了做,深度与插值全错。
与其他算法的关系这条链的输出正是本节正文光栅化的输入;体渲染没有 MVP 链,它直接在世界空间沿光线采样。
概念投影后、光栅化前:视锥外的图元被裁成与视锥的交集,背向相机的三角形整片剔除,两步都发生在插值之前。
公式裁剪在齐次空间做:−w ≤ x,y,z ≤ w;背面判定看屏幕空间有向面积的符号。
手算 / 读图一个三角形 3 个顶点有 1 个在锥外,裁剪后变成四边形、再切成 2 个三角形——顶点数会变,这是正常的。
常见坑绕序(winding)设置与模型导出不一致时,正面会被当背面剔光,画面像被剥了皮。
与其他算法的关系剔除是“整片扔”,裁剪是“切齐”;两者与4.3的空空间跳过同理:都是先证明无贡献,再跳过。
概念屏幕上等距的像素在 3D 里不等距。属性必须先除以 w 插值、再除回去,纹理才不会在斜面上“游泳”。
公式a = ( Σ ai/wi · λi ) / ( Σ 1/wi · λi ),λ 为重心坐标(定义见本节正文算例)。
手算 / 读图中点 λ=0.5、两端 w=1 与 w=3:朴素插值给属性中点 0.5,校正后是 (0/1+1/3)/(1+1/3)=0.25——差一倍。
常见坑早期硬件为省成本省掉校正,斜面纹理扭曲成了时代标志;现代 GPU 在硬件里默认校正,关不掉也不该关。
与其他算法的关系重心坐标负责“权重”,透视校正负责“权重在 3D 里是否公平”;体渲染的三线性插值没有 w,因为它不在投影空间工作。
概念纹理被缩小时,一个像素覆盖许多纹素,不预先平均就会闪烁。mip 链把每级缩小一半的版本预存好,按足迹选层。
公式层级 λ = log2(足迹边长);三线性 = 层内双线性 + 相邻两层线性混合。
手算 / 读图纹理 1024² 缩到屏幕上约 32 像素宽:足迹 ≈32,λ≈5,直接选 mip 5(32²)——查表代替 1024 次采样。
常见坑只开双线性不开 mip 切换会出现层间接缝;各向异性关太低,斜着看的地面会糊成一片。
与其他算法的关系mip 是“为采样预平均”,与3.2的预积分同构:都是把一段区间的结果预先算好存表。
概念三者不改变成像,只改变“逐光源算光照”的付账位置:前向按物体付、延迟按像素付、Forward+ 先按 tile 分拣光源再按像素付。
公式成本:前向 ≈ 物体×光源;延迟 ≈ 像素×光源(与场景复杂度脱钩);Forward+ ≈ 像素×本 tile 光源。
手算 / 读图100 个物体 × 50 盏灯:前向最坏 5000 次光照求值;延迟与物体数无关,改为每像素 50 次;Forward+ 若每 tile 只剩 6 盏灯,就是每像素 6 次。
常见坑延迟渲染带宽吃紧、透明物体要前向补渲、MSAA 难以叠加——没有哪条管线是全赢的。
与其他算法的关系体渲染的 DVR 是天然“延迟”的:先采样后合成;把 Forward+ 的分拣思想搬到体数据,就是4.3的砖块调度。
BVH 遍历动画在本节正文;这里补它缺的另一半——树是怎么按 SAH 建出来的,以及阴影与抗锯齿的进阶形态。
概念建树时每个候选切分面都算一笔账:下钻成本 + 左右子盒按面积加权的求交成本,取代价最小的那一刀。
公式C = Ctrav + (SL/S)·NL·Cisect + (SR/S)·NR·Cisect(符号见正文算例)。
手算 / 读图左盒面积比 0.3、含 2 个三角形,右盒 0.7、含 10 个:C≈1+0.3×2+0.7×10=8.6;换一刀 0.5/0.5 与 6/6:C≈7——后者更优,即使左右不均被打破。
常见坑只按三角形数量对半切(中位数切分)会切出面积悬殊的盒,光线大概率全落进大盒,树形同虚设。
与其他算法的关系SAH 决定树的“形”,正文的遍历动画决定树的“用”;体数据的八叉树(4.3)用的是同一思想的体版本。
概念大场景一张阴影图不够分:按距离把视锥切成几级、近处给高分辨率;半影宽度不该是常数,它随遮挡距离变大——PCSS 就按这个关系调滤波半径。
公式半影宽 ∝ (接收点距 − 遮挡距) / 光源距 × 光源尺寸;CSM 每级独立算这组参数。
手算 / 读图光源角直径约 0.05 rad、遮挡物离地面 2 m:半影宽 ≈ 2×0.05 = 0.1 m——固定半径滤波要么近处太软、要么远处太硬。
常见坑级联切换处会有可见的分辨率跳变,需要级间混合带;bias 太大漏光、太小满脸 acne,仍是阴影映射的老账。
与其他算法的关系体渲染里的阴影更贵:遮挡不是一张深度图,而要沿光源方向再积一次透过率(见4.2)。
概念MSAA 只补几何边缘的覆盖率、FXAA 只补已成图的边、TAA 用时间换采样:每帧抖动亚像素位置,再把历史帧重投影回来累积。
公式TAA 输出 ≈ α·本帧 + (1−α)·重投影历史,α 常取 0.05–0.2,并用邻域颜色钳制压拖影。
手算 / 读图静止画面下 TAA 累积 16 帧 ≈ 16 倍采样,噪声/锯齿按 1/√16 = 1/4 下降;物体一动,历史失效的像素要靠速度缓冲剔除重来。
常见坑把 TAA 当万能药会糊 UI 与细文字;透明与粒子没有可靠深度,历史重投影最容易在这些地方穿帮。
与其他算法的关系正文的 AA 动画讲覆盖率(空间),这张讲时间维;体渲染的渐进细化是 TAA 思想在积分上的版本。
路径追踪、光子映射、辐射度的动画在正文;这里补环境光照的工程落地与路径终止的无偏技巧。
概念环境光来自所有方向,没法逐方向追。IBL 把环境图按粗糙度预滤波成一摞 mip,运行时按反射方向与粗糙度查一次;探针则把这件事在场景多点离线做好、运行时插值。
公式漫反射项用辐照度图(环境图与 cos 的卷积);镜面项查预滤波图,粗糙度越高查的 mip 越深。
手算 / 读图粗糙度 0 的镜面查 mip 0(原图),0.5 约查中间层,1.0 查最糊层——一张环境图因此同时服务镜子与雾面。
常见坑探针放进墙里或漏光(light leaking)会让室内染上室外色;探针密度不足时光照出现块状跳变。
与其他算法的关系IBL 是 PBR(2.1)的另一半;探针与体渲染的砖块同理:都是把昂贵积分预先算好、空间换时间。
概念路径不可能无限弹射。轮盘赌按概率 q 终止路径,存活路径的权重除以 (1−q) 放大,期望不变——无偏,但方差上升。
公式存活权重 w ← w / (1−q);q 常按路径吞吐量(throughput)大小自适应:贡献越小越容易被终止。
手算 / 读图q=0.25 时每步期望存活 0.75,平均路径长 4 步;存活样本权重 ×1/(0.75)=1.33,连乘后与不终止的期望一致。
常见坑q 固定太大,长路径(焦散、多次散射)被系统性切掉,画面看着“干净”实则偏暗——这是偏差伪装成降噪。
与其他算法的关系它与体渲染的提前终止(4.3)形似神不同:轮盘赌是无偏终止,提前终止是接受小偏差换速度。
本节的数值演算表(五采样点累积)在这里做成逐步动画:每一步高亮当前采样点,C 与 A 实时更新,与正文表格逐行对应。
概念CT 值(HU)本身没有不透明度;传递函数就是一条人为设计的曲线,把每个 HU 映射成 (颜色, α)。读图就是读这条曲线在哪段陡、在哪段平。
公式α(HU) 为分段线性函数;正文算例的锚点:HU=200 落在 (120, 0.10)–(250, 0.46) 段内插值。
手算 / 读图HU=200:f=(200−120)/(250−120)=0.615,α=0.10+0.615×(0.46−0.10)=0.32——与动画中扫描点路过 200 时的读数对照。
常见坑曲线在软组织段(−50…100)太平,所有软组织糊成一团;在骨段太陡,过渡带全变硬边。调 TF 先调这两段。
与其他算法的关系窗宽窗位是 2D 读图的标量窗,本质是同一条映射的线性版;2D 传递函数再加梯度维,见正文。
概念前向后合成没有别的魔法:维护两个数——已累积颜色 C 与已累积不透明度 A,每个采样点先按剩余透过率 (1−A) 加权贡献,再更新 A。
公式C ← C + (1−A)·αi·ci;A ← A + (1−A)·αi;等价地 T = ∏(1−αi) ≈ e−ΣσΔs(Beer–Lambert)。
手算 / 读图走完五点 A≈0.934、C≈0.675(灰度口径)——动画每步的读数应与正文数值表的对应行相等,可暂停逐行核对。
常见坑把合成顺序写成后向前却不翻转权重,是初学者最常见的实现 bug:颜色偏暗且边界发虚,还很难一眼看出。
与其他算法的关系A 接近 1 后继续采样纯属浪费——那就是4.3提前终止的入口;整段一次查表则是下一张卡的预积分。
概念点采样假设一小段内标量不变,段内藏着薄层就漏检。预积分预先把“从 sfront 到 sback 整段的平均颜色与 α”算进一张 2D 表,运行时按段两端标量查一次。
公式段贡献 = Table[sfront][sback];表在传递函数变化时重建,分辨率决定段内结构保真。
手算 / 读图一段两端标量 0.2→0.9、中段藏着 0.95 的薄骨层:点采样(取入口 0.2)α≈0.02 全漏;预积分查 (0.2, 0.9) 格,段 α 按真实路径平均 ≈0.4,薄层被保住。
常见坑表分辨率太低等于把薄层又平均掉;3D 传递函数想预积分时表会涨到 3D,内存先爆——工程上常只对 1D TF 用。
与其他算法的关系预积分是 mip(2.1)在体渲染里的亲戚;它让大步长可用,与空空间跳过一起撑起4.3的加速栈。
采样、抖动与 α 校正的交互在正文的模拟器里;MPR 此前只有文字对照,这里补上它的动画——它不积分,只切面。
概念MPR(多平面重建)把体数据沿任意平面切开,逐点取切面上的标量值显示。它是测量的工作台:定位、量距离、看切面形态,不做遮挡合成。
公式切面像素值 = f(平面方程上的点),非格点处用三线性插值(定义见本节正文重建滤波一节)。
手算 / 读图切面每移动 1 个体素,三幅图的对应行/列整体换新——这正是临床里滚轮翻层时屏幕在做的事。
常见坑各向异性间距下直接按像素量距离会系统性偏:量之前先确认 spacing,斜切面还要算面内真实尺度。
与其他算法的关系MPR 与 DVR 是同一数据的两种读法:前者精确定位、后者看整体关系;与 MIP 的分工见4.1对照。
正文有梯度与着色的手算;这里把“梯度即法线”画成场:箭头方向就是每个采样点的法线,光源一动,高光随之走。
概念体数据没有几何法线,但标量场处处可求梯度:∇f 指向值增长最快的方向,与等值面垂直,取负归一化就是着色用的法线。
公式N = −∇f / |∇f|;Blinn–Phong 高光 = (N·H)shininess,H 为光向与视向的半程向量(公式见正文算例)。
手算 / 读图中心差分:某点 x 方向梯度 ≈ (f(x+Δ)−f(x−Δ)) / 2Δ = (120−40)/2 = 40——正文手算同一公式,这里看它在整个场上的样子。
常见坑噪声会被梯度放大成满屏麻点:先轻度平滑再求梯度是常规操作,但平滑半径一大,细结构法线先没。
与其他算法的关系这套着色与2.1的表面着色是同一公式、不同法线来源;梯度幅值还兼职 2D 传递函数的第二维(3.2)。
正文的体光追动画讲阴影光线与随机游走;这里补采样方法本身:非均匀介质怎么采样自由程,相函数长什么样。
概念非均匀介质的自由程没有解析解。Woodcock / Delta Tracking 先假设全场都是最大消光 σ̄(可解析采样),到达的碰撞点按 σ/σ̄ 概率判为真碰撞,其余是“空碰撞”——原地穿过、不改向、不终止。
公式步长 Δs = −ln(ξ)/σ̄;接受概率 P = σ(x)/σ̄;可证明该过程与真实介质的碰撞分布一致(无偏)。
手算 / 读图σ̄=1.0 的场里某点 σ=0.3:到达该点的碰撞只有 30% 被接受——动画中约每 3–4 个粉圈配 1 个橙点,与此吻合。
常见坑σ̄ 取全场最大值时,若场里有一小块极密区域,空碰撞会在稀疏区泛滥、效率崩塌;工程上用分块 σ̄(每砖一个上界)缓解。
与其他算法的关系它是路径追踪(2.3)在介质里的采样器;与俄罗斯轮盘赌同属“用随机决定换无偏”。
概念真实相函数复杂,相函数族里最常用的是 Henyey–Greenstein:只用一个各向异性参数 g(−1…1)控制散射方向分布的胖瘦与朝向。
公式p(cosθ) = (1−g²) / ( 4π (1+g²−2g·cosθ)3/2 );g=0 各向同性,g→1 强前向。
手算 / 读图g=0.9:前向 p(0°) 与后向 p(180°) 之比 ≈ ((1+g)/(1−g))³ = 19³ ≈ 6900——正文算例的结论,在动画 g 滑到 0.9 时看瓣形最直观。
常见坑把 g 当“雾的浓度”调是常见误读:g 管方向不管多少,浓度是 σs 的事,两者混调会越调越不对。
与其他算法的关系表面渲染里 BRDF 管表面散射方向,HG 管介质内部——是渲染方程在两种情形下的同一角色(1.1对照表)。
4.3此前多为文字清单,这里把三件套补成动画:跳过、早停、分块驻留,外加多体与 4D 的合成方式。
概念两个互补的省法:还没进数据先证明整块为空(min/max 宏格或八叉树节点 α 上限为 0)就一步跨过;已经采够了——累积 A 达阈值(如 0.98)——就停,后面的贡献被压到 2% 以下。
公式跳过条件:节点 max α = 0;终止条件:A ≥ 1−ε,ε 常取 0.02–0.05,误差上界即 ε。
手算 / 读图一条光线 200 步里若 120 步落在空块、末段 30 步在 A 饱和后:实际采样只剩 50 步——4 倍加速,且画面差异在 ε 量级。
常见坑宏格太粗会把“含一丝结构”的块判不空也判不准;ε 取 0.2 省得更多,但半透明层次会肉眼变假——诊断场景 ε 要更保守。
与其他算法的关系跳过靠的是3.2的分类结果(α 场),终止靠的是合成公式;两者与预积分(3.2)叠加使用才是完整的加速栈。
概念大数据集装不进显存就分砖(brick):每块独立驻留/淘汰,渲染时只保证当前视线要用的砖在显存里,缺砖先用低清代理顶住。
公式调度 ≈ 按需分页:砖优先级 = 是否被当前光线穿过 × 分辨率层级;淘汰用 LRU 近似。
手算 / 读图512³ 的 float 数据约 512 MB,砖化成 64³ 后单砖 1 MB:视角转动时每帧只需换入少数几块,而不是整集重传。
常见坑砖边界采样要留一圈 halo 体素,否则砖缝处插值断裂成网格状伪影——这是砖化最常见的实现坑。
与其他算法的关系思想与 Forward+ 的 tile 分拣(2.1)、探针的空间分区(2.3)同源:先分块,再只处理相关的那部分。
概念多体渲染先把每个体各自采样、分类,再在采样点或像素级按权重合成,前提是配准对齐;时变数据多一根时间轴,渲染时取当前时刻的帧(或帧间插值),不是把时间平均掉。
公式合成:C = Σ wk·Ck,Σwk=1(权重口径要在实现里写死并注明);4D 帧间插值 f(t) = (1−β)·fi + β·fi+1。
手算 / 读图权重 0.7/0.3 时 PET 的热点以三成强度叠在 CT 结构上——动画滑到两端时能看清每个体单独的样子,融合只发生在中间。
常见坑配准差 1 个体素,融合图上就是双边影;把 4D 平均成静态会把运动幅度抹掉,心脏/呼吸场景尤其致命。
与其他算法的关系(5.1 应用与对照)的 PET/CT 融合读图就是这张卡的临床版;单体 DVR 是它 w 只取一个体的特例。
本章只做一件事:把全书的主线立住。读完这一章,后面所有算法都只是“换一种方式估算同一个积分”。本页只列本章小节,全站目录在总览页。
场景被近似成三角形网格时,方程有三种估法:光栅化最快、光追最自然、全局光照最完整。三节按“近似 → 精确 → 完整”递进。本页只列本章小节,全站目录在总览页。
换介质情形:先搞清数据与采样,再学人为赋予颜色与不透明度的传递函数,最后给采样点加上光照。三节是后面所有体算法的公共地基。本页只列本章小节,全站目录在总览页。
同一条体渲染积分,五种经典走法各有取舍;体光追把散射请回来;加速一节讲怎么让这一切跑得动:算法决定“算什么”,体光追决定“算多真”,工程决定“算多快”。本页只列本章小节,全站目录在总览页。
最后一章不教新算法,教选择:医学读图的顺序与陷阱、诊断保真的红线、NeRF / 3DGS 与传统方法的分工,最后用一张按问题选型的总表收束全书。本页只列本章小节,全站目录在总览页。
正文各节只在术语第一次出现时给出工作定义并链到这里;同一术语在任何一节里的含义都与本表一致。用上方搜索框或分类筛选,每个术语给一句可用的定义,而不是词典式复述。
40 个演示的完整清单按小节列在附篇,与术语表放在一起,学完逐项复查;总览不再另存一份。正文每节内的演示卡可直接播放、暂停与调速。
读法不另立目录:顺序就是上方目录的顺序(1.1 → 5.1),这里只说方法,不再罗列小节。
按目录从 1.1 读到 5.1:每节先看开头的定位条,公式逐符号读,算例动手算一遍,最后看小结与常见坑。里程碑:能说清每个方法把积分砍在哪、补在哪。
已有基础时,从目录按大章直达对应小节;跳过的概念不用回头整节重读,用附篇术语表把定义补齐即可。
术语表核对定义,动画索引逐项核对演示覆盖;方法拿不准时回 5.1 的选型表对表,再决定用什么。
一条主线:渲染方程——逐像素估算辐亮度。表面情形三解:光栅化砍积分换速度,光追认真求交,路径追踪用蒙特卡洛估完递归。介质情形:体渲染 = 对标量场沿视线做发射–吸收积分,传递函数决定可见性、梯度决定立体感、步长与预积分决定画质下限、空间跳跃与早期终止决定速度上限;再加散射就是体光追,参数是假设、结果带噪声,诊断仍回 DVR 与断层。MIP 看最亮,DVR 看层级,MPR 看断层,等值面看硬边界。数据是测出来的用传统积分,场景是拍出来的才用神经拟合。
全站唯一一份动画清单,按小节编号分组,学完逐项复查;总览页只放目录,不再另存一份。
| 所属大章 / 小节 | 演示 | 位置 | 来源 |
|---|---|---|---|
| 3.1 体数据与采样 | 光线行进模拟器(可调步长/α/模式) | 去演示 → | 3.1 · 正文模拟器 |
| 2.1 光栅化 | 顶点变换 vertex | 去演示 → | 正文卡 |
| 2.1 光栅化 | MVP 变换链 mvp | 去演示 → | 补齐卡 |
| 2.1 光栅化 | 裁剪与背面剔除 clip | 去演示 → | 补齐卡 |
| 2.1 光栅化 | 三角形光栅化与重心插值 raster | 去演示 → | 正文卡 |
| 2.1 光栅化 | 透视校正插值 persp | 去演示 → | 补齐卡 |
| 2.1 光栅化 | 深度测试 depth | 去演示 → | 正文卡 |
| 2.1 光栅化 | 纹理与 mip texture | 去演示 → | 补齐卡 |
| 2.1 光栅化 | 前向/延迟/Forward+ deferred | 去演示 → | 补齐卡 |
| 2.2 光线追踪 | Whitted 追踪 whitted | 去演示 → | 正文卡 |
| 2.2 光线追踪 | BVH 遍历 bvh | 去演示 → | 正文卡 |
| 2.2 光线追踪 | SAH 切分构建 sah | 去演示 → | 补齐卡 |
| 2.2 光线追踪 | 阴影映射 shadowmap | 去演示 → | 正文卡 |
| 2.2 光线追踪 | CSM 级联 + PCSS csm | 去演示 → | 补齐卡 |
| 2.2 光线追踪 | 覆盖率抗锯齿 aa | 去演示 → | 正文卡 |
| 2.2 光线追踪 | TAA 时域抗锯齿 taa | 去演示 → | 补齐卡 |
| 2.3 全局光照 | 路径追踪收敛 pathtrace | 去演示 → | 正文卡 |
| 2.3 全局光照 | 光子映射 photon | 去演示 → | 正文卡 |
| 2.3 全局光照 | 辐射度 radiosity | 去演示 → | 正文卡 |
| 2.3 全局光照 | GI 多次弹射 gi | 去演示 → | 正文卡 |
| 2.3 全局光照 | IBL 与辐照度探针 ibl | 去演示 → | 补齐卡 |
| 2.3 全局光照 | 俄罗斯轮盘赌 roulette | 去演示 → | 补齐卡 |
| 3.1 体数据与采样 | MPR 三平面 mpr | 去演示 → | 补齐卡 |
| 3.2 传递函数与分类 | HU → α 传递函数 hu | 去演示 → | 补齐卡 · 逐步 |
| 3.2 传递函数与分类 | 五采样点累积 beer(Beer–Lambert) | 去演示 → | 补齐卡 · 逐步动画版数值表 |
| 3.2 传递函数与分类 | 预积分 preint | 去演示 → | 补齐卡 |
| 3.2 传递函数与分类 | DVR 累积合成 dvr | 去演示 → | 正文卡 |
| 3.3 光照与着色 | 梯度着色与 Blinn–Phong gradient | 去演示 → | 补齐卡 |
| 4.1 经典算法 | MIP 取最大 mip | 去演示 → | 正文卡 |
| 4.1 经典算法 | 纹理切片 slice | 去演示 → | 正文卡 |
| 4.1 经典算法 | Splatting splat | 去演示 → | 正文卡 |
| 4.1 经典算法 | Shear-Warp shear | 去演示 → | 正文卡 |
| 4.1 经典算法 | Marching Cubes mc | 去演示 → | 正文卡 |
| 4.2 体光追 | 体光追阴影光线 volray | 去演示 → | 正文卡 |
| 4.2 体光追 | 体路径追踪 volpath | 去演示 → | 正文卡 |
| 4.2 体光追 | Delta Tracking delta | 去演示 → | 补齐卡 |
| 4.2 体光追 | HG 相函数 hg | 去演示 → | 补齐卡 |
| 4.3 加速与工程 | 空空间跳过 + 提前终止 skip | 去演示 → | 补齐卡 |
| 4.3 加速与工程 | 砖块调度 brick | 去演示 → | 补齐卡 |
| 4.3 加速与工程 | 多体融合与时变 multivol | 去演示 → | 补齐卡 |