CG14上

纹理映射的意义、原理与类型

一、动机篇:为什么要用纹理映射?
1.1 视觉真实感的追求(P2:The Quest for Visual Realism)
  • 模型 ➝ 模型+光照 ➝ 模型+光照+纹理的渐进式示意图清晰展示了纹理在视觉真实感中的作用。
  • 关键问题:“何时开始看起来真实?”——答案是:纹理映射。
  • 示例来源:Jeremy Birn 的作品展示了纹理对“真实感”提升的决定性贡献。

逻辑总结:几何模型和光照可提供基础立体结构,但缺乏表面细节,需纹理映射增强真实感。


二、结构篇:纹理映射的组成与分类
2.1 课程目标与映射分类(P3:Objectives)
  • 三种纹理映射方法
    1. 纹理映射(Texture Mapping):二维图像贴到三维模型表面。
    2. 环境映射(Environment Mapping):模拟镜面反射效果。
    3. 凹凸映射(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)

为解决复杂物体的映射难题,引入中间参数表面(如圆柱、球体、立方体):

  1. 纹理坐标 (u,v)中间参数表面(如圆柱);
  2. 中间表面坐标实际模型表面点 (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 10u1 对应 0≤θ≤2π0 \le \theta \le 2\pi0θ2π);
      • vvv 控制竖直方向(0≤v≤10 \le v \le 10v1 对应底到顶)。

    我们把二维纹理 (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
    映射公式推导
    1. 角度 θ\thetaθuuu 表示(绕一圈):
      θ=2πu \theta = 2\pi u θ=2πu

    2. 高度 zzzvvv 映射到 [0,h][0, h][0,h]
      z=v⋅h z = v \cdot h z=vh

    3. 极坐标转笛卡尔坐标(平面上的圆):
      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)=hv


    三、反向映射:(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)

    推导过程
    1. 计算点 (x,y)(x, y)(x,y) 在圆柱侧面的角度
      θ=tan⁡−1(yx)∈(−π,π] \theta = \tan^{-1}\left(\frac{y}{x}\right) \in (-\pi, \pi] θ=tan1(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) 避免象限错误)

    2. 计算高度方向:
      v=zh v = \frac{z}{h} v=hz

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πtan1(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πtan1(y/x)=πϕ=πcos1(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-xx面:(1−u,v)(1-u,v)(1u,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(多级纹理缓存):低分辨率版本用于远景,提升效率与质量。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐