极品原创教程:透明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