Maya创建高精度多边型模型
作者:佚名 来源:互联网 发表时间:2009-07-02
各位好。以下是一片翻译教程,这虽然不是叫你一步一步制作的教程,单是是一片非常好的教程。
概要
I. 简介
II. 什么是平滑的多边形模型
III. 为什么使用平滑的多边形模
各位好。以下是一片翻译教程,这虽然不是叫你一步一步制作的教程,单是是一片非常好的教程。
概要
I. 简介
II. 什么是平滑的多边形模型
III. 为什么使用平滑的多边形模型
优点
简易性
直观的界面操作
高速的生产效率
内嵌多层次的细节级别
一张纹理贴图可适用于整个角色
纹理贴图的所有区域互成比例
缺点
需要在模型上布置UV坐标
在使用colorLayout以后,不能够添加或去除多边形边界
在某些情况下,模型分辨率可能不够高
相对于其他形式的模型表面, 在镶嵌细分时,缺少控制
与Maya的Fur模块结合得不太好
纹理接缝问题
IV. 与平滑多边形模型相关的技术问题。 以及如何使用历史节点和MEL脚本解决这些问题。
问题1
在平滑以后,蒙皮时要处理过多的多边形表面顶点
解决办法1
先蒙皮低分辨率的多边形网格, 在蒙皮簇skinCluste下添加polySmoothFace节点, 所有融合变形须加在skinCluste 之前。
问题2
大于4个顶点的多边形面, 在平滑后可能产生不好的结果。
解决办法2
建模时使用四边或者是三角形面片
问题3
在添加了polySmoothFace节点后, 会发生UV坐标扭曲的现象。
解决办法3
在polySmoothFace节点下,使用投影节点。 并把UV坐标布置在参考物体上。可使用如下MEL脚本,加快你的工作进程。 autoColor, autoProject, and autoShellAssign。
... >>
V. 如何把你的模型提交给角色设置动画师
1 产品生产流水线
2 如何合并相关的UV参考文件及设置文件。
3 隐藏和锁定UV参考文件。
创建高分辨率多边型模型
I. 概述
本教程关注的是如何在Maya4。5中, 使用平滑的多边形几何体创建高精度的模型。 我们要讨论的是: 对比与其他类型的表面,多边形这种模型表面的优缺点。我们还要讨论与平滑多边形模型相关的技术难点。我们将使用自己编制的MEL脚本和历史来克服这些技术难点。最后我们将讨论如何将这种类型的模型应用于产品的生产线中。 同时将提供一些技巧,展示如何与角色设置艺术家协同工作,把模型及纹理贴图很好的合并到一个组织严密的角色文件中去。
II. 什么是平滑的多边形模型
我们这里所指的平滑多边形模型是在它的历史记录中,具有可调polySmoothFace节点的低分辨率的多边形网格。在Maya的建模模块的主菜单上,通过选择Polygons>Smooth命令,即可创建平滑的多边形。为了能用低分辨率的多边形网格控制高分辨率的网格,通常我们使用的技术是连接此俩多边形网格的形状节点并且平滑作为目标的多边形网格。此外,有一些免费的MEL脚本也可做同样的工作。例如: Dirk Bialluch 写的connectPolyShape (CPS)。 或者可以直接编辑低分辨率网格,然后添加polySmoothFace节点,当需要重新编辑低分辨率网格时, 使用deleteInput MEL脚本删除平滑后的多边形网格。
这里所说的目标网格,也就是平滑后的网格仍然是多边形网格。在使用平滑(Smooth)命令以后,会有一个polySmoothFace节点存在于此物体的历史记录中,同时网格的密度会变密。通过控制polySmoothFace这个节点, 我们可以获得各种细节级别的模型, 而不需用手工去添加。 但是,执行了平滑命令以后, 不要在原始模型上删除任何控制顶点, 否则会产生意想不到的结果。
... >>
需要知道的是,在Maya 4。5中, 目前有基于两种不同的算法机制的平滑算法。 我在这要使用的是指数性的平滑算法, 因为这种算法能够很好地与我们将要用到的一些MEL脚本相兼容。 所以,在我的Maya的平滑命令设之中, 我选择指数算法(exponential)。
III. 为什么使用平滑的多边形模型
优点:
简易性
在三维图形领域, 多变型是一种最古老的模型表面。 所见既所的是他的一大长处。 不需要额外的镶嵌细分和参数划设置。 并且, 相对于Nurbs等类型的模型, 他只需要较少的计算量。
直观的界面操作
绝大多数的三位艺术家都可在几天之内完成一个多边形模型。 因为对于多边形模型来说, 不存在面片连续性的问题, 不需要缝合表面。在建模过程中, 可很方便,很容易地添加边, 面等。 通常来说,在建模时,先从一个基本的几何模型开始,再逐步添加细节,是提倡采用的方法。但是对于多边形模型来说,对这种建模的顺序的要求可相对松一些,也不至于导致不可预想的结果。而Nurbs模型,则对此要求较严,必须经过大量的实践和高度的操作技巧来张握这种正确的建模顺序。所以多边型建模更直观容易。
高速的生产效率
使用平滑多边形建模的方法相对于Nurbs面片的建模方法来说要快速。绝大多数模型在一至两天内即可完成。
内嵌多层次的细节级别
在Maya中,polySmoothFace节点的细划分属性可在任何需要的时候调解。这个内嵌的多层次的可调节细节级别的属性,可使我们根据摄影机到模型距离的不同需要,任意调节模型的分辨率。
一张纹理贴图可适用于整个角色
多边形模型允许使用一张纹理贴图覆盖整个多边型角色,这样, 在使用PhotoShop这样的软件处理纹理贴图的时候要方便和容易得多。而不用象Nurbs面片模型,需要处理多张纹理贴图。
... >>
纹理贴图的所有区域互成比例
使用我们自己编织编制的MEL脚本autoProject,可以在Maya的UV纹理编辑器中, 保证每一块UV坐标分块互成比例。这使得整张纹理贴图的缩放,在整个模型表面保持连续。
缺点
需要在模型上布置UV坐标
Nurbs面片模型的UV坐标是内置于Nurbs几何体的,一旦建模完毕,可直接提供给贴图艺术家使用。但是多边形模型必须在它贴图之前,被人工分配UV坐标系统。这个手工分配UV坐标的过程,有时会使整个生产进度增加数小时甚至是数天不等。
在某些情况下,模型分辨率可能不够高
尽管我们作了很大的努力,把UV纹理编辑器紧密集成,我们还可以多次使用一张纹理图的某些区域,但是多边形模型几乎总是不能充分使用所有的纹理空间,总会有一些纹理区域没有被用到,这将导致用于平滑多边形的贴图要大于在同样情况下用于Nurbs的贴图。如果要想达到同样的分辨率水平。
在平滑等级2的情况下,多边形数太高
相比Nurbs模型,使用平滑多边形模型会导致失去和多控制。在平滑等级1的时候,模型看上去有些面片的痕迹。但到平滑等级2时,多边形数以指数形式增加,造成多变性面过多,甚至超过我们的实际需要。
与Maya的Fur模块结合得不太好
多变形这种形式的模型与Maya的Fur模块结合得不好。极大的限制了在此种模型上直接绘制各种中皮毛笔刷的能力。在这一点上,Nurbs模型要好得多。
IV. 与平滑多边形模型相关的技术问题,以及如何使用历史节点和MEL脚本解决这些问题。
范例文件:CylinderSkinExample_01.mb
问题一:在平滑以后,蒙皮时要处理过多的多边形表面顶点
一旦对多变形网格施加了平滑命令并且删除了历史节点,要想绑定这个几何体到骨骼上将会非常困难。尽管在技术上有这种可能性,可对所有的多变形表面定点设置权重,但这可是一项非常艰巨和效率低下的任务。
... >>
解决办法1
先蒙皮低分辨率的多边形网格,在蒙皮簇skinCluste下添加polySmoothFace节点,所有融合变形须加在skinCluste 之前。
解决办法是在执行平滑命令前,先绑定低分辨率的多边网格。这样,可以只处理低分辨率模型的权重问题,然后再执行平滑命令。但要注意,如果需要为模型添加一些融合变形,此变形节点一定要加在蒙皮权重的skinCluster之前。
问题2
大于4个顶点的多边形面,在平滑后可能产生不好的结果。
在执行平滑命令时,大于四边形的面片,会产生不可预想的结果。更糟的是,在动画模型时,模型网格会产生“爆裂”的现象。
解决办法2
建模时使用四边或者是三角形面片。基于以上原因,建模时应优先考虑使用四边或三角形面片,尽可能不用N边形面片,一点要避免在变形厉害的区域,如,嘴,肩和膝盖等区域使用。在此我们提供了一个Mel脚本,可以根据多变形面片的边数来用颜色区分不同边数的多变性面片,四边形为绿,三角形为兰,其他为红颜色。
问题3
在添加了polySmoothFace节点后,会发生UV坐标扭曲的现象。
添加了polySmoothFace节点后(执行平滑命令后),在UV编辑器中,如果你仔细观察,你会注意到原有UVs坐标仍保持在原来位置。但是由于同时发生了UV坐标的细划分,所以会创建出新的UV边界,这正是问题所在。此时的UV坐标,与其应该达到的理想情况相比会显得混乱。如果你再仔细地观察一下,你会发现,此时的UV坐标并不准确地符合现在的多边形网格。你现在的多边形模型的网格是平滑弯曲的,而现在的UV坐标仍然保持直线的,正是这个原因,引起了UV坐标的扭曲。这个扭曲的程度,会根据你的原始模型的不同,从很轻微甚至到很严重。
... >>
解决办法3
布置UV时,在polySmoothFace节点后应用投影坐标节点。同时可使用我们提供的Mel脚本:autoColor, autoProject, and autoShellAssign来加快整个工作进程。
在polySmoothFace节点后面使用多边形投影坐标,将减少这种UV坐标的扭曲。因为,在历史纪录里,由于投影节点是在平滑节点后面的,所以它将根据多边形平滑级别的不同而自动更新,所以会精确符合我们的模型网格。所创建出的UV坐标,也会随着平滑级别的不同而自动更新。
如果我们需要进行贴图工作的的模型完全是平面的,这个工作会比较容易完成。只需要做一次投影就可以了。但是,我们更多处理的是那些曲面模型,它上面的面片分别指向不同的法线方向。当面片的法线方向与我们坐标的投影方向有很大偏离时,如何处理避免贴图纹理的拉伸?
在这种情况下,我们需要用来自不同方向的多个UV坐标投影,来克服纹理的拉伸问题。就是说,不同的面片需要从对他们来说相对最有利的投影方向来获得UV坐标。例如,一组面片的法线方向向下指向Z轴的负方向,我们需要用朝向Z轴的正方向的投影。同理,指向X轴的负方向的一组面片,需要用朝向X轴正方向的投影。
但是,接下来的问题是,如何把一些面片包括在这个投影中,把另外一些面片包括在另一个投中。在比较复杂的多边形模型中,我们需要一个办法,来选择这些面片,并且告诉Maya从哪个方向上对他们进行投影。通常,大家的做法是:先平滑这个多边形模型,然后在这个平滑后的高密度多边形网格上选择出一组面片,然后进行投影。但是,要想在一个很高密度的多边形网格上进行选择,是一件较困难的事情,。另外,此时创建的UV坐标,也只适用于这个平滑后的多边形网格,这样的话,在添加polySmoothFace节点后,我们反而失去了对模型不同细分界别的控制。
... >>
我们给出的解决办法是:在添加polySmoothFace节点之前(执行平滑命令之前),先在低分辩率的多边形网格上创建‘选择组“(selection sets)。首先在低分辨率的模型上,划分出若干个区域,并为他们建立不同的选择组。对不同的区域我们将在以后使用不同的坐标投影。然后对模型加载polySmoothFace节点,把它变成平滑模型。在平滑以后的模型上,我们先前做的选择组内,将会同时也把因为执行了平滑命令而产生的新的面片包括进来。所以这就给我们提供了方便,我们只需要在低精度的模型上进行选择的工作,而我们所创建的选择组,将根据模型的不同精度自动地更新。这样,我们可以在polySmoothFace节点上,同时也保留的对不同精度的控制。
在建立‘选择组’时,使用常规的方法并不是很方便。因为在你若想把面片包含在你的选择组中,你就必须先选择它。所以这不是一个快捷的方法。因此,在这里我们将使用一种特殊形式的组,来简化我们建立‘选择组’的工作。这个特殊的‘组’,我们暂且称其为‘材质组’(Shader Group)。使用这种材质组的好处是:由于它是与材质的滤光器节点相联系的,我们就可以改变这个材质的颜色,使模型在阴影显示模式下,给我们一个更好的视觉展示。就是说属于不同‘组’的表面,我们可以分配给它不同的颜色。当我们分配给某一些表面一个材质的时候,就自动地迫使它们进入相应材质的“材质组”。而且,任意面片只能属于某一个‘材质组’,要是分配给它另外一个材质,它将被当前的材质组清除,进入着另外的材质所属的材质组。所以,在我们划分选择组,并为它们设置投影坐标时,这的确是一个非常好的方法。
... >>
手工地在整个在平滑的多边形模型上,建立‘材质选择组’,布置UV坐标的操作过程
1 在低精度的多边形网格上,根据多边形面片的法线方向为它们分配不同颜色的材质。
2 然后对此模型,添加polySmoothFace节点,使其细分级别为2。
3 选择某一个‘材质选择组’,中的所有面片,并根据它们的最有利的法线方向,为其分配投影坐标。这样一次一组地为所有的面片分配好UV坐标。
4 在模型的polySmoothFace节点属性上,把细分级别设回到0。
5 在纹理编辑器窗口中,每次选择一个投影的UV坐标,依次地把所有的投影的UV坐标分布开来。此时,应注意让所有的UV坐标壳体既相互分割开来,又尽可能地相互靠近。
6 现在,就可以为整个模型分配一个材质。
7 删除没用的节点。
尽管以上的手工方法,对于我们的高精度多边形角色的布置UV坐标的工作是可行的。但是,手工地为每一多边形面片分配材质、着实是一件高强度的,枯燥的体力劳动。同样,为每一个面片分配材质的工作也是一个即慢而又非常重复性的工作。所以,我们给出以下的Mel脚本来帮助我们完成这个工作。使我们能省出更多的时间来进行纹理绘制的工作。这就是我们下面介绍的自动化的工作方法。先介绍我们要使用的Mel脚本。
1 autoColor:
这个脚本会自动创建6个不同颜色的材质,分别叫作: Xpositive, XNegative, Ypositive, Ynegative, Zpositive, 和 Znegative。同时自动评估多边形模型上每一个面片的法线方向。根据评估结果,自动分配以上6个材质中的一个给相应的多边形面片。
... >>
autoShellAssign:
这个脚本可以把上一个脚本autoColor所创建的材质划分开,并为每一块划分开的壳再自动分配一个材质。同时保留相应的颜色信息。这些颜色的信息可以用来指导以下的autoProjection脚本创建UV坐标投影。
autoProjection:
根据以上脚本所分配的颜色信息所指示的方向,自动为autoColor脚本所创建的,属于不同‘材质组’的模型面片投影UV坐标。例如,属于Xpositive‘材质组’的面片,将会从X轴的正方向上获得一个UV投影坐标。
GraphFaceMaterials:
此脚本将把一个多边形面片的表面材质标识出来。因为尽管你只选择了模型上的以一个面片,但是Maya自带的标识材质的功能会把整个模型表面上的所有材质标绘出来。使用这个脚本,可以使你只标识出所选择的面片上的材质。
scrollUp:
在模型的建造历史中,选择下一个UV投影节点。
scrollDown:
在模型的建造历史中,选择上一个UV投影节点。
selectProjection:
此脚本用来选择某一个面片所属的UV坐标投影,这个UV坐标投影是上述的脚本所自动创建的。
在整个在平滑的多边形模型上,使用自制的Mel脚本自动地建立‘材质选择组’,布置UV坐标的操作过程。
1 在低精度的多边形网格上,运行autoColor脚本
这一步的目的是,把事先已经分配好颜色的6个材质分配给我们的多边形物体。每一种颜色,代表一个坐标投影。而颜色也表示这个坐标投影是从哪一个方向上来的。例如,Zpositive材质为浅蓝色,通过在现在的模型上进行观察,我们可非常容易地说出,那些具有浅蓝色的模型面片是从
... >>
模型的前面获得坐标投影的。
2 对上面一步中分配好材质的面片进行编辑,优化
进行到这一步,你应该停下来,仔细观察一下多边形的面片上的颜色。要保证每一个面片都获得了来自你所希望的方向上的投影。如果有哪一块面片,你认为用其他方向的投影更合适的话,选择这个面片,并为它分配相应的材质,在进行这一步调整的时候,应该尽量减少材质接缝的出现。要知道autoColor脚本只是用来做一个开始的准备工作,而最终的结果,需要你自己根据模型面片的方向来调整。
3 运行autoShellAssign脚本,为上述的每一个分割好的UV坐标壳体。再做一次划分,并分配相应的材质。
如果你操作完第二步以后,就马上平滑你的多边形网格,并使用autoProjection来投影UV坐标,你会观察到,此时会创建6个坐标投影,尽管你也可以得到精确的UV坐标,甚至是极小的纹理拉伸,但是,你会观察到,在模型的某些部分,会出现UV坐标的交叠。这将导致你将来的得贴于出现重复。如果你是有意识地使你的纹理贴图产生重复,使用这些交叠的Uv坐标可以使你重复利用纹理贴图的某些区域。这不是件坏事情。所以到此为止这也不是什么问题。但是,如果你不希望产生这些交叠,你希望能够在将来移动某些独立的UV坐标壳体,以避免这些交叠,就要进行这一步,使用autoShellAssign脚本。
这个脚本是用来为我们已经分配了材质的6个材质组再进行一次细划分,同时为这些更细的划分分配不同的材质。因为这次细划分所分配的不同材质,会在将来使用了autoProjection脚本后,也最终变成不同的投影坐标。这样,我们就可以把通过只有6个材质的划分所产生的UV坐标壳体,根据这次的细划分的结果,细分为更小的UV坐标壳体。从而防止UV坐标交叠的产生。尽管,这也许还不能防止所有的UV坐标交叠的发生,但是,它已经能够解决绝大部分的UV坐标的交叠问题了。
... >>
概要
I. 简介
II. 什么是平滑的多边形模型
III. 为什么使用平滑的多边形模型
优点
简易性
直观的界面操作
高速的生产效率
内嵌多层次的细节级别
一张纹理贴图可适用于整个角色
纹理贴图的所有区域互成比例
缺点
需要在模型上布置UV坐标
在使用colorLayout以后,不能够添加或去除多边形边界
在某些情况下,模型分辨率可能不够高
相对于其他形式的模型表面, 在镶嵌细分时,缺少控制
与Maya的Fur模块结合得不太好
纹理接缝问题
IV. 与平滑多边形模型相关的技术问题。 以及如何使用历史节点和MEL脚本解决这些问题。
问题1
在平滑以后,蒙皮时要处理过多的多边形表面顶点
解决办法1
先蒙皮低分辨率的多边形网格, 在蒙皮簇skinCluste下添加polySmoothFace节点, 所有融合变形须加在skinCluste 之前。
问题2
大于4个顶点的多边形面, 在平滑后可能产生不好的结果。
解决办法2
建模时使用四边或者是三角形面片
问题3
在添加了polySmoothFace节点后, 会发生UV坐标扭曲的现象。
解决办法3
在polySmoothFace节点下,使用投影节点。 并把UV坐标布置在参考物体上。可使用如下MEL脚本,加快你的工作进程。 autoColor, autoProject, and autoShellAssign。
... >>
V. 如何把你的模型提交给角色设置动画师
1 产品生产流水线
2 如何合并相关的UV参考文件及设置文件。
3 隐藏和锁定UV参考文件。
创建高分辨率多边型模型
I. 概述
本教程关注的是如何在Maya4。5中, 使用平滑的多边形几何体创建高精度的模型。 我们要讨论的是: 对比与其他类型的表面,多边形这种模型表面的优缺点。我们还要讨论与平滑多边形模型相关的技术难点。我们将使用自己编制的MEL脚本和历史来克服这些技术难点。最后我们将讨论如何将这种类型的模型应用于产品的生产线中。 同时将提供一些技巧,展示如何与角色设置艺术家协同工作,把模型及纹理贴图很好的合并到一个组织严密的角色文件中去。
II. 什么是平滑的多边形模型
我们这里所指的平滑多边形模型是在它的历史记录中,具有可调polySmoothFace节点的低分辨率的多边形网格。在Maya的建模模块的主菜单上,通过选择Polygons>Smooth命令,即可创建平滑的多边形。为了能用低分辨率的多边形网格控制高分辨率的网格,通常我们使用的技术是连接此俩多边形网格的形状节点并且平滑作为目标的多边形网格。此外,有一些免费的MEL脚本也可做同样的工作。例如: Dirk Bialluch 写的connectPolyShape (CPS)。 或者可以直接编辑低分辨率网格,然后添加polySmoothFace节点,当需要重新编辑低分辨率网格时, 使用deleteInput MEL脚本删除平滑后的多边形网格。
这里所说的目标网格,也就是平滑后的网格仍然是多边形网格。在使用平滑(Smooth)命令以后,会有一个polySmoothFace节点存在于此物体的历史记录中,同时网格的密度会变密。通过控制polySmoothFace这个节点, 我们可以获得各种细节级别的模型, 而不需用手工去添加。 但是,执行了平滑命令以后, 不要在原始模型上删除任何控制顶点, 否则会产生意想不到的结果。
... >>
需要知道的是,在Maya 4。5中, 目前有基于两种不同的算法机制的平滑算法。 我在这要使用的是指数性的平滑算法, 因为这种算法能够很好地与我们将要用到的一些MEL脚本相兼容。 所以,在我的Maya的平滑命令设之中, 我选择指数算法(exponential)。
III. 为什么使用平滑的多边形模型
优点:
简易性
在三维图形领域, 多变型是一种最古老的模型表面。 所见既所的是他的一大长处。 不需要额外的镶嵌细分和参数划设置。 并且, 相对于Nurbs等类型的模型, 他只需要较少的计算量。
直观的界面操作
绝大多数的三位艺术家都可在几天之内完成一个多边形模型。 因为对于多边形模型来说, 不存在面片连续性的问题, 不需要缝合表面。在建模过程中, 可很方便,很容易地添加边, 面等。 通常来说,在建模时,先从一个基本的几何模型开始,再逐步添加细节,是提倡采用的方法。但是对于多边形模型来说,对这种建模的顺序的要求可相对松一些,也不至于导致不可预想的结果。而Nurbs模型,则对此要求较严,必须经过大量的实践和高度的操作技巧来张握这种正确的建模顺序。所以多边型建模更直观容易。
高速的生产效率
使用平滑多边形建模的方法相对于Nurbs面片的建模方法来说要快速。绝大多数模型在一至两天内即可完成。
内嵌多层次的细节级别
在Maya中,polySmoothFace节点的细划分属性可在任何需要的时候调解。这个内嵌的多层次的可调节细节级别的属性,可使我们根据摄影机到模型距离的不同需要,任意调节模型的分辨率。
一张纹理贴图可适用于整个角色
多边形模型允许使用一张纹理贴图覆盖整个多边型角色,这样, 在使用PhotoShop这样的软件处理纹理贴图的时候要方便和容易得多。而不用象Nurbs面片模型,需要处理多张纹理贴图。
... >>
纹理贴图的所有区域互成比例
使用我们自己编织编制的MEL脚本autoProject,可以在Maya的UV纹理编辑器中, 保证每一块UV坐标分块互成比例。这使得整张纹理贴图的缩放,在整个模型表面保持连续。
缺点
需要在模型上布置UV坐标
Nurbs面片模型的UV坐标是内置于Nurbs几何体的,一旦建模完毕,可直接提供给贴图艺术家使用。但是多边形模型必须在它贴图之前,被人工分配UV坐标系统。这个手工分配UV坐标的过程,有时会使整个生产进度增加数小时甚至是数天不等。
在某些情况下,模型分辨率可能不够高
尽管我们作了很大的努力,把UV纹理编辑器紧密集成,我们还可以多次使用一张纹理图的某些区域,但是多边形模型几乎总是不能充分使用所有的纹理空间,总会有一些纹理区域没有被用到,这将导致用于平滑多边形的贴图要大于在同样情况下用于Nurbs的贴图。如果要想达到同样的分辨率水平。
在平滑等级2的情况下,多边形数太高
相比Nurbs模型,使用平滑多边形模型会导致失去和多控制。在平滑等级1的时候,模型看上去有些面片的痕迹。但到平滑等级2时,多边形数以指数形式增加,造成多变性面过多,甚至超过我们的实际需要。
与Maya的Fur模块结合得不太好
多变形这种形式的模型与Maya的Fur模块结合得不好。极大的限制了在此种模型上直接绘制各种中皮毛笔刷的能力。在这一点上,Nurbs模型要好得多。
IV. 与平滑多边形模型相关的技术问题,以及如何使用历史节点和MEL脚本解决这些问题。
范例文件:CylinderSkinExample_01.mb
问题一:在平滑以后,蒙皮时要处理过多的多边形表面顶点
一旦对多变形网格施加了平滑命令并且删除了历史节点,要想绑定这个几何体到骨骼上将会非常困难。尽管在技术上有这种可能性,可对所有的多变形表面定点设置权重,但这可是一项非常艰巨和效率低下的任务。
... >>
解决办法1
先蒙皮低分辨率的多边形网格,在蒙皮簇skinCluste下添加polySmoothFace节点,所有融合变形须加在skinCluste 之前。
解决办法是在执行平滑命令前,先绑定低分辨率的多边网格。这样,可以只处理低分辨率模型的权重问题,然后再执行平滑命令。但要注意,如果需要为模型添加一些融合变形,此变形节点一定要加在蒙皮权重的skinCluster之前。
问题2
大于4个顶点的多边形面,在平滑后可能产生不好的结果。
在执行平滑命令时,大于四边形的面片,会产生不可预想的结果。更糟的是,在动画模型时,模型网格会产生“爆裂”的现象。
解决办法2
建模时使用四边或者是三角形面片。基于以上原因,建模时应优先考虑使用四边或三角形面片,尽可能不用N边形面片,一点要避免在变形厉害的区域,如,嘴,肩和膝盖等区域使用。在此我们提供了一个Mel脚本,可以根据多变形面片的边数来用颜色区分不同边数的多变性面片,四边形为绿,三角形为兰,其他为红颜色。
问题3
在添加了polySmoothFace节点后,会发生UV坐标扭曲的现象。
添加了polySmoothFace节点后(执行平滑命令后),在UV编辑器中,如果你仔细观察,你会注意到原有UVs坐标仍保持在原来位置。但是由于同时发生了UV坐标的细划分,所以会创建出新的UV边界,这正是问题所在。此时的UV坐标,与其应该达到的理想情况相比会显得混乱。如果你再仔细地观察一下,你会发现,此时的UV坐标并不准确地符合现在的多边形网格。你现在的多边形模型的网格是平滑弯曲的,而现在的UV坐标仍然保持直线的,正是这个原因,引起了UV坐标的扭曲。这个扭曲的程度,会根据你的原始模型的不同,从很轻微甚至到很严重。
... >>
解决办法3
布置UV时,在polySmoothFace节点后应用投影坐标节点。同时可使用我们提供的Mel脚本:autoColor, autoProject, and autoShellAssign来加快整个工作进程。
在polySmoothFace节点后面使用多边形投影坐标,将减少这种UV坐标的扭曲。因为,在历史纪录里,由于投影节点是在平滑节点后面的,所以它将根据多边形平滑级别的不同而自动更新,所以会精确符合我们的模型网格。所创建出的UV坐标,也会随着平滑级别的不同而自动更新。
如果我们需要进行贴图工作的的模型完全是平面的,这个工作会比较容易完成。只需要做一次投影就可以了。但是,我们更多处理的是那些曲面模型,它上面的面片分别指向不同的法线方向。当面片的法线方向与我们坐标的投影方向有很大偏离时,如何处理避免贴图纹理的拉伸?
在这种情况下,我们需要用来自不同方向的多个UV坐标投影,来克服纹理的拉伸问题。就是说,不同的面片需要从对他们来说相对最有利的投影方向来获得UV坐标。例如,一组面片的法线方向向下指向Z轴的负方向,我们需要用朝向Z轴的正方向的投影。同理,指向X轴的负方向的一组面片,需要用朝向X轴正方向的投影。
但是,接下来的问题是,如何把一些面片包括在这个投影中,把另外一些面片包括在另一个投中。在比较复杂的多边形模型中,我们需要一个办法,来选择这些面片,并且告诉Maya从哪个方向上对他们进行投影。通常,大家的做法是:先平滑这个多边形模型,然后在这个平滑后的高密度多边形网格上选择出一组面片,然后进行投影。但是,要想在一个很高密度的多边形网格上进行选择,是一件较困难的事情,。另外,此时创建的UV坐标,也只适用于这个平滑后的多边形网格,这样的话,在添加polySmoothFace节点后,我们反而失去了对模型不同细分界别的控制。
... >>
我们给出的解决办法是:在添加polySmoothFace节点之前(执行平滑命令之前),先在低分辩率的多边形网格上创建‘选择组“(selection sets)。首先在低分辨率的模型上,划分出若干个区域,并为他们建立不同的选择组。对不同的区域我们将在以后使用不同的坐标投影。然后对模型加载polySmoothFace节点,把它变成平滑模型。在平滑以后的模型上,我们先前做的选择组内,将会同时也把因为执行了平滑命令而产生的新的面片包括进来。所以这就给我们提供了方便,我们只需要在低精度的模型上进行选择的工作,而我们所创建的选择组,将根据模型的不同精度自动地更新。这样,我们可以在polySmoothFace节点上,同时也保留的对不同精度的控制。
在建立‘选择组’时,使用常规的方法并不是很方便。因为在你若想把面片包含在你的选择组中,你就必须先选择它。所以这不是一个快捷的方法。因此,在这里我们将使用一种特殊形式的组,来简化我们建立‘选择组’的工作。这个特殊的‘组’,我们暂且称其为‘材质组’(Shader Group)。使用这种材质组的好处是:由于它是与材质的滤光器节点相联系的,我们就可以改变这个材质的颜色,使模型在阴影显示模式下,给我们一个更好的视觉展示。就是说属于不同‘组’的表面,我们可以分配给它不同的颜色。当我们分配给某一些表面一个材质的时候,就自动地迫使它们进入相应材质的“材质组”。而且,任意面片只能属于某一个‘材质组’,要是分配给它另外一个材质,它将被当前的材质组清除,进入着另外的材质所属的材质组。所以,在我们划分选择组,并为它们设置投影坐标时,这的确是一个非常好的方法。
... >>
手工地在整个在平滑的多边形模型上,建立‘材质选择组’,布置UV坐标的操作过程
1 在低精度的多边形网格上,根据多边形面片的法线方向为它们分配不同颜色的材质。
2 然后对此模型,添加polySmoothFace节点,使其细分级别为2。
3 选择某一个‘材质选择组’,中的所有面片,并根据它们的最有利的法线方向,为其分配投影坐标。这样一次一组地为所有的面片分配好UV坐标。
4 在模型的polySmoothFace节点属性上,把细分级别设回到0。
5 在纹理编辑器窗口中,每次选择一个投影的UV坐标,依次地把所有的投影的UV坐标分布开来。此时,应注意让所有的UV坐标壳体既相互分割开来,又尽可能地相互靠近。
6 现在,就可以为整个模型分配一个材质。
7 删除没用的节点。
尽管以上的手工方法,对于我们的高精度多边形角色的布置UV坐标的工作是可行的。但是,手工地为每一多边形面片分配材质、着实是一件高强度的,枯燥的体力劳动。同样,为每一个面片分配材质的工作也是一个即慢而又非常重复性的工作。所以,我们给出以下的Mel脚本来帮助我们完成这个工作。使我们能省出更多的时间来进行纹理绘制的工作。这就是我们下面介绍的自动化的工作方法。先介绍我们要使用的Mel脚本。
1 autoColor:
这个脚本会自动创建6个不同颜色的材质,分别叫作: Xpositive, XNegative, Ypositive, Ynegative, Zpositive, 和 Znegative。同时自动评估多边形模型上每一个面片的法线方向。根据评估结果,自动分配以上6个材质中的一个给相应的多边形面片。
... >>
autoShellAssign:
这个脚本可以把上一个脚本autoColor所创建的材质划分开,并为每一块划分开的壳再自动分配一个材质。同时保留相应的颜色信息。这些颜色的信息可以用来指导以下的autoProjection脚本创建UV坐标投影。
autoProjection:
根据以上脚本所分配的颜色信息所指示的方向,自动为autoColor脚本所创建的,属于不同‘材质组’的模型面片投影UV坐标。例如,属于Xpositive‘材质组’的面片,将会从X轴的正方向上获得一个UV投影坐标。
GraphFaceMaterials:
此脚本将把一个多边形面片的表面材质标识出来。因为尽管你只选择了模型上的以一个面片,但是Maya自带的标识材质的功能会把整个模型表面上的所有材质标绘出来。使用这个脚本,可以使你只标识出所选择的面片上的材质。
scrollUp:
在模型的建造历史中,选择下一个UV投影节点。
scrollDown:
在模型的建造历史中,选择上一个UV投影节点。
selectProjection:
此脚本用来选择某一个面片所属的UV坐标投影,这个UV坐标投影是上述的脚本所自动创建的。
在整个在平滑的多边形模型上,使用自制的Mel脚本自动地建立‘材质选择组’,布置UV坐标的操作过程。
1 在低精度的多边形网格上,运行autoColor脚本
这一步的目的是,把事先已经分配好颜色的6个材质分配给我们的多边形物体。每一种颜色,代表一个坐标投影。而颜色也表示这个坐标投影是从哪一个方向上来的。例如,Zpositive材质为浅蓝色,通过在现在的模型上进行观察,我们可非常容易地说出,那些具有浅蓝色的模型面片是从
... >>
模型的前面获得坐标投影的。
2 对上面一步中分配好材质的面片进行编辑,优化
进行到这一步,你应该停下来,仔细观察一下多边形的面片上的颜色。要保证每一个面片都获得了来自你所希望的方向上的投影。如果有哪一块面片,你认为用其他方向的投影更合适的话,选择这个面片,并为它分配相应的材质,在进行这一步调整的时候,应该尽量减少材质接缝的出现。要知道autoColor脚本只是用来做一个开始的准备工作,而最终的结果,需要你自己根据模型面片的方向来调整。
3 运行autoShellAssign脚本,为上述的每一个分割好的UV坐标壳体。再做一次划分,并分配相应的材质。
如果你操作完第二步以后,就马上平滑你的多边形网格,并使用autoProjection来投影UV坐标,你会观察到,此时会创建6个坐标投影,尽管你也可以得到精确的UV坐标,甚至是极小的纹理拉伸,但是,你会观察到,在模型的某些部分,会出现UV坐标的交叠。这将导致你将来的得贴于出现重复。如果你是有意识地使你的纹理贴图产生重复,使用这些交叠的Uv坐标可以使你重复利用纹理贴图的某些区域。这不是件坏事情。所以到此为止这也不是什么问题。但是,如果你不希望产生这些交叠,你希望能够在将来移动某些独立的UV坐标壳体,以避免这些交叠,就要进行这一步,使用autoShellAssign脚本。
这个脚本是用来为我们已经分配了材质的6个材质组再进行一次细划分,同时为这些更细的划分分配不同的材质。因为这次细划分所分配的不同材质,会在将来使用了autoProjection脚本后,也最终变成不同的投影坐标。这样,我们就可以把通过只有6个材质的划分所产生的UV坐标壳体,根据这次的细划分的结果,细分为更小的UV坐标壳体。从而防止UV坐标交叠的产生。尽管,这也许还不能防止所有的UV坐标交叠的发生,但是,它已经能够解决绝大部分的UV坐标的交叠问题了。
... >>