案例研究 - 在實境中的的透視技術

當人們思考混合實境,以及他們可以使用Microsoft HoloLens時,他們通常會遵守「我可以新增至會議室的物件是什麼?」或「我可以在空間頂端分層什麼?」我想要強調另一個您可以考慮的區域,基本上是一個魔術技巧,使用相同的技術來查看或查看您周圍的實際實體物件。

技術

如果您在 RoboRaid中破壞了牆、在 Fragments中解除鎖定牆安全,或足以在 2015 年 E3 的 Halo 5 體驗中看到 UNSC Infinity 韓文,則您已瞭解我所討論的內容。 視您的想像而定,此視覺技巧可用來將暫時漏洞放在您的幹牆中,或隱藏鬆散底板下的世界。

RoboRaid adds three-dimensional pipes and other structure behind your walls, visible only through holes created as the invaders break through.

RoboRaid 會在您的牆後方新增三維管道和其他結構,只會透過建立為斷路器中斷的漏洞來看見。

在HoloLens上使用其中一個獨特的全像投影,應用程式可以在牆後或透過樓層提供內容的假像,方式與實際視窗呈現本身的方式相同。 將自己向左移動,而您可以在右側看到任何內容。 更接近,您可以看到更多專案。 主要差異在於真正的漏洞可讓您通過,而您的樓層無法讓您跳到該令人驚奇的全像攝影內容。 (我將工作新增至待辦專案。)

在幕後

這個技巧是兩個效果的組合。 首先,全像攝影內容會使用「空間錨點」釘選到世界。使用錨點讓內容「世界鎖定」表示您查看的內容不會以視覺方式偏離其附近的實體物件,即使您移動或基礎空間對應系統更新其會議室的 3D 模型也一樣。

其次,該全像攝影內容在視覺上受限於非常特定的空間,因此您只能透過實境中的漏洞來查看。 需要看一下邏輯孔、視窗或閘道,這需要遮蔽才能銷售訣竅。 在沒有封鎖大部分檢視的情況下,秘密 Jurassic 維度的空間破解看起來可能就像是放置不良的恐龍。

This is not an actual screenshot, but an illustration of how the secret underworld from MR Basics 101 looks on HoloLens. The black enclosure doesn’t show up, but you can see content through a virtual hole. (When looking through an actual device, the floor would seem to disappear even more because your eyes focus at a further distance as if it’s not even there.)

這不是實際的螢幕擷取畫面,而是MR Basics 101中秘密下世界的外觀圖例HoloLens。 黑色主機殼不會顯示,但您可以透過虛擬孔看到內容。 (在查看實際裝置時,樓層似乎會消失更多,因為您的眼睛會更遠地專注在距離,就像它甚至不存在一樣。)

世界鎖定全像攝影內容

在 Unity 中,造成全像攝影內容保持世界鎖定,就像新增 WorldAnchor 元件一樣簡單:

myObject.AddComponent<WorldAnchor>();

WorldAnchor 元件會持續調整其 GameObject (的位置和旋轉,因此階層中該物件下的任何其他專案) ,使其相對於附近的實體物件保持穩定。 撰寫內容時,請建立內容,讓物件的根樞紐置中在這個虛擬洞中。 (如果您的物件的樞紐深在牆中,其稍微調整的位置和旋轉會更明顯,而且孔看起來可能不太穩定。)

遮蔽除了虛擬孔的所有專案

有各種方式可以選擇性地封鎖在牆中隱藏的檢視。 最簡單的方式是利用HoloLens使用加法顯示器的事實,這表示完全黑色的物件會顯示不可見。 您可以在 Unity 中執行這項操作,而不需要執行任何特殊的著色器或材質技巧—只要建立黑色材質,並將它指派給內容中方塊的物件即可。 如果您不想要進行 3D 模型化,只要使用少數預設的 Quad 物件,並稍微重迭。 這種方法有一些缺點,但這是取得工作速度最快的方法,而取得低精確度的概念證明運作很好,即使您懷疑稍後可能想要重構它也一樣。

上述「黑箱」方法的其中一個主要缺點是無法妥善拍攝。 雖然您的效果在顯示HoloLens時看起來可能完美,但您採取的任何螢幕擷取畫面都會顯示大型黑色物件,而不是牆或樓層的螢幕擷取畫面。 這是因為實體硬體和螢幕擷取畫面會以不同的方式複合全像投影和實境。 讓我們一點時間到一些假的數學...

假數學警示! 這些數位和公式旨在說明某個點,而不是任何類型的精確計量!

您透過HoloLens看到的內容:

( Reality * darkening_amount ) + Holograms

您在螢幕擷取畫面和影片中看到的內容:

( Reality * ( 1 - hologram_alpha ) ) + Holograms * hologram_alpha

在英文中:您透過HoloLens看到的內容是深色實境 (的簡單組合,例如透過太陽眼鏡) ,以及應用程式想要顯示的任何全像投影。 但是當您擷取螢幕擷取畫面時,相機的影像會根據每個圖元的透明度值,與應用程式的全像投影混合。

其中一個解決方式是將「黑色方塊」材質變更為只寫入深度緩衝區,並使用所有其他不透明材質排序。 如需此範例,請參閱GitHub 的 MixedRealityToolkit 中的 WindowOcclusion.shader 檔案。 相關行會在這裡複製:

"RenderType" = "Opaque"
"Queue" = "Geometry"
ColorMask 0

(請注意,「位移 50,100」這一行是處理不相關的問題,因此可能合理地將它排除在外。)

實作不可見的遮蔽材質,讓 app 繪製在顯示和混合實境螢幕擷取畫面中看起來正確的方塊。 對於獎勵點,您可以嘗試更進一步改善該方塊的效能,方法是執行聰明的動作來繪製較少的不可見圖元,但這真的可以進入我們,而且通常不需要。

Here is the secret underworld from MR Basics 101 as Unity draws it, except for the outer parts of the occluding box. Note that the pivot for the underworld is at the center of the box, which helps keep the hole as stable as possible relative to your actual floor.

以下是 MR Basics 101 中的秘密下層,因為 Unity 會繪製它,但遮蔽方塊的外部部分除外。 請注意,下世界樞紐位於方塊的中心,有助於盡可能讓孔相對於實際樓層保持穩定。

親自完成

有HoloLens,想要自行試用效果嗎? 您可以執行 (不需要撰寫任何程式碼) 最簡單的方式是安裝免費的 3D Viewer 應用程式,然後載入GitHub上提供的下載.fbx 檔案,以檢視會議室中的花樣模型。 將它載入HoloLens,您可以看到工作的錯覺。 當您在模型前面時,您只能看到小孔,其他所有專案都看不見。 查看來自其他任何一端的模型,並完全消失。 使用 3D 檢視器的移動、旋轉和縮放控制項,將虛擬孔放置在您可以考慮的任何垂直表面上,以產生一些想法!

Viewing this model in your Unity editor will show a large black box around the flowerpot. On HoloLens, the box disappears, giving way to a magic window effect.

在 Unity 編輯器中檢視此模型,將會在花花周圍顯示大型黑色方塊。 在HoloLens上,方塊會消失,並給予魔術視窗效果。

如果您想要建置使用此技術的應用程式,請參閱Mixed Reality教學課程中的MR Basics 101教學課程。 第 7 章的結尾是樓層中的暴增,其中顯示隱藏的下層 (,如上圖所示) 。 神秘說教學課程必須很無聊嗎?

以下是您可以接下來採取此概念的一些概念:

  • 請考慮讓虛擬洞內的內容成為互動式的方式。 讓使用者在牆外有一些影響,可以真正改善這個技巧可以提供的奇感。
  • 請思考如何透過物件查看回到已知區域。 例如,如何將全像攝影孔放在咖啡桌上,並查看其下方的樓層?

關於作者

Picture of Eric Rehmeyer Eric Rehmeyer
資深軟體工程師@Microsoft

另請參閱