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