极品原创教程:透明occlusion的制作 - 翻翻原创,翻录教程发布区 - CGFRIE...

来源:百度文库 编辑:神马文学网 时间:2024/10/04 06:35:35

极品原创教程:透明occlusion的制作

极品原创教程:透明occlusion的制作
http://cgdfsd.5d6d.com/thread-364-1-1.html

附批量处理脚本:
/*                                           */
/*  Procedure Name : batchFGOCC.mel          */
/*  version:1.0                              */
/*  Author:CQ1516                            */
/*  http://www.cgdfsd.com                    */
/*  武汉东方时代                             */
/*                                           */
//note:目前版本仅对所有maya材质节点。不支持折射反射,不支持mr材质//


//如果存在基本材质节点cQ1516BaseSurfaceShader,那么删掉它,再创建一个。

if (`objExists cQ1516BaseSurfaceShader` == 1 )
   {
     lockNode -lock off cQ1516BaseSurfaceShader;
     delete cQ1516BaseSurfaceShader;
   }

string $NTSGName = createNoTransparencyShader();

//求得所有材质节点。
string $allMatName[] = `ls -mat`;
string $surfaceMatName[];
clear ($surfaceMatName);
int $i = 0;


//针对每一个材质节点进行循环处理。

for ($i=0 ; $i<(size($allMatName)) ; $i++)
{
  string $nt = eval("nodeType " + $allMatName[$i]);
   select -clear;
   //如果此材质结节有透明属性
   if (eval("attributeExists \"transparency\"" + $allMatName[$i]) && ($nt != "particleCloud"))
     {

         //如果透明属性上游无节点并且透明属性是黑色,那么赋于基本材质节点。
         float $tv[]= eval("getAttr "+$allMatName[$i]+".transparency");
         string $sdf =eval("connectionInfo -sfd " + $allMatName[$i]+".transparency");
          if ($sdf =="" && $tv[0]==0 && $tv[1]==0 && $tv[2]==0 )
          {
            eval("hyperShade -objects "+$allMatName[$i]);
            eval("sets -e -forceElement "+$NTSGName);
          }
         
          else
          {
           if ($sdf =="" )
             {
                string $MRName = crateMRShader(<<$tv[0],$tv[1],$tv[2]>>);
                eval("hyperShade -objects "+$allMatName[$i]);
                 eval("sets -e -forceElement "+$MRName);

             }

           if ($sdf !="" )
             {
               string $MRTexName = crateMRTexShader($sdf);
               eval("hyperShade -objects "+$allMatName[$i]);
               eval("sets -e -forceElement "+$MRTexName);
             }
          }

     }

        

}


//创建无透明的shader;

proc string createNoTransparencyShader()
{
  string $MROCC = `mrCreateCustomNode -asUtility "" mib_fg_occlusion`;
  string $surfaceNodeName = `shadingNode -asShader surfaceShader -n cQ1516BaseSurfaceShader`;
  eval("connectAttr -f " + $MROCC  + ".outValue " + $surfaceNodeName + ".outColor;");
  string $SGName = `sets -renderable true -noSurfaceShader true -empty`;
  eval("connectAttr -f " + $surfaceNodeName + ".outColor " + $SGName + ".surfaceShader");
  return $SGName;
}

//创建有透明的MRshader;
proc string crateMRShader(vector $tv)
{

  string $MROCC = `mrCreateCustomNode -asUtility "" mib_fg_occlusion`;
  string $MRtran = `mrCreateCustomNode -asUtility "" mib_transparency`;
  eval("setAttr " + $MRtran + ".transp " + $tv);
  eval("connectAttr -f " + $MROCC  + ".outValue " + $MRtran + ".input;");
  string $SGName = `sets -renderable true -noSurfaceShader true -empty`;
  eval("connectAttr -f " + $MRtran  + ".outValue " + $SGName + ".miMaterialShader");
  return $SGName;
}


//创建有透明纹理的MRshader;
proc string crateMRTexShader(string $tex)
{

  string $MROCC = `mrCreateCustomNode -asUtility "" mib_fg_occlusion`;
  string $MRtran = `mrCreateCustomNode -asUtility "" mib_transparency`;
  eval("connectAttr -f " + $tex + " " + $MRtran +".transp" );
  eval("connectAttr -f " + $MROCC  + ".outValue " + $MRtran + ".input;");
  string $SGName = `sets -renderable true -noSurfaceShader true -empty`;
  eval("connectAttr -f " + $MRtran  + ".outValue " + $SGName + ".miMaterialShader");
  return $SGName;
}

[ 本帖最后由 cq1516 于 2009-11-29 15:20 编辑 ]

附件

透明occlusion.jpg (302.48 KB)

2009-11-26 16:24