下载 / Download

/// Procedure Name : tgPolyImportSkinWeight.mel V1.2
/// Updated : 14th. Jun. 2006
/// Author : T.G.Jay
/// Input : (float) [Sample Torelance]
/// All Rights Reserved .
/// All the Vars begin with "$TGJ_PISW_"

工具名称:Sweet Baby
版本:1.5

>>>实现功能:

导入Maya生成的权重贴图(.WeightMap);

 

>>>工具介绍:

在不修改UV的情况下导入WeightMap,兼容拓扑、形状简单改变的模型(包括加线、拖点等);
导入时的骨骼和导出时的骨骼必须相同,命名也要相同。
mel目前只支持polygen,暂时不考虑对NURBS、SubD的支持;
暂时不加入“兼容输入/输出模型UV Shell不同”的功能,如果加入这个功能,导入WeightMap便没有任何障碍,但是大大牺牲了效率。

 

>>>测试心得:

mel不包含用户界面,输入命令即刻,没有返回值:
tgPolyImportSkinWeight [Sample tolerance];
(Sample tolerance是读取WeightMap时采用的容差,数值范围0~1,后面有具体介绍)
执行mel前需要选中绑好的模型(和maya自带importWeightMap操作相同),
由于mel对Weight Map贴图的采样存在一些问题,所以最后总有那么一些点(1%不到)导入权重错误,但不影响大效果,
输入命令得到这些点: select -r $importFailedPoint;

下面是一些报错提示:

// The input date should be in the range of 0-1.// 输入的Sample tolerance值不在0-1范围内;
// Please Select a Object.// 执行mel前没有选择物体;
// Please Bind the model first, need skinCluster node.// 选择的物体没有smooth bind或skinCluster连接不合理;
// You open the wrong file.Please check if the weightMap file begins with "// Exported skin weight map file".// 打开的不是maya7.0生成的.WeightMap文件
// (n) joints match name (joint name).// 场景中的骨骼有重名;
// Can't find joint: joint name.// 模型骨骼和导出权重模型骨骼命名不同。

 

>>>技术细节(关于Sample tolerance):

maya生成的Weightmap在UV Shell的边缘处会有明显的锯齿,在这些地方采样很可能获得错误的结果。
解决方法是,获得绿点所在面(之一)的中心点——黄点,
在绿点和黄点之间取样就能最大程度避免锯齿边缘带来的问题。
Sample tolerance允许用户控制采样点落在绿点和黄点之间的某一个位置;
0表示落在绿点,1表示落在黄点,0-1之间的数值标志落在绿点和黄点之间相应的位置。
可想而知,Sample tolerance越大,“导入错误”的点就越少,但导入权重和导出权重差别就越大,
很多时候要在这两者间取得一个平衡。
尽管mel引入了Sample tolerance的算法,但由于模型不限过于密集,总有几个点逃不过“导入错误”的命运。
只能通过生成更大分辨率的WeightMap来解决这个问题,我目前没有其他更好的办法。


Copyright T.G.Jay © 2004-2006. All rights reserved.