CG14下

“参数化 Parameterization”与“保角映射 Conformal Mapping”

一、什么是参数化(Parameterization)
概念定义

参数化是指将一个三维表面(如模型的网格)映射到二维纹理空间的过程:

  • 目的是赋予每个顶点一个纹理坐标 (u,v)∈[0,1]2(u, v) \in [0, 1]^2(u,v)[0,1]2
  • 使得 2D 纹理图像能正确贴合在 3D 表面上;
  • 类似于将一张贴纸展开、包裹在物体表面。
参数化的数学表达

f:R2→R3f : \mathbb{R}^2 \to \mathbb{R}^3f:R2R3 为一个从 2D 纹理空间到 3D 表面的映射:
f(u,v)=(x(u,v),y(u,v),z(u,v)) f(u,v) = (x(u,v), y(u,v), z(u,v)) f(u,v)=(x(u,v),y(u,v),z(u,v))
这个映射就是参数化函数。我们希望它满足以下目标:

  • 连续(u,v)(u,v)(u,v) 的小变化对应 (x,y,z)(x,y,z)(x,y,z) 的小变化;
  • 无折叠:Jacobian det⁡(∂f∂u,∂f∂v)≠0\det \left( \frac{\partial f}{\partial u}, \frac{\partial f}{\partial v} \right) \ne 0det(uf,vf)=0
  • 低扭曲:保持局部形状、面积或角度。

二、参数裂缝(Parameter Crack)问题
现象

在纹理映射中,常见的问题是“参数裂缝”:

  • 当表面在纹理坐标中不连续时(例如 u=0u=0u=0u=1u=1u=1 不连接);
  • 会导致纹理在边缘出现断裂、跳变或缝隙
场景示例
  • 圆柱映射中,u=0u=0u=0u=1u=1u=1 分别对应 θ=0\theta=0θ=0θ=2π\theta=2\piθ=2π
    • 如果两个边界的纹理值不同或法线不连续,就会看到一条明显的接缝。
  • 球面映射中,极点的经度未定义,可能导致多个纹理点“压缩”到极点,形成裂缝。

三、解决裂缝的高级技术 —— 保角映射(Conformal Mapping)
数学背景

保角映射是保持角度不变的映射:

若映射 f:C→Cf : \mathbb{C} \to \mathbb{C}f:CC 满足 fff 在复平面上解析且 f′≠0f' \ne 0f=0,则称其为保角映射。

  • 保角映射 不保证面积,但能保持图像在局部的形状不失真
  • 广泛应用于三维网格的参数化,减少纹理扭曲。

四、保角映射的实现方法
基本思路

将三维模型展平为二维纹理域 (u,v)(u,v)(u,v),使得:

  • 三角面片展开后角度不变(角度和仍为 π\piπ);
  • 接缝平滑;
  • 内部连续、边界可控。
数学形式 —— 拉普拉斯方程

对顶点的 (u,v)(u,v)(u,v) 坐标求解 离散拉普拉斯方程
Δu=0,Δv=0 \Delta u = 0,\quad \Delta v = 0 Δu=0,Δv=0
其中 Δ\DeltaΔ 是网格上的拉普拉斯算子。

离散形式(即每个内部点是邻居加权平均):
ui=∑j∈N(i)wijuj \mathbf{u}_i = \sum_{j \in \mathcal{N}(i)} w_{ij} \mathbf{u}_j ui=jN(i)wijuj

  • N(i)\mathcal{N}(i)N(i) 是点 iii 的邻居;
  • wijw_{ij}wij 是权重,常用 cotangent 权重 或均匀权重;
  • 求解系统方程可得 (u,v)(u,v)(u,v)

五、边界处理与展平方式
边界条件(Dirichlet Boundary)
  • 固定边界顶点,内部顶点由拉普拉斯约束自动计算;
  • 常见边界形状:
类型说明
单位圆避免角度奇异点,适合保角性
单位正方形便于 UV 包装,适合游戏中图集布局
展平输出结果
  • 每个三角面被展平成一个平面三角形;
  • 保证角度接近原始角度;
  • 输出 (u,v)(u,v)(u,v) 可直接用作纹理坐标。
六、保角映射的效果与应用
优点:
  • 局部形状扭曲最小;
  • 纹理接缝更平滑;
  • 适合雕塑、角色等高细节模型。
应用场景:
  • 人脸贴图(UV 展开);
  • 地形纹理;
  • 程序化纹理生成;
  • 图形学研究中的流形参数化。

七、与两阶段映射的关系

在复杂对象中,先对模型做参数化(如保角映射),再进行纹理贴图,构成一种间接映射流程

  1. 三维模型 → 保角展平 → 得到 (u,v)(u,v)(u,v) 坐标;
  2. 再用 (u,v)(u,v)(u,v) 映射纹理图像;
  3. 可选:中间映射到球面/圆柱(两阶段映射)提升控制性。

覆盖抗混叠、程序化纹理与Mipmap技术

一、抗混叠技术(Anti-Aliasing)
1. 点采样(Point Sampling)

定义:在屏幕空间的每个像素,只选取一个纹理图像点 (u, v),直接使用其颜色。

缺点

  • 若纹理中存在高频细节(如条纹),单点可能错过该特征 → 造成 混叠(aliasing)
  • 混叠表现为:锯齿、图案消失、闪烁等视觉伪影。

2. 区域平均(Area Averaging)

原理
不再使用一个采样点,而是对像素对应在纹理图像上的“区域”(称为前像 preimage)进行积分求平均。

数学建模:

设屏幕像素在纹理空间中的前像为区域 RRR,纹理图为 t(u,v)t(u, v)t(u,v),则对应像素的颜色值为:
C=1Area(R)∬Rt(u,v) du dv C = \frac{1}{\text{Area}(R)} \iint_R t(u, v)\,du\,dv C=Area(R)1Rt(u,v)dudv

难点:
  • 这个区域 RRR 经过透视投影、表面参数化等变换,往往不是规则矩形,而是弯曲多边形甚至非线性形状
  • 计算积分通常需数值近似(如:多重采样、多边形裁剪、Monte Carlo 等)。
优点:
  • 保留更多纹理细节,抗混叠效果好。
缺点:
  • 计算开销大,实时渲染中难以使用。

二、程序化纹理(Procedural Texture)
3. 连续映射函数(Continuous Mapping)

目标:不使用图像作为纹理,而通过数学函数动态生成纹理图案。

示例函数:

t(u,v)=G+B1cos⁡(f1u+g1v+φ1)+B2cos⁡(f2u+g2v+φ2) t(u, v) = G + B_1 \cos(f_1 u + g_1 v + \varphi_1) + B_2 \cos(f_2 u + g_2 v + \varphi_2) t(u,v)=G+B1cos(f1u+g1v+φ1)+B2cos(f2u+g2v+φ2)

  • GGG: 平均灰度或基础颜色
  • B1,B2B_1, B_2B1,B2: 振幅,控制纹理强度
  • fi,gif_i, g_ifi,gi: 空间频率,决定图案密度
  • φi\varphi_iφi: 相位偏移,调节纹理起始位置
应用场景:
  • 球面映射:u,vu, vu,v 表示球面参数 (θ,ϕ)(\theta, \phi)(θ,ϕ)
  • 圆柱映射:u,vu, vu,v 表示 (θ,z)(\theta, z)(θ,z)
  • 可生成木纹、金属拉丝、波纹、云彩等自然纹理

三、Mipmap:多级纹理抗混叠

[深入解析纹理贴图——纹理过滤及MipMap技术-CSDN博客](https://blog.csdn.net/Mapmost/article/details/139002197?ops_request_misc=&request_id=&biz_id=102&utm_term=mip map&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-139002197.142v102pc_search_result_base4&spm=1018.2226.3001.4187)

  1. Mipmap 技术原理

由 Lance Williams 于 1983 年提出。

方法:
  • 预先生成多级缩小版本的纹理图像,称为 mipmap 金字塔。
  • 每层分辨率为前一层的 1/41/41/4,即每边减半(宽 × 高)
示例:
  • Level 0:128×128
  • Level 1:64×64
  • Level 2:32×32
  • … 直到 Level 7:1×1

5. Mipmap 存储代价(空间开销)
数学推导:

设原始纹理为 N×NN \times NN×N,则总存储为:
S=N2+(N2)2+(N4)2+⋯=N2(1+14+116+⋯ ) S = N^2 + \left(\frac{N}{2}\right)^2 + \left(\frac{N}{4}\right)^2 + \cdots = N^2 \left(1 + \frac{1}{4} + \frac{1}{16} + \cdots \right) S=N2+(2N)2+(4N)2+=N2(1+41+161+)
这是一个等比数列,公比 r=14r = \frac{1}{4}r=41,和为:
∑k=0∞(14)k=11−14=43 \sum_{k=0}^{\infty} \left(\frac{1}{4}\right)^k = \frac{1}{1 - \frac{1}{4}} = \frac{4}{3} k=0(41)k=1411=34
所以总存储为:
S=43N2 S = \frac{4}{3} N^2 S=34N2
即:Mipmap 的空间开销为原始纹理的约 1.331.331.33 倍。


6. Mipmap 屏幕像素选择级别
纹理足迹估计(texture footprint)

使用偏导数估计像素在纹理空间的伸缩程度:
∂u∂x,∂v∂x,∂u∂y,∂v∂y \begin{aligned} \frac{\partial u}{\partial x},\quad \frac{\partial v}{\partial x},\quad \frac{\partial u}{\partial y},\quad \frac{\partial v}{\partial y} \end{aligned} xu,xv,yu,yv
以最大伸缩为准,定义纹理尺度 LLL
L=max⁡((∂u∂x)2+(∂v∂x)2,(∂u∂y)2+(∂v∂y)2) L = \max \left( \sqrt{ \left( \frac{\partial u}{\partial x} \right)^2 + \left( \frac{\partial v}{\partial x} \right)^2 }, \sqrt{ \left( \frac{\partial u}{\partial y} \right)^2 + \left( \frac{\partial v}{\partial y} \right)^2 } \right) L=max(xu)2+(xv)2,(yu)2+(yv)2
对应的 Mipmap 级别 DDD 为:
D=log⁡2L D = \log_2 L D=log2L


7. 取整与插值:三线性过滤(Trilinear Filtering)
  • DDD 是浮点数 → 对应 两个整数层级(如 2.3→2.3 \to2.3 Level 2 与 Level 3)

  • 步骤:

    1. 对 Level 2 和 Level 3 各做一次双线性插值,得到 C2C_2C2C3C_3C3

    2. 在它们之间再线性插值:
      C=(1−α)C2+αC3,其中 α=D−⌊D⌋ C = (1 - \alpha) C_2 + \alpha C_3,\quad \text{其中 } \alpha = D - \lfloor D \rfloor C=(1α)C2+αC3,其中 α=DD

  • 结果:避免层级跳跃带来的颜色突变,提升平滑性。

四、高级纹理映射:Catmull 方法
8. Catmull Texture Mapping + Surface Subdivision

由 Ed Catmull 提出,属于早期的高质量纹理映射方法:

  • 表面细分:将模型细分为更多小面(四边形、三角形),为每个面精准贴图。
  • 优点
    • 提高贴图精度,适用于光滑曲面
    • 更好处理高曲率或纹理密集区域
  • 缺点
    • 算法复杂,实时渲染中较少使用

凹凸映射(Bump Mapping)与法线贴图(Normal Mapping)

一、凹凸映射的背景与动机
1. Gouraud 着色的局限

Gouraud Shading

  • 在多边形顶点处计算光照强度 III
  • 然后使用线性或双线性插值在像素之间过渡强度。

问题

  • 无法捕捉曲面微细节(如皮肤纹理、砖缝凹陷)。
  • 多边形越少,越容易出现“表面平滑但不真实”的问题。
2. 凹凸映射的核心思想

Jim Blinn 在 1978 年提出,本质是:

在不改变几何模型的前提下,通过修改表面法线方向来影响光照,从而模拟表面细节。

不同于 Gouraud,只在顶点计算光照,凹凸映射强调:

  • 逐像素光照计算(per-fragment lighting)。
  • 使用修改后的法线来增强光照细节。
二、数学基础:从高度图导出法线
3. 表面表示与法线计算

设高度图 d(x,y)d(x, y)d(x,y) 表示表面高度,构建隐函数:
F(x,y,z)=z−d(x,y)=0 F(x, y, z) = z - d(x, y) = 0 F(x,y,z)=zd(x,y)=0
根据隐函数法线公式,法线为梯度:
∇F=(∂F∂x,∂F∂y,∂F∂z)=(−∂d∂x,−∂d∂y,1) \nabla F = \left( \frac{\partial F}{\partial x}, \frac{\partial F}{\partial y}, \frac{\partial F}{\partial z} \right) = \left( -\frac{\partial d}{\partial x}, -\frac{\partial d}{\partial y}, 1 \right) F=(xF,yF,zF)=(xd,yd,1)
所以法线向量为:
n(x,y)=(−∂d∂x,−∂d∂y,1) \mathbf{n}(x, y) = \left( -\frac{\partial d}{\partial x}, -\frac{\partial d}{\partial y}, 1 \right) n(x,y)=(xd,yd,1)
再归一化

即可。

4. 漫反射光照公式(用于光照计算)

光照强度 IdI_dId 通常基于 Lambertian 漫反射模型:
Id=RdIia+bd+cd2⋅(s⋅n) I_d = \frac{R_d I_i}{a + b d + c d^2} \cdot (\mathbf{s} \cdot \mathbf{n}) Id=a+bd+cd2RdIi(sn)
其中:

  • RdR_dRd: 材质的漫反射系数
  • IiI_iIi: 入射光强度
  • a,b,ca, b, ca,b,c: 距离衰减参数
  • s\mathbf{s}s: 光源方向(单位向量)
  • n\mathbf{n}n: 法线向量

简化假设(无衰减)
a=1,b=c=0⇒Id=RdIi(s⋅n)=k(s⋅n) a = 1, \quad b = c = 0 \Rightarrow I_d = R_d I_i (\mathbf{s} \cdot \mathbf{n}) = k (\mathbf{s} \cdot \mathbf{n}) a=1,b=c=0Id=RdIi(sn)=k(sn)
只与法线与光源的夹角有关。

三、离散实现:从高度图生成法线图
5. 离散偏导数计算(差分法)

设二维高度图为 H[x,y]H[x, y]H[x,y],使用差分近似导数:
∂d∂x≈H[x+1,y]−H[x,y],∂d∂y≈H[x,y+1]−H[x,y] \frac{\partial d}{\partial x} \approx H[x+1, y] - H[x, y], \quad \frac{\partial d}{\partial y} \approx H[x, y+1] - H[x, y] xdH[x+1,y]H[x,y],ydH[x,y+1]H[x,y]
代入法线公式,得:
n=(−(H[x+1,y]−H[x,y]), −(H[x,y+1]−H[x,y]), 1) \mathbf{n} = \left( -(H[x+1, y] - H[x, y]),\, -(H[x, y+1] - H[x, y]),\, 1 \right) n=((H[x+1,y]H[x,y]),(H[x,y+1]H[x,y]),1)
归一化后作为最终法线。

6. 局限与改进动机
  • 早期凹凸映射采用上述计算方式,但计算代价高。
  • 适用于离线渲染,不适合实时应用。
四、法线贴图:凹凸映射的现代实现
7. 法线贴图(Normal Map)原理

核心思想

将每个像素的法线直接编码成颜色,作为纹理贴图存储。

8. 法线编码为颜色(RGB)

设法线向量:
n=(Nx,Ny,Nz),−1≤Ni≤1 \mathbf{n} = (N_x, N_y, N_z), \quad -1 \leq N_i \leq 1 n=(Nx,Ny,Nz),1Ni1
映射到 RGB 空间(0~255):
R=⌊(Nx+1)⋅127.5⌋,G=⌊(Ny+1)⋅127.5⌋,B=⌊(Nz+1)⋅127.5⌋ R = \left\lfloor (N_x + 1) \cdot 127.5 \right\rfloor, \quad G = \left\lfloor (N_y + 1) \cdot 127.5 \right\rfloor, \quad B = \left\lfloor (N_z + 1) \cdot 127.5 \right\rfloor R=(Nx+1)127.5,G=(Ny+1)127.5,B=(Nz+1)127.5
反向解码时:
Nx=R127.5−1,同理 Ny,Nz N_x = \frac{R}{127.5} - 1, \quad \text{同理 } N_y, N_z Nx=127.5R1,同理 Ny,Nz

9. 从高度图生成法线贴图(Normal Map)

结合前文:

  1. 计算偏导数(用差分法)
  2. 构造法线向量
  3. 归一化后编码为 RGB

得到的彩色图像即为法线贴图。

10. 法线贴图在 GPU 中的使用

现代 GPU 使用 片段着色器(fragment shader)

  • 每个像素从法线贴图读取法线
  • 解码 RGB → 法线向量
  • 计算光照强度(如 Id=k(s⋅n)I_d = k (\mathbf{s} \cdot \mathbf{n})Id=k(sn)
  • 输出最终颜色
五、高保真应用:从高模生成法线贴图(烘焙)

网格简化:

在这里插入图片描述

11. 工作流程(称为 Baking Normal Maps)
  1. 创建高多边形模型(如 30000 面)
  2. 渲染其每个三角形面的法线(表面细节丰富)
  3. 将其投影到简化的低模表面纹理空间
  4. 存储为法线贴图
  5. 在低模(如 632 面)上实时使用法线贴图 → 视觉效果逼近高模

在这里插入图片描述

OpenGL Texture Mapping

暂时略

Logo

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

更多推荐