山东大学计算机图形学期末复习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)
圆柱是一个高度为 h h h、底面半径为 r r r 的三维物体。我们将圆柱的侧面展开成一个矩形(像一个罐子的标签纸):
- 设纹理坐标为 ( u , v ) (u, v) (u,v),其中:
- u u u 控制圆周方向(即 0 ≤ u ≤ 1 0 \le u \le 1 0≤u≤1 对应 0 ≤ θ ≤ 2 π 0 \le \theta \le 2\pi 0≤θ≤2π);
- v v v 控制竖直方向( 0 ≤ v ≤ 1 0 \le v \le 1 0≤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 轴对称的;
- 所以我们用 极坐标表示圆周方向;
- 高度方向直接映射到 z z z。
映射公式推导
-
角度 θ \theta θ 用 u u u 表示(绕一圈):
θ = 2 π u \theta = 2\pi u θ=2πu -
高度 z z z 用 v v v 映射到 [ 0 , h ] [0, h] [0,h]:
z = v ⋅ h z = v \cdot h z=v⋅h -
极坐标转笛卡尔坐标(平面上的圆):
x = r cos ( 2 π u ) y = r sin ( 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 = r cos ( 2 π u ) y = r sin ( 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 ( y x ) ∈ ( − π , π ] \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\pi 2π:
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 = z h v = \frac{z}{h} v=hz
- 设纹理坐标为 ( u , v ) (u, v) (u,v),其中:
5.1 圆柱映射(Cylindrical Mapping)
参数定义:
-
圆柱高度为 h h h,半径为 r r r。
-
使用参数 ( 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 = r cos ( 2 π u ) y = r sin ( 2 π u ) z = v h \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 = z h \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 = r sin ( π v ) cos ( 2 π u ) y = r sin ( π v ) sin ( 2 π u ) z = r cos ( π 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 , z y,z y,z;
- − x -x −x面: ( 1 − u , v ) (1-u,v) (1−u,v) → y , z y,z y,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(多级纹理缓存):低分辨率版本用于远景,提升效率与质量。