我正在开发一个运行两个通道的着色器:
- 一个标准的顶点/像素着色器,它使用一些 alpha 混合来绘制原始对象
- 细分网格并使其崩溃的几何着色器
然而,我的问题是第一遍的几何形状遮挡了第二遍的几何形状。即使原始几何体是完全透明的,它也会完全剔除第二遍中的任何几何体。 原始几何体是一个球体,正如您在此处看到的那样,它遮挡了几何着色器的结果
第一遍使用这种混合模式:
BlendState SrcAlphaBlendingAdd
{
BlendEnable[0] = TRUE;
SrcBlend = SRC_ALPHA;
DestBlend = INV_SRC_ALPHA;
BlendOp = ADD;
SrcBlendAlpha = ZERO;
DestBlendAlpha = ZERO;
BlendOpAlpha = ADD;
RenderTargetWriteMask[0] = 0x0F;
};
两个通道当前都使用这个 depthstencilstate:
DepthStencilState Depth {
// Depth test parameters
DepthEnable = true;
DepthWriteMask = all;
DepthFunc = less;
StencilEnable = false;
};
两个通道的 Cullmode 都设置为 NONE。
有没有办法让两遍都使用深度测试,而第一遍不会遮挡第二遍?
如果需要,我可以将这些通道分成两个着色器,并在引擎中使用两个着色器渲染同一个对象,但我想知道是否可以只使用多个通道。