设置在 Viewport 2.0 中绘制的透明度的混合

 
 
 

在 Viewport 2.0 中,分别为 RGB 通道和 Alpha 通道指定混合。该行为不同于默认渲染器和高质量渲染器的行为,其中 RGB 和 Alpha 共享一组混合参数。

编写插件时,使用 MHWRender::MBlendStateDesc 混合状态类指定您的混合。

设定源、目标混合和 Alpha 混合,并设定要添加的混合操作。混合因子应设定为 1、1、1、1。

以下示例取自 Maya API Devkit 中提供的 hwPhongShader 节点插件。

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);

其中:

在 MBlendStateDesc 结构中。

用于绘制透明度的默认混合是 { source alpha, 1-source alpha },如以下示例所示。