Mayaで自作シェーダーを使う ~ OSL編 ~

Tech

はじめに

Mayaには標準のマテリアルが用意されていますが、自作シェーダーを使うと、標準機能だけでは難しい表現や、制作目的に合わせた独自の描画処理を実装できます。

Mayaではいくつかのシェーダー言語を使用できますが、この記事では、MayaでOSL(Open Shading Language)シェーダーを使用する手順を解説します。

ArnoldのaiOslShaderノードを使う方法と、Arnoldシェーダとして直接読み込む方法の2通りを紹介します。(OSLそのものについて解説は、他のサイトに譲ります。)

「Mayaで自作シェーダーを使う」シリーズの他の記事はこちらです。

aiOslShaderを使う方法

aiOslShader ノードを作成します。

MayaでaiOslShaderノードを作成する操作

オブジェクトに適当なマテリアル(Lambertなど)を割り当てます。

MayaのオブジェクトへLambertマテリアルを割り当てた状態

SGノードの「Surface Shader」の接続先を、aiOslShader の「Out Value」につなぎ替えます。

SGノードのSurface ShaderへaiOslShaderのOut Valueを接続した状態

※ 代わりにオブジェクトに aiToon 等を割り当て、aiOslShader の Out Value を aiToon の Base Toonmap に接続したり、その他マテリアルの入力に接続して使用することも可能です。

※ OSLを書き換えれば、outValueではなく、outColorなど、任意のアトリビュートを出力することもできます。これを、aiFlatなどに接続して色を出力することも可能です。

aiOslShader ノードにOSLコードを記述し、コンパイルします。

aiOslShaderにOSLコードを入力してコンパイルする操作

以下は、ピンク色の陰影がつくシンプルなサンプルシェーダーです。

ビューポートをArnoldに切り替えるか、Arnold RenderViewを開きます。

MayaビューポートをArnoldへ切り替える操作

ビューポートをArnoldに切り替えた場合

MayaのArnold RenderViewを開く操作

Arnold RenderViewを開いた場合

シーンを更新します(Arnold > Render > Update Full Scene、またはRenderViewで Ctrl+U)。

ArnoldメニューからUpdate Full Sceneを実行する操作
Arnold RenderViewでシーンを更新する操作

上記のサンプルを使用した場合、オブジェクトが陰影のついたピンク色に表示されれば成功です。

OSLシェーダーでオブジェクトがピンク色に表示された成功例

Arnoldシェーダとして読み込む方法

任意のフォルダに ARNOLD_PLUGIN_PATH を通します。たとえば、Maya環境ファイルに以下を追記します。

ファイル名: Maya.env

ARNOLD_PLUGIN_PATH=C:\Users\xxx

ARNOLD_PLUGIN_PATH を通したフォルダに、OSLファイル(.osl)とメタデータファイル(.mtd)を配置します。

ARNOLD_PLUGIN_PATHのフォルダにOSLファイルとMTDファイルを配置した状態

.mtd ファイルは以下のように記述します。maya.id には他のプラグインと被らないIDを設定してください。

ファイル名: sample.mtd

[node sample]    
    maya.name               STRING  "sample"
    maya.id                 INT     0xaaaaaaa
    maya.classification     STRING  "Shader/surface"
    maya.output_name        STRING  "outColor"
    maya.output_shortname   STRING  "out"

Mayaを起動し、ノードエディタ等にシェーダーの項目が追加されていれば成功です。

Mayaのノード作成画面にOSLシェーダーが追加された状態

まとめ

MayaでOSLシェーダーを使うには、aiOslShader ノードに直接コードを書いてコンパイルする方法が手軽です。より本格的に運用したい場合は、ARNOLD_PLUGIN_PATH にOSLファイルとメタデータを配置することで、Mayaのノード一覧から直接作成できるようになります。

OSLはArnoldレンダラー上で動作するため、結果の確認にはArnoldビューポートまたはRenderViewを使用してください。

コメント

タイトルとURLをコピーしました