HLSL多次通过几何着色器剔除问题

时间:2017-05-27 11:09:18

标签: hlsl depth-testing

我正在使用一个运行两遍的着色器:

  • 使用某些Alpha混合绘制原始对象的标准顶点/像素着色器
  • 细分网格并使其崩溃的几何着色器

然而,我的问题是第一遍的几何形状遮挡了第二遍的几何形状。即使原始几何体是完全透明的,它也会完全剔除第二遍的几何形状。 The original geometry is a sphere, which as you can see here occludes the result of the geometry shader

第一遍使用这种混合模式:

BlendState SrcAlphaBlendingAdd
{
    BlendEnable[0] = TRUE;
    SrcBlend = SRC_ALPHA;
    DestBlend = INV_SRC_ALPHA;
    BlendOp = ADD;
    SrcBlendAlpha = ZERO;
    DestBlendAlpha = ZERO;
    BlendOpAlpha = ADD;
    RenderTargetWriteMask[0] = 0x0F;
};

这两个传球目前都使用这个deepstencilstate:

DepthStencilState Depth {
  // Depth test parameters
  DepthEnable = true;
  DepthWriteMask = all;
  DepthFunc = less;
  StencilEnable = false;
};

两次传球的Cullmode都设置为NONE。

两种传球都有办法使用深度测试,没有第一次传球遮挡第二次吗?

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

0 个答案:

没有答案