Directx 深度纹理钳制为1.0?

Directx 深度纹理钳制为1.0?,directx,directx-11,Directx,Directx 11,我正在做指数阴影贴图,其中我没有输出深度,而是输出exp(深度),如下所示: float ps_main(float4 position : SV_Position) : SV_Depth { return exp(position.z / position.w); } 使用exp()只需将整个深度纹理变为白色(1.0f) 我认为不会写入深度,因为深度纹理被清除为1.0f,即最大值,并且所有exp()值都等于或更高。我怎样才能避开这件事?我想将任何浮点值写入深度纹理。SV_深度范围由视

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

float ps_main(float4 position : SV_Position) : SV_Depth
{
    return exp(position.z / position.w);
}
使用exp()只需将整个深度纹理变为白色(1.0f)


我认为不会写入深度,因为深度纹理被清除为1.0f,即最大值,并且所有exp()值都等于或更高。我怎样才能避开这件事?我想将任何浮点值写入深度纹理。

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