カスタム ボリューム シェーダを使用する場合は、シェーダに 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 2010 以降のバージョンとともに使用することは可能です。ただし、次の Mel コードを使用してボリューム エンジンをオフにする必要があります。
miCreateDefaultNodes();
select mentalrayGlobals;
addAttr -ln useVolumeEngine -at bool;
setAttr mentalrayGlobals.useVolumeEngine false;