Heckbert 1986 — 把"贴图"这件事讲清楚的第一篇综述
是什么
Heckbert 1986 是图形学历史上第一篇把”纹理映射”这件事系统讲清楚的综述。13 页,作者 Paul Heckbert 当时在 Pixar,后来去了 CMU。
日常类比:在这篇之前,纹理映射像一个杂乱的工具箱——有人在做 UV 贴图、有人做反射、有人做凹凸,论文散在各种会议里,名词各起各的。Heckbert 就像第一个把工具箱归类、贴标签、写说明书的人。30 年后所有图形学教材的”纹理”那一章,几乎都是照着这篇的目录写的。
简单说,贴图就是把一张二维图(树皮、砖墙、人脸照片)裹到三维模型表面上,让模型看起来不光是”光秃秃的几何”。这篇论文回答了三个核心问题:
- 怎么决定模型表面每个点对应纹理图的哪个像素?(参数化)
- 投影到屏幕后,纹理怎么不出锯齿、不闪烁?(反走样)
- 除了贴颜色,还能贴什么?(环境 / 凹凸 / 高光 / 透明)
为什么重要
不读这篇,你看现代图形学的很多东西会疑惑:
- 为什么 3D 软件里每个模型都有一张叫 “UV map” 的东西?UV 是哪两个字母,怎么来的?
- 为什么 GPU 的纹理单元都自带 MIP map 和 各向异性过滤?是哪一年定下来的?
- 为什么环境反射在游戏里用一个 cube 来存?为什么不用球?
- 为什么”凹凸贴图”和”法线贴图”听起来差不多但又不一样?
这些问题的源头都在这篇综述里。Catmull 1974 写了博士论文里第一段贴图代码,Williams 1983 发明 MIP,Blinn 1978 发明凹凸——但把这些拼成一张完整地图的,是 Heckbert 1986。
之后所有图形教材(Foley/van Dam、PBR、Real-Time Rendering)的纹理章节,词汇表基本沿用这篇——texture space、object space、screen space、minification、magnification 这些术语都是从这里固定下来的。
核心要点
Heckbert 把纹理映射拆成两阶段管线:
模型几何点 ──参数化──→ (u, v) 纹理坐标 ──投影──→ (x, y) 屏幕像素 阶段 1 阶段 2阶段 1:参数化(surface → uv)
回答”模型表面每点对应纹理哪里”。论文整理了三类做法:
- 内禀参数化:表面本身就有自然的 (u, v),例如样条曲面
S(u, v)。最干净,但复杂模型很难有。 - 二步映射:先把模型投到一个简单中介面(圆柱、球、立方体),再从中介面到平面纹理。今天 3D 软件里点 “Cylinder Project” 就是这一支。
- 投影映射:从某个视点把纹理像幻灯片打到模型上(projective texture),用于阴影贴图、装饰贴图。
阶段 2:投影 + 反走样(uv → 像素)
屏幕上一个像素覆盖纹理多大区域,决定要怎么采样:
- 放大(magnification):一个像素只盖纹理不到一个 texel → 用最近邻 / 双线性重建
- 缩小(minification):一个像素盖了纹理一大片 → 必须预滤波否则闪烁
论文把缩小的反走样方案排成谱系:
| 方法 | 谁 / 哪年 | 思路 | 代价 |
|---|---|---|---|
| 空间变化滤波 | 直接做 | 每像素积分纹理 | 太慢 |
| MIP map | Williams 1983 | 预生成多级分辨率金字塔 | 内存 +33%,硬件友好 |
| 求和面积表 | Crow 1984 | 任意矩形区域查表 | 数值精度问题 |
| EWA | Greene-Heckbert 1986 | 椭圆加权平均,处理斜视角 | 高质量,慢 |
今天 GPU 的”各向异性过滤”就是 EWA 的硬件简化版。
阶段 3:贴的不只是颜色
论文最后一节列了”纹理还能贴什么”:
- 颜色纹理(diffuse map)—— 最常见
- 凹凸映射(bump map,Blinn 1978)—— 不改几何只扰动法线
- 环境映射(reflection map,Blinn-Newell 1976 / Greene 1986 cube)—— 假装反射环境
- 高光 / 透明 / 位移
实践案例
案例 1:UV 这两个字母从哪来
打开 Blender,右上角看到 “UV Editor”。u 和 v 是纹理图的横纵坐标,因为 x y z 已经被三维空间占用了,1974 年 Catmull 博士论文里第一次用 u, v 命名,Heckbert 1986 把它定为标准。所以你今天点的每个 “UV 展开”按钮,名字都来自这两篇。
案例 2:MIP map 为什么是 33% 额外内存
MIP(拉丁文 multum in parvo,意为”少中藏多”)= 把一张纹理预先压缩成 1×1, 2×2, 4×4 … 直到原图的金字塔。
原图: 1024 × 1024 → 1 M 像素1/2 级: 512 × 512 → 0.25 M1/4 级: 256 × 256 → 0.0625 M...总和 = 1 + 1/4 + 1/16 + … = 4/3 ≈ 原图的 1.33 倍。这就是”33% 额外内存”的几何级数收敛。
案例 3:环境反射为什么用 cube 不用球
Blinn-Newell 1976 用经纬度球面图(latitude-longitude)→ 两极拉伸严重。Greene 1986 改用立方体 6 面图 → 每面是普通透视投影,硬件直接采样。Heckbert 综述里把两种都列出来对比。
今天打开任何游戏引擎的 “Skybox” / “Reflection Probe”,存的就是 cube map。源头在这篇综述给出的对比表里。
踩过的坑
-
把”反走样”和”重建”搞混:放大用重建(双线性、双三次),缩小用预滤波(MIP)。新人常把双线性当”万能反走样”——它解决不了缩小时的莫尔条纹。
-
环境映射不是真反射:它假设入射光只取决于反射方向,不考虑物体位置。所以平面镜近距离反射会假——这是 1986 年的硬件限制,今天用 screen-space reflection / ray tracing 才修。
-
凹凸 vs 法线 vs 位移:Blinn 1978 的 bump 是只改法线(轮廓还是平的);法线贴图(normal map,1996 年才主流)是 bump 的现代形态;位移贴图(displacement)才是真改几何。论文 1986 年只能讲 bump。
-
MIP 选哪一级:选错会模糊(选太高级)或闪烁(选太低级)。论文当年没给精确公式,OpenGL 1.0 才把这事标准化。
适用 vs 不适用场景
适用:
- 学图形学的第一篇综述(不是第一篇论文,但是第一张地图)
- 想搞清楚为什么现代 GPU 的纹理单元长这样
- 写自己的软件渲染器,要做反走样
不适用:
- 现代基于物理的渲染(PBR)—— 看 Disney BRDF 2012、Burley
- 神经辐射场 / 可微渲染 —— 看 NeRF 2020 之后
- 实时光线追踪 —— 看 RTX 时代论文
历史小故事(可跳过)
- 1974:Catmull 博士论文里第一次把图贴到双三次 Bezier 曲面,发明 (u, v) 命名
- 1976:Blinn-Newell 在犹他大学发明环境映射,用经纬度球面
- 1978:Blinn 发明凹凸映射
- 1983:Williams 在卢卡斯影业提出 MIP map
- 1984:Crow 发明 Summed-Area Table
- 1986:Heckbert 把以上全部整合成 13 页综述。这篇之后所有教材的纹理章节都长这个样
- 1989:Heckbert 自己把综述扩写成博士论文 Fundamentals of Texture Mapping and Image Warping,加了完整数学
学到什么
- 综述 vs 论文:综述的价值不是”提新东西”,而是”给后人一张地图”。Heckbert 1986 没发明任何东西,但 30 年后所有教材作者都引它
- 术语标准化的力量:UV / texture space / minification 这些词从这一篇之后就固定了
- 反走样是图形学的核心难题之一——一像素对应纹理多大、怎么平均,至今 GPU 还在优化
- 理论谱系:Catmull 1974 → Blinn-Newell 1976 → Blinn 1978 → Williams 1983 → Crow 1984 → Heckbert 1986。每隔 2-3 年一个台阶,综述把台阶串成楼梯
延伸阅读
- 论文 PDF:Heckbert 1986 PDF(13 页,密度低,新人友好)
- 扩写版:Heckbert PhD 1989, Fundamentals of Texture Mapping and Image Warping(200+ 页完整数学)
- 教材:Real-Time Rendering 第 6 章纹理 —— 写法基本沿用这篇结构
- catmull-1974-subdivision —— UV 命名的源头
- reyes-1987 —— Pixar 把反走样工程化的渲染管线
关联
- catmull-1974-subdivision —— Catmull 博士论文,UV 与 z-buffer 同一篇
- phong-1975 —— 光照模型,与纹理叠加
- perlin-noise-1985 —— 程序纹理,纹理图的另一支路
- reyes-1987 —— Pixar 渲染管线,把反走样工程化
- 3d-gaussian-splatting —— 现代点云渲染,反走样思路有部分继承
反向链接
- 3d-gaussian-splatting —— 3D Gaussian Splatting — 用一堆 3D 模糊光斑重建场景
- phong-1975 —— Phong 1975 — 把光照拆成环境+漫反射+高光三项