我正在做指数阴影贴图而不是输出深度,我输出exp(深度),如下所示:
float ps_main(float4 position : SV_Position) : SV_Depth
{
return exp(position.z / position.w);
}
使用exp()只需将整个深度纹理变为白色(1.0f)。
我认为没有深度被写入,因为深度纹理被清除为1.0f,这是max,并且所有exp()值都相等或更高。我怎么能绕过这个?我想将任何浮点值写入深度纹理。
答案 0 :(得分:1)
SV_Depth
范围由视口中的深度最小值/最大值确定,最大范围为0.0到1.0(实际上是UNORM
曲面解释)。深度值超出此范围或大于深度缓冲区当前值的任何调用都将被丢弃。如果要对代码中的表达式进行编码,可以在最终使用时对其进行加载计算,或者将其写入单独的渲染目标(例如R32_FLOAT
),而不是使用深度缓冲区。