シェーディング・マテリアルに3倍早くアクセスする方法メモ

シェーディング・マテリアルに3倍早くアクセスする方法メモ

通常の方法だと
 1.ハイパーシェード開く
 2.Graph Material on selected objectを押す
 3.workareaに表示

の手順で、かつハイパーシェード自体も重い

なので

選択したオブジェクトのマテリアルをノードエディタ-で表示させるものを作った。

ウィンドウ起動がとても軽くて良し。





global proc tnk_showSelShd (){

if (`window -q -ex nodeEditorPanel2Window`)
{
deleteUI nodeEditorPanel2Window;
}
 else
{

  string $sel[] = `ls -l -sl`;
  string $faces[] = `polyListComponentConversion -tf $sel`;
  if (!size($faces)) error "No Faces Selected to Graph. Aborted.";
  string $shaders[] = {};

  for ($i = 0 ; $i < size($faces) ; $i++)
  {
  // Find sets selection belongs to
  string $setArray[] = `listSets -type 1 -o $faces[$i]`;
  for ($set in $setArray)
  {
  string $material = `connectionInfo -sfd ($set+".surfaceShader")`;
  $shaders[size($shaders)] = `match "^[^\.]*" $material`;
  }
  }
  select -r $shaders;
    string $nen=`nodeEditorWindow`;  
    string $ncmd="nodeEditor -e -frameAll -rfs 1 -ups 1 -ds 1 "+$nen;
    evalDeferred  $ncmd;
 }

}



ネットに落ちていたものをキメラしたので忘れないようにメモしておく

global proc tnk_showSelShd (){

if (`window -q -ex nodeEditorPanel2Window`)
{
/////nodeEditorが立ち上がっていた場合閉じる
deleteUI nodeEditorPanel2Window;
}
 else
{
    /////選択しているもののfaceを取得
    /////head_Geo.f[*]
    /////※ *は全部
 
  string $sel[] = `ls -l -sl`;
  string $faces[] = `polyListComponentConversion -tf $sel`;

  ////// sizeが0だったらエラー
  if (!size($faces)) error "No Faces Selected to Graph. Aborted.";

///取得したfaceのリストの回数ループ。
    ///$shadersは最終的に選択するマテリアルの器(配列)。
    ///select -r $shaders;(7の辺り)
    string $shaders[] = {};
  for ($i = 0 ; $i < size($faces) ; $i++)
  {
  /////SGの配列を取得(ほとんどの場合1?)
        string $setArray[] = `listSets -type 1 -o $faces[$i]`;
  for ($set in $setArray)
  {

  ////setの中身はこんな感じ
  ////P002_counterPln_SG
  ////これのsurfaceShaderの先祖にコネクトされているノードを取得

  string $material = `connectionInfo -sfd ($set+".surfaceShader")`;

  ///P005cbx:P005_cardBoardBox_MT.outColor的なアトリビュート($material)をmatchで書式化
  ///=> P005cbx:P005_cardBoardBox_MTという文字列になります
///それを最終的に選択する$shaders配列に追加します

  $shaders[size($shaders)] = `match "^[^\.]*" $material`;
  }

  }

  //////ノードの選択

  select -r $shaders;

    //////ノードエディタ起動コマンドを生成
    //////この時点ではまだ文字列
    string $nen=`nodeEditorWindow`;  

    string $ncmd="nodeEditor -e -frameAll -rfs 1 -ups 1 -ds 1 "+$nen;
  //////nodeEditorを起動

  //////evalDeferredはmayaが暇になったら実行する、というコマンド
  evalDeferred  $ncmd;
 }

}



補足

ネットワークではなくマテリアルを表示させたい場合は

showShadingGroupAttrEditor;

と打てば簡単に表示してくれる。