如何實現(xiàn)3D應(yīng)用啟動器呢?我們需要兩個步驟實現(xiàn):
1.? 準(zhǔn)備3D模型
2.? 修改項目配置以集成3D圖標(biāo)
準(zhǔn)備3D模型
3D應(yīng)用啟動器要求的圖標(biāo)文件必然是3D模型文件,這一點是明確的。同時,使用的3D模型必須同樣符合HoloLens項目的一般性兼容要求,即對面數(shù)或者素材尺寸等方面的限制。3D應(yīng)用啟動器的模型應(yīng)當(dāng)在30厘米的立方體空間中設(shè)計,也就是說建議的模型長寬高尺寸應(yīng)當(dāng)小于30cm*30cm*30cm。此外,作為用于系統(tǒng)主頁的啟動圖標(biāo),一些額外的要求也必須遵守:
- 導(dǎo)出格式:模型資產(chǎn)必須為.glb格式的3D模型,glb格式是免費開放的glTF格式的二進制版本,支持內(nèi)嵌貼圖和數(shù)據(jù),很多工具都可以生成或?qū)С龃烁袷降哪P臀募╓indows 10內(nèi)置的Paint 3D應(yīng)用。
- 建模標(biāo)準(zhǔn):模型曲面的三角形個數(shù)必須小于10000個,每個層次細(xì)節(jié)(LOD)具有不超過64個節(jié)點和32個子網(wǎng)格。
- 材質(zhì):模型使用的貼圖尺寸最大不超過4096*4096,推薦使用的尺寸為512*512。
- 動畫:模型的動畫不應(yīng)大于30FPS下的20分鐘,也就是36000個關(guān)鍵幀。包含的MorphTagets(變形目標(biāo))頂點的個數(shù)必須不大于8192個。
- 模型優(yōu)化:使用的模型必須經(jīng)WindowsMRAssetConverter優(yōu)化過,它可以根據(jù)微軟的要求自動化優(yōu)化我們的模型,是微軟提供的開源工具之一。
首先,用系統(tǒng)內(nèi)置的Paint 3D應(yīng)用快速創(chuàng)建一個符合要求的3D模型,可以使用Remix 3D上的免費3D模型。
下一步導(dǎo)出模型,選擇Menu - Save as - 3D model,導(dǎo)出格式選擇.glb。
再優(yōu)化模型,下面使用WindowsMRAssetConverter工具自動優(yōu)化導(dǎo)出的模型文件,確保它可以被項目兼容并使用。注意,不符合要求的模型將不會再HoloLens系統(tǒng)主頁上顯示。

此刻模型準(zhǔn)備就大功告成啦,下面就把它集成到項目中。注意,要把文件生成行為設(shè)為內(nèi)容。
集成3D應(yīng)用啟動器
為了能夠讓系統(tǒng)識別到3D模型作為啟動器,修改UWP應(yīng)用清單就是必要的做法。當(dāng)我們使用Visual Studio創(chuàng)建一個UWP項目時,默認(rèn)會在項目中生成一個Package.appxmanifest應(yīng)用清單文件。此XML格式的應(yīng)用清單文件是UWP應(yīng)用必須具有的組件之一,用于聲明應(yīng)用的信息、權(quán)限和其他系統(tǒng)行為的注冊,可以說是每一個應(yīng)用的身份憑據(jù)了。當(dāng)然,對于Unity3D開發(fā)的3D應(yīng)用,需要在Unity導(dǎo)出生成UWP項目后再編輯此清單文件。
下面我們首先修改清單文件,引入uap5命名空間,如下:

接下來在Application元素中使用uap5:MixedRealityModel標(biāo)簽聲明啟動器模型路徑。

如果不引入此MixedRealityModel標(biāo)簽?zāi)敲磻?yīng)用就會被默認(rèn)為2D應(yīng)用,引入后系統(tǒng)才會認(rèn)為此應(yīng)用使用3D啟動器。完成以上步驟后,實現(xiàn)一個基本的3D應(yīng)用啟動器就大功告成了。
邊框盒選項(Bounding Box)
前面的部分我們已經(jīng)實現(xiàn)基本的3D應(yīng)用啟動器了,整個配置過程非常簡單。那么如何自定義啟動模型的邊框盒呢?對于實現(xiàn)了3D應(yīng)用啟動器的應(yīng)用而言,系統(tǒng)默認(rèn)會生成邊框盒。此外,HoloLens還允許我們修改邊框盒的參數(shù)來自定義3D啟動器模型的顯示效果。主要是使用SpatialBoundingBox標(biāo)簽中的Center和extents屬性來指定模型相對于邊框盒中心的位置,以及邊框盒中心點到每個邊框在對應(yīng)軸上的距離,這里設(shè)置的屬性值單位都為米。
使用方法和引入3D啟動器類似,首先引入命名空間:

在MixedRealityModel下添加SpatialBoundingBox標(biāo)簽,如下:

這樣配置后,我們的3D啟動器的模型將會根據(jù)設(shè)置的自定義參數(shù)顯示在空間特定的位置上。
二級3D磁貼
UWP應(yīng)用具有一個可以創(chuàng)建二級磁貼的特性,可以生成快捷的二級磁貼入口,類似于快捷方式一般。對于HoloLens而言,現(xiàn)在我們也可以像創(chuàng)建2D二級磁貼一樣,使用代碼快捷的生成3D二級磁貼了,就像微軟的Holograms應(yīng)用一般,可以快捷的把全息模型放置到空間中。

同時3D二級磁貼還支持兩種激活模式:
1.??默認(rèn)激活:此模式下點擊3D二級磁貼則會立刻打開應(yīng)用,進入其應(yīng)用視圖。
2.??不激活:此模式下點擊選中3D磁貼不會觸發(fā)任何應(yīng)用,它就像一個普通的全息圖像一樣展示在空間中。
3D二級磁貼的使用方式和普通二級磁貼類似,只需要簡單的調(diào)用系統(tǒng)API即可,如下:

其中需要注意的是,用作二級磁貼的3D模型只能是存放在應(yīng)用安裝目錄或者獨立存儲空間中的內(nèi)容,使用ms-appx或ms-appdata協(xié)議路勁引入。二級磁貼的邊框盒也可以直接使用代碼設(shè)置,其屬性和3D啟動器一致。