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的長度
程式碼和實現方式如下:
相關文章
- [Python影像處理] 三十.影像量化及取樣處理萬字詳細總結(推薦)Python
- 數字影像處理-取樣量化(Matlab)Matlab
- 深度學習煉丹-不平衡樣本的處理深度學習
- Spark Task 的執行流程④ - task 結果的處理Spark
- webpack結合reactjs、vuejs專案中圖片處理WebReactJSVue
- 封裝springmvc處理ajax請求結果封裝SpringMVC
- .NET 結果與錯誤處理利器 FluentResults
- go 如何處理資料庫返回的多結果集Go資料庫
- AOP的具體實踐-簡化結果返回的處理
- Native Instruments Kontakt 7 Mac(音色取樣處理軟體)Mac
- (反射+內省機制的運用)處理jdbc的結果集反射JDBC
- R中的迴圈多圖處理技巧
- JavaScript中的圖片處理與合成(四)JavaScript
- JavaScript中的圖片處理與合成(一)JavaScript
- JavaScript中的圖片處理與合成(二)JavaScript
- Python中的時間處理大總結Python
- webpack對樣式的處理Web
- mysql group by 取想要的結果MySql
- 深度學習 preprocess 預處理圖片方式去 pytorch 化深度學習PyTorch
- 怎樣在 Laravel 中處理前端認證Laravel前端
- 「深度」A/B測試中的因果推斷——潛在結果模型模型
- web專案中圖示的前端處理方案Web前端
- python使用flask接收前端資料,處理後返回結果PythonFlask前端
- 《深度學習進階:自然語言處理》中的網址深度學習自然語言處理
- 基於圖深度學習的自然語言處理方法和應用深度學習自然語言處理
- Jtti:怎樣正確處理Redis中的海量資料JttiRedis
- 深度學習中影像上取樣的方法深度學習
- 不平衡樣本的處理
- Mybatis底層原理學習(三):查詢結果集的處理原理MyBatis
- Unity Shader-後處理:Bloom全屏泛光UnityOOM
- ES 如何得到像mysql 中 like 一樣的搜尋結果MySql
- 當 Vue 處理陣列與處理純物件的方式一樣Vue陣列物件
- springboot2.0-統一處理返回結果和異常情況Spring Boot
- 自然語言處理第一次實驗結果自然語言處理
- ?laravel8 中介軟體對處理返回結果或異常進行格式統一處理Laravel
- linux下du和df結果不一致的原因及處理Linux
- 【光能蝸牛的圖形學之旅】Unity紋理初步Unity
- OpenGL 紋理取樣 在GPU中哪個部件完成GPU