山东大学计算机图形学期末复习13——CG14上
CG14上
纹理映射的意义、原理与类型
一、动机篇:为什么要用纹理映射?
1.1 视觉真实感的追求(P2:The Quest for Visual Realism)
- 模型 ➝ 模型+光照 ➝ 模型+光照+纹理的渐进式示意图清晰展示了纹理在视觉真实感中的作用。
- 关键问题:“何时开始看起来真实?”——答案是:纹理映射。
- 示例来源:Jeremy Birn 的作品展示了纹理对“真实感”提升的决定性贡献。
逻辑总结:几何模型和光照可提供基础立体结构,但缺乏表面细节,需纹理映射增强真实感。
二、结构篇:纹理映射的组成与分类
2.1 课程目标与映射分类(P3:Objectives)
- 三种纹理映射方法:
- 纹理映射(Texture Mapping):二维图像贴到三维模型表面。
- 环境映射(Environment Mapping):模拟镜面反射效果。
- 凹凸映射(Bump Mapping):通过修改法线模拟凹凸表面。
- 两类映射策略:
- 前向映射:从纹理空间向模型投射(可能产生空洞,效率低)。
- 后向映射:从屏幕像素向纹理查找坐标(现代图形硬件主流方式)。
- 两类采样方式:
- 点采样:快速但易混叠(aliasing)。
- 区域平均:质量好但计算复杂。
逻辑总结:纹理映射是一种灵活可扩展的技术框架,包括多个实现方式与策略,适用于不同视觉需求。
三、建模挑战篇:仅靠几何建模的局限性
3.1 几何建模的极限(P4:The Limits of Geometric Modeling)
- 尽管现代显卡可高效渲染多边形,但:
- 表面纹理难以用多边形真实重建。
- 模型复杂度迅速上升,渲染开销变大。
3.2 橙子建模例子(P5-P6:Modeling an Orange)
- 简化模型(球体)无法还原橙子的凹坑、纹理。
- 高多边形模型虽可模拟细节,但效率低、维护难。
- 解决方案:
- 拍照 ➝ 获得真实纹理图 ➝ 映射到简单球体模型上 ➝ 提高真实感。
- 提出纹理映射技术的引入。
- 进一步问题:颜色解决了,但凹凸呢?——提示后续需要凹凸映射(Bump Mapping)。
逻辑总结:纯几何建模难以在真实感与效率之间兼顾,纹理映射提供了理想解决路径。
四、方法篇:三种纹理映射技术详解
4.2 纹理映射(Texture Mapping)
- 定义:将 2D 图像贴到 3D 模型表面,提供颜色和图案信息。
- 过程:
- 图像作为纹理存储颜色。
- 定义几何模型每个顶点对应的纹理坐标 (u,v)(u,v)(u,v)。
- 渲染时插值并查找纹理颜色,赋值给片段。
逻辑总结:纹理映射通过将图像映射到模型上,提供细节和真实感,是现代渲染的核心技术。
4.3 环境映射(Environment Mapping)
- 作用:模拟物体对周围环境的反射,如金属、玻璃等反光材质。
- 原理:
- 准备一个全景环境贴图(如立方体贴图或球面贴图)。
- 根据视角方向和法线方向计算反射向量。
- 通过反射向量查询贴图中的颜色,赋值给像素。
- 常见形式:
- 球面映射(早期方法)。
- 立方体映射(现代 GPU 标准)。
逻辑总结:环境映射扩展了纹理映射的表达能力,模拟“反射光”来增强真实感。
4.4 凹凸映射(Bump Mapping)
- 作用:模拟表面的凹凸起伏(如砖缝、皱纹),提升细节感。
- 实现:
- 保持几何模型不变,仅修改片段着色时使用的法向量。
- 通过**凹凸贴图(灰度图或法线贴图)**提供扰动信息。
- 优势:
- 不增加三角形数量。
- 增强真实感,适用于低多边形建模。
- 注意:
- 只是视觉“欺骗”,不影响几何轮廓。
逻辑总结:凹凸映射在不改动几何模型的前提下,实现细节增强,是纹理映射的高级应用。
五、管线篇:纹理映射的实现阶段
5.1 映射实现位置(P12:Where does mapping take place?)
- 纹理映射发生在渲染管线的片段处理阶段(Fragment Shader)。
- 前提:
- 顶点处理与裁剪后,仅对可见部分执行纹理查找,效率更高。
- 技术优势:
- 结合 GPU 硬件加速;
- 减少无效像素计算;
- 支持并行查找与采样。
- 可能包含内容:
- 渲染管线示意图(顶点 ➝ 裁剪 ➝ 光栅化 ➝ 片段着色 ➝ 帧缓冲写入)。
逻辑总结:纹理映射效率高、结构合理,易于整合到现代图形渲染管线,是图形硬件渲染的核心组件。
纹理映射(Texture Mapping)
一、纹理映射的动机与作用
1.1 视觉真实感的追求
- 几何模型本身不包含表面细节。即使使用复杂几何建模(如建模橙子的凹点),也会导致巨大的多边形数目,计算成本高。
- 纹理映射通过将二维图像“贴”在三维物体表面,极大提升视觉真实感:
- 表面图案(如木纹、皮肤);
- 颜色细节;
- 材质感(配合法线贴图);
- 示例:橙子建模中,用照片扫描得到的橙子纹理贴到简单球体上,实现高真实感 + 低几何复杂度。
二、纹理映射的技术框架
2.1 涉及的主要坐标系统
| 坐标系 | 说明 | 维度 | 作用 |
|---|---|---|---|
| 纹理坐标(Texture Coordinates) | (u,v) ∈ [0,1]²,归一化二维纹理图像坐标 | 2D | 在纹理图中查颜色 |
| 参数坐标(Parametric Coordinates) | 用于曲面建模,如圆柱(θ,h)、球面(θ,φ) | 2D | 建模中间曲面 |
| 物体/世界坐标(Object/World Coordinates) | 三维空间中的实际点(x,y,z) | 3D | 模型变换与渲染 |
| 屏幕坐标(Window Coordinates) | 渲染后的2D像素位置 | 2D | 最终输出位置 |
2.2 渲染管线中的位置
- 纹理映射发生在片段着色阶段(fragment shader):
- 每个片元(像素候选)具有插值得到的(u,v);
- GPU根据(u,v)查找纹理图像,获取颜色并着色。
三、映射策略与映射函数
3.1 正向映射 vs 反向映射
正向映射(Forward Mapping):
-
从纹理坐标 (s,t) → 表面坐标 (x,y,z):
x=x(s,t)y=y(s,t)z=z(s,t) \begin{aligned} x &= x(s, t) \\ y &= y(s, t) \\ z &= z(s, t) \end{aligned} xyz=x(s,t)=y(s,t)=z(s,t) -
应用难点:
- 纹理坐标空间到三维表面可能造成空洞或扭曲;
- 渲染过程中难以控制每个屏幕像素是否覆盖。

反向映射(Backward Mapping):
-
更符合片段着色器执行逻辑:
-
每个片元对应模型上的(x,y,z);
-
需要从(x,y,z)反查纹理坐标(s,t):
s=s(x,y,z)t=t(x,y,z) \begin{aligned} s &= s(x, y, z) \\ t &= t(x, y, z) \end{aligned} st=s(x,y,z)=t(x,y,z)
-
-
实现方式:
- 对三角形的三个顶点预设纹理坐标;
- 对应像素通过重心坐标插值获得(u,v)。
四、两阶段映射策略(Two-Part Mapping)
为解决复杂物体的映射难题,引入中间参数表面(如圆柱、球体、立方体):
- 纹理坐标 (u,v) → 中间参数表面(如圆柱);
- 中间表面坐标 → 实际模型表面点 (x,y,z)。
优点:
- 中间表面具有已知、易定义的参数化;
- 可大大降低纹理失真;
- 常用于角色建模、地球贴图等。
五、典型参数化映射方法
-
看一看推导:
将一个二维纹理图像(以归一化纹理坐标 (u,v)∈[0,1]2(u,v) ∈ [0,1]^2(u,v)∈[0,1]2 表示)贴到一个三维圆柱的表面上。
一、坐标定义与含义
圆柱的参数化(Cylinder Parameterization)
圆柱是一个高度为 hhh、底面半径为 rrr 的三维物体。我们将圆柱的侧面展开成一个矩形(像一个罐子的标签纸):
- 设纹理坐标为 (u,v)(u, v)(u,v),其中:
- uuu 控制圆周方向(即 0≤u≤10 \le u \le 10≤u≤1 对应 0≤θ≤2π0 \le \theta \le 2\pi0≤θ≤2π);
- vvv 控制竖直方向(0≤v≤10 \le v \le 10≤v≤1 对应底到顶)。
我们把二维纹理 (u,v)(u, v)(u,v) 映射到圆柱的三维表面点 (x,y,z)(x, y, z)(x,y,z) 上。
二、正向映射:(u,v)(u,v)(u,v) → (x,y,z)(x,y,z)(x,y,z)
推导思路
- 圆柱是围绕 z 轴对称的;
- 所以我们用 极坐标表示圆周方向;
- 高度方向直接映射到 zzz。
映射公式推导
-
角度 θ\thetaθ 用 uuu 表示(绕一圈):
θ=2πu \theta = 2\pi u θ=2πu -
高度 zzz 用 vvv 映射到 [0,h][0, h][0,h]:
z=v⋅h z = v \cdot h z=v⋅h -
极坐标转笛卡尔坐标(平面上的圆):
x=rcos(2πu)y=rsin(2πu) \begin{aligned} x &= r \cos(2\pi u) \\ y &= r \sin(2\pi u) \end{aligned} xy=rcos(2πu)=rsin(2πu)
总结:完整映射函数
x=rcos(2πu)y=rsin(2πu)z=h⋅v \boxed{ \begin{aligned} x &= r \cos(2\pi u) \\ y &= r \sin(2\pi u) \\ z &= h \cdot v \end{aligned} } xyz=rcos(2πu)=rsin(2πu)=h⋅v
三、反向映射:(x,y,z)(x, y, z)(x,y,z) → (u,v)(u, v)(u,v)
这个过程通常用于片段着色器中:我们知道模型表面上的一个点 (x,y,z)(x, y, z)(x,y,z),要反推出它在纹理图上的位置 (u,v)(u, v)(u,v)。
推导过程
-
计算点 (x,y)(x, y)(x,y) 在圆柱侧面的角度:
θ=tan−1(yx)∈(−π,π] \theta = \tan^{-1}\left(\frac{y}{x}\right) \in (-\pi, \pi] θ=tan−1(xy)∈(−π,π]
但为保持 u∈[0,1]u \in [0,1]u∈[0,1],要先归一化 θ\thetaθ 到 [0,2π][0, 2\pi][0,2π],并除以 2π2\pi2π:
u=θ2π=atan2(y,x)2π u = \frac{\theta}{2\pi} = \frac{\text{atan2}(y, x)}{2\pi} u=2πθ=2πatan2(y,x)
(用atan2(y,x)避免象限错误) -
计算高度方向:
v=zh v = \frac{z}{h} v=hz
- 设纹理坐标为 (u,v)(u, v)(u,v),其中:
5.1 圆柱映射(Cylindrical Mapping)

参数定义:
-
圆柱高度为 hhh,半径为 rrr。
-
使用参数 (u,v)∈[0,1]2(u, v) ∈ [0,1]^2(u,v)∈[0,1]2:
θ=2πuφ=v \begin{aligned} \theta &= 2\pi u \\ \varphi &= v \end{aligned} θφ=2πu=v
映射公式(纹理 → 圆柱):
将纹理坐标(u,v)映射到圆柱表面:
x=rcos(2πu)y=rsin(2πu)z=vh
\begin{aligned}
x &= r \cos(2\pi u) \\
y &= r \sin(2\pi u) \\
z &= v h
\end{aligned}
xyz=rcos(2πu)=rsin(2πu)=vh
反向映射(圆柱 → 纹理):
u=θ2π=tan−1(y/x)2πv=zh \begin{aligned} u &= \frac{\theta}{2\pi} = \frac{\tan^{-1}(y/x)}{2\pi} \\ v &= \frac{z}{h} \end{aligned} uv=2πθ=2πtan−1(y/x)=hz
5.2 球面映射(Spherical Mapping)
球面参数:
- 使用球面坐标 (θ,ϕ)(\theta, \phi)(θ,ϕ),其中:
- θ\thetaθ ∈ [0, 2π](经度)
- ϕ\phiϕ ∈ [0, π](纬度)
映射公式(纹理 → 球面):
x=rsin(πv)cos(2πu)y=rsin(πv)sin(2πu)z=rcos(πv) \begin{aligned} x &= r \sin(\pi v) \cos(2\pi u) \\ y &= r \sin(\pi v) \sin(2\pi u) \\ z &= r \cos(\pi v) \end{aligned} xyz=rsin(πv)cos(2πu)=rsin(πv)sin(2πu)=rcos(πv)
反向映射(球面 → 纹理):
u=θ2π=tan−1(y/x)2πv=ϕπ=cos−1(z/r)π \begin{aligned} u &= \frac{\theta}{2\pi} = \frac{\tan^{-1}(y/x)}{2\pi} \\ v &= \frac{\phi}{\pi} = \frac{\cos^{-1}(z/r)}{\pi} \end{aligned} uv=2πθ=2πtan−1(y/x)=πϕ=πcos−1(z/r)
极点问题:
- 在 ϕ≈0\phi \approx 0ϕ≈0 或 ϕ≈π\phi \approx \piϕ≈π 处,纹理压缩严重;
- 可采用多图切割或改用立方体贴图(见下)。
5.3 盒式映射(Box Mapping)

- 将物体表面投影到立方体六个面;
- 每面采用正交投影纹理映射;
- 映射关系(示例):
- +x+x+x面:纹理坐标 (u,v)(u,v)(u,v) → y,zy,zy,z;
- −x-x−x面:(1−u,v)(1-u,v)(1−u,v) → y,zy,zy,z;
- 以此类推。
应用:环境贴图(Environment Mapping)
- 将环境图像存储为立方体的六个面;
- 根据观察方向投影到立方体面,查颜色。
5.4 多立方体映射(Polycube Mapping)
- 将复杂模型分割为多个立方体(polycubes);
- 每个立方体进行局部盒式映射;
- 避免纹理失真,适合复杂拓扑结构;
- 应用于:
- 自动UV展开;
- 程序化建模;
- 高质量纹理转移。
六、进阶映射技术(简述)
6.1 凹凸映射(Bump Mapping)
- 不修改几何表面;
- 修改每个像素的法线方向:
- 使用法线贴图(normal map)或高度贴图(height map);
- 与光照模型(如Phong、Blinn-Phong)结合,模拟细节凹凸。
6.2 环境映射(Environment Mapping)
- 使用球面或立方体贴图模拟物体对环境的反射;
- 应用于金属、玻璃等镜面物体。
七、纹理采样策略
7.1 点采样 vs 区域平均
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 点采样 | 获取最近(u,v)点的颜色 | 快速、简单 | 锯齿、混叠 |
| 区域平均 | 计算像素覆盖的纹理区域平均色 | 平滑、抗锯齿 | 开销大、复杂 |
7.2 显卡优化技术
- 多重采样抗锯齿(MSAA);
- 各向异性过滤(Anisotropic Filtering);
- MipMap(多级纹理缓存):低分辨率版本用于远景,提升效率与质量。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)