一半君的总结纸

听话只听一半君

#103 如何创建一个 shading network (其中包含Shading Group, material 和 texture)?

看下面的 shading network 截图:

shadingNetwork

上面的network 由一个 Lambert material (还有他的 Shading Group), 一个 file texture node (连接到lambert的’.color’ attribute)组成,此外还有一个 place2dTexture node 用来编辑贴图的放置位置.

首先第一步是创建 Material node. 这可以是 “lambert”, 或者 “blinn”, 或随便其他什么. 所有的material都有一些通用的可连接的属性名,比如 ‘.color’.

创建 shading node (比如 material)的命令和创建其他nodes的命令稍有不同. 当然你也可以用 “createNode” command 来创建这些nodes, 更简单的方法是使用 “shadingNode” command, 因为这个命令可以帮你在Maya的 rendering editors比如Hypershade里 register 新建的nodes.

“shadingNode” command 在创建 nodes时有以下几种用法:

Synopsis: shadingNode [flags] String
Flags:
  -al -asLight
 -app -asPostProcess
  -as -asShader
  -at -asTexture
  -au -asUtility

“lambert” node 的分类是 shader. 你可以用 “getClassification” MEL command来查询一个shader node的classification string. 查询的这一步不是必要的,这里写出来只是为了帮助说明这个例子.

// 查询 "lambert" node的classification string.
//
getClassification lambert;
// Result: shader/surface //

因此, 在我们创建这个material的时候,要使用 ‘-asShader‘ flag .

// Create a Lambert Material
//
string $material = `shadingNode -asShader lambert -name "mayaLogo"`;

Shading Group 在这里控制material的成员列表(membership). 他其实是一个 renderable set ,可以用 “sets” command 创建.

// 创建一个 Shading Group
//
string $SG = `sets -renderable true -noSurfaceShader true -empty -name "mayaLogoSG"`;

// 把 material 连接到 Shading Group.
//
connectAttr -f ( $material + ".outColor" ) ( $SG + ".surfaceShader" );

file node 可以为任何一个color 属性提供一个贴图. In this case, 他连接到了 Lambert的 ‘.color’ 输入. 所以当我们用 “shadingNode” command 来创建 renderable texture nodes的时候. “file” node 的分类是 texture, 我们需要使用 ‘-asTexture‘ flag .

// 查询 Maya的 "file" node 的classification string.
//
getClassification file;
// Result: texture/2d //

// 创建一个 file texture node
//
string $fileNode = `shadingNode -asTexture file -name "mayaLogo_bmp"`;

// 连接到 material color
//
connectAttr -f ( $fileNode + ".outColor" ) ( $material + ".color" );

file texture node 读取的image 的文件路径是储存在 ‘.fileTextureName’ attribute里的.

// 把 filepath 赋予 '.fileTextureName' attribute.
//
string $filepath = "C:/AW/ewertb/projects/default/sourceimages/mayaLogo.bmp";
setAttr -type "string" ( $fileNode + ".fileTextureName" ) $filepath;

place2dTexture node 是可有可无的. 就算没有这个shading network 也可以正常发挥效果. 和上面类似, “shadingNode” command 后面加上’-asUtility‘ flag 就可以用来创建一个 placement node.

// 查询 Maya的 "place2dTexture" node 的classification string.
//
getClassification place2dTexture;
// Result: utility/general/placement/2d //

// 一个连接两个nodes之间的共同属性的辅助procedure.
//
proc connect( string $attr, string $place, string $file )
{
  connectAttr -f ( $place + "." + $attr ) ( $file + "." + $attr );
}

string $place2d = ( "place_" + $fileNode );
$place2d = `shadingNode -asUtility place2dTexture -name $place2d`;

// 使用上面的辅助 command 来连接
// placement 和 file nodes的共同属性
//
connect "coverage"       $place2d $fileNode;
connect "translateFrame" $place2d $fileNode;
connect "rotateFrame"    $place2d $fileNode;
connect "mirror"         $place2d $fileNode;
connect "stagger"        $place2d $fileNode;
connect "wrapU"          $place2d $fileNode;
connect "wrapV"          $place2d $fileNode;
connect "repeatUV"       $place2d $fileNode;
connect "offset"         $place2d $fileNode;
connect "rotateUV"       $place2d $fileNode;

// 这两个属性的名字不一样.
//
connectAttr -f ( $place2d + ".outUV" ) ( $fileNode + ".uv" );
connectAttr -f ( $place2d + ".outUvFilterSize" ) ( $fileNode + ".uvFilterSize" );

Placement nodes 连上以后,Hypershade里看起来很乱, 没用到的话可以不加 . 如果你是在自己的script或者UI工具里创建network , 你最好给用户一个选择是不是要创建 placement node. 或者你也可以查询Maya自己的 preference, 这个选项储存在 optionVar “createTexturesWithPlacement”里:

// 看看用户需不需要在创建一个新的texture node的同时创建一个 placement node.
//
int $createPlacement = `optionVar -q createTexturesWithPlacement`;

加强版:

myLambert = pm.shadingNode('lambert', asShader = True, n = 'myLambert')
# Result: nt.Lambert(u'myLambert') #

myLambertSG = pm.sets(renderable=True,noSurfaceShader=True,empty=True,n='myLambertSG')
# Result: nt.ShadingEngine(u'myLambertSG') #

myLambert.outColor >> myLambertSG.surfaceShader

Related How-To’s

04 Sep 2004

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: