一、原理總述
????????首先通過PICO SDK透視開啟接口開啟透視;然后對傳送門模型進行處理,分別在門的兩端添加附帶有處理Shader的Quad,面向真實世界一側(cè)的Quad添加附帶深度測試或者模板測試Shader的材質(zhì),面向虛擬世界一側(cè)的Quad添加附帶Underlay “開洞” Shader的材質(zhì)。
????????為了方便表述,將面向真實世界一側(cè)的Quad附帶的Shader表示為Shader[See Virtual],而將面向虛擬世界一側(cè)的Quad附帶的Shader表示為Shader[See Reality]。
????????整體原理示意圖如下。

二、實現(xiàn)方式
????????以上Shader[See Virtual]有兩種實現(xiàn)方式,分別是深度測試和模板測試。
1、深度測試
????????這種實現(xiàn)方式相對于模板測試來說較為繁瑣,需要創(chuàng)建一個附帶Underlay “開洞” Shader材質(zhì)的包圍盒,這個包圍盒可以六個面都采用Quad來做。讓包圍盒包裹相機和傳送門,遮住外圍的虛擬場景。
(1)包圍盒創(chuàng)建
????????這個創(chuàng)建的包圍盒可以營造有局限的真實世界,即開啟透視之后可以在包圍盒范圍內(nèi)看到真實世界以及傳送門。
(2)Shader[See Virtual]依附物制作
????????采用只保留深度計算的Shader制作傳送門觀看虛擬世界一側(cè)效果,這里將此側(cè)Quad表示為Quad[See Virtual]。注意,虛擬世界、Quad[See Virtual]和包圍盒的Render Queue需要滿足虛擬世界 < Quad[See Virtual] < 包圍盒。
(3)穿越傳送門
????????可以在傳送門上添加碰撞體,相機下創(chuàng)建一個帶有碰撞體及剛體并隱藏網(wǎng)格渲染器的球體,來進行觸發(fā)檢測是否穿越門,注意傳送門碰撞體勾選觸發(fā)檢測開關(guān)。我們將虛擬世界一側(cè)的Quad表示為Quad[See Reality]。
????????此處觸發(fā)檢測配合相機和傳送門之間坐標關(guān)系計算一起實現(xiàn)。當穿越進虛擬世界一側(cè)時,將包圍盒隱藏,此時會完全進入虛擬世界,同時可以通過Quad[See Reality]看到真實世界;當再次穿越真實世界一側(cè)時,只需將包圍盒顯示,此時會進入局限的真實世界,同時可以通過Quad[See Virtual]看到虛擬世界。
2、模板測試
????????模板測試需要采用Unity的URP渲染管線實現(xiàn),方便針對Stencil屬性進行控制。
(1)Shader[See Virtual]依附物制作
? ? ? ? 采用模板測試的Shader制作傳送門觀看虛擬世界一側(cè)效果,這里將此側(cè)Quad表示為Quad[See Virtual]??梢詫uad[See Virtual]材質(zhì)的Stencil ID屬性修改為1,便于后續(xù)進行條件比較。
(2)虛擬場景制作
? ? ? ? 將虛擬場景所有物體作為同一個物體的子物體,然后修改父物體的層級為自定義層級。
(3)修改URP渲染管線數(shù)據(jù)資產(chǎn)
? ? ? ? 此處在原來URP渲染管線資產(chǎn)綁定的數(shù)據(jù)資產(chǎn)基礎(chǔ)上復制一份數(shù)據(jù)資產(chǎn),在將復制的數(shù)據(jù)資產(chǎn)賦值給URP渲染管線資產(chǎn)。在復制的數(shù)據(jù)資產(chǎn)里添加一個渲染特征,此渲染特征選擇渲染物體。
在過濾條件處將自定義層級去除,勾選Stencil并將比較值改為1,比較方法改為相等。
? ? ? ? 進行完以上三步后,只能通過Quad[See Virtual]看到虛擬世界場景。
(4)穿越傳送門
? ? ? ? 可以在傳送門上添加碰撞體,相機下創(chuàng)建一個帶有碰撞體及剛體并隱藏網(wǎng)格渲染器的球體,來進行觸發(fā)檢測是否穿越門,注意傳送門碰撞體勾選觸發(fā)檢測開關(guān)。我們將虛擬世界一側(cè)的Quad表示為Quad[See Reality]。
? ? ? ? 此處觸發(fā)檢測配合相機和傳送門之間坐標關(guān)系計算一起實現(xiàn)。當穿越進虛擬世界一側(cè)時,將Stencil的比較方法改為Disabled,其他屬性不變,此時會完全進入虛擬世界,同時可以通過Quad[See Reality]看到真實世界;當再次穿越真實世界一側(cè)時,只需將Stencil的比較方法改為Equal,其他屬性不變,此時會完全進入真實世界,同時可以通過Quad[See Virtual]看到虛擬世界。
三、代碼實現(xiàn)
????????多重傳送門代碼實現(xiàn)參見:PICO4 傳送門效果開發(fā)小結(jié)之多重傳送門代碼實現(xiàn)
四、效果演示
????????效果演示參見:PICO4 MR多重傳送門效果演示