建立用於住家的 3D 模型
Windows Mixed Reality首頁是使用者在啟動應用程式之前登陸的起點。 為Windows Mixed Reality頭戴式裝置設計應用程式時,請使用3D 模型作為應用程式啟動器,並將3D 深層連結放在Windows Mixed Reality首頁。 本文概述建立與Windows Mixed Reality首頁相容的 3D 模型指導方針。
資產需求概觀
為Windows Mixed Reality建立 3D 模型時,所有資產都必須符合一些需求:
- 匯出 - 資產必須以 .glb (二進位 glTF) 、.obj 或 .fbx 檔案格式傳遞
- 模型化 - 資產必須小於 10k 三角形,每個 LOD 不超過 64 個節點和 32 個子訊息
- 材質 - 紋理不能大於 4096 x 4096,而最小 mip 地圖在任一維度上不應大於 4
- 動畫 - 動畫無法在 30 FPS (36,000 個主要畫面格) 超過 20 分鐘,且必須包含 < = 8192 型目標頂點
- 優化 - 資產應該使用 WindowsMRAssetConverter 進行優化。 Windows OS 版本 < = 1709* 的必要專案,且建議在 Windows OS 版本 > = 1803
注意
3D 檢視器應用程式支援不同的格式和解析度,但最終會在Mixed Reality首頁中顯示模型之前,先將模型轉換成 .glb/glTF。
本文的其餘部分包含這些需求的詳細概觀和額外的指導方針,以確保您的模型能與Windows Mixed Reality家搭配運作良好。
詳細指引
匯出模型
Windows Mixed Reality家預期使用 .glb 檔案格式搭配內嵌影像和二進位資料傳遞 3D 資產。 Glb 是 glTF 格式的二進位版本,這是 Khronos 群組所維護之 3D 資產傳遞的免付費標準。 隨著 glTF 發展為可互通 3D 內容的業界標準,因此 Microsoft 對於跨 Windows 應用程式和體驗的格式支援也一樣。 如果您尚未建立 glTF 資產,您可以在 glTF 工作組 github 頁面上找到 支援的匯出者和轉換器清單 。
模型化指導方針
Windows 預期會使用下列模型化指導方針來產生資產,以確保與Mixed Reality首頁體驗相容。 在您選擇的程式中建立模型時,請記住下列建議和限制:
- Up 軸應該設定為 「Y」。
- 資產應該會面向正 Z 軸的「向前」。
- 所有資產都應該建置在場景原點 (0,0,0)
- 工作單位應設定為計量和資產,以便以世界規模撰寫資產
- 所有網格都不需要結合,但如果您以資源限制的裝置為目標,建議使用
- 所有網格都應該共用一個材質,只有一個紋理集用於整個資產
- UV 必須以 0-1 空間的方形相片順序配置。 雖然允許並排紋理,但請避免貼圖紋理。
- 不支援多 UV
- 不支援雙面材質
(LOD) 三角形計數和詳細資料層級
Windows Mixed Reality首頁不支援具有超過 10,000 個三角形的模型。 建議您在匯出之前先將網格三角形,以確保它們不會超過此計數。 Windows MR 也支援選擇性的幾何層級 (LOD) ,以確保高效能且高品質的體驗。 WindowsMRAssetConverter 可協助您將 3 個版本的模型合併成單一 .glb 模型。 Windows 會根據模型所佔用的螢幕實際空間量來決定要顯示的 LOD。 下列建議的三角形計數僅支援 3 個 LOD 層級:
LOD 層級 | 建議的三角形計數 | 三角形計數上限 |
---|---|---|
LOD 0 | 10,000 | 10,000 |
LOD 1 | 5,000 | 10,000 |
LOD 2 | 2,500 | 10,000 |
節點計數和子訊息限制
Windows Mixed Reality首頁不支援每個 LOD 有超過 64 個節點或 32 個子訊息的模型。 節點是 glTF 規格 中定義場景中物件的概念。 子訊息定義于 物件中 網格的基本類型 陣列中。
功能 | 描述 | 支援的最大數目 | 文件 |
---|---|---|---|
節點 | glTF 場景中的物件 | 每個 LOD 64 個 | 這裡 |
Submeshes | 所有網格上的基本類型總和 | 每個 LOD 32 個 | 這裡 |
材料指導方針
紋理應該使用 PBR 金屬粗略工作流程來準備。 首先,建立一組完整的紋理,包括 Albedo、Normal、遮蔽、金屬和粗略度。 Windows Mixed Reality支援解析度高達 4096x4096 的紋理,但建議您在 512x512 撰寫。 紋理應該以 4 倍數的解析度撰寫。 這是在下列匯出步驟中套用至紋理的壓縮格式需求。 產生 Mip 對應或紋理時,最低 mip 必須最多為 4x4。
建議的紋理大小 | 紋理大小上限 | 最低 Mip |
---|---|---|
512x512 | 4096x4096 | max 4x4 |
Albedo (底色) 地圖
沒有光源資訊的原始色彩。 此地圖也包含金屬 (白色的反射和擴散資訊,分別) 和隔離器 (黑色) 表面。
正常
正切空間標準圖
粗略度地圖
描述 物件的微表面。 白色 1.0 是粗略黑色 0.0 是平滑的。 此地圖會提供資產的最大字元,因為它確實描述表面。 例如,臨時、指紋、smudges、smudme 等等。
環境遮蔽地圖
顯示遮蔽光線區域的值縮放地圖,其會封鎖反射
金屬地圖
告知著色器是否為金屬。 原始金屬 = 1.0 白色 非金屬 = 0.0 黑色。 可能會有轉換灰色值,表示涵蓋原始金屬的內容,例如中途,但一般而言,此地圖應該是黑白。
最佳化
Windows Mixed Reality首頁提供一系列優化功能,以使用自訂擴充功能定義的核心 glTF 規格為基礎。 Windows 版本 < = 1709 需要這些優化,並建議用於較新版本的 Windows。 您可以使用GitHub 上提供的 Windows Mixed Reality Asset Converter,輕鬆地優化任何 glTF 2.0 模型。 此工具會執行正確的紋理封裝和優化,如下所示。 針對一般用法,建議您使用 WindowsMRAssetConverter,但如果您需要更充分地控制體驗,而且想要建置您自己的優化管線,您可以參考以下的詳細規格。
注意
如需確切模型限制可能性的明確清單,請參閱3D 模型優化一文,以用於Dynamics 365應用程式。
材質
為了改善Mixed Reality環境中的資產載入時間,Windows MR 支援根據本節中定義的紋理封裝配置轉譯壓縮的 DDS 紋理。 DDS 紋理是使用 MSFT_texture_dds延伸模組來參考。 強烈建議壓縮紋理。
HoloLens
以 HoloLens 為基礎的混合實境體驗預期使用下列封裝規格的 2 紋理設定來封裝紋理:
glTF 屬性 | 紋理 | 封裝配置 |
---|---|---|
pbrMetallicRoughness | baseColorTexture | 紅色 (R) 、綠色 (G) 、藍色 (B) |
MSFT_packing_normalRoughnessMetallic | normalRoughnessMetallicTexture | 標準 (RG) 、粗略度 (B) 、 (A) |
壓縮 DDS 紋理時,每個地圖上預期會有下列壓縮:
紋理 | 預期的壓縮 |
---|---|
baseColorTexture、normalRoughnessMetallicTexture | BC7 |
沉浸式 (VR) 頭戴式裝置
適用于沉浸式 (VR) 頭戴式裝置的電腦型Windows Mixed Reality體驗,預期使用下列封裝規格的 3 紋理設定來封裝紋理:
Windows OS > = 1803
glTF 屬性 | 紋理 | 封裝配置 |
---|---|---|
pbrMetallicRoughness | baseColorTexture | 紅色 (R) 、綠色 (G) 、藍色 (B) |
MSFT_packing_occlusionRoughnessMetallic | occlusionRoughnessMetallicTexture | 遮蔽 (R) 、粗略度 (G) 、 (B) |
MSFT_packing_occlusionRoughnessMetallic | normalTexture | 標準 (RG) |
壓縮 DDS 紋理時,每個地圖上預期會有下列壓縮:
紋理 | 預期的壓縮 |
---|---|
normalTexture | BC5 |
baseColorTexture, occlusionRoughnessMetallicTexture | BC7 |
Windows OS < = 1709
glTF 屬性 | 紋理 | 封裝配置 |
---|---|---|
pbrMetallicRoughness | baseColorTexture | 紅色 (R) 、綠色 (G) 、藍色 (B) |
MSFT_packing_occlusionRoughnessMetallic | roughnessMetallicOcclusionTexture | 粗略 (R) 、 (G) 、遮蔽 (B) |
MSFT_packing_occlusionRoughnessMetallic | normalTexture | 標準 (RG) |
壓縮 DDS 紋理時,每個地圖上預期會有下列壓縮:
紋理 | 預期的壓縮 |
---|---|
normalTexture | BC5 |
baseColorTexture, 粗略性MetallicOcclusionTexture | BC7 |
新增網格 LOD
Windows MR 會使用幾何節點 LOD,根據螢幕涵蓋範圍,以不同層級的詳細資料轉譯 3D 模型。 雖然這項功能在技術上並非必要,但建議用於所有資產。 目前 Windows 支援 3 層的詳細資料。 預設 LOD 為 0,代表最高品質。 其他 LOD 會循序編號,例如 1、2,並逐漸降低品質。 Windows Mixed Reality Asset Converter支援藉由接受多個 glTF 模型並將其合併成具有有效 LOD 層級的單一資產,來產生符合此 LOD 規格的資產。 下表概述預期的 LOD 排序和三角形目標:
LOD 層級 | 建議的三角形計數 | 三角形計數上限 |
---|---|---|
LOD 0 | 10,000 | 10,000 |
LOD 1 | 5,000 | 10,000 |
LOD 2 | 2,500 | 10,000 |
使用 LOD 時,一律會指定 3 個 LOD 層級。 遺失的 LOD 會導致模型在 LOD 系統切換至遺漏的 LOD 層級時意外呈現。 glTF 2.0 目前不支援 LOD 作為核心規格的一部分。LOD 應該使用 MSFT_LOD擴充功能來定義。
螢幕涵蓋範圍
LOD 會根據每個 LOD 上設定的螢幕涵蓋範圍值所驅動,在Windows Mixed Reality中顯示。 目前耗用較大螢幕空間的物件會顯示在較高的 LOD 層級。 螢幕涵蓋範圍不是核心 glTF 2.0 規格的一部分,必須在 MSFT_lod延伸模組的「extras」 區段中使用MSFT_ScreenCoverage來指定。
LOD 層級 | 建議的範圍 | 預設範圍 |
---|---|---|
LOD 0 | 100% - 50% | 0.5 |
LOD 1 | 低於 50% - 20% | 0.2 |
LOD 2 | 低於 20% - 1% | 0.01 |
LOD 4 | 低於 1% | - |
動畫指導方針
注意
這項功能已新增為2018 年 4 月更新Windows 10的一部分。 不過,在舊版 Windows 上,這些動畫不會播放,不過,如果根據本文中的指引撰寫,它們仍會載入。
混合實境首頁支援 HoloLens 上的動畫 glTF 物件,以及沉浸式 (VR) 頭戴式裝置。 如果您想要在模型上觸發動畫,您必須在 glTF 格式上使用動畫對應延伸模組。 此延伸模組可讓您根據使用者存在於世界的情況下觸發 glTF 模型中的動畫,例如,當使用者接近物件或查看動畫時觸發動畫。 如果您 glTF 物件有動畫,但未定義觸發程式,將不會播放動畫。 下一節說明將這些觸發程式新增至任何動畫 glTF 物件的工作流程。
工具
首先,如果您還沒有下列工具,請下載下列工具。 這些工具可讓您輕鬆地開啟任何 glTF 模型、預覽、進行變更,並將它儲存回 glTF 或 .glb:
開啟和預覽模型
從在 VSCode 中開啟 glTF 模型開始,方法是將 .glTF 檔案拖曳至編輯器視窗。 如果您有 .glb 而不是 .glTF 檔案,您可以使用您下載的 glTF 工具附加元件將它匯入 VSCode。 移至 [檢視 - > 命令選擇區],然後在命令選擇區中開始輸入 「glTF」,然後選取 [glTF:從 glb 匯入],這會彈出檔案選擇器供您匯入 .glb。
開啟 glTF 模型之後,您應該會在編輯器視窗中看到 JSON。 您也可以在即時 3D 檢視器中預覽模型,方法是以滑鼠右鍵按一下檔案名,然後從右鍵功能表選取 「glTF: Preview 3D Model」 命令快捷方式。
新增觸發程式
動畫觸發程式會使用動畫對應延伸模組新增至 glTF 模型 JSON。 動畫地圖延伸模組會在 GitHub 上 公開記載, (注意:這是草稿延伸模組) 。 若要將延伸模組新增至您的模型,只要捲動至編輯器中的 glTF 檔案結尾,並在檔案中新增 「extensionsUsed」 和 「extensions」 區塊至您的檔案。如果它們不存在, 在 「extensionsUsed」 區段中,您將新增 「EXT_animation_map」 延伸模組的參考,並在 「extensions」 區塊中,將對應新增至模型中的動畫。
如 規格所述 ,您在 「animations」 清單中使用「語意」字串來觸發動畫,這是動畫索引的陣列。 在下列範例中,我們已指定要在使用者以物件顯示時播放的動畫:
"extensionsUsed": [
"EXT_animation_map"
],
"extensions" : {
"EXT_animation_map" : {
"bindings": [
{
"semantic": "GAZE",
"animations": [0]
}
]
}
}
Windows Mixed Reality首頁支援下列動畫觸發程式語意。
- 「ALWAYS」:持續迴圈動畫
- 「HELD」:在物件擷取的整個持續時間內迴圈。
- 「GAZE」: 在物件被查看時迴圈
- 「PROXIMITY」:當檢視器接近物件時迴圈
- 「POINTING」:當使用者指向 物件時迴圈
儲存和匯出
對 glTF 模型進行變更之後,您可以直接將其儲存為 glTF。 您也可以在編輯器中以滑鼠右鍵按一下檔案名,然後選取 [glTF:匯出至 GLB (二進位檔案) ] 以匯出 .glb。
Restrictions
動畫不能超過 20 分鐘,而且不能包含超過 36,000 個主要畫面格, (20 分鐘 30 FPS) 。 此外,使用以型目標為基礎的動畫時,不會超過 8192 個型目標頂點或更少。 超過這些計數會導致Windows Mixed Reality家不支援動畫資產。
功能 | 最大值 |
---|---|
持續時間 | 20 分鐘 |
Keyframes | 36,000 |
定型目標頂點 | 8192 |
glTF 實作注意事項
Windows MR 不支援使用負數刻度翻轉幾何。 具有負尺規的幾何可能會導致視覺成品。
glTF 資產必須使用 Windows MR 所轉譯的場景屬性,指向預設場景。 此外,Windows 10 2018 年 4 月更新之前,Windows MR glTF 載入器需要存取子:
- 必須有最小值和最大值。
- 類型 SCALAR 必須是 componentType UNSIGNED_SHORT (5123) 或 UNSIGNED_INT (5125) 。
- 類型 VEC2 和 VEC3 必須是 componentType FLOAT (5126) 。
下列材質屬性是從核心 glTF 2.0 規格使用,但不需要:
- baseColorFactor、colorFactor、roughnessFactor
- baseColorTexture:必須指向儲存在 dds 中的紋理。
- emissiveTexture:必須指向儲存在 dds 中的紋理。
- emissiveFactor
- AlphaMode
核心規格會忽略下列材質屬性:
- 所有多 UV
- metalRoughnessTexture:必須改用以下定義的 Microsoft 優化紋理封裝
- normalTexture:必須改用以下定義的 Microsoft 優化紋理封裝
- normalScale
- occlusionTexture:必須改用以下定義的 Microsoft 優化紋理封裝
- occlusionStrength
Windows MR 不支援基本模式線條和點。
只支援單一 UV 頂點屬性。
其他資源
- glTF 匯出者和轉換器
- glTF 工具組
- glTF 2.0 規格
- Microsoft glTF LOD 擴充功能規格
- PC Mixed Reality紋理封裝延伸模組規格
- HoloLens Mixed Reality紋理封裝延伸模組規格
- Microsoft DDS 紋理 glTF 延伸模組規格