unity中預設獲取的深度圖到底是什麼空間下的

時間 2021-06-02 20:43:46

1樓:啵啵啵

Unity取樣的深度圖是ndc下的,非線性深度。

Opengl平台應該是近裁剪面為0,遠裁剪面為1。ndc下是深度範圍是[-1,1],因為進行了對映才在[0,1]。

DX平台的話一般會進行reverse-z,Opengl是沒有reverse-z的,近裁剪面為1,遠裁剪面為0。ndc下深度範圍[0,1]。

所以可以看一下你的unity使用的圖形API(我猜應該是DX),如果是Opengl,可以通過 對映回去ndc範圍深度。如果是DX,可以通過 得到ndc範圍深度。

2樓:

Unity提供了2個函式,把ndc下的z還原,float Linear01Depth( float z ),這個返回對映到0~1的線性z值

float LinearEyeDepth( float z ),返回線性的距離

不用考慮api或者reversed-z的情況,返回的值都是越近越小

3樓:flashyiyi

unity在某個版本後使用了反向z(Reversed-Z)來處理z fighting問題,所以是倒過來的。

反向z先是把攝像機的矩陣改了(你可以看到攝像機矩陣和攝像機的世界座標x投影矩陣並不一樣,就乙個值不一樣,好像是03),然後自動把你的shader的ztest creater和ztest less翻轉,深度測試本身就沒問題了。

它改的直接是攝像機的投影矩陣,所以到clip的那裡,z就已經倒過來了,如果你要在這時候做些比較判斷就要注意。

應該是乙個版本後整體都變了,所以不需要分支做處理,如果看到這樣的深度圖,那就是最近處為1,最遠處為0,然後統一處理就好。

但是在世界空間的時候還沒有翻。

至於你的問題……要看你真正想問什麼。你問ndc空間下的z是啥?那就是你看到的值,因為投影矩陣直接被改了,只是ndc的z和view空間的對應方式是倒著的。

如果你想用ndc空間的z反求view空間的z,那麼就乘下被修改後的投影矩陣的逆。

我不太記得是哪個值不一樣了,你debug camera物件的攝像機矩陣能看到。

4樓:凌霄

原來的回覆是手機上快速回覆的,沒仔細看題主的問題。

這個[0,1]的值,其實有很多種使用方式。因為浮點數精度的原因,越靠近0,精度越高,有一些系統會將遠離攝像機的far plane,設定為0,從而能夠提高遠處深度層次的精度,從而避免出現z-fighting的情況。

題主可以在知乎上查一下,有乙個類似的問題,說的比較仔細。

窩的舔:反向Z(Reversed-Z)的深度緩衝原理這篇是其中一篇。

深度學習中的mask到底是什麼意思?

Frank 基本定義 用選定的影象 圖形或物體,對待處理的影象 全部或區域性 進行遮擋,來控制影象處理的區域或處理過程。用於覆蓋的特定影象或物體稱為掩模或模板。光學影象處理中,掩模可以為膠片 濾光片等。數字影象處理中,掩模為二維矩陣陣列,有時也用多值影象。數字影象處理中,影象掩模主要用於 提取感興趣...

思維深度到底是什麼決定的

你頭髮亂了喔 不知道怎麼回答這個問題,嘿嘿,乙個問題問的我想起前幾天看書裡面的一句話,大體意思是,語言作為溝通的符號,有時候還是無力和不準確的。嘿嘿,跟您問的問題無關,打擾了。 曾弈翾 這個問題真心有點大。就字面意思談談我的看法吧。思維深度取決於自身知識體量的 維度 就是維度。基本上就是乙個問題,或...

普通話的空韻性質到底是什麼?

李溯本 Unancha 普通話的 i u 音位上可以記成 j w 但音值上還是 i u y 於是對應著 zi 和 zhi,音位上可以寫成 ts 和 t,而音值上也同樣更接近 ts 和 t 吧,ji wu y 對應 z 和 你能理解吧?注意 z 在這兒表示近音,不能用 因為是舌音對應 t 的,z 才是...