大家常说的“UVW展开”的W究竟是个啥?

您所在的位置:网站首页 uvw和l1l2l3的区别 大家常说的“UVW展开”的W究竟是个啥?

大家常说的“UVW展开”的W究竟是个啥?

2023-03-01 11:41| 来源: 网络整理| 查看: 265

你接下来看到的内容是我收集的一些外网论坛上的帖子,并且我个人对其进行了翻译。如果你经常困扰于看不懂英文读不懂句子,那么你可以看看这些翻译翻译的准确性不敢保证,毕竟那些人说话也云里雾里的,更别说有些软件我也没用过……比如blender……

【提问】

-UVW的W是什么?我要怎么利用它?

-我很难找到相关的信息,但我认为W并不是没有用处的

【解答】

—Unity似乎并不支持3D纹理,所以我假设你并没有在处理3D纹理和3D纹理坐标系

—因为在那种情况下,W就是3D纹理坐标系的第三个轴向

—在谈到2D UV时,W是额外的维度,这使得UVW坐标系是齐次坐标系

—因为UV坐标点是可以被翻译的,所以W应该取1。W的默认值都是1,不要改变这个值,否则翻译不会得到想要的结果。

—如果它有别的值,翻译会被影响,或不进行

—用除1以外的值试验,貌似改变W的值,会让UV以原点为中心进行缩放

—这是因为齐次坐标点的值就等于常规坐标系的值被W除后的结果

【链接】

What's W in UVW? How can I have fun with it?

【提问】

-UV坐标系和ST坐标系的区别?

-UV纹理坐标系和ST纹理坐标系有啥区别?

-我知道UV和ST都在OpenGL中有应用,ST在Java也有应用

【评论】

A—“我知道UV和ST都在OpenGL中有应用”:OpenGL中并没有UV这样的词汇

B—不,有。比如equation 8.7 in the OpenGL 4.3 spec.

【解答1】

—它们表示一样的东西,只是不同的命名条例

—U = S = x dimension V = T = y dimension

【评论】

A—事实上,在CG中,你用它们其中的一组表示纹理空间坐标,另一组表示物体空间。不同的APIs有时会混淆,或以不同的方式使用

B—我从未听说过这种说法,请你举个例子

A—哦,我找了,但没找到。也许我记错了。不论如何,这只是术语。我发现blinn的bump mapping paper是理解纹理映射和纹理空间操作的好工具。你可以看看这个(Simulation of Wrinkled Surfaces - Microsoft Research

C—U和V通常局限在 [0,0 .. w,h]的范围里,而ST是[0,0 .. 1,1]。不管怎么样,最起码,这就是OpenGL定义的,除了texture rectangles

D—不,这不对。UV在纹理坐标系中同样会局限在0到1之间,ST可以超过1.0,但经常会塌陷到1.0以下

E—ST,或STQ,是normalized 的,因为它们用于表面或片元坐标系。UV是在纹理空间坐标系中的,它们的表示取决于API如何对待纹理(当参数化纹理时,它们取0~1,但当光栅化纹理时,它们以纹素的方式表达)

F—我可能是错的,但ST用于二维纹理,UV是用于3D或4D纹理的额外选项

【解答2】

—Computer graphics principles and practice (Foley et al)如是写道:

—纹理映射可以以这两个步骤完成:简单的实现方法是这样的,先映射四个角上的像素到表面上,对于bicubic patch 来说,这样的映射本质上定义了一组点在物体表面的ST坐标系空间中,然后,像素在物体表面的ST坐标系空间中的角点被映射到纹理的UV坐标系空间中。这四个坐标点(U,V),在纹理空间中,定义了一个四边形,由于表面可能存在曲率,这个四边形在形状上可能接近于一个更复杂的图形(但实际上要渲染的就是这个复杂图形)。通过将所有在这个四边形内的纹素加在一起,我们计算像素的值,按照纹素的分数,给每一个像素分配权重。如果一个变换后的点在UV空间中着落在了纹理图外,纹理图将像在2.1.3节中介绍的一样,进行复制。不需要一直使用ID图映射ST到UV,我们可以定义一种对应关系在这四个角点上:即把它们当做分别是0到1的一组渐变,在ST中是这样,在UV中同样。当表面是多边形(polygon)时,常规的赋予纹理的手段是直接将它的坐标对应到顶点上

【评论】

A—棒!所以这是有区别的。移动一对ST点,将在UV上获得相同的结果。ST是表面坐标系,UV是纹理坐标系。

B—对了。ST是normalized的坐标对,这是为了片元运算考虑,UV可以被看成纹素数组(width,height)。这些术语不应该混淆。

【解答3】

—UV坐标系从左上角出发,V轴朝下。ST坐标系从左下角出发,T轴朝上。

—s = u

—t = 1 - v

—在OpenGL中,加载纹理时前要将其做垂直方向的翻转,因为第一行数据的第一个元素(一维数组表示二维图像的意思)对应纹理图像的左下角。(https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexImage2D.xhtml)

—只有这么做,ST和UV才统一

【评论】

A—我不认为UV坐标是从左上角出发的。它们从左下角出发,因为在OpenGL中的其他坐标系统也都是这样的。但是,一些文件格式存储数据时,是从底部往上走的,这使得你必须去翻转图像,或者假装坐标系统是从左上角开始的。

B—谢谢,解决了MAYA to three.js exporter的问题

【解答4】

—这是惯例的问题

—Autodesk3D Studio、Alias Maya、NewTek Lightwave 和其他一些可能的软件,都使用字母 U 和 V 表示水平和垂直的纹理坐标。DirectX也是这样

—Pixar's RenderMan,则是在他们的参数化3D图元构建中,保留U和V作为参数,所以对于纹理映射来说,他们用ST表示。OpenGL也在纹理坐标系中使用这样的惯例

—所以它们的意义在理论上是不同的,但除非你在好莱坞影视特效方面工作,否则它们意思差不多,都表示纹理坐标系

【解答5】

—STQ是纹理坐标系统,如果项目要求校正透视,或需要失真,那么要用STQ坐标系

—STQ和UV坐标有关。

—UV是齐次纹素坐标系。

—u = (图像宽几个像素) * S / Q

—v = (图像高几个像素) * T / Q

—如果不需要透视校正,那么Q为1。这时ST可以看作是UV坐标的normalized 版本

—它们之间的区别是微妙的,因此一些3D系统不使用UV标记法,完全只用STQ。

【链接】

Difference between UV and ST texture coordinates

【提问】

-HLSL中,uv.zw是个啥?

-我正在使用HLSL编程,但我不清楚uv.zw代表什么。

-float4 uv0 : TEXCOORD0 ... uv0.zw;

-难道UV不是二维坐标吗?我知道它支持三维,但第四个元素是什么?alpha?

-在在线实例中,我只看到 TEXCOORD0 是用于float2,而不是float4的

【解答1】

—纹理可以是3D的,所以纹理坐标系可以拥有第三个轴Z

—如果你很熟悉齐次坐标系,那么你就会发现,可以用齐次坐标系的第4D来代表各种只作用于3D的坐标系变换。这个新增的轴就是w。

【解答2】

—在GPU中,所有值都是float4,虽然你看不到它。声明一个变量是float或float2等等,只是停止使用其他通道。

—如果一个float2的变量访问z和w通道,从技术上讲,z和w是没有定义的,但编译器可以接受它这么做,所以,谨慎一点吧。

—在HLSL中,“UV”这个名字没有固有的定义,你可以定义一个任何类型的变量叫做“UV”。

【链接】

草,忘了

【提问】

-在计算机图形中,UVW映射和UV映射有什么区别?

-在搞纹理时,UVW mapping和UV mapping这两个术语意思一样么?

-如果是的话,那为啥会有W这个字母存在?如果不是的话,他俩有啥区别?

-WIKI回答了个锤子,爷来这问问万能的网友

【解答1】

—U和V是2D图片用的坐标系。添加W元素使其拥有了第三维。

—我没有夸大其词,但手工制作一张3D贴图是很乏味的。但如果你有一个程序化生成3D纹理数据的方法,W坐标是很有用的。

—比如,如果你希望你的物体看起来像实心的大理石,最简单的方法是将大理石“纹理”“建模”成3D程序化纹理,然后用3D坐标系定位3D纹理中的数据。

【评论】

A—这与(https://en.wikipedia.org/wiki/UVW_mapping)上面的不一致。WIKI说的是“从R^2映射到R^3”;这也与(http://oman3d.com/tutorials/3ds/texture_stealth/)不一致。并且,基本上,所有我搜到的关于“UVW”这个术语的用法都与你说的不一样。这些术语被混淆了吗?还有,对于3D程序化纹理来说,为什么不直接从物体空间XYZ坐标系来定义它?把它变成UVW坐标系有什么意义吗?

B—我不认为那些教程有任何实际上的操作,他们从来没有给网格设置过W坐标。WIKI上的文章我也很怀疑,但也许我的想法过时了。WIKI上描述的那些,我认识的人就没有叫它们是UVW映射的

B—对于3D程序化来说,关键的是UVW映射到纹理上,你可以随意地变换XYZ到UVW的对应关系,甚至指定每一个顶点的UVW的值,以及允许做横跨整个面的线性插值(3DMAX就这么做的)。那些教程展现的都是UV展开,这明显是转化3D网格为2D网格,但W与此无关。他们是将顶点映射到UV区间上。

A—谢了。我感觉大部分“UVW”的说法都是误用了这些概念,WIKI也一样混淆了

【解答2】

—UVW是相对于XYZ的,就像XYZ是相对于世界坐标的一样。

—因为XYZ已经被用于标记世界坐标系,UV就被用来标记平面图像的二维坐标X和Y。

—以此类推,W就相当于XYZ里的Z

—UVW用于形容更复杂的2维形象,比如展开3维物体的表面得到的2维形象。想象一个盒子被“展开”,你现在就拥有了一块平面的UVW图,你可以在上面画涩图,然后再把它包装回六面体。简单来说,UVW图记录网格上每个顶点的信息。

—现在,想象一个球体被展开。你会得到一个正轴等角圆柱投影(Mercator Projection),问题就出在这里。当你把这个2D形象包装回去时,你发现有失真。

—UV映射这个术语被用得非常广泛,但我不曾听说UVW这个术语也被广泛地使用,除了我在这里用到了这个词。

—“程序化映射”这个词带有误导性。简单地说,它意味着计算机遵循一些算法,将写实的效果绘制出来,比如把木头材质球贴到物体上,给你一种印象,纹理完全穿过木材,好像这物体的两面都被绘制上了颜色。

—程序化映射可以使用图像,或是纯粹依靠算法,或是把多种方法综合起来,这取决于你的程序

—最后,并没有这样的说法“3D程序纹理需要首先转为UVW”,因为UVW和XYZ在效果上都是一样的意思——要么指向世界,要么指向世界中物体的展开图像,或是世界的一个区块,就像在天空中一样。关键是UV/UVW指的是图像/纹理映射

【链接】

In computer graphics, what's the difference between a UVW mapping and a UV mapping?

【提问】

-体积材质支持使用UV系统的W坐标吗?

-爷想算点怪东西,而且爷已经算出来了,还能把uv坐标输出成颜色显示在已经映射了UV的网格上,爷天资卓绝,还能把W坐标也显示在网格上。

-但在blender手册中,对texture coordinate节点的描述并没有提及体积材质不支持的坐标系,而Geometry节点的描述指出“对于体积着色器来说,只有位置和传入矢量可用”。

-我想不通

-UV坐标系的W坐标能被体积材质使用吗?我担心不是任何形状的网格都能定义其顶点的W坐标,原因爷说不清楚,我想你们也看不懂,所以爷不说了。来个人给爷解释解释

【解答】

—如果UV指的是用于展开的坐标系,那么不支持。体积材质不能使用UV坐标系。这正是你疑惑的原因。展开网格只是将坐标系应用在网格的表面上,而不是体积上。

—体积材质使用专门的坐标系,即,不基于网格表面运算的坐标系

—使用Generated节点。Generated坐标系建立在物体的边界盒上。底部左前方是(0,0,0),顶部右后方是(1,1,1)。引擎在它们之间线性插值,推算出新的坐标点,运算出边界盒的具体体积。默认状态下,所有程序化纹理都使用该坐标系。

—Object节点:texture coordinate节点指定的物体的本地坐标系

—Camera节点:物体在屏幕空间中的位置。

—其他的节点:

—Position(Geometry节点):物体在世界空间(WS)中的位置

—Location(Object info节点):物体在WS中的位置。不像Object , Camera , Position,这是像素坐标,不是物体坐标

—你可以参考我的这篇文章(How do texture coordinates work?

【链接】

建议看看原文我没用过blender,这都是我凭感觉翻译的

Is the w-coordinate of the UV coordinate system supported by Volumetric materials?

【提问】

-UVW映射时的W是个啥?

-我知道UVW就像XYZ一样,都代表坐标格,但W在UVW编辑器里有啥用?

【评论】

A—UVW分别对应XYZ,当你在使用UV纹理编辑器时,W没用。因为UV坐标格是二维的,并没有深度信息。

B—那3DMAXUV展开器里面,VW和UW模式切换有啥用?

A—因为这些是 3D 坐标,可用于将图像快速放置到表面上。 UV 映射为您提供了一个 2D 模板,然后您可以将其导出到 Photoshop(或任何其他绘画应用程序)并在其上绘制纹理。

C—就是说W没用?我觉得W和重叠的法线图有关,比如如果你有左臂和右臂的法线图,你可以把它们叠在一起以节省空间。将它们沿W轴分离开来,将使一个变成正的,一个变成反的,结果两条胳膊的其中一条会有错误的凹凸效果。或者,可能是不同软件读取导入进来的网格的UV时算法有差异造成的,在一个软件中,你需要使用UV,但在另一个程序中,你使用VW。就像在ZB里面你需要翻转纹理以符合其他软件的规则。

A—不,它有用。就像我之前说的,当你往3D空间中拖入图像时,它们很有用。比如,如果你有一张四方连续平铺图,你想把它放在正方体上,程序就需要W值来计算正方体的Z值。

C—emmmmm,彳亍吧,麻烦你了。我似乎知道你在说啥子了,但不确定这是怎么实现的。我打算去找点教程,学学UV映射和VW映射。我觉得,使用VW平铺一个正方体是没意思的,你可以在UV中轻易地做到它。

D—MAXUV展开器里的W没有啥用处,你可以忽略它。有非常小的概率它会卡BUG,我遇到过一两次,展开器很不稳定,但当我把所有W都调成0后,问题解决了。

E—在展开器中,你可以切换VW或是UW模式,以不同的角度查看映射。就像按alt W切换视窗一样。最简单的理解办法是拿一个东西,做一次俯视平面映射,在UVW窗口中,你会在正视图中看到好像压扁了的UV块,在VW中,你会看到边界,在UW中,你会看到顶部。你可以选中所有的边,分离UV块,然后切换到UW视图,旋转它们,以使它们面向正方向,转回UV视图,它们就被排列出来了,而且是等比例的。这只是自动展开和移动/缝合工具的另一种工作方式,更改为VW视图也能够确保UV是平整的,这能解决失真问题

话说……你们按他说的试试看,结果是啥?好家伙,我这边是真tm看不出有什么失真

【链接】

Question about the "W" in UVW mapping

【提问】

☽暗黑の、杀手☾-UVW映射里的W是啥?

☽暗黑の、杀手☾-我知道U和V是什么,坐标嘛~表示顶点在2维图像上位置的~取值从0到1。三角形有三个顶点,所以在二维平面上有三对坐标,这三对坐标将采样图像的一部分,然后贴在三角形上。但W是啥?我谷歌到了一些解释,但我理解不能。

【评论】

niconico—在纹理坐标的语境下,W是第三维度,和UV用在一起,可以处理体积纹理或是CubeMap的纹素。

☽暗黑の、杀手☾—蛤?我不懂。W啥时候派上用场?

niconico—想象一个带着纹素信息的3维数组,你也可以理解成一个体积纹理,它在概念上由一个或多个“截面”堆叠在一起组成。要定位其中一块截面的纹素,你使用U和V坐标。在此基础上,你可以使用W确定要从哪个切片对纹素U、V进行采样。在实际运用中,W通常被过滤,纹理样本来自它匹配的2个最近的切片,就像U和V被过滤掉一样——使用双线性插值。然后,该谈论CubeMap了。想象一个正方体,有六块纹理组成,分别代表其六个面。为了处理这类纹理,你需要3D纹理坐标向量(UVW),与2维纹理不同,2维纹理只需要2D向量即可处理。当然,还有别的用法,但它们更深奥,但恕我直言,宁得先搞懂上述的概念鸭!

☽暗黑の、杀手☾—彳亍。是不是这样,如果你有一个四边面(两个三边面),然后给它两个纹理,一个草,一个砖,然后你就能在上面做一条路?我看到的一些游戏似乎混合了这样的纹理,我怀疑这不是在PS里面做的。哦不对,我傻了,我觉得需要几个多边形来创建这条路,因为UVW信息只保存在顶点中,但W是用来做从一个纹理到另一个纹理的过渡的?

看这家伙的暴论hhhhh太草了,

❥你の大♀坏♬蛋♥—不能说一模一样,只能说差不多。你可以用3D纹理做这事,但不止于此。2D纹理由二维数组代表,对吧?那么一个3D纹理,就由三维数组代表。你能知道为什么需要3D纹理坐标系映射3D纹理了吗?

☽暗黑の、杀手☾—我懂……但我不知道3D纹理会用在什么地方。你能说说嘛?

老♂东西—你干嘛纠结这?3D纹理只是工具,就像其他东西一样,如果你的项目里需要用它,你就会用到它(即,发挥你的想象力)

❥你の大♀坏♬蛋♥—这个花瓶是3D纹理,看看这个https://mrl.cs.nyu.edu/projects/texture/

这个瞎几把起名的真是笑死我了—想象一个树干,在游戏中,它被玩家用火箭弹、枪械和卡车狠狠地撞击、蹂躏,崩飞了漫天的碎片。这些碎片的大小和形状都是不同的(取决于打击类型、打击规模、打击方向等),你要如何决定碎片和剩下来的木桩的纹理坐标系?你需要3D纹理信息,记录木头的纹理。拿位图缠在树干上,搞一个表面材质坐标系出来是不够的,这就是3D纹理的使用案例。另一个例子是,一个会变色的2D纹理,可能是剥落的油漆、生锈的铁,在这些情况下,第3维被视作时间,随着时间的推移,W值慢慢移动,纹理逐渐改变。云通常是这样模拟的。

【链接】

What is the W in UVW mapping?

【提问】

-W坐标是用来干嘛的?

-我注意到在UV展开器窗口中,可以输入U,V和W的值,前两个我能懂,但W就很奇怪的。我找不到它存在的意义。我试过输入各种数字,但它没有一点反应。

-有人有想法吗?

【评论】

A—看看这个,(Sorry, looks like the page you are looking for does not exist.

A—W相当于Z,代表一个与UV平面垂直的方向

B—UV坐标系是3D的,就像XYZ一样。W被一些参数化材质使用。你可以切换到UW或VW视口。取决于你的模型是如何展开的,你的顶点可能存在高度信息。我发现W通道在分离重叠UV块时很有用。

C—那它真的有实际作用吗?

A—我没看到对它的应用,但当你把镜像的UV叠在一起时,我认为存在一个“位于顶部”的。我不确定这是不是对的,但也许你可以移动W值,以便于你被镜像的网格处在后面。巴拉巴拉,我也不知道怎么说,爷把爷自己绕晕了,就告诉你,UV编辑器还是3维的,并且有3D坐标系

B—大部分时间都没用

C—它是一个方便的工具,如果你遇到了很多重叠的UV块,并且想孤立选择它们。就像假设我有一个单个的物体,它将自己的UV拆解得很碎,那么我可以把每一特定区域的UV放在W中的某一层,然后分别选择它们。同时,也有3D纹理这样的东西,你可以拥有3个维度的UV坐标。

D—大部分时间W都是没用的,除非你把UV展开在3D空间中(比如Rizom UV),或是在烘焙法线时为对称物体分配哪边是顶部,哪边是反转的,以及一些花里胡哨的着色器技巧。然而,由于几乎所有软件都允许你拥有多重UV通道,你最好不要对W坐标抱有任何非分之想,老老实实地展第二次UV。

E—MAX里有一些程序化纹理会用到W坐标

F—“MAX里有一些程序化纹理会用到W坐标”?那不是基于对象或世界空间的吗?UV只用于预览。

G—亲爱的F:大部分贴图类型都允许你自由地选择源坐标系,许多参数化贴图默认为对象或世界空间,但如果你想在3D参数化贴图上用UVW通道,你可以将数据传递给显式贴图通道。( pass them the Explicit Map Channel if you want to use UVW coordinates for a 3D parametric map)总而言之,雀食,W轴有时会很有用;但通常,答案是否定的……游戏里很少用到它。

H—所以W的作用和PS里的图层差不多?

I—谬哉。W就像Z之于XYZ。

H—雀食,但这不都同一个意思吗?如果我理解的没错的话,它就相当于图层,毕竟你并没有从XYZ直接转化成UVW ,你用的是2D空间中的伪3D系统

C—亲爱的H:把UV编辑器从UV窗口切换到VW或UW。UVW就像XYZ一样,但通常你会从顶部观察它

I—雀食。C是对的。想象从俯视视图查看3D模型。一个顶点拥有UVW三种信息通道,也可以拥有任意的W值。它根本不是图层。

【链接】

What's the W coordinate for?

总结一下,W和程序化映射有关我给个链接,你们自己看看我是懒得纠结了

The UVW coordinate system is similar to the XYZ coordinate system. The U and V axes of a bitmap correspond to the X and Y axes. The W axis, which corresponds to the Z axis, is generally only used for procedural maps. A bitmap's coordinate system can be switched in the Material Editor to VW or WU, in which case the bitmap is rotated and projected so that it is perpendicular to the surface.

https://www.youtube.com/watch?v=QpkpJ9Csrkk

【程序纹理】

Noise is a texturing primitive you can use to create a very wide variety of natural looking textures. Combining noise into various mathematical expressions produces procedural texture. Unlike traditional texture mapping, procedural texture doesn't require a source texture image. As a result, the bandwidth requirements for transmitting or storing procedural textures are essentially zero. Also, procedural texture can be applied directly onto a three dimensional object. This avoids the "mapping problem" of traditional texture mapping. Instead of trying to figure out how to wrap a two dimensional texture image around a complex object, you can just dip the object into a soup of procedural texture material. Essentially, the virtual object is carved out of a virtual solid material defined by the procedural texture. For this reason, procedural textures are sometimes called solid texture.

噪音是一种纹理原始,您可以用它来创建非常广泛的自然纹理。将噪声组合成各种数学表达式产生程序纹理。与传统的纹理映射不同,程序纹理不需要源纹理图像。因此,传输或存储程序纹理的带宽要求基本上为零。此外,程序纹理可直接应用于三维对象。这避免了传统纹理映射的"映射问题"。与其试图找出如何将二维纹理图像包裹在复杂的对象周围,不如将对象浸入程序纹理材料的汤中。从本质上讲,虚拟对象是由程序纹理定义的虚拟固体材料雕刻而成的。因此,程序纹理有时称为实心纹理。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3