一、问题描述:
在项目制作中,由于流程问题,导致灯光渲染时,需要导入同类物体多次,于是产生了大量相同材质节点,数量众多,如何能快速合并同类的材质呢。
二、测试寻找方法:
1、maya默认提供了,如下图的工具,如下图:经过测试发现,必须手动选择材质节点,但要求材质必须被赋予到物体,对于空材质节点,就失效了,哈哈。为了解决此问题,还是需要写个工具,南无阿弥陀佛。
2、当然,还有一种方法就是导入模型前,勾选导入选项,如下图所示,可惜,我们当时项目流程是并行的,材质文件已经合并到一起了。
三、插件开发目标:
1、插件工具的原理分析:目的是实现一键自动识别同类材质,并清理无效材质垃圾节点。本工具的原理核心,其实在于maya 的shadingNetworkCompare命令,通过对比材质节点树,来判断材质是否相同。
2、源码如下:
global proc int tjh_compareShaderSG(string $sgA,string $sgB)
{
// create compare task
string $shadingNetworkComparison = ` shadingNetworkCompare $sgA $sgB `;
// Result: shadingNetworkComparison1
int $result = ` shadingNetworkCompare -q -equivalent $shadingNetworkComparison `;
// delete compare task
shadingNetworkCompare -delete $shadingNetworkComparison;
return $result;
}
//shadingNetworkCompare -q -network1 shadingNetworkComparison1;
global proc tjh_compareShaders_proc()
{
string $shaders[]= ` ls -type "shadingEngine" `;
int $i,$j;
for($j =0; $j { for($i =$j+1; $i { int $result = 0; $result = ` tjh_compareShaderSG $shaders[$j] $shaders[$i] `; //print("\n $j = "+$j +"\n $i = "+$i); if($result ==1) { string $shadingNodei[] = ` listConnections -s 1 -d 0 ($shaders[$i]+".surfaceShader") `; string $shadingNodej[] = ` listConnections -s 1 -d 0 ($shaders[$j]+".surfaceShader") `; select -cl; hyperShade -objects $shadingNodei[0]; hyperShade -assign $shadingNodej[0]; } } } hyperShadePanelMenuCommand("hyperShadePanel1", "deleteUnusedNodes"); } global proc tjh_combinePolySameShaders() { global string $tjh_compareShadersA[]; global string $tjh_compareShadersB[]; if (`windowPref -exists tjh_compareShaders_window`) windowPref -remove tjh_compareShaders_window; if (`window -exists tjh_compareShaders_window`) deleteUI tjh_compareShaders_window; window -mxb 0 -mnb 0 -title "南无阿弥陀佛" -w 200 -h 50 tjh_compareShaders_window; columnLayout ; separator -height 5 -style "in"; text -al "center" -w 200 -h 25 -l "Same-shaders Combine 1.0"; separator -height 5 -style "in"; button -bgc 0.2 0.2 0.5 -w 200 -l "Combine Shaders " -c "tjh_compareShaders_proc"; separator -height 5 -style "in"; showWindow; } tjh_combinePolySameShaders; 3、插件用法:拷贝如上代码到txt文本中,一定保存为utf-8编码,高于maya2018新版,对中文兼容支持需要使用utf-8的文本txt文件,如下图选择文本编码模式,之后保存txt: 4、改txt拓展名为.mel文件,之后拖动mel文件到maya主场口,会弹出如下界面: 5、直接点击蓝色按钮即可,材质一下子少了好几倍: 好了,分享结束,南无阿弥陀佛,哈哈。