3D 空間內容展示
使用 AR 時,通常需要展示虛擬物體。在簡單的測試示例中,可以使用簡單的幾何體,但要面向消費者開發時,一般需要顯示高精度的3D 模型和動畫,並可能會在點擊模型結點時觸發事件和交互。
模型
當前比較流行的 3D 模型,一般由三角形網格(triangle mesh)構成。為了讓模型看起來真實,我們需要為每個三角形賦予材質 (material)。材質通常實現某種光照模型,其內容由貼圖和光照模型參數構成。
- 貼圖(texture)決定三角形中每個點的基礎顏色,所有三角形的貼圖會放在一張或多張漫反射貼圖中。在一些進階用法中,還可以使用貼圖表示每個點的法線方向或者其他參數。
- 光照模型(lighting model)定義物體如何與光線交互,常見的有 PBR。光照模型通常使用 shader 來實現。PBR 光照模型的參數有顏色、金屬度、粗糙度等。
在應用開發中,一般不會直接在 OpenGL / Metal / Vulkan / Direct3D 上載入 3D 模型,而是使用 3D 引擎來進行載入。3D 引擎會要求使用一些特定的 3D 模型格式,例如歷史悠久、較為可讀的obj / mtl 格式,以及目前比較流行的 glTF 格式。
動畫
為了讓模型運動,需要使用骨骼動畫。骨骼是指的 3D 模型中做剛體運動時保持一致運動的大塊模型結點。
顯示動畫,需要在運行時不斷更新模型結點的位置和姿態(變換矩陣)。大部分 3D 引擎會提供動畫功能,只需要在動畫製作軟體中編輯好動畫,並以 3D 引擎支援的格式匯出,即可在 3D 引擎中使用。上述 glTF 格式也包含動畫的功能。
交互
用戶點擊模型結點時,有時候需要觸發事件和交互。一般會對骨骼動畫中的骨骼進行命名,並使用碰撞檢測或射線檢測,在點擊時觸發事件,返回被點擊的骨骼名稱。事件的處理,可以使用腳本或者應用程式碼來進行。
附註
如果您缺少 3D 引擎的使用經驗,強烈建議您考慮使用 Unity 來開發您的應用。EasyAR Sense Unity Plugin 對 Unity 有較好的支援,如果您使用其他的 3D 引擎,可能會面臨支援和可用資源較少的問題。