ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

MELでシェーダー作成 2

前回の続き。

MayaのMELで汎用マテリアルを1クリックで作成したい時の備忘録。
まずはLambertシェーダーを作成して、予め用意してあるテクスチャを適用する内容。

//ネームスペース"VFX"がすでにある場合はメッセージのみ表示
if(true == `namespace -exists "VFX"`)
{
print "ネームスペースVFXはすでにあります";
}
else
{
//サンプルテクスチャシェーダを作成して"sampleTex.png"を割り当てる
shadingNode -asShader lambert -name VFXlambert;
sets -renderable true -noSurfaceShader true -empty -name VFXlambertSG;
connectAttr -f VFXlambert.outColor VFXlambertSG.surfaceShader;

//スクリプトフォルダ内の「sampleTex.png」をテクスチャとして適用
shadingNode -asTexture file -name VFXfile;
$vfxTexPath= `getenv MAYA_SCRIPT_PATH`;
setAttr -type "string" VFXfile.fileTextureName ($vfxTexPath + "/sampleTex.png");

//テクスチャフィルタリングを「オフ」にする
setAttr "VFXfile.filterType" 0;

//必要なノードを繋げる
shadingNode -asUtility place2dTexture -name VFXplace2dTexture;
connectAttr -f VFXplace2dTexture.coverage VFXfile.coverage;
connectAttr -f VFXplace2dTexture.translateFrame VFXfile.translateFrame;
connectAttr -f VFXplace2dTexture.rotateFrame VFXfile.rotateFrame;
connectAttr -f VFXplace2dTexture.mirrorU VFXfile.mirrorU;
connectAttr -f VFXplace2dTexture.mirrorV VFXfile.mirrorV;
connectAttr -f VFXplace2dTexture.stagger VFXfile.stagger;
connectAttr -f VFXplace2dTexture.wrapU VFXfile.wrapU;
connectAttr -f VFXplace2dTexture.wrapV VFXfile.wrapV;
connectAttr -f VFXplace2dTexture.repeatUV VFXfile.repeatUV;
connectAttr -f VFXplace2dTexture.offset VFXfile.offset;
connectAttr -f VFXplace2dTexture.rotateUV VFXfile.rotateUV;
connectAttr -f VFXplace2dTexture.noiseUV VFXfile.noiseUV;
connectAttr -f VFXplace2dTexture.vertexUvOne VFXfile.vertexUvOne;
connectAttr -f VFXplace2dTexture.vertexUvTwo VFXfile.vertexUvTwo;
connectAttr -f VFXplace2dTexture.vertexUvThree VFXfile.vertexUvThree;
connectAttr -f VFXplace2dTexture.vertexCameraOne VFXfile.vertexCameraOne;
connectAttr VFXplace2dTexture.outUV VFXfile.uv;
connectAttr VFXplace2dTexture.outUvFilterSize VFXfile.uvFilterSize;
defaultNavigation -force true -connectToExisting -source VFXfile -destination VFXlambert.color; window -e -vis false 
createRenderNodeWindow;
connectAttr -force VFXfile.outColor VFXlambert.color;
}


 次に選択中のモデルに上記マテリアルを割り当てる内容。

//サンプルテクスチャシェーダーを割り当てる
sets -e -forceElement VFXlambertSG;
//ディスプレイをテクスチャシェーディングに変更
DisplayShadedAndTextured;


この2つの記述それぞれにプロシージャ名を定義してボタンに割り当てればOKです。
ウインドウ作成とプロシージャの構成をどんな風にしているかはこちらの記事に書いています。
一応Maya2014と2016で動作を確認しました。

ただ‥テクスチャフィルタリングを「オフ」にする部分が自分の環境では動作しましたが、他人の環境では「オフ」に設定されるのにテクスチャがボケたままという状況になりました。
なぜなのかご存じの方いらっしゃいましたら教えてください。。

ちなみにこのMELで使用しているテクスチャはMELと同じ場所に放り込んでおきます。
そしてMELと同じフォルダ内のテクスチャを参照する記述についてはこちらで補足しています。

当方、MEL歴は累計5日ほどなので間違いも多数あるかと思いますが、ツッコミ所がありましたらコメントなどで教えて頂けると嬉しいです。