全像攝影轉譯概觀

全像攝影轉譯可讓您的應用程式在使用者周圍的世界精確位置繪製全像投影,無論是精確地放在實體世界或您已建立的虛擬領域。 全像投影 是由音效和光線所組成的物件。 轉譯可讓您的應用程式新增光線。

裝置支援

功能 HoloLens (第一代) HoloLens 2 沉浸式頭戴裝置
轉譯 ✔️ ✔️ ✔️

全像攝影的呈現

全像攝影轉譯的關鍵在於瞭解正在使用何種裝置。 具有 查看顯示器的裝置,例如 HoloLens,將光線新增至世界。 黑色圖元完全透明,而較亮的圖元愈不透明。 因為顯示器的光線會新增至真實世界的光線,所以白色圖元是半透明。

雖然立體轉譯為您的全像投影提供一個深度提示,但新增 基礎效果 可協助使用者更輕鬆地看到全像投影接近的表面。 其中一種基礎技術是新增附近表面全像投影的光暈,然後針對此光暈呈現陰影。 如此一來,您的陰影就會從環境中減去光線。 空間音效 是另一個重要的深度提示,可讓使用者推斷全像投影的距離和相對位置。

具有不透明顯示器的裝置,例如Windows Mixed Reality沉浸式頭戴式裝置,會封鎖世界。 黑色圖元是純黑色,而任何其他色彩會以該色彩向使用者顯示。 您的應用程式負責轉譯使用者看到的所有專案。 如此一來,維護常數重新整理率就更加重要,讓使用者擁有熟悉的體驗。

預測轉譯參數

混合實境頭戴裝置 (HoloLens 和沉浸式頭戴裝置) 持續追蹤使用者頭部相對於其周圍的位置和方向。 當您的應用程式開始準備下一個框架時,系統會預測使用者前端將在顯示器上顯示的確切時間。 根據此預測,系統會計算要用於該畫面的檢視和投影轉換。 您的應用程式 必須使用這些轉換來產生正確的結果。 如果未使用系統提供的轉換,產生的影像將不會與真實世界對齊,導致使用者感到不適。

注意

為了精確地預測新畫面何時到達顯示器,系統會持續測量應用程式轉譯管線的有效端對端延遲。 雖然系統會調整為轉譯管線的長度,但您可以盡可能讓該管線保持最短,以改善全像投影穩定性。

使用進階技術來增強系統預測的應用程式可以覆寫系統檢視和投影轉換。 這些應用程式仍必須使用系統提供的轉換作為其自訂轉換的基礎,以產生有意義的結果。

其他轉譯參數

轉譯框架時,系統會指定應用程式應該在其中繪製的背景緩衝區檢視區。 此檢視區通常小於框架緩衝區的完整大小。 無論檢視區大小為何,一旦應用程式轉譯框架,系統就會調整影像以填滿整個顯示器。

對於發現自己無法以所需重新整理率轉譯的應用程式, 可以設定系統轉譯參數 ,以降低記憶體壓力,並以增加圖元別名的成本來轉譯成本。 您也可以變更後端緩衝區格式,而某些應用程式可協助改善記憶體頻寬和圖元輸送量。

系統會要求應用程式轉譯的轉譯範圍、解析度和畫面播放速率,也可能從框架變更為畫面,而且在左眼和右眼之間可能會有所不同。 例如,當 混合實境擷取 (MRC) 為作用中,且 相片/視訊相機檢視設定 未加入時,可能會以較大的 FOV 或解析度轉譯單眼。

針對任何指定的畫面,您的應用程式 必須使用 系統所提供的檢視轉換、投影轉換和檢視區解析度來轉譯。 此外,您的應用程式絕對不能假設任何轉譯或檢視參數都會從框架到框架保持固定。 Unity 之類的引擎會在自己的相機物件中為您處理所有這些轉換,以便一律遵守使用者的實體移動和系統狀態。 如果您的應用程式允許透過世界虛擬移動使用者, (例如在遊戲台上使用搖桿) ,您可以在相機上方新增上層鑽研物件來移動它。 這會導致相機同時反映使用者的虛擬和實體動作。 如果您的應用程式修改系統所提供的檢視轉換、投影轉換或檢視區維度,則必須呼叫適當的 覆寫 API來通知系統。

若要增強全像攝影轉譯的穩定性,您的應用程式應該為每個畫面提供用於轉譯的深度緩衝區。 如果您的 app 確實提供深度緩衝區,它應該具有一致的深度值,並以相機的公尺表示。 這可讓系統使用每個圖元的深度資料,在使用者的前端最終與預測位置稍微位移時,更能穩定內容。 如果您無法提供深度緩衝區,您可以提供焦點和一般,定義切割大部分內容的平面。 如果提供深度緩衝區和焦點平面,系統可能會同時使用這兩者。 特別是,當您的應用程式顯示移動中的全像投影時,提供深度緩衝區和焦點,其中包括速度向量。

如需本主題的低階詳細資料,請參閱 DirectX 中的轉 譯一文。

全像攝影機

Windows Mixed Reality介紹全像攝影機的概念。 全像攝影機類似于在 3D 圖形文字中找到的傳統相機;它們會定義外部 (位置和方向) 和內建相機屬性。 (例如,現場檢視是用來檢視虛擬 3D 場景。) 不同于傳統的 3D 相機,應用程式不會控制相機的位置、方向和內部屬性。 相反地,全像攝影機的位置和方向會由使用者的移動隱含控制。 使用者的移動會透過檢視轉換,以逐框架方式轉寄至應用程式。 同樣地,相機的內建屬性是由裝置的校正光學和透過投影轉換轉接的框架所定義。

一般而言,您的應用程式會轉譯單一立體相機。 強固的轉譯迴圈將支援多個相機,而且支援單聲道和立體相機。 例如,當使用者啟用混合實境擷取等功能時,系統可能會要求您的應用程式根據頭戴式裝置圖形來呈現 混合實境擷取 (MRC) 。 可支援多個相機的應用程式 可藉由選擇 加入其可支援的相機 種類 來取得它們。

磁碟區呈現

在 3D 中轉譯醫療 MRI 或工程磁片區時,通常會使用 磁片區轉譯 技術。 這些技術在混合實境中可能很有趣,使用者只要移動頭部就能自然地從主要角度檢視這類磁片區。

HoloLens (第一代) 支援的解決方案

  • 檢視區大小上限是 HolographicDisplay的屬性。 HoloLens 預設會設定為檢視區大小上限,也就是 720p (1268x720) 。
  • 您可以藉由在 HolographicCamera 上設定 ViewportScaleFactor 來變更檢視區大小。 此縮放比例的範圍介於 0 到 1。
  • HoloLens 上支援的最低檢視區大小 (第一代) 為 720p 的 50%,也就是 360p (634x360) 。 這是 0.5 的 ViewportScaleFactor。
  • 不建議使用低於 540p 的任何專案,因為視覺降低,但可用來識別圖元填滿率的瓶頸。

HoloLens 2支援的解決方式

  • 目前和支援的最大轉譯目標大小是 檢視組態的屬性。 HoloLens 2預設會設定為 1440x936 的轉譯目標大小上限。
  • 應用程式可以藉由呼叫 RequestRenderTargetSize 方法來要求新的轉譯目標大小,來變更轉譯目標緩衝區的大小。 將會選擇新的轉譯目標大小,以符合或超過要求的轉譯目標大小。 此 API 會變更轉譯目標緩衝區的大小,這需要 GPU 上的記憶體重新配置。 這一點的影響包括:轉譯目標大小可以相應減少以降低 GPU 上的記憶體壓力,而且此方法不應以高頻率呼叫。
  • 應用程式仍然可以以與 HoloLens 1 相同的方式變更檢視區大小。 GPU 上沒有新增的記憶體重新配置,因此可以高頻率變更,但無法用來降低 GPU 上的記憶體壓力。
  • HoloLens 2上支援的最低檢視區大小為 634x412,當預設轉譯目標大小正在使用時,ViewportScaleFactor 大約為 0.44。
  • 如果提供的轉譯目標大小小於支援的最低檢視區大小,則會忽略檢視區縮放比例。
  • 不建議使用低於 540p 的任何專案,因為視覺降低,但可用來識別圖元填滿率的瓶頸。

另請參閱