シェーディング ノードでは、現在のサンプル位置に関するレンダリング情報を定義済みアトリビュートで要求できます(レンダリング固有のアトリビュートとその名前については、「付録 C: レンダリング アトリビュート」を参照してください)。しかしレンダリング コンテキスト以外では、定義済みアトリビュートが提供されていません。レンダリング コンテキスト以外でのシェーディング ノードの評価は、MRenderUtil::sampleShadingNetwork をコールすることでサポートされます。
MStatus MRenderUtil::sampleShadingNetwork(
MString shadingNodeName,
long numSamples,
bool useShadowMaps,
bool reuseMaps,
MFloatPointArray *points, // sample points in world
MFloatArray *uCoords,
MFloatArray *vCoords,
MFloatVectorArray *normals, // normals in world
MFloatPointArray *refPoints, // refPoints in world
MFloatVectorArray *tangentUs,
MFloatVectorArray *tangentVs,
MFloatArray *filterSizes,
MFloatVectorArray &resultColors,
MFloatVectorArray &resultTransparencies
);
サンプル ポイント、法線、UV 座標などのリストを指定すると、この関数は、指定されたサンプル データに基づいて計算されたカラーと透明度のリストを返します。
サンプルが取られる前にシャドウ マップの生成をテスト レンダリングに強制すると、シャドウ計算も実行できます。
サンプル プラグイン sampleCmd.cpp も提供されています。このコマンドは、パーティクル オブジェクトとシェーディング ノード/シェーディング エンジン名を入力として取り、サンプリング結果に基づいてカラーが割り当てられたパーティクルを作成します。