MEL によるシェーダー 1

シェーダーの作り方

Maya では C++ 言語などでプラグインを作らなくても、 MEL によって独自のシェーダーを作ることができます。
そのためには、シェーディングノードにエクスプレッションを定義して色の値を計算します。

シェーダーの例 1

シンプルな、赤一色のシェーダーを作ってみましょう。

  1. 以下の MEL スクリプトを makeShader1.mel という名前で作ります。
    global proc makeShader1()
    {
    	string $shname = `shadingNode -asShader surfaceShader`;
    	string $setname = `sets -renderable true -noSurfaceShader true -empty`;
    	connectAttr ($shname + ".outColor") ($setname + ".surfaceShader");
    	expression -o $shname -s "ocr = 1; ocg = 0; ocb = 0";
    	sphere;
    	sets -e -fe $setname;
    }
    
  2. Script EditorFile → Source Script によって makeShader1.mel を読み込みます。
  3. Script Editor のインプットウインドウで、makeShader1() を実行します。
    [makeShader1() 実行図]
    [makeShader1() レンダリング図]

スクリプトの解説

global proc makeShader1()
makeShader1 というプロシージャの宣言です。
string $shname = `shadingNode -asShader surfaceShader`;
新しいノードをシェーダーとして作ります。
shadingNode コマンドによってノードを作ることによって、 HyperGraph などでシェーダーとして表示できるようになります。
[作られたシェーダー]
string $setname = `sets -renderable true -noSurfaceShader true -empty`;
シェーダーをコネクトするためのセットを作ります。
-renderable true
作られたセットはシェーディンググループになって、 renderPartition ノードにコネクトされます。
-noSurfaceShader true
デフォールトのシェーダーにコネクトしません。
上で作ったシェーダー $shname にコネクトするからです。
-empty
空のセットを作ります。
セレクトされているオブジェクトがあっても、 このセットに加えません。
[作られたセット]
connectAttr ($shname + ".outColor") ($setname + ".surfaceShader");
シェーダーが出力する色情報を表す outColor アトリビュートを、 セットの surfaceShader アトリビュートにコネクトします。
これで、シェーダー $shname がレンダリング可能になります。
[シェーダーとセットの関係]
expression -o $shname -s "ocr = 1; ocg = 0; ocb = 0";
シェーダーにエクスプレッションを定義して、 出力する色を計算します。
ocr が赤、ocg が緑、ocb が青を表すアトリビュートです。
色の値の範囲は、各色 0.0 〜 1.0 です。
つまり、結果が 0.0 から 1.0 の範囲になる計算式なら、 どんなものでも色の計算に使用できます。
sphere;
NURBS の球を作ります。
sets -e -fe $setname;
作られた球に上で作ったシェーダーをアサインします。
-e
エディットモード
-fe
すでに球にアサインされていたシェーダーを切り離して、 新しいシェーダーにアサインし直します。
[HyperGraph の図]

練習

練習課題

参考


Prev | Next
Home | Contents
Mail