maya批量合并同类材质的方法

maya批量合并同类材质的方法

一、问题描述:

在项目制作中,由于流程问题,导致灯光渲染时,需要导入同类物体多次,于是产生了大量相同材质节点,数量众多,如何能快速合并同类的材质呢。

二、测试寻找方法:

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、直接点击蓝色按钮即可,材质一下子少了好几倍:

好了,分享结束,南无阿弥陀佛,哈哈。

相关作品

[系统问题]强迫症的福音,win10,11最新完美去除桌面图标小箭头方法
云等保解决方案
体育平台送365彩金

云等保解决方案

📅 08-11 👁️ 9505
虾酱如何保存
365在线体育

虾酱如何保存

📅 07-22 👁️ 1783