当前位置: 首页 > news >正文

山东大学计算机图形学期末复习14——CG14下

CG14下

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

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

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

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

f : R 2 → R 3 f : \mathbb{R}^2 \to \mathbb{R}^3 f: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 0 det(uf,vf)=0
  • 低扭曲:保持局部形状、面积或角度。

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

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

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

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

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

若映射 f : C → C f : \mathbb{C} \to \mathbb{C} f:CC 满足 f f f 在复平面上解析且 f ′ ≠ 0 f' \ne 0 f=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 Δ 是网格上的拉普拉斯算子。

离散形式(即每个内部点是邻居加权平均):
u i = ∑ j ∈ N ( i ) w i j u j \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) 是点 i i i 的邻居;
  • w i j w_{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)进行积分求平均。

数学建模:

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

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

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

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

示例函数:

t ( u , v ) = G + B 1 cos ⁡ ( f 1 u + g 1 v + φ 1 ) + B 2 cos ⁡ ( f 2 u + g 2 v + φ 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)

  • G G G: 平均灰度或基础颜色
  • B 1 , B 2 B_1, B_2 B1,B2: 振幅,控制纹理强度
  • f i , g i f_i, g_i fi,gi: 空间频率,决定图案密度
  • φ i \varphi_i φi: 相位偏移,调节纹理起始位置
应用场景:
  • 球面映射: u , v u, v u,v 表示球面参数 ( θ , ϕ ) (\theta, \phi) (θ,ϕ)
  • 圆柱映射: u , v u, v u,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 / 4 1/4 1/4,即每边减半(宽 × 高)
示例:
  • Level 0:128×128
  • Level 1:64×64
  • Level 2:32×32
  • … 直到 Level 7:1×1

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

设原始纹理为 N × N N \times N N×N,则总存储为:
S = N 2 + ( N 2 ) 2 + ( N 4 ) 2 + ⋯ = N 2 ( 1 + 1 4 + 1 16 + ⋯ ) 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 = 1 4 r = \frac{1}{4} r=41,和为:
∑ k = 0 ∞ ( 1 4 ) k = 1 1 − 1 4 = 4 3 \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 = 4 3 N 2 S = \frac{4}{3} N^2 S=34N2
即:Mipmap 的空间开销为原始纹理的约 1.33 1.33 1.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
以最大伸缩为准,定义纹理尺度 L L L
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 级别 D D D 为:
D = log ⁡ 2 L D = \log_2 L D=log2L


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

  • 步骤:

    1. 对 Level 2 和 Level 3 各做一次双线性插值,得到 C 2 C_2 C2 C 3 C_3 C3

    2. 在它们之间再线性插值:
      C = ( 1 − α ) C 2 + α C 3 , 其中  α = 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

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

问题

  • 无法捕捉曲面微细节(如皮肤纹理、砖缝凹陷)。
  • 多边形越少,越容易出现“表面平滑但不真实”的问题。
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. 漫反射光照公式(用于光照计算)

光照强度 I d I_d Id 通常基于 Lambertian 漫反射模型:
I d = R d I i a + b d + c d 2 ⋅ ( 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)
其中:

  • R d R_d Rd: 材质的漫反射系数
  • I i I_i Ii: 入射光强度
  • a , b , c a, b, c a,b,c: 距离衰减参数
  • s \mathbf{s} s: 光源方向(单位向量)
  • n \mathbf{n} n: 法线向量

简化假设(无衰减)
a = 1 , b = c = 0 ⇒ I d = R d I i ( 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 = ( N x , N y , N z ) , − 1 ≤ N i ≤ 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 = ⌊ ( N x + 1 ) ⋅ 127.5 ⌋ , G = ⌊ ( N y + 1 ) ⋅ 127.5 ⌋ , B = ⌊ ( N z + 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
反向解码时:
N x = R 127.5 − 1 , 同理  N y , N z 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 → 法线向量
  • 计算光照强度(如 I d = 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

暂时略

相关文章:

  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Progress Steps (步骤条)
  • redis的List为什么用ziplist和quicklist
  • GitHub 趋势日报 (2025年05月18日)
  • 学习记录:DAY29
  • 【HTML-1】HTML骨架标签:构建网页的基础框架
  • 百度OCR:证件识别
  • 【信息系统项目管理师】第10章:项目进度管理 - 48个经典题目及详解
  • 十三、面向对象底层逻辑-Dubbo序列化Serialization接口
  • React组件开发流程-03.1
  • 双指针算法:原理与应用详解
  • Notepad++ 学习(三)使用python插件编写脚本:实现跳转指定标签页(自主研发)
  • 龙芯中科2024年度业绩说明会:企稳向好,布局未来!
  • 抽奖相关功能测试思路
  • NIFI的处理器:PutDatabaseRecord 2.4.0
  • 【数据仓库面试题合集③】实时数仓建模思路与实践详解
  • C++_AVL树
  • 从API到UI:直播美颜SDK中的滤镜与贴纸功能开发与落地方案详解
  • 打破传统仓库管理困局:WMS如何重构出入库全流程
  • 告别Spring AI!我的Java轻量AI框架实践(支持多模型接入|注解式MCP架构|附开源地址)
  • 【框架安装】win10 配置安装GPU加速的tensorflow和keras教程
  • 大语言模型在线辩论说服力比人类辩手高出64%
  • 电子凭证会计数据标准推广至全国
  • 释新闻|拜登确诊恶性前列腺癌,预后情况如何?
  • 大学2025丨专访西湖大学副校长邓力:如何才能培养“不惧未知”的创新者
  • 墨西哥海军一载两百余人帆船撞上纽约布鲁克林大桥,多人落水
  • 光速晋级!2025年多哈世乒赛孙颖莎4比0战胜对手