一、一个简单的例子
下面让我们通过一个简单的例子,了解UV编辑和应用的一般过程,对UV有一个初步的认识。(对UV有一定了解的朋友可跳过此小节)
我们的学习目标是根据下图的色彩设计稿,为模型分配UV,并根据安排好的UV绘制简单的贴图。

源模型建成后,UV重叠和拉伸太多几乎不可用,如下图,我们必须根据要求重新映射和编辑UV。
让我开始吧!
1:打开文件box_uv.mb,在选择Window > UV Texture Editor打开UV编辑器,选择视图中的物体,从UV编辑器中我们会发现物体UV很乱。

2:我们从小的Box物体开始着手。打开Hypershade,创建一个Lambert材质,将uv_test_2.jpg指定给它的color属性,再将材质球指定给视图中的物体。
将贴图的Place2dTexture属性中的RepeatUV都改为10,使贴图方格更密一些,从视图中我们可以看出因为UV重叠和拉伸物体上的方格贴图很不规则。如下图

2:按F11,进入物体的面选择模式,选择顶部的圆柱体的面,点击Edit Polygons > Texture > Cylindrical Mapping,给它一个圆柱体贴图,视图上会出现圆柱体贴图操作器,现在可以看出小方格贴图已很规则了。
按F12,进入物体的UV选择模式,UV点显示为紫色,在圆柱体上选择任意一些UV点,在UV Texture Editor编辑器菜单中选择Select > Select Shell,这样我们就选择了圆柱体UV块。在UV Texture Editor编辑器中,按W键使用移动工具将其移至旁边,避免与其他UV重叠,有利于看得更清楚。
按R键使用缩放工具,缩放UV点,同时观看3D视图直至方格纹理变成正方形。

3:以同样的方法给侧面的两个圆柱体映射UV,由于侧面的两个圆柱体方向不一样,映射后我们要在通道栏中选择映射节点,旋转映射轴向RotateX为90度,并将UV块拖至旁边。

4:选择物体顶部的面,选择Edit Polygons > Texture> Planar Mapping > ,打开Keep Image Ratio选项,将Mapping Direction选项改为Y Axis,如下图,点击Apply完成平面映射,并将映射的UV块移至旁边。

5:以同样的操作方法完成物体余下的面,左右、前后和下部,注意选择相应的轴向,也就是Mapping Direction选项,完成各个面的平面映射,并将映射的UV块移至不同的位置避免重叠。

6:进一步给未完善的地方映射UV,例如圆柱体的顶部、立方体正面和后面的凹槽边缘。
选择3个圆柱体的顶部的面,点击Edit Polygons > Texture> Automatic Mapping,给予3个面自动映射方式。
立方体正面和后面的凹槽边缘与其他面一样使用平面映射方式,使用时将选项中的Mapping Direction改为相应的轴向。

7:到此我们已将物体的UV分成很多块面,已解决了重叠和拉伸。

8:使用缩放工具,缩放调整各个UV块面,并观察视图使方格看起来都一样大小,这样UV就有一个统一的比例。
根据需要选择UV块面的边,点击UV Texture Editor编辑器菜单Polygons > Move and Sew UVs命令,缝合一些 UVs,将UVs拼成几个大的块面,这样利于减少UVs的接缝。
使用缩放和移动工具,将所有的UV块面安排在0-1的空间,并充分地利用这个空间。

9:在UV Texture Editor编辑器菜单中选择Polygons >UV Snapshot…,输出一张1024尺寸UV图。
在Photoshop中,打开输出的UV图,根据色彩设计稿和UV线框绘制纹理。创建一个新的材质球,将刚绘制纹理作为它的color贴图,并将材质球指定给视图中的物体。
如果感觉还不错,用同样的方法完成另一个物体吧!
最终效果如下图:

二、认识UV
好的贴图纹理必须基于合理的UV分布。
UV是定位2D纹理的坐标点,UV直接与模型上的顶点相对应。模型上的每个UV点直接依附于模型的每个顶点。位于某个UV点的纹理像素将被映射 在模型上此UV所附的顶点上。多边形和NURBS物体UV存在的方式不同,多边形的UV是一个可编辑的元素,而NURBS的UV是表面内建的,且不可编 辑。
多边形和NURBS的UV各有优点:
多边形的UV:优势在于可灵活编辑,缺点是对于复杂的模型需要花费大量的时间来映射和编辑UVs。
NURBS的UV:UV延展均匀、完整和不重叠性是NURBS的自身UV的优点。但模型布线要求相对均匀,否则会拉伸纹理。

多边形模型的UV

NURBS模型的UV
打开文件:5.1_about_uv.mb,并打开UVTexture Editor窗口,当我们选择多边形物体时,物体的UVs也会在UV Texture Editor窗口显示。

通过选择多边形的UV元素遮罩, 我们可以拖动所选择的绿色UV点。当选择NURBS物体时UV Texture Editor窗口只显视灰色的不可编辑的参数线。
三、NURBS的UV
按定义,NURBS表面有4个边并有规律地排列UV参数的行和列。在NURBS表面中,UV始终存在,不像多边形需要创建或编辑,它具有NURBS面片内置的、不可以进行编辑的特性。而polygon与subdiv的UV是作为一个可编辑的元素。
法线决定NURBS曲面的正反,射出法线的面为正面。用“UV右手定则”可以方便地定义哪边是正面,如下图,如果拇指指向U正方向,食指指向V正方向,中指垂直于食指和拇指,指向NURBS表面的法线。表面法线的概念对纹理、渲染很重要。

选择NURBS模型,使用Display > NURBS Components >Surface Origins命令,可以显示UV的方向,缺省情况下红色为U向,绿色为V向,蓝色为法线方向。想看到法线,先选择表面再选择Display > NURBS Components > Normals(Shaded Mode)

显示法线的NURBS表面

显示UV的方向
如果2D纹理在NURBS面片上放置的话,不管UV边的比例是不是1:1,都可看作NURBS面片的UV充满纹理的0~1正方形空间。如下图:

不同长宽比的NURBS面片应用相同尺寸的纹理

纹理的0~1空间,上图中的4个红色空心点,分别定义纹理的4个边界,这4个点组成的空间为0~1的纹理空间
在Maya中,如果文件纹理是正方形的,在渲染时将会的得到最佳效果。使用非正方形的纹理会增加一定的渲染时间,一般的做法是在绘图程序中将图像尺寸改为2的冥次方,例如256×256,512×512,1024×1024等。
NURBS的UV分布受模型表面参数线的影响。如果模型Isoparms的分布不均匀,就造成默认UV分不不均,从而拉伸了二维纹理贴图。应此在NURBS建模过程中尽量保持型Isoparms参数线的分布均匀。

2D纹理指定给每个N U R B S表面,表面根据内建的UV定义纹理分布


使用棋盘格文件纹理可以非常清晰的看到NURBS表面因参数线不匀而产生的贴图拉伸。

如上图,当上图正方形纹理指定给非正方形NURBS表面时,纹理产生了一定的挤压和拉伸,可以从图中看出纹理中上的数字严重挤压,在photoshop中绘制纹理时会产生不可预期的效果。

闹钟外壳纹理挤压和拉伸渲染后的效果

钟表板的NURBS参数线分布均匀贴图没有拉伸变形
在NURBS建模过程中,注意一些布线规则有利于方便的应用纹理。尽量使表面参数线间隔均匀,即等参线的网格均匀,避免波纹曲线出现,避免参数线间隔在不需要造型的地方忽宽忽窄,当然参数线间隔不可能绝对相等,只是相对即可,如下图:

四、使用Fix Texture Warp选项
选择NURBS模型,打开属性编辑器,在Texture Map栏中打开Fix Texture Warp选项,可以对纹理的不均匀分布进行修正。而不需要依赖于NURBS表面的UV参数,Grid Div PerSpan U、Grid Div Per Span V、表示U向和V向每跨度的、分割数目,默认数值是4,数值越大纹理分越均匀。

打开Fix Texture Warp选项后,操作视图不能实时显示出来,只有渲染后才能看到。

应用Fix Texture Warp选项后渲染后,与左图相比,纹理虽然有拉伸,但分布相对均匀。
虽然纹理分布均匀,但还是有拉伸,这是应为我们使用的是1:1的纹理贴图,而闹钟壳的NURBS面片长宽比不是1:1。下面进一步调整NURBS模型的纹理,是其比例正确。
在Hypershader窗口中,选择模型的place2dTexture节点,打开属性编辑器,调整Coverage的数值,同时察看渲染视窗的更新效果,使用IPR渲染可快速看到调整结果,直到棋盘格看起来变为正方形为止。

根据IPR渲染结果,判断纹理贴图使用范围,从上面的例子可以看到纹理只使用整个面积的1/3左右。根据比例在绘图软件中绘制贴图,然后指定给模型。


五、确定贴图长宽比例
还有一种方法确定纹理比例,使用Arc Length测量工具测量出NURBS表面的精确弧长,再根据比例绘制贴图。
确定贴图长宽比例具体步骤:
1:测量模型
使用弧长测量工具,Creat>Measure Tools>Arc Length Tool测量表面U向和V向的长度。测得的长度为7.94和34.8。
2:绘制贴图
根据测的长宽比,在绘图软件中绘制贴图纹理。
3:更改边长
在绘图程序中将图像尺寸改为正方形,边长为2的冥次方,例如512×512,1024×1024等。
4:调整2d布置节点
2d布置节点决定二维纹理在模型表面的分布,将U向Coverage 数值改为4.3(34.8/7.94≈4.3)。
5:渲染完成
需要注意的是:不必计算得绝对准确,只要纹理从视觉上看来没有拉伸就行。


六、NURBS表面的参数化
NURBS表面参数化直接影响贴图效果,NURBS表面参数化分为:统一参数化(Uniform)、弦长参数化(Chord Length)两种。统一参数化表面具有更可预见的值,弦长参数化的表面可以较好的分配曲率,允许纹理相对均匀地分配在不均匀的表面上。
使用Fix Texture Warp属性可改变纹理分配使纹理分配更均匀,在制作动画时,如果表面有局部变形,贴图会滑动产生不正确的效果。
我们将通过NURBS曲线理解统一参数化(Uniform)、弦长参数化(Chord Length)
1:打开Create>CV Curve Tool工具选项,分别用Uniform、Chord Length选项创建两条NURBS曲线(按S键使用吸附网格工具,保持两条线的CV点一致)

2:选择Display>NURBS Components>Edit Points 显示曲线的编辑点
3:拾取遮罩 Curve Point,在曲线上拖动,Maya视窗顶部会显示所在点的参数,并随着拖动不断变化。

4:以统一点间距(Uniform)参数创建的曲线,第一个编辑点的U值为0,第二个的U值为1,第三个的U值为2,如此类推。第三个编辑点和 最终编辑点的中间一点值为2.5。不管两个编辑点的实际距离有多长,所有两个编辑点间距离值是相等的。按这种方式计算曲线点值的方法称之为统一参数化。
以弦长点间距(Chord Length)参数创建的曲线,第一个编辑点的值为0,第二个的值为2.4907,第三个的值为5.4379。第三个编辑点和最终编辑点的中间一点值为8.5402
曲线U向参数值取决与编辑点的距离,而不是点的数量。

曲面在三维空间中由U向和V向两个参数来定义,比曲线多一个V向参数,形成一个方形的NURBS面片。

七、NURBS表面重建

下图用统一参数化创建的可乐罐,因为参数线不均匀引起贴图拉伸,从视图和渲染图中都可看出来。
打开表面Fix Texture Warp属性可以解决此问题,如果可乐罐要做变形动画,这种方法是不可取的。我们需要重新创建表面,(不能使用Rebuild Surfaces命令)

重建表面:
拷贝[cdrom>\005\tin_rebuild]项目文件夹至硬盘并打开文件tin_rebuild_lo_ren_v001.mb
1:选择可乐罐,按1键最低精度显示模型,并打开 Edit Curves > Duplicate Surface Curves > ,选择V向,复制NURBS曲线。

2:选择复制的NURBS曲线,并拖到原可乐罐旁边,以便于比较。

3:从下至上依次选择曲线,选择Surfaces>Loft> ,勾选Chord Length选项,重新放样表面。

4:指定同一个材质给新生成的边面,(按6显示硬件纹理)可以看到纹理没有拉伸,获得我们需要的效果

5:渲染后,纹理同样正确。
通过重建表面有利于做变形动画。

八、NURBS表面方向
由于表面创建的方法不同,表面方向有可能不正确,可通过编辑2D纹理的place2dTexture节点属性或使用Edit NURBS >Reverse Surface Direction 来修正。
为了便于纹理贴图、渲染尽量将UV原点安排在左下角,法线朝外。良好的习惯将大大提升后续工作的效率。

利用小相架上的一张照片来了解NURBS表面的方向(像架是多边形,照片是NURBS)[cdrom>\005\frame(项目文件夹)]

上图中相架上照片因为表面UV方向不正确,造成贴图定位不对没有达到预期的安排

Reverse Surface Direction选项:
U:沿U向反转CV,V:沿V向反转CV,Swap:交换UV方向,Both:U向和V向同时反转CV
1:打开文件frame(项目文件夹)
2:选择NURBS模型,使用Display > NURBS Components > Surface Origins,打开NURBS表面的方向和法线显示,作为参考。

3:选择Edit NURBS>Reverse Surface Direction> ,打开对话框选择Both,反转表面方向。
4:得到了我们所需要的正确效果。

九、了解多边形的UV
多边形不像NURBS表面具有固有的2D坐标。多边形必须使用映射的方法来获取合理的UV坐标,UV信息是基于2维的,是一个平面,可以在UV Texture Editor中看到并编辑。从Window>UV Texture Editor 打开UV编辑器。
我们在创建基本多边形几何体时也能创建缺省的UV坐标,但模型在编辑顶点及其他操作后,缺省的UV大多不可用,必须重新映射。
UV操作在一般的工作流程的位置是:


缺省多边形几何体的UV

编辑点操作后的UV
为多边形指定2 D 纹理, 并在视图中显示纹理( 按6键),多边形表面如果没有UV信息就会在视图中显示半透明的斜条纹,渲染后无UV信息的部分也不会显示纹理。这样的情况我们必须重新映射UV。

多边形的UV映射和编辑,是一个反复操作的过程,同时也是繁重的,必须把它当成一门艺术才能做得更好。要创建一个适配模型的最合理的UVs,可能需要多次UV映射,反复的UV编辑直到满意为止。
一个简单的面包也要通过多次映射,两次平面,一次圆柱体,如下图

Maya默认的状态下创建多边形物体就创建了缺省的UV,当然也可以不创建UV,如下图

当创建一个新的UV映射方式后,旧的UVs将会被新的所替代。

十、多边形UV编辑的原则
多边形的UV编辑取决于不同的应用目的,当然也有制作人的习惯差异。一般来说最合理的UV分布取决于纹理类型、模型构造、模型在画面中的比例、渲染尺寸、镜头安排等。但有一些基本原则是应该遵循的。
通用的一些基本原则是:
1、UVs尽量避免相互重叠(除非有必要)。
2、UVs避免拉伸。
3、尽可能减少UVs的接缝(即划分较少的UV块面)。
4、接缝应安排在摄像机及视觉注意不到的地方或结构变化大、不同材质外观的地方。
5、保持UVs在0-1的纹理空间,并充分利用0-1的纹理空间。
下面让我们逐步了解以上5点原则
1、UVs尽量避免相互重叠(除非有必要)。
UVs重叠,模型的贴图就会重叠,重叠的模型部分纹理就会相同,不利于纹理贴图的安排。例如我们将史卢比的衣服设计成前面红条纹,后面兰条纹,但由于左右两边的UVs重叠,造成贴图重叠两边只能颜色统一,不能达到我们的要求。展开UV就能解决此问题。


展开UVs得到正确的效果
如果遇到纹理图案需要重复的物体,则可以利用UVs重叠来节约一些纹理空间,例如瓷砖、天花板、花纹布、墙角线等等。从下图中我们可以看出墙角 瓷砖UVs重叠了多次以获得图案的二方连续效果。在使用UVs重叠时要注意不应重叠太多,否则看起来不真实,因为现实生活中没有如此雷同的得物体。

2、UVs避免拉伸。
UVs拉伸后会造成2D贴图拉伸,纹理会产生变形,不能达到预计的效果。

UVs拉伸后,贴图拉伸产生不正确的效果

应达到的正确效果
3、尽可能减少UVs的接缝(即划分较少的UV块面)。
大量UV接缝会影响纹理绘制的效率,因为我们不得不花大量的时间来处理接逢处像素的衔接。如果在接逢处贴图稍微有点颜色差异,就会明显的显露出来。在保持UV不拉伸的情况下尽量将UVs拼成几个整块。

UV分配的块面太多,如果贴图不是实色造成接逢接处的颜色差异在制作过程中没有必要一味追求较少的UV块面,例如:生物模型表面有太多的起伏结构,如果强行将UVs缝合成一整块就会造成大量的纹理拉伸。我们必须根据模型的实际情况。

强行将一只Bug的UV合并成整块,造成了脖子部分纹理的拉伸
4、接缝应安排在摄像机及视觉注意不到的地方或结构变化大、 不同颜色、材质外观的地方。
在人物建模建模中,UV的接逢一般安排在头的后侧,手臂、手指、腿的内侧等我们不太注意的地方。
当然也可以充分利用不相同的材质外观的交接处来分割UV。

分配了UV的头部,接缝安排在后侧和下颌处

史努比的腿和鞋是单个多边形物体,腿和鞋材质颜色不同,我们可以从这里分开UV
5、保持UVs在0-1的纹理空间,并充分利用0-1的纹理空间。
打开UV Texture Editor,0-1的UV坐标空间,超出这个空间范围模型就会使用相同的纹理,因为它是无限重复的。UVs编辑完之后我们应该将UVs安排在这个0-1的范围内。

由于UV超出0-1的空间,造成纹理重复

在0-1空间的正确效果
假设我们的目标渲染尺寸是640×480,文件纹理贴图的尺寸是1024×1024,但安排的VUs块面却只有200×200像素,如下图,这 样渲染后会造成严重的贴图分辨率不足。我们虽然使用了1024×1024尺寸的贴图,但实际使用的范围是200×200像素,渲染后贴图会很模糊。

