Mayaでシェーダーコンバート?

Mayaで一括シェーダーコンバート方法















Mayaでオブジェクトにアサインされているシェーダーを任意のシェーダーに一括でコンバート
メモ的なものですが(。ω。)




mayaでの簡単なアサインシェーダー変換メモ

アサインしているシェーダーをLambertとかBlinnとかmaya標準のやつから
mental rayやV-ray用のシェーダーに変換するやり方覚書。

下のスクリプトを参考にやりかたをメモ melです
http://www.dryzen.com/scripts_mia2vray.html


いろいろな所で紹介されているシェーダーライブラリーの
スクリプトと同じ所で紹介されているスクリプトです。

これはVrayMTに変換するやつですが、中身みればいろいろ応用できそうです。
やってることは、
1,選択しているシェーダーのタイプを判定
2、判定したシェーダーにより処理を実行
{
//get shader name
string $sel[] = `ls -sl -st`;
for ($i=0;$i<size($sel);$i=$i+2)
 {
     if ($sel[$i+1] == "lambert")
          {    
          StepA($sel[$i]);
          }
     if ($sel[$i+1] == "blinn")
          {    
          StepB($sel[$i]);
          }
 }


上記でまず選択しているシェーダーのタイプを判定
そしてそれにたいして処理を指示

その処理に関しては別のプロシージャーとして用意(必要に応じて変換したいシェーダーの数分!?)

//Step* = StepAまたはStepB、上記の所でシェーダーごとに分けたプロシージャー名
global proc Step*(string $obj)
{
//make  new material
$newMtl=`shadingNode -as -n ($obj + "newMiaMT") mia_material_x_passes`;
 
// get  SG Information
string $SG[] = `listConnections -t shadingEngine $obj`;
     
//not need      Connection Delete
disconnectAttr ($obj +".outColor") ($SG[0] +".surfaceShader");
 
//     Connect SG
connectAttr -f ($newMtl +".outValue") ($SG[0] +".miMaterialShader");
connectAttr -f ($newMtl +".outValue") ($SG[0] +".miShadowShader");
connectAttr -f ($newMtl +".outValue") ($SG[0] +".miPhotonShader");
}

これでひとまずアサインされているlambertかblinnシェーダーを
mia_material_x_passesに変換。

こんなの手でやった方が速いっと確かにその通り(・ω・;)


実際は「make new material」の後で、作ったシェーダーと変換したいシェーダーとで
テクスチャーなどのコネクション状況をあわせておく。

ShadingGroupを生かして、そこに入れ込むシェーダーだけを変える感じ。
maya標準シェーダーや、V-rayはShadingGroupの”surfaceShader”の所に突っ込んでおけば
大丈夫だけど、MRシェーダー系(とくにMia系)は”MaterialShader””ShadowShader””PhotonShader”に突っ込んでおかないと
機能しないことがあるので、それとmaya標準シェーダーからの変換の際は”surfaceShader”に入ったままなので、
先に”surfaceShader”のコネクションは切っておく(2つのシェーダーが入ってしまう状況にならないように)


もっとスマートなやり方もありそうだけど(・ω・;)



主に、使用するレンダラーが変わる際に一括して既存のアセットのシェーディング状況を
そのレンダラー用のシェーダーに変換する際使えるかも。




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA