ビューポート 2.0 で透明描画のブレンディングをセット アップする

ビューポート 2.0 では、ブレンディングを RGB チャネルとアルファ チャネルで別々に指定します。この動作は、RGB とアルファが 1 組のブレンディング パラメータを共有する既定の高品質レンダラの動作とは異なります。

プラグインを記述するとき、MHWRender::MBlendStateDesc ブレンド状態クラスを使用してブレンディングを指定します。

ソース、デスティネーション ブレンド、アルファ ブレンドを設定し、追加するブレンド操作を設定します。ブレンド係数は 1, 1, 1, 1 に設定する必要があります。

次の例は、開発キットで提供されている hwPhongShader ノードのプラグインのものです。

Developer Kit は、オートデスク デベロッパー ネットワークから入手できます。

MHWRender::MBlendStateDesc blendStateDesc;
for(int i = 0; i < (blendStateDesc.independentBlendEnable ? MHWRender::MBlendState::kMaxTargets : 1); ++i)
{
   blendStateDesc.targetBlends[i].blendEnable = true;
   blendStateDesc.targetBlends[i].sourceBlend = MHWRender::MBlendState::kSourceAlpha;
   blendStateDesc.targetBlends[i].destinationBlend = MHWRender::MBlendState::kInvSourceAlpha; 
   blendStateDesc.targetBlends[i].blendOperation = MHWRender::MBlendState::kAdd;
   blendStateDesc.targetBlends[i].alphaSourceBlend = MHWRender::MBlendState::kOne;
   blendStateDesc.targetBlends[i].alphaDestinationBlend = MHWRender::MBlendState::kInvSourceAlpha;
   blendStateDesc.targetBlends[i].alphaBlendOperation = MHWRender::MBlendState::kAdd;
}

blendStateDesc.blendFactor[0] = 1.0f;
blendStateDesc.blendFactor[1] = 1.0f;
blendStateDesc.blendFactor[2] = 1.0f;
blendStateDesc.blendFactor[3] = 1.0f; 

ビルトイン cgfx プラグインの例を使用して同じ状態をセット アップするには、次のパス状態を指定します。

BlendFunc = int2( SrcAlpha, OneMinusSrcAlpha);
BlendFuncSeparate = int4( SrcAlpha, OneMinusSrcAlpha, One, OneMinusSrcAlpha);
BlendEquationSeparate = int2( Add, Add );
BlendColor = float4(1.0f,1.0f,1.0f,1.0f);

ここで:

透明描画に使用する既定のブレンドは、例に示すとおり { source alpha, 1-source alpha } です。