深度纹理夹紧到1.0?

时间:2014-09-10 16:46:22

标签: directx directx-11

我正在做指数阴影贴图而不是输出深度,我输出exp(深度),如下所示:

float ps_main(float4 position : SV_Position) : SV_Depth
{
    return exp(position.z / position.w);
}

使用exp()只需将整个深度纹理变为白色(1.0f)。

我认为没有深度被写入,因为深度纹理被清除为1.0f,这是max,并且所有exp()值都相等或更高。我怎么能绕过这个?我想将任何浮点值写入深度纹理。

1 个答案:

答案 0 :(得分:1)

SV_Depth范围由视口中的深度最小值/最大值确定,最大范围为0.0到1.0(实际上是UNORM曲面解释)。深度值超出此范围或大于深度缓冲区当前值的任何调用都将被丢弃。如果要对代码中的表达式进行编码,可以在最终使用时对其进行加载计算,或者将其写入单独的渲染目标(例如R32_FLOAT),而不是使用深度缓冲区。