2014-09-10 60 views
0

我在做指數陰影貼圖,其中,代替outputing深度,我輸出EXP(深度),像這樣:深度紋理被限制爲1.0?

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

用exp()剛剛轉的整個深度質地爲白色(1.0F)。

我在想沒有深度會被寫入,因爲深度紋理被清除爲1.0f,這是max,並且所有exp()值都相等或更高。我怎樣才能解決這個問題?我想將任何浮點值寫入深度紋理。

回答

1

SV_Depth範圍由視口中的深度最小/最大值確定,最大範圍爲0.0至1.0(實際上這是一個UNORM曲面解釋)。任何深度值超出此範圍或大於深度緩衝區當前值的調用都將被丟棄。如果要在代碼中對錶達式進行編碼,則可以在每次最終使用時對其進行加載計算,也可以將其寫入單獨的渲染目標(例如R32_FLOAT),而不是使用深度緩衝區。