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<size($shaders);$j++)
            {
                for($i =$j+1; $i<size($shaders); $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、直接点击蓝色按钮即可,材质一下子少了好几倍:
在这里插入图片描述
好了,分享结束,南无阿弥陀佛,哈哈。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Maya和blender动画技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值