Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >网格UV展开

网格UV展开

作者头像
NT4.4
修改于 2019-10-18 09:10:22
修改于 2019-10-18 09:10:22
3.2K0
举报
文章被收录于专栏:图形视觉图形视觉

原文链接

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坐标值的相邻四个像素做双线性差值。

有兴趣的读者,欢迎参考视频版本

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
彩色纹理网格
彩色顶点网格的顶点分辨率和色彩分辨率一样,当网格顶点比较少的时候,色彩信息会损失很多,如下图2所示。彩色贴图网格的色彩分辨率取决于纹理贴图的分辨率,与网格顶点分辨率无关,如图3所示,同样的网格,纹理贴图方式可以存储高于网格分辨率的色彩信息。
NT4.4
2019/10/15
1.8K0
彩色纹理网格
三维网格表示
网格的数据结构其实就是一个图结构:点,边,面。可以是有向图,比如半边结构,也可以是无向图。在不同的软件或者开发包里,网格数据结构的实现都是有差异的。这种差异主要体现在网格连接关系的记录结构上,比如顶点是否记录邻域点,边,面信息,边是否记录邻域面信息等。记录的信息越多,查询的时候越方便,但是冗余的信息也越多,如果网格连接关系有变动,维护的信息也越多。另外,这些关系的建立也是需要开销的。所以,没有最好的数据结构,只有最适合当前算法的数据结构。
NT4.4
2019/10/29
7170
三维网格表示
【GAMES101-现代计算机图形学课程笔记】Lecture 09 Shading 3 (纹理映射)
这里补充一下上一节遗漏的一丢丢知识点,见下图。左边是渲染后的平面图,右边是对应的纹理。另外无论纹理平面原始有多大,最后都会被映射在
marsggbo
2020/06/12
2.3K0
OpenGL 图形渲染流程入门
1、什么是 shader shader 中文名为着色器,全称为着色器程序,是专门用来渲染图形的一种技术。通过 shader,我们可以自定义显卡渲染画面的算法,使画面达到我们想要的效果。小到每一个像素点,大到整个屏幕。通常来说,程序是运行在 CPU 中的,但是着色器程序比较特殊,它是运行在 GPU 中的,所以当我们在编写 shader 程序的时候,实际上也是在编写 GPU 程序。在 OpenGL 中,对应的着色器语言是 GLSL(OpenGL Shading Language)。通过 shader 编程,我们
用户1097444
2022/06/29
2.4K0
OpenGL 图形渲染流程入门
Unity Mesh基础系列(一)生成网格(程序生成)
本教程假设你已经熟悉Unity Scripting的基本知识了。如果不清楚的可以看 时钟 的章节学习Unity的基础知识。而 构建分形 的章节里也提供了协程的基本介绍。
放牛的星星
2020/08/21
10.8K0
Unity Mesh基础系列(一)生成网格(程序生成)
进阶渲染系列(一)——平坦和线框着色(导数和几何体)
本教程介绍如何添加对平面着色的支持以及如何显示网格的线框。它使用了高级渲染技术,并假定您熟悉“渲染”系列中介绍的材质。
放牛的星星
2020/07/10
2.6K0
进阶渲染系列(一)——平坦和线框着色(导数和几何体)
【GAMES101】Lecture 10 几何表示
几何的隐式表示就是用一个函数式子来表示一个几何体,像一个球可以表示成x²+y²+z²=1,即可以用f(x,y,z)=0这样的函数关系来表示,f=x²+y²+z²-1
叶茂林
2024/01/29
1360
【GAMES101】Lecture 10 几何表示
【论文笔记】《A Local/Global Approach to Mesh Parameterization》的思路
本文简单介绍了08年刘利刚著名的网格参数化论文《A Local/Global Approach to Mesh Parameterization》, 其尽可能刚性地完成了对三角网格的参数化处理, 效果很不错. 本文约3k字, 难度较高, 同步存于我的Github仓库(https://github.com/ZFhuang/Study-Notes/blob/main/Content/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0/A%20Local%20Global%20Approach%20to%20Mesh%20Parameterization/README.md)
ZifengHuang
2021/03/08
2.4K0
重新网格化(Remesh)
Remesh并没有一个严格的定义,简单的讲,Remesh就是从一个输入网格生成另一个网格,并且满足一定的要求。根据网格改动大小,可以分为这么几类:
NT4.4
2019/10/21
3.7K0
重新网格化(Remesh)
3D 小姐姐模型是怎么“捏”成的? 初识 Mesh 知识点!
今天菜鸟和大家一起来讨论一下3D入门的基础性知识:「Mesh」它是3D模型能正常展现的重要因素。(文末有奖问卷调查,感谢各位老铁支持!)
张晓衡
2023/02/23
1.2K0
3D 小姐姐模型是怎么“捏”成的? 初识 Mesh 知识点!
【GAMES101】Lecture 08 图形管线(实时渲染管线)与纹理映射
给我一个三维模型,给我一个光照条件,我就能够得出渲染的结果,这些东西合起来就是Graphics Pipeline,图形管线,闫神愿称之为实时渲染管线,那下面这个流程图就是这个渲染流水线
叶茂林
2024/01/20
2950
【GAMES101】Lecture 08 图形管线(实时渲染管线)与纹理映射
【笔记】《计算机图形学》(11)——纹理映射
这系列的笔记来自著名的图形学虎书《Fundamentals of Computer Graphics》,这里我为了保证与最新的技术接轨看的是英文第五版,而没有选择第二版的中文翻译版本。不过在记笔记时多少也会参考一下中文版本
ZifengHuang
2020/12/08
4.6K0
(实时)渲染管线(pipeline)
假设一个工具需要4个步骤才能够完成,那么一个人只能完成了全部的4个步骤后才能继续进行下一个工具的生产。但如果引入另外的3个人,每个人只负责一个步骤,那么一个人只需要完成一个步骤就可以进行下一个工具的生产。
Zero Two
2024/07/09
3470
(实时)渲染管线(pipeline)
进阶渲染系列(二)——曲面细分(细分三角形)
本教程介绍如何向自定义着色器添加对曲面细分的支持。它以“平面和线框着色 ”教程为基础。
放牛的星星
2020/07/10
4.9K0
进阶渲染系列(二)——曲面细分(细分三角形)
3D 可视化入门:渲染管线原理与实践
玩 3D 游戏的时候,有没有想过这些 3D 物体是怎么渲染出来的?其中的动画是怎么做的?为什么会出现穿模、阴影不对、镜子照不出主角的情况?要想解答这些问题,就要了解实时渲染。其中最基础的,就是渲染管线。
Tecvan
2021/12/09
7.1K1
3D 可视化入门:渲染管线原理与实践
(一) 3D图形渲染管线
渲染简单的理解可能可以是这样:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景(如图1):
bering
2019/12/02
1.5K0
基于图像的三维物体重建:在深度学习时代的最新技术和趋势综述之三维曲面解码
基于体积表示的方法在计算上非常浪费,因为信息只在三维形状的表面或其附近丰富。直接处理曲面时的主要挑战是,网格或点云等常见表示没有规则的结构,因此,它们不容易适应深度学习体系结构,特别是使用CNN的体系结构。本节介绍用于解决此问题的技术,将最新技术分为三大类:基于参数化、基于模板变形和基于点的方法。
3D视觉工坊
2020/12/11
1.2K0
基础渲染系列(二)——着色器
这是渲染系列的第二篇文章,第一篇讲述的是矩阵,这次我们会写我们的第一个Shader并且导入一张纹理。
放牛的星星
2020/07/10
4.2K0
基础渲染系列(二)——着色器
DAPP丨NFT卡牌/盲盒/农场/对战链游系统开发技术说明及详细源码
1.获取所有可能和投影框相交的mesh,一般游戏引擎都会有Octree或BVH保存mesh的aabb,这一步简单获取aabb相交的mesh即可.
系统_I8O28578624
2023/02/21
5450
【笔记】《计算机图形学》(12)——图形学的数据结构
之前我的笔记都是在OneNote上记录的,苦于OneNote羸弱的跨平台性,我决定抛弃OneNote,今后的笔记都用Markdown记录,方便迁移也方便调整格式。文章一开始编辑后会保存在我的Github仓库中(https://github.com/ZFhuang/Study-Notes),整理完后会发到公众号上,并延时同步到我的腾讯云。
ZifengHuang
2021/02/04
6.3K0
推荐阅读
相关推荐
彩色纹理网格
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档