启用像素混合与MSAA时背面边缘出现奇怪阶梯状效果
DirectX 12 MSAA+像素混合下背面边缘抗锯齿异常问题
启用像素混合和MSAA后,背面边缘的抗锯齿效果异常,可见1像素宽的内部深灰色线条。以下截图中红线标注了异常位置:

这是通过PIX截取的红色立方体内部边缘放大图:

PIX显示边缘alpha值为0.5(符合预期),但颜色存在异常变化。
异常触发条件:
- 仅同时启用MSAA和像素混合时出现,禁用MSAA后一切正常
- 仅在NVIDIA专用显卡(如GTX 1060)上出现,Intel 630集成显卡无此问题
- 更新NVIDIA驱动无效,其他使用NVIDIA GPU的用户也能复现该问题
有人遇到过此类问题吗?如何调试问题根源?
以下是PSO创建的代码示例:
// Setup rasterizer description. CD3DX12_RASTERIZER_DESC rasterizerDesc(D3D12_DEFAULT); rasterizerDesc.CullMode = D3D12_CULL_MODE_NONE; rasterizerDesc.FillMode = D3D12_FILL_MODE_SOLID; rasterizerDesc.MultisampleEnable = 1; psoDesc.RasterizerState = rasterizerDesc; // Setup pixel blend description. psoDesc.BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT); D3D12_RENDER_TARGET_BLEND_DESC blendDesc; blendDesc.BlendEnable = 1; blendDesc.LogicOpEnable = 0; blendDesc.SrcBlend = D3D12_BLEND_SRC_ALPHA; blendDesc.DestBlend = D3D12_BLEND_INV_SRC_ALPHA; blendDesc.BlendOp = D3D12_BLEND_OP_ADD; blendDesc.SrcBlendAlpha = D3D12_BLEND_ONE; blendDesc.DestBlendAlpha = D3D12_BLEND_ZERO; blendDesc.BlendOpAlpha = D3D12_BLEND_OP_ADD; blendDesc.LogicOp = D3D12_LOGIC_OP_NOOP; blendDesc.RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; psoDesc.BlendState.RenderTarget[0] = blendDesc; psoDesc.BlendState.AlphaToCoverageEnable = 0; // Finalize PSO description. psoDesc.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT); // Disable depth writes. psoDesc.DepthStencilState.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; psoDesc.SampleMask = UINT_MAX; psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; psoDesc.NumRenderTargets = 1; psoDesc.RTVFormats[0] = DXGI_FORMAT_R8G8B8A8_UNORM; psoDesc.SampleDesc.Count = 8; psoDesc.SampleDesc.Quality = iMsaaQualityLevelsCount - 1; psoDesc.DSVFormat = DXGI_FORMAT_D24_UNORM_S8_UINT;
MSAA渲染目标资源也启用了相同的样本数/质量等级。
内容的提问来源于stack exchange,提问作者Flone
相关产品推荐
相关产品推荐

