關於對數深度的一些知識

這些知識忘了在哪粘貼的,希望原作者看到可以留言

OpenGL渲染時,頂點着色器輸出的w值爲是

W = -Z;

而深度值是 

D = Z * ( n + f ) / ( n - f )  + 2.0 * f  * n / (n-f)

頂點着色器中的值通過除以w轉換爲歸一化的設備座標,因此深度值變成了:

Dndc=D / W = D / -Z = -D / Z 

= (f+n)/(f-n) + 2.0 *f*n/(f-n) / Z;

讓 a =  2.0 *f*n/(f-n) ; b =  (f+n)/(f-n) ;
則 
Dndc= a * (1.0/Z) + b;

所以深度值與Z的倒數呈線性關係

對於對數深度,在頂點着色器中輸出

vFragDepth = 1.0 + gl_Position.w; (不支持寫入深度時改爲  gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;  gl_Position.z *= gl_Position.w;)

在片元着色器中寫入深度

gl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;

其中logDepthBufFC爲Uniform變量

logDepthBufFC = 2.0 / log2(f + 1.0).

關於深度可以參考這篇文章https://www.cnblogs.com/dojo-lzz/p/11250164.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章