カスタム ボリューム シェーダ

カスタム ボリューム シェーダを使用する場合は、シェーダに Maya ボリューム エンジンとの互換性を持たせる必要があります。ボリューム シェーダをレンダー パス、Maya ライト シェーダ、およびその他の Maya 機能とともに正常に動作させるには、これが一番良い方法です。

互換性を持たせるには、単純な miColor ではなく、シェーダ結果に次のデータ構造を使用します。

typedef struct VolumeShader_R {
miColor color;
miColor glowColor;
miColor matteOpacity;
miColor transparency;
} VolumeShader_R; 

構造の透明度フィールドに 0 以外の値を設定している場合を除いて、ボリュームは不透明とみなされます。ボリューム サンプルの統合と合成はボリューム エンジンが引き受けるため、ボリューム シェーダは現在のサンプルの Raw カラー値と透明度の計算を行うだけですみます。

現在のボリュームの ray セグメントの開始点と終了点を取り出すには、次のコードを使用します。

miVector orgObj, pointObj;
mi_point_to_object(state, &orgObj, &state->org);
mi_point_to_object(state, &pointObj, &state->point);

それから、オブジェクト空間でのトラバース長を取得するために、次のコードを実行します。

miScalar length = mi_vector_dist(&orgObj, &pointObj);

旧式ボリューム シェーダ

Maya ボリューム エンジンと互換性のない旧式ボリューム シェーダでも、Maya の現行バージョンとともに使用することは可能です。ただし、次の Mel コードを使用してボリューム エンジンをオフにする必要があります。

miCreateDefaultNodes();
select mentalrayGlobals;
addAttr -ln useVolumeEngine -at bool;
setAttr mentalrayGlobals.useVolumeEngine false; 
注:

ボリューム エンジンをオフにすると、一般的な Maya ボリューム シェーダ(フォグ、流体、パーティクルなど)は機能しません。そのため、上記ガイドラインに従って、シェーダを変換して Maya ボリューム エンジンと互換性を持たせる方が、より適切な永続的ソリューションといえます。