0

我正在开发一个运行两个通道的着色器:

  • 一个标准的顶点/像素着色器,它使用一些 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。

有没有办法让两遍都使用深度测试,而第一遍不会遮挡第二遍?

如果需要,我可以将这些通道分成两个着色器,并在引擎中使用两个着色器渲染同一个对象,但我想知道是否可以只使用多个通道。

4

0 回答 0