网格UV展开
UV展开是什么
参数曲面的参数域变量一般用UV字母来表达,比如参数曲面F(u,v)。所以一般叫的三维曲面本质上是二维的,它所嵌入的空间是三维的。凡是能通过F(u,v)来表达的曲面都是参数曲面,比如NURBS曲面。对于三角网格,如果能把它与参数平面建立一一映射,那么它也就被参数化了,这个映射就是UV展开。如下图所示,左图是右边网格在参数平面上的展开,这样每个顶点都有了一个uv参数值,这也被称为纹理坐标。

图1
什么样的网格可以做UV展开
那是不是所有的网格都可以做UV展开呢?答案是否定的。只有圆盘拓扑结构的网格才能展开到平面上,比如一个球,无论如何都不可能在不撕裂的情况下展开到平面。对于任意拓扑结构的网格,需要给它添加割缝,把它分割成一片一片的圆盘结构,再做展开。如下图所示,这个模型被分割成了很多片,再展开到了平面。

图2
UV展开的扭曲程度
网格展开到平面区域,除了可展曲面,其它曲面在展开后都会产生一些扭曲。一般有两种扭曲。一种是曲面本身的几何所决定的,比如球面展开到平面,一定会产生扭曲。想要减少展开的扭曲程度,可以在扭曲程度大的地方增加曲面割线。另一种是展开算法中的约束产生的扭曲,比如固定边界的UV展开。一种直观的观察展开扭曲程度的方式是,把一张棋盘格图片贴到网格上,棋盘格越均匀,UV展开扭曲越小。
固定边界与自由边界
如图所示,左图是自由边界的UV展开,右图是固定边界的UV展开。可以看到自由边界的展开结果扭曲程度要小很多。
- 自由边界:自由边界的展开结果扭曲程度要小很多。但是边界如果比较复杂的时候,边界处可能会产生自交情况。
- 固定边界:固定边界的展开一般应用于特定需求。需要注意的是,边界约束条件的合理性能影响UV展开的效果。

图3
顶点坐标与纹理坐标的关系
纹理坐标与顶点坐标不是一一对应的,但我们经常听见“顶点的纹理坐标”这个说法,严格来说是不准确的。下面用一个图来解释(这里考虑三角网格的情况,其余情况类似):

可以看出顶点坐标与纹理坐标其实没有直接联系,他们是用过三角面片间接联系起来的。它们之间没有一一对应的关系。
顶点纹理坐标和三角形纹理坐标
严格来讲,顶点并没有纹理坐标的概念,只有三角形有纹理坐标的概念。网格UV展开到平面的时候,如果没有割缝产生,那么每个顶点在其相邻三角形内的纹理坐标都是一样的,故可简称为顶点的纹理坐标。如果有割缝产生,割缝处的顶点在不同三角形内的纹理坐标是不一样的。这时,顶点和纹理坐标是一对多的关系。下面说说在实际程序中,顶点纹理坐标和三角形纹理坐标的应用场景。
- 单连通圆盘拓扑的UV展开:如图1情况所示。这种情况下,顶点和纹理坐标是一一对应的,一个顶点可以存一个纹理坐标。一般这类的UV展开,都是使用的顶点纹理坐标的概念。
- 任意网格的UV展开:如图2情况所示。这种情况下,缝隙处的顶点和纹理坐标是一对多的关系。可以把纹理坐标存在三角形内。在非缝隙处,纹理坐标的存储有冗余信息。如果需要减少存储空间,也可以把纹理坐标存成一个数组(纹理坐标都不相等),然后每个三角形存纹理坐标的索引,类似OBJ的文件格式。
网格割缝和纹理坐标缝隙的区别
这是两个不同的概念。把网格顶点映射到纹理坐标域所得到的2D网格,和原始网格的拓扑结构可以是不同的。你可以把这两个网格看成是两个独立的网格。纹理坐标的缝隙是2D网格的边界。网格割缝是把网格的拓扑结构改变了,割缝处会产生新的网格顶点。纹理坐标缝隙,是在展开的UV空间中,顶点纹理坐标的缝隙。缝隙处网格顶点和纹理坐标是一对多的关系。
如果在纹理坐标缝隙处把网格割开,那么割开后的网格顶点和纹理坐标就是一一对应的关系了。
网格割缝的创建
UV展开的应用里,经常需要创建一些网格割缝。好的割缝,一般有这些性质:
- 长度很短
- 割线光滑
- 沿着特征边
- 分布在视觉不明显的地方
- 在全自动UV展开应用里,割缝首先要能把网格割成一片一片的圆盘结构

纹理贴图应用
网格UV展开经常用于纹理贴图应用。如下图所示,网格UV展开到平面后,把网格对应的贴图填充到UV坐标域,就得到了右边的纹理图。网格在渲染的时候,每个三角片离散化后,每个离散点会根据UV坐标值去纹理图里拾取颜色。拾取的方法,可以是UV坐标值最近点颜色,也可以根据UV坐标值的相邻四个像素做双线性差值。

有兴趣的读者,欢迎参考视频版本
网格UV展开的更多相关文章
- 3DMAX 9 角色建模3 uv展开
将角色删除一半,展好uv再镜像出来,节省一半工作量(前提是对称) 添加UVW展开编辑器(Unwrap UVW),选择面 打开UV编辑器 这里要注意映射问题,默认打开UV编辑器后所选择的面是映射到与选择 ...
- 从STL文件到网格拓扑
原文链接 STL文件是什么 STL文件是网格文件的一种格式,分为二进制和文本两种类型.具体来讲,它定义了一群三角面片,比如下面是一个文本的STL示例: solid geometryplusplus f ...
- 理解UV贴图
一.理解UV贴图UVs是驻留在多边形网格顶点上的两维纹理坐标点,它们定义了一个两维纹理坐标系统,称为UV纹理空间,这个空间用U和V两个字母定义坐标轴.用于确定如何将一个纹理图像放置在三维的模型表面.本 ...
- blender_(uv应用)................http://digitalman.blog.163.com/blog/static/23874605620174172058299/
轻松学习Blender基础入门之九:UV-1 2017-06-21 14:24:49| 分类: Blender |举报 |字号 订阅 下载LOFTER 我的照片书 | [前言] ...
- Blender Python UV 学习
Blender Python UV 学习 1. bmesh面转换 bm = bmesh.from_edit_mesh(bpy.context.edit_object.data) bm.faces.en ...
- 3DMAX 3场景制作
1 模型制作 2 UVW贴图展开 1 打开材质编辑器,给模型一个材质(以后应该以这个材质生成uvw展开,进而生成贴图,贴图绘制完毕后,再贴回这个材质中,就完成了给模型加贴图的操作) 2 在编辑面板中添 ...
- Unity3D所使用的第三方工具
前言 最近在研究Unity3D的结构和原理.关于Unity3D怎么用之类的教程在网上一找一大堆,想看教程之类的就不用看这篇文章了.我想做的是从使用Unity3D所看到的表象(表),摸透其设计原则和组织 ...
- MFC 调试方法
AfxDebugBreak MFC 提供特殊的 AfxDebugBreak 函数,以供在源代码中对断点进行硬编码: AfxDebugBreak( ); 在 Intel 平台上,AfxD ...
- 【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(2)
Lighting和Shading(2)镜面反射的控制和模拟次级表面散射技术 http://www.4gamer.net/games/216/G021678/20140703095/index_2.ht ...
随机推荐
- 【CF765E】Tree Folding
题目大意:给定一棵 N 个节点的无根树,边权都是 1,可以把树上父亲相同的两条长度相同的链合并,问最后是否可以合并成一条链,如果可以,输出链的最小长度,否则输出 -1. 题解: 由于我们不知道最后的 ...
- 【hiho1065】全图传送
题目大意:给定一棵 N 个节点的树,点有点权,边有边权,给定 M 个询问,每次询问距离 U 节点不超过 R 的点集中,点权最大的点的编号是多少,若有相同点权,取编号较小的点. 题解: 发现是多组询问, ...
- LOJ-6285-数列分块入门9
链接: https://loj.ac/problem/6285 题意: 给出一个长为 的数列,以及 个操作,操作涉及询问区间的最小众数. 思路: vector维护每个值的出现位置, 预处理第i快到第j ...
- Redis常见面试问题及答案
大量key在同一时间过期,注意什么? 如果过期时间过于集中,会导致Redis可能会出现短暂的卡顿现象.严重的话会出现缓存雪崩,一般需要在时间上加一个随机值, 使用过期时间分散一些. Redis分布式锁 ...
- 百度之星 初赛三 最短路 2 Dijkstra
打比赛的时候切的,不过竟然 wa 了 14 次~ 挺简单的,直接在跑 $Dijkstra$ 的时候记录一下路径最大值就好了. #include <bits/stdc++.h> #defin ...
- HGOI20190706 题解
Problem A 质因数 设f(x) 表示x的不同质因子个数,给出T组x,询问f(x)的值. 对于100%的数据 $x,T \leq 10^5 $ Sol : 第一遍欧拉筛,并记录下每个数的最小质因 ...
- 【Python】PIL模块
Python自建库,在爬虫等基础应用中更加简单好记,做整理以备自查. 目录 Image模块 open类.Save类.format类.Mode类.convert类.Size类.Info类.new类.Co ...
- 【转】HDU-6035-Colorful Tree
转自http://blog.csdn.net/Bahuia/article/details/76141574 题意: 题目链接:http://acm.hdu.edu.cn/showproblem.ph ...
- 微信小程序_(组件)form表单
Form表单.switch开关.数值选择器效果 官方文档:传送门 点击提交表单(按钮,提交开关,数值选择器,输入文本中)的值,显示在控制台上,点击重置,重置表单中的值. 实现过程 form表单,添加f ...
- Linux-expect脚本-1
expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示: 首行加上/usr/bin/expect spawn: 后面加上需要执行的shell命令,比如说spawn sudo ...