纳金网
标题:
[Maya 技巧]用Maya MEL查询骨骼影响的多重点(for game)
[打印本页]
作者:
驰骋的风
时间:
2012-10-17 14:06
标题:
[Maya 技巧]用Maya MEL查询骨骼影响的多重点(for game)
[Maya 技巧]用Maya MEL查询骨骼影响的多重点(for game)
在游戏公司,这个MEL会有用。
在使用Smooth绑定时,模型上的某一个顶点,可能被多个骨骼同时影响,笔者称这样的顶点为“多重点”。有时在游戏制作中,我们需要将这样被多节骨骼同时影响的多重点找出来。
如图,选择骨骼和圆柱,执行Skin | Bind Skin | Smooth Bind,将三节骨骼和该多边形圆柱绑定起来。
然后将圆柱命名为“obj”,如图,简短的名称便于后面使用MEL时快速的输入。
执行如下MEL,即可以显示圆柱上同时被三节骨骼影响的顶点,如图。
当findVertex Proc执行过一次后,后面只需要输入函数即可,不需要再次执行proc了。
输入
findVertex("obj",1);
即可显示同时被两节骨骼影响的顶点,如图。
输入
findVertex("obj",2);
即可显示只被一节骨骼影响的顶点,如图。
该MEL的实现思路主要是使用skinPercent命令,查询某个顶点被某个骨骼的影响权重。该权重为0,则认为该顶点不受该骨骼影响;该权重不为零,则认为该顶点被该骨骼影响。具体的MEL代码如下:
/////////////////////////////////////////////////
//create by Lizhihao at 2007.4.18
//用法:输入已经Smooth绑定的多边形模型名称,和一个整数,执行
//proc findVertex(string $objName, int $n)
//参数说明:-------模型名称--------多重点------
//假设绑定模型上有N节骨骼,则输入n,可以显示被(N-n)节骨骼同时影响的顶点
//例如输入0,则可显示N重点
////////////////////////////////////////////////
proc findVertex(string $objName, int $n){
select -cl;//clear selection list
int $vertexCount[] = `polyEvaluate -v $objName`;
string $skinName=`findRelatedSkinCluster($objName)`;
string $jointName[] = `skinCluster -q -wi $skinName`;
int $jointCount = size($jointName);
float $weight[];
int $index_vertex;
int $index_joint;
int $FLAG;
int $sum_flag = 0;
for( $index_vertex=0; $index_vertex < $vertexCount[0]; $index_vertex++){
string $currentVertex = $objName + ".vtx[" + $index_vertex + "]";
for( $index_joint = 0; $index_joint < $jointCount; $index_joint++){
$weight[$index_joint] = `skinPercent
-transform $jointName[$index_joint]
-query $skinName $currentVertex`;
if( $weight[$index_joint] > 0) $FLAG = 1;
else $FLAG = 0;
$sum_flag += $FLAG;
}//end for $index_joint
if( $sum_flag == ($jointCount - $n) )
select -add $currentVertex;
$sum_flag = 0;//clear $sum_flag
}//end for $index_vertex
}//end proc
/***n proc
findVertex("obj",0);
更多MAYA技术分享尽在Web3D纳金网http://www.narkii.com/
作者:
.
时间:
2012-10-25 21:44
顶起
欢迎光临 纳金网 (http://wwww.narkii.com/club/)
Powered by Discuz! X2.5