Niantic Lightship ARDK 技術解說 & 作品介紹

Cases and Tips

Designium
The Designium Lab 科技實驗室
14 min readJun 23, 2022

--

Cases and Tips for Niantic Lightship ARDK
【目次】緣起
Lightship ARDK 特色
作品一:戰鬥陀螺 BeyBlade(得獎作品)
作品二:噴火龍 Dragons
作品三:塗鴉 Graffiti
作品四:打西瓜 SuicaWari
作品五:天空便利貼 Sky Memo(得獎作品)
作品五:天空便利貼 多人互動版
技術解說
- 物理特性 Physics
- 網路 Networking
-
定位 Localization
-
位置同步 Position Sync
-
虛實理解・語義分割 Semantic Segmentation
程式撰寫工具 Virtual Studio
編輯後記

Niantic 2021119日發佈了 AR 擴增實境 Unity 套件 - Lightship Augmented Reality Developer Kit (ARDK) Designium 身為 Niantic Lightship ARDK 合作開發者之一,從 20215Beta 版時就開始使用此套件,邊測試邊開發了各式各樣應用。

20217Niantic 舉辦了「Lightship Demo Challenge」競賽,給開發者一個月的時間使用 Lightship ARDK (AR SDK) 完成創作,而 Designium 的作品「Sky Memo」在這個競賽中脫穎而出,獲得準優勝 🏆🎉本文將透過 Designium 這次競賽的作品,來向大家介紹 Lightship ARDK

得獎名單 Winner of the Lightship AR Demo Challenge!

Sky Memo Made by The Designium

Lightship ARDK 特色

  1. 「即時映像 Real-Time Mapping
  2. 「虛實理解 Semantic Segmentation
  3. 「多人資源共享 Multiplayer Component

「即時映像利用 ARDK 中網格化 API (Meshing APIs) 建立即時 3D 網格地圖,瞭解使用者所在之處的地表與地貌,再利用遮蔽 API (Occlusion APIs) ,虛擬物件會出現在與現實物件相對的正確深度中,AR 物件可與環境產生碰撞,或達成視覺上現實與虛擬前後互相遮蔽的效果。「虛實理解使用電腦視覺能力語義分割 API (Semantic Segmentation APIs) 來即時辨識真實世界環境中地面、天空、水域、建築等不同元素,可用來指定互動場域,例如:限定金剛只能顯示於天空中 (影片如下)。更有趣的是這些可供辨識的真實物件,亦皆可被替換成自製虛擬物件。多人遊戲 API (Multiplayer APIs) 讓開發者能創造最多同時支援5名使用者即時同步的AR情境。

語義分割 API 讓影像限定天空出現之示範效果
文中所提到的 ARDK API List
- 網格化 API (Meshing APIs)
- 遮蔽 API (Occlusion APIs)
- 語義分割 API (Semantic Segmentation APIs)
- 多人遊戲 API(Multiplayer APIs)
繼續閱讀|回目錄

作品「戰鬥陀螺 BeyBlade

BeyBlade 是使用 Lightship「即時映像 Real-Time Mapping」和「多人資源共享 Multiplayer Component」功能製作的 AR 多人遊戲,利用真實環境中的物理特性讓玩家們可放置虛擬物件至地板上遊玩,物件與物件彼此之間碰撞決定勝負,與真實環境也會產生碰撞。

選用「戰鬥陀螺」為遊戲主題,一方面是因為此遊戲在最小多人限度之下,二人就可以遊玩;另一方面是因為戰鬥陀螺的遊戲性特別適合發展為 AR 遊戲。AR 版的「戰鬥陀螺 BeyBlade」遊戲在「即時映像 Real-Time Mapping」的技術下,可以實現置換戰鬥場所的遊戲特色,讓玩家在現實環境自選遊戲場地,嘗試在各式各樣不同的賽場中進行競賽。

本遊戲製作根基引用了 Unity Asset Store 上的 3D 物件,依 Lightship 函式庫修改其在現實環境中移動及碰撞的損害判定,再移植 Niantic 多人遊戲系統取代 Photon,完成網路工作來控制位置同步,建構可連線互動的遊戲環境。

在遊戲連線時,其中一台裝置將成為主機,負責控制所有物理特性、損傷、 及分數的溝通與判定。遊戲開始後,每個玩家將有三個虛擬戰鬥陀螺可從裝置位置丟出。戰鬥陀螺丟出後會降落在現實環境中的表面,以半隨機的方式移動。戰鬥陀螺會互相牽引撞擊,直到其中一方血量損失殆盡,三個陀螺皆用盡的玩家則輸掉這場戰鬥。

繼續閱讀|回目錄

作品「噴火龍 Dragons」

「噴火龍 Dragons」的製作目的在加大遊戲規模尺度,嘗試創造出人們一同合作,與飛在空中襲擊城市的巨大怪獸戰鬥的體驗,企圖透過 AR 讓玩家在遊玩時有真實發生的錯覺。

本遊戲如同前一作品「戰鬥陀螺 BeyBlade」以其中一台裝置當作遊戲主機,負責噴火龍位置及血量等資訊溝通傳遞,並使用 Lightship 多人遊戲功能來同步玩家位置,讓火球可以從每個玩家位置射向虛擬噴火龍角色。

遊戲製作上為了讓大型生物穿過城市的視覺具有真實感,亦使用 Lightship「虛實理解 Semantic Segmentation功能。在 2021年7月-8月製作參加競賽項目的這個時候,語義分割 API 仍在非常初期的發展階段,所以能做的效果不多,期待正式發佈後即時3D網格地圖會有更高的解析度及深度辨識精確度來支援高質感視覺呈現。

繼續閱讀|回目錄

作品「塗鴉 Graffiti」

「塗鴉 Graffiti」利用 Lightship ARDK 特色讓使用者可在現實環境中的「表面 (The Niantic Meshing)」上彩繪,也可蓋印章及貼貼紙。這雖然是一個簡單的基本功能,但我們從使用體驗中看出未來應用發展的潛力。例如:讓小孩在家裡的牆壁上、地上畫畫,即使在沒有大人的看顧下。所以,我們會繼續延伸這個功能到其他概念上,讓這個應用程式進化成熟。

作品「打西瓜 SuicaWari」

「打西瓜 SuicaWari (スイカ割り)」是日本夏天流行的遊戲,玩家蒙上眼睛拿著球棒尋找西瓜在哪裡,其他人可以幫忙指引方向告訴玩家西瓜在哪裡,是一種合作遊戲,也是一家人可以一起遊玩的遊戲。因此,我們選擇這個遊戲並嘗試利用 Lightship 多人遊戲功能,將傳統遊戲體驗疊加至 AR 效果上。

當遊戲開始時,大人拿著主機裝置放置西瓜到地板上,小孩當玩家拿著手機如同拿著球棒,透過手機螢幕尋找西瓜在哪裡,找到後只要直覺地拿著手機往西瓜打下去即可。

製作遊戲的過程中,我們面臨了幾個挑戰:
- 如何同步每個西瓜的狀態 ? 如 : 移動位置、動畫、打擊狀態等。
- 如何同步西瓜碎片及遊戲計時 ?

繼續閱讀|回目錄

作品「天空便利貼 Sky Memo」

「天空便利貼 Sky Memo」概念起自於在學習 ARDK 範例 「Meshing Semantics」過程中一個語義分割辨識「天空」的簡單練習,進而聯想到可以利用雲朵與天空互動,例如 : 在天空畫畫。

本作品呈現透過將 2D 線稿路徑點轉換成 3D 分子圖形,因此,使用者可以在天空留言,當然也可以將留言清除 (清除功能耗去此專案一半的製作時間)。然而,經過測試發現使用過於空曠的天空也容易使「天空」語義辨識不清,因為缺乏深度前後對應,網格化 API (Meshing) 會將空曠的天空辨識成 Mesh 網格,3D 分子圖形呈現會被遮蔽效果影響。最好的效果呈現是在有些建築物存在天空前方的時候。

作品「天空便利貼 多人互動版」

在「天空便利貼 Sky Memo」贏得獎項之後,經 Niantic 要求將 Sky Memo 更新成多人互動版本如下:

(1) 改善分子繪畫效果
每個分子繪畫路徑是根據路徑資料持續運算所在位置,這耗去大量運算,所以第一版本的 Sky Momo 應用程式在良好顯示幀率(FPS)下,只能支援約 3~5則便利貼。在多人互動版本為了讓繪畫達到更高的自由度,用 Unity Particle System Job System 修正分子繪畫方法,改善後在良好顯示幀率(FPS)下可以支援 15~20則便利貼。

(2) 增加多人互動
- 網路資料設計
因為每一條繪畫路徑都會產生大量的點,所以我們需要設計符合繪畫行為的資料結構,並將資料分享給每位使用者。使用網路空間物件 (Network Spacing Object) 內的 NetworkingField,藉由自定義命令 (Customized Command) 填入繪畫數據,這是我們用來提供多位使用者共享大量點數據的解決方案。

- 分享大量資料的秘訣
我們已知繪畫產生大量資料傳輸是一個製作過程中要解決的問題,但仍有另一個問題是發生在繪畫資料傳輸及繪畫行為同時進行時。因爲 NetworkingField 會向每位使用者廣播 (Broadcast),所以需要間隔每個命令以提供緩衝區,如此一來網路將被塞滿並使應用程序凍結。要解決這個問題可以用一個簡單的命令佇列 (Command Queue) 來儲存每個步驟,然後設定每 3 Frames 發送步驟。

(3) 增加白天/夜晚兩種視覺效果
為了讓應用程式在夜晚也能有天空留言功能,我們為夜晚模式製作了新的分子視覺效果。在晚上使用 APP 可以在天空中用星星留言作畫,AR 檢視下夜晚將變得非常明亮美麗,充滿幻想。

繼續閱讀|回目錄

技術解說

- 物理特性 Physics

Lightship ARDK 的網格化 (Meshing) 能力讓套用物理屬性的 AR 物件以更令人信服的方式對現實環境作出反應。在作品「戰鬥陀螺 BeyBlade」中,陀螺有物理移動及損傷設計,使用網格化 API (Meshing) 提供環境碰撞,可讓陀螺橫越地板並撞到牆壁上。

然而,當網格化 (Meshing) 結果可能有些許不同時,有單獨的裝置進行物理性運動時,會導致不同裝置上的行為顯示差異。所以,為了讓物理性遊玩遊戲進行中不產生衝突,必須讓主機裝置控管所有的物理特性,主機裝置處理物理特性運算 (如:戰鬥陀螺的位置及損傷特效) 後,再將資料傳輸至其他裝置上。

- 網路 Networking

攝影機位置同步與網路孵化 (NetworkSpawn) 功能相當方便,這些功能被用來處理「戰鬥陀螺 BeyBlade」和「噴火龍 Dragons」作品中大部分的動作。例如:陀螺的放置是透過網路來孵化一個基於攝影機座標位置的物件,該物件包含了一個移動陀螺到攝影機座標位置的程式。在噴火龍製作中,火球發射與生成火龍物件也都是透過網路孵化來完成。

然而,在網路 (Networking) 中,大部分好用的功能都是透過設置每個網路訊息的傳輸類別 (Transport Type) 和訊息類別 (Message Type) 來構成的。

傳輸類別可以讓我們選擇該訊息的重要性,將訊息設定為可靠有序 (ReliableOrdered) 可確保一定會送達每個裝置;將訊息設定為不可靠無序 (UnreliableUnordered) 則可以用在不重要的訊息。例如:在「戰鬥陀螺 BeyBlade」中,將座標同步的訊息設定為 UnreliableUnordered,因為該資訊傳送相當頻繁,所以接收端稍微遺漏一些是沒問題的。而重要的事件如:損害、遊戲開始等則使用 ReliableOrdered 來處理。

訊息類別是一種簡單的方式來自定義資料,方便接收端可以分辨傳來的訊息種類而容易使用,例如我用下列訊息種類來定義「戰鬥陀螺 BeyBlade」中的訊息:

以及用像這樣的指令來傳送一些特別的訊息:

還有另一種簡單的方式,適合你想分享資料給每個使用者,你可以使用高階 API (HLAPI) 中的網路欄位單元 (NetworkedField),它會建立一個分享物件給你的網路群組,這在當你需要同步全域變數 (Global Varialbe) 時相當有用。在「噴火龍 Dragons」中,我們使用這個來同步血量與動畫控制;在「打西瓜 SuicaWari」中,也用這個來同步分數與計數器 (如下圖)。

「打西瓜 SuicaWari」中的分數同步

程式撰寫上先準備 NetworkedField 的宣告跟事件:

如果分數被改變了,使用者會自動得到這個被變動的數值:

只有主機端能改變分數,確保分數不會被重複計算:

繼續閱讀|回目錄

-定位 Localization

Lightship ARDK 有多台裝置自動定位功能,雖然有時候會花很多時間才能同步裝置位置,所以在專案製作上最好考慮加入讓使用者知道何時定位開始、定位中、定位完成之設計。

- 位置同步 Position Sync

當裝置定位完成,AR 錨點通常是非常精準 (誤差值:公分),所以在要追蹤的 AR 錨點的子對象建立物件,然後同步他們的絕對座標/相對座標 (Local Position) 而非世界座標 (Global Position),在位置同步上是非常有用的。

- 虛實理解・語義分割 Semantic Segmentation

Lightship ARDK 可辨識地面、天空、水域、建築、樹葉 (樹木)、草,尤其對於建築物和植物的語義分割效果非常好,期待未來辨識解析度能提升越來越高,這部分對 AR 視覺呈現非常重要。

繼續閱讀|回目錄

程式撰寫工具「Virtual Studio」

使用 Virtual Studio 可以節省大量時間在確認遊戲邏輯、特效、動畫、AR 功能及網路連線功能上,即使沒有手機也可以對製作中的遊戲進行測試。

模擬模式 Mock Mode
這是一個確認視覺設計元素的細節上非常有幫助的模式,可以在 Unity 編輯器內執行大部分功能 (一些自定義多人行為除外)。例如:在「打西瓜 SuicaWari」作品中用來測試介面流程,當西瓜觸及地面生成網路物件等。

遠端模式 Remote Mode
這模式可透過 USB/Wifi 行動數據串流來幫助程式除錯,尤其是關於網格 (Meshing) 及深度處理上的問題。

繼續閱讀|回目錄

編輯後記

6/24 (五) Lightship Summit Tokyo 2022 於東京原宿舉行,The Designium 將在活動上介紹一年來使用 Lightship ARDK & Lightship VPS 的開發經驗,請關注我們的 Twitter (@DesigniumLab) 可獲得更多現場即時消息 ✨。

For English Version & 日本語版

原文撰寫於 2021年8月

關於作者

AR Engineer
Matt
(@mechpil0t) and Mao Wu(@rainage)
編輯群 / PR Team
Mariko(@marikocco) and Mary Chin(@Mutien_Mary)
感謝您的閱讀|回目錄* Follow Twitter 獲得 Designium 即時資訊
* 對我們的文章感興趣請登入 Medium 拍手+訂閱 ✨
* 合作洽詢請與我們聯繫!🙌

--

--

Designium
The Designium Lab 科技實驗室

Award-winning XR Studio specializes in developing VPS experiences. 日本東京科技x設計公司。 基於「讓人們感到開心」的理念,開發結合新科技的數位內容體驗。包含「結合地方文化」、「提供技術服務」、「協助有趣的創作」等。 如需合作相談,請隨時與我們聯繫。