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

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

MELでシェーダー作成 1

ディフューズカラーに指定のテクスチャを貼っただけの基本的なLambert ShaderをMELで作成する際の記述をメモっておきます(当時ググってもピンポイントでは出てこなかったので)。

実際の中身はこちら。
vfx_tex.png」というテクスチャをあらかじめ用意しておいて、それを使用するようにしています。

shadingNode -asShader lambert -name VFXlambert;
sets -renderable true -noSurfaceShader true -empty -name VFXlambertSG;
connectAttr -f VFXlambert.outColor VFXlambertSG.surfaceShader;

shadingNode -asTexture file -name VFXfile;
setAttr -type "string" VFXfile.fileTextureName "vfx_tex.png";

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;


ノードの何の出力を何の入力に繋げたらいいのかは、まずハイパーシェードで実際にマテリアルを作ってみてシェーディングネットワークを開けば確認することができます。
それを参考に記述したらいけました。。

こちらの記事でもうちょっと補完しています。