unity中取樣深度圖的結果處理
此篇內容是基於深度圖的應用的說明,對深度圖不清楚的,請檢視:
深度圖的說明
- 關於相機的深度側檢視:
深度:存的是Z值,不是此點到相機的距離(例如 G點的深度是AH,但是AG是G點到相機的距離)
(1)第二個函式 LinearEyeDepth
此函式返回就是相機空間中的Z值
(2)第一個函式:Linear01Depth
此函式的返回值是(0,1)的線性值,也是相機空間(視角空間)中的
0:相機的位置是0
1:遠裁剪平面是1
在相機空間中的Z值是深度最原始的值,將Z值/原裁剪平面far,就轉換到了(0,1)的範圍內
此處附上《Shader入門精要》中的推到過程:
取樣深度圖推導過程請點選此處檢視。
下面通過深度圖重建世界座標系:
(方法一)逆矩陣方式重建
:在frag著色器中得到uv座標(已經進行過齊次除法,且已經由【-1,1】換算到【0,1】),取樣深度圖得到Clip裁剪空間中的Z值
所以就得到了Clip裁剪空間中的 座標(x,y,z).然後乘以VP矩陣的逆矩陣,就轉換到世界空間中的座標(記得/.w)
下面是逆推的演示:
條件:已知條件(M為VP矩陣,M^-1即為其逆矩陣,Clip為裁剪空間,ndc為標準裝置空間,world為世界空間):
(1)
ndc = Clip.xyzw / Clip.w = Clip / Clip.w
world = M^-1 * Clip
二者結合得:
world = M ^-1 * ndc * Clip.w
(2)
我們已知M和ndc,然而還是不知道Clip.w,但是有一個特殊情況,是world的w座標,經過變換後應該是1,即
1 = world.w = (M^-1 * ndc).w * Clip.w
進而得到Clip.w = 1 / (M^ -1 * ndc).w
帶入上面等式得到:
world = (M ^ -1 * ndc) / (M ^ -1 * ndc).w
所以,世界座標就等於ndc進行VP逆變換之後再除以自身的w。
(3)缺點
不過這種方式重建世界座標,效能比較差,一般來說,我們都是逐頂點地進行矩陣運算,畢竟定點數一般還是比較少的,但是全螢幕逐畫素進行矩陣運算,這個計算量就不是一般的大了,效能肯定是吃不消的。
(方法二):螢幕射線插值方式重建視空間座標
假如我們得到了 相機在世界空間中的位置A,並且已知一個方向向量AG
那麼:G點在世界空間中的位置 = 世界空間相機位置A 沿著AG方向 平移AG的長度
程式碼和實現方式如下:
相關文章
- Spark Task 的執行流程④ - task 結果的處理Spark
- 深度學習煉丹-不平衡樣本的處理深度學習
- [Python影像處理] 三十.影像量化及取樣處理萬字詳細總結(推薦)Python
- go 如何處理資料庫返回的多結果集Go資料庫
- 動態sql查詢結果多行的處理情況SQL
- 封裝springmvc處理ajax請求結果封裝SpringMVC
- AOP的具體實踐-簡化結果返回的處理
- Android 圖片快取處理Android快取
- mysql group by 取想要的結果MySql
- 數字影像處理-取樣量化(Matlab)Matlab
- 深度學習中的資料預處理方法深度學習
- 「深度」A/B測試中的因果推斷——潛在結果模型模型
- Jdbc引入連線池,JdbcTemplate處理結果集的優化JDBC優化
- (反射+內省機制的運用)處理jdbc的結果集反射JDBC
- Shell指令碼中獲取SELECT結果值的方法指令碼
- Unity3d花屏處理Unity3D
- php中mysqli處理查詢結果集的幾個方法PHPMySql
- Picasso原始碼分析(六):BitmapHunter與請求結果的處理原始碼
- ES 如何得到像mysql 中 like 一樣的搜尋結果MySql
- Jive筆記4--結果集分頁處理 (轉)筆記
- webpack結合reactjs、vuejs專案中圖片處理WebReactJSVue
- 深度學習浪潮中的自然語言處理技術深度學習自然語言處理
- Mybatis底層原理學習(三):查詢結果集的處理原理MyBatis
- JavaScript中的圖片處理與合成(四)JavaScript
- R中的迴圈多圖處理技巧
- JavaScript中的圖片處理與合成(一)JavaScript
- JavaScript中的圖片處理與合成(二)JavaScript
- unity 部分obj不接受後處理UnityOBJ
- 獲取任務的執行結果
- python使用flask接收前端資料,處理後返回結果PythonFlask前端
- linq返回結果集中增加自增序列,該如何處理
- 如何用深度學習處理結構化資料?深度學習
- PHP PDO獲取結果集PHP
- 怎樣在 Laravel 中處理前端認證Laravel前端
- JavaScript中Typeof返回的結果JavaScript
- webpack對樣式的處理Web
- ?laravel8 中介軟體對處理返回結果或異常進行格式統一處理Laravel
- 《深度學習進階:自然語言處理》中的網址深度學習自然語言處理