HoloLens 是以怎樣的順序對場景進行建模&渲染的?
01-12
關於它的『渲染順序』,核心思想是權衡或者折衷(tradeoff)。就像是個經濟學問題,CPU、GPU、HPU資源有限,你要用有限的資源去渲出更優化的 mesh 。(一直記得經濟學第一課老師一直叨著:『資源是有限的,要用最小的資源做最大的事=_=』)一年前我參與了一個基於手機端的AR應用,當時會拿不同配置的手機制定緩存策略(caching strategy)。儲存、渲染、處理這些 Spatial Surfaces ,都會耗費大量的計算資源和儲存資源。所以就需要用到『緩存』。
- 怎樣經濟地使用資源,而使結果最優?
- 哪些 mesh 應該留著,哪些應該丟棄?
- 哪些 mesh 應該提前載入?
- 比如用戶走過一個空間的時候,你就要思考用戶是怎樣通過一塊空間的?
- 用戶可能需要用到哪些物體的 surface ?
- 在什麼時候,有哪些 surface 會被用戶看到?
- ……
從中心向四周載入,而這個中心就叫 Surface Observer 。
surface ,一種是『載入』,是從無到有的過程,一種是『更新』,是你走過了這片已經 mapping 了的空間,或者你對現實的物理空間進行了改動。所以『載入』的優先順序高於『更新』。(注意mesh的邊緣,經常是多個surface observer同時向四周擴展的時候需要縫合或者重疊。)然後再渲視覺中心!重點 mapping 的區域叫做 當前顯示區域(current display frustum)。(而 frustum 這個詞翻譯過來叫『椎體』,讓我想到了人眼的椎體細胞,錐體細胞所在的區域,正是視覺中心!!)而你看不到的地方一般低精度地一筆帶過或者乾脆不渲了~
然後就節省了一部分CPU、GPU、HPU資源……最後隱藏起來(透明度降為0)。《Trimble》中的渲染順序
某AR遊戲的渲染順序
第一次掃描(橙色)
X-ray的渲染順序——以視覺中心為中心開始渲
因為不同的房間有不同的大小形狀,它用攝像頭感知你所在的空間,哪裡是房間、地板、天花板?
三層mesh,一層接一層,像水面上的波紋和漣漪一樣。看一次正面的:—————————————————————————————————————以用戶視覺前方的地面為中心向四周擴散。推薦閱讀: