一半君的总结纸

听话只听一半君

#91 如何得到和一个material相应的 Shading Group ?

为了得到和一个Shading Group相关联的 Material , 你可以首先查询所有和Material的 “.outColor” attribute连接的其他node. 然后一个一个的查询这些node的 Shading Groups. 可以用 ‘nodeType’ command 来查找这些node的类型名里有没有字符串 “shadingEngine”.

// ////////////////////////////////////////////////////////////////////
//  getSGFromMaterial
//
// Description: 返回'.surfaceShader'被指定的Material连接的所有 Shading Group set
//
//  返回所有使用了此Material的Shading Groups

global proc string[] getSGFromMaterial( string $material )
{
  string $SG[];

  // 首先, 确认 $material 真是一个 Material.
  // (下面的命令返回一个 string array, 所以只好定义一个variable了.)
  string $class[] = getClassification( `nodeType $material` );

  if ( $class[0] == "shader/surface" )
  {
    // 确认 Material 的 .outColor 属性上是有连接的
    if ( `connectionInfo -is ( $material + ".outColor" )` )
    {
      // 可能有多于一个的 connection...
      string $dests[] = `connectionInfo -dfs ( $material + ".outColor" )`;
      for ( $dest in $dests )
      {
        // 逐个排查所有的 connections 并找到 ShadingGroup sets.
        if ( "shadingEngine" == `nodeType $dest` )
        {
          $SG[`size $SG`] = rootNode( $dest );
          break;
        }
      }
    }
  }

  return $SG;
}

注意: 下面的 ‘rootNode()’ procedure 在上面的procedures里有被调用到.

// //////////////////////////////////////////////////////////////
//  rootNode
//
// Description: 去掉输入的 string后面的.及之后的后缀.
//  比如 "object.attribute" 处理后会返回 "object"

proc string rootNode( string $object )
{
  string $buffer[];
  tokenize $object "." $buffer;
  return $buffer[0];
}

加强版:

还是pymel简单些

pyNode = pm.PyNode('lambert1')
pyNode.shadingGroups()
# Result: [nt.ShadingEngine(u'initialParticleSE'), nt.ShadingEngine(u'initialShadingGroup')] #

Related How-To’s

Friday, September 14, 2001

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 博主赞过: