類似傳送門的效果怎麼在引擎內實現?如下圖所示,通過一個門可以看到另一個空間?

可以大概說一下思路,unity或者ue4均可


來強答一個,portal在早期(2000年左右)是一個裁剪(culling)優化手段,比如從室內空間走到室外空間,或者反過來。實現思路是門口處預先放一個portal plane(不一定四邊形,越接近門的形狀裁剪越精確),渲染時,這個門口的portal plane的頂點變換到camera space,就可以類似frustrum culling一樣計算裁剪了(室內看室外則反裁剪)。具體可以搜一個很老的ppt【 Portal Culling】

當然要實現《傳送門》一樣n多次的遞歸空間(遊戲里開互相朝向的兩個蟲洞,可以看到n次反射),細節肯定沒有那麼簡單的。猜想實現思路是一個scene中有n個portal,每個portal有前面說到的屬性:

形狀(plane上的頂點列表)、位置(prs)。除此外還有連接到的scene、方位。說白了portal的概念,就是只比camera少了projection有關的屬性(camera view一個scene,portal也是view一個scene,只是portal的形狀不一定是四邊形,可以是一個平面上的凸邊形,frustrum culling是四邊形裁剪,portal culling也是轉換到view空間的n邊形裁剪)。

這樣從第一個scene的當前camera開始render,發現某portal可見時,對這個portal連接到的scene進行render,camera就根據第一個scene的camera變換到那個scene空間中,帶上portal culling進行這個scene的render,於是就可以遞歸進行下去了


pr0g/unity-portal-rendering

幾個空間的矩陣變換比較煩...


我簡單說下思路:

1)視覺上,從一個portal看到另外一個世界,就是一個rendertarget,用第二camera渲染貼上去;

2)物理上,有一個clip plane,當一個物體穿過一個portal的時候,在第2個portal創建第2個對象,通過portal對應clip plane裁減掉,就能看到2個portal各一半的物體,當地一個物體完全穿過第二個物體後,就用第二個作為主控對象,然後銷毀第一個;


ue4 里只要一個scenccapture2d組件 加幾個藍圖節點搞定:-)


這和做個鏡面效果沒有區別 多個幀緩存 多一遍渲染 結果作為動態紋理貼在門上的那個矩形就好


可以用模版檢測


最簡單的camera+rendertexture就可以做到了吧。。


推薦閱讀:

聚爆的扭曲刀光是怎麼實現的?
為什麼IT行業二本院校找實習這麼難?
怎樣看待越來越多cocos2dx程序員轉unity3d,unity是否是大勢所趨?
Unity 項目中怎樣正確的使用 Lua?

TAG:遊戲開發 | 遊戲引擎 | 虛幻引擎 |