在 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);
用于绘制透明度的默认混合是 { source alpha, 1-source alpha },如以下示例所示。