《LEGO Builder's Journey》是 Light Brick Studio 推出的一款多平臺解謎游戲,自登陸 Apple Arcade 以來,逐漸積累了人氣,發(fā)展勢頭強勁。對于將《LEGO Builder's Journey》適配到 Apple Vision Pro 平臺,迎接空間計算的新時代,他們總結(jié)了一些重要的經(jīng)驗和心得。
本文將講述一個初次涉足混合現(xiàn)實領域的工作室,如何在充分利用 Apple Vision Pro 的沉浸式特性的同時,確保游戲體驗與其他平臺(如移動端、PC 等)保持一致?他們在 20 個項目成員中有 6 人負責 Apple Vision Pro 的移植,在三個月內(nèi)的時間,解決了渲染和優(yōu)化難題,將《LEGO Builder's Journey》移植到 Apple Vision Pro。
由于樂高?積木是實物產(chǎn)品,Light Brick Studio 意識到在 Apple Vision Pro 上創(chuàng)建一種讓玩家在房間內(nèi)與游戲元素交互的體驗十分具有挑戰(zhàn)性。對于游戲的 Apple Vision Pro 版本發(fā)布,時間也是一個限制因素。雖然團隊之前曾在一兩個月內(nèi)完成過其他平臺的 2D 界面移植,但這次進入空間計算領域的三個月時間安排非常緊張。
探索新維度
“一旦了解了平臺對游戲及其玩法設計的限制,你就幾乎可以創(chuàng)造出任何想要的體驗,” Light Brick Studios 的技術(shù)負責人 Mikkel Fredborg 解釋說。
對于團隊來說,將游戲移植到 VisionOS 平臺“主要是一個技術(shù)挑戰(zhàn),既要讓游戲流暢運行,又要充分利用平臺的完整體驗?!边@意味著需要進行多項技術(shù)改進,包括對用戶界面(UI)進行全面重新設計,將原本平面的 UI 元素放置在房間中。團隊還需要更新他們的渲染工具和方法,以確保最終產(chǎn)品的視覺質(zhì)量和沉浸感。同時,平衡 Unity 和 RealityKit 兩個系統(tǒng),進一步增加了性能優(yōu)化的難度。
“我們做過很多不同平臺的移植,但這次是最復雜的,因為 Apple Vision Pro 與其他平臺有很大不同,我們的目標是探索能在多大程度上提升這種體驗,結(jié)果非常成功?!?Light Brick Studio 的總經(jīng)理 Karsten Lund 說道。
成果
在不到 100 天的時間內(nèi)為 Apple Vision Pro 構(gòu)建了游戲的 80 個關卡和 60,353 塊樂高積木。
在 Unity PolySpatial 團隊的支持下,節(jié)省了數(shù)周的開發(fā)時間。
保持了所有游戲玩法區(qū)域的完整性,僅進行了特定的性能優(yōu)化,沒有改變游戲的整體節(jié)奏。
實現(xiàn)了流暢的過渡,采用開放式混合現(xiàn)實風格,隨著游戲的推進,沉浸感逐漸增強。
重新設計 UI 和游戲玩法
《LEGO Builder’s Journey》的 UI 非常簡潔,最多只有 20 個按鈕,用于加載保存的游戲或重新開始關卡等操作,因此重新設計 UI 的工作量比許多游戲要小。團隊在 Unity 中重新設計了 UI,采用了 GameObjects 并為其添加碰撞體,以確保輸入功能正常工作,同時能模仿 VisionOS 的設計語言。
團隊還需要考慮玩家身體移動的靈活性。除了 UI,游戲中的所有內(nèi)容都是用一款名為 LEGO Digital Designer 的工具通過樂高積木構(gòu)建的。團隊過去一直嘗試在 2D 平面上模擬 3D 空間,但在 Apple Vision Pro 上,他們必須考慮到玩家可以在任何位置移動。為了適應完整的360度體驗,團隊重新設計了原本只能從特定角度觀看的模型,以確保模型幾何中沒有漏洞。為了減少繪制調(diào)用(draw calls),團隊還將多個網(wǎng)格合并為單個 GameObjects。
Fredborg 表示:“我們考慮到了玩家要走來走去的情況,并對模型進行了完整的 360 度優(yōu)化。在將積木導入游戲時,我們?nèi)サ袅朔e木內(nèi)部的所有幾何結(jié)構(gòu),移除了所有內(nèi)部細節(jié),因為這些細節(jié)永遠不會被看到。我們利用現(xiàn)有的自動化工具,并對其進行了調(diào)整,以適應完整的模擬體驗?!?/p>
Light Brick Studio 團隊在編輯器中設置 PolySpatial VolumeCamera 組件的 UI 和事件的截圖
管理 Bounded 模式下的布局
在早期,團隊決定在有界(Bounded)模式下進行設計,這意味著他們必須在一個定義的體積范圍內(nèi)操作。如果嘗試在這個范圍外操作,元素會被裁剪且不可見,團隊決定接受有界模式的限制。在這種模式下,除非玩家進行交互,否則無法獲取玩家頭部、眼睛或手部的位置/方向信息。只有當玩家做出捏合手勢時,游戲才能知道手的位置以及正在交互的對象。當捏合結(jié)束時,這些信息也會消失。從這個意義上說,它類似于觸摸屏,只有在玩家觸摸屏幕時才能知道他們在做什么。
Fredborg 表示:“我們不知道玩家在看什么,這是一個很大的變化,尤其是因為我們的游戲玩法需要玩家看著積木來選擇它。我們解決了這些限制后,效果非常好,并且很好地融入了系統(tǒng)。最終,這種方式運行得非常順暢,因為一切都朝著一致的用戶體驗方向發(fā)展?!?/p>
為 MaterialX 著色器提供支持
在《LEGO Builder's Journey》的最早版本中,團隊使用了 Unity 輕量級渲染管線(LWRP)的自定義版本,隨后在為 Xbox 和 PlayStation 移植時轉(zhuǎn)向了高清渲染管線(HDRP)。為了適配 Apple Vision Pro,他們首先需要將所有內(nèi)容轉(zhuǎn)換為基于通用渲染管線(URP)和 Shader Graph 的版本,然后再遷移到 Apple 的 RealityKit。
為此,他們將 Shader Graph 中編寫的著色器轉(zhuǎn)換為 MaterialX 著色器,以便加載到 RealityKit 中。但團隊遇到了一些障礙,發(fā)現(xiàn)結(jié)果并不理想,優(yōu)化工作比預期的要多。
他們原本計劃手動優(yōu)化,但發(fā)現(xiàn)要實現(xiàn)自動化來滿足規(guī)模化的需求。他們要手動修補著色器,找到重復的代碼,然后替換這部分代碼以確保它只執(zhí)行一次。Fredborg 承認:“讓一切順利運行是一個挑戰(zhàn),但我認為 PolySpatial 團隊在推動優(yōu)化方面做得非常出色?!?/p>
尋找理想的光照效果
由于游戲的開發(fā)時間緊迫,團隊需要快速找到解決方案。Fredborg 表示:“我們必須找到解決方案來提升游戲的逼真效果,同時支持實時光照和陰影。這是較大的改動之一?!?/p>
最初,他們采用了 Apple Vision Pro 的基于圖像的光照(image-based lighting),目標是將其正確地應用到他們想要包含的材質(zhì)上,比如塑料及其不同變體。他們還需要解決一些難以處理的元素,比如積木上的指紋和劃痕。
由于游戲最初是為早期 iPhone 開發(fā)的,光照非常簡單。團隊使用了一種體積紋理(volume texture),就是帶有烘焙環(huán)境光遮蔽(ambient occlusion)的 3D 紋理,以便可以從場景中的任何位置采樣。他們會對點采樣并分析環(huán)境光遮蔽的程度。由于 Apple Vision Pro 不支持 3D 紋理,他們需要將體積紋理轉(zhuǎn)換為 2D 紋理,并從中手動采樣。雖然這一過程目前在 PolySpatial 中已經(jīng)自動化,但在 Light Brick Studio 團隊剛開始處理還沒有這個功能。

Light Brick Studio 團隊在編輯器中設置夜間場景的截圖
團隊最初采用了塑料積木著色方式和體積紋理采樣系統(tǒng)。隨后,他們引入了實時光照(Realtime Lights)。當體積紋理逐漸充滿整個場景時,他們需要調(diào)整外部光照。在開發(fā)初期,他們無法直接覆蓋 RealityKit 的基于圖像的光照,因此選擇采樣不同的立方體貼圖,并讓 RealityKit 的光照逐漸淡出。
Fredborg 解釋說:“我們當時想實現(xiàn)的效果在技術(shù)上并不可行,但我們找到了一種變通方法:降低積木的光滑度,并在將其傳遞給 RealityKit 光照系統(tǒng)之前調(diào)整了不同的參數(shù)?,F(xiàn)在,在 PolySpatial 和 RealityKit 中已經(jīng)可以直接覆蓋基于圖像的光照,開發(fā)者將能更輕松地實現(xiàn)類似的效果?!?/p>
創(chuàng)建柔和的陰影
Light Brick Studio 團隊還需要為陰影找到解決方案。雖然可以在 Apple Vision Pro 中為某些元素添加陰影,但這并不是標準功能。為此,團隊在 Unity 中將陰影渲染為高度圖(height map)或深度圖(depth map),然后將其發(fā)送到 RealityKit 并重新采樣。他們在 Unity 的 Metal 后端將場景渲染為陰影貼圖(shadow map),然后將其傳遞到 RealityKit 的渲染端。
Fredborg 解釋說:“如果還需要達到每秒 90 幀的渲染速度,其實能在渲染中實現(xiàn)的效果是有限的。我們使用了一個非常小的陰影貼圖,64 x 64 像素,然后將 mipmap 級別組合到單個紋理的 RGBA 通道中,這樣在 RealityKit 中只需一次采樣就可以生成看起來像柔和陰影的效果。因此,當積木非常接近表面時,陰影非常銳利,但當它遠離時,陰影變得更加柔和。我們用一次紋理采樣實現(xiàn)了這一點。”

對于 Unity 中的實時光照(Realtime Lights),他們使用了 Shader Graph 中的PolySpatial Lighting 節(jié)點,該節(jié)點在被轉(zhuǎn)換為 RealityKit 可處理的格式后,會擴展為多個 Shader Graph 節(jié)點。
Fredborg 表示:“對于 RealityKit,修改著色器的唯一方法是通過類似 Shader Graph 的界面。”在 Unity 端,團隊發(fā)現(xiàn)可以在 Shader Graph 中創(chuàng)建自定義代碼函數(shù),只要遵循某些特定規(guī)則,之后就可以將其轉(zhuǎn)換為 MaterialX 節(jié)點圖。他繼續(xù)說道:“這真的幫了我們大忙,否則 Shader Graph 里就會變得一團糟?!?/p>
將游戲的幀率優(yōu)化到 90 fps
在團隊將視覺效果推向新高度的同時,他們也遇到了一些保持平臺流暢運行的難題。開發(fā)采用了雙系統(tǒng)架構(gòu):所有內(nèi)容從 Unity 傳遞到 RealityKit,而兩者的渲染技術(shù)不同。這意味著Unity 負責處理游戲邏輯,而 RealityKit 負責渲染視覺效果,因此需要進行優(yōu)化以實現(xiàn) 90 fps 的流暢運行。其中一個主要挑戰(zhàn)是確定性能瓶頸是來自 Unity 端還是 RealityKit 端,團隊需要多次嘗試才能找到解決方案。
Fredborg 解釋說:“最初,PolySpatial 工具包會將我們在 Unity 中做的所有內(nèi)容都傳遞到 RealityKit,因此每個 GameObject 或變換都會被傳遞過去。當時我們無法關閉特定層的傳遞或反射。它會鏡像所有內(nèi)容,包括 UI 渲染、畫布渲染和動畫粒子系統(tǒng)?,F(xiàn)在,有一個過濾器可以設置為不跟蹤特定層,但在當時,我們必須找到一種方法來清理那些在 RealityKit 端不需要顯示的內(nèi)容?!?/p>
團隊需要優(yōu)化 GameObject 的層級結(jié)構(gòu)。在其他平臺上,每個樂高積木由三個或更多鏈接的 GameObject 組成,但在 VisionOS 上,團隊將每個積木的 GameObject 數(shù)量限制為最多兩個,以減少 Unity 和 RealityKit 之間的數(shù)據(jù)傳遞。這一優(yōu)化效果顯著,為團隊帶來了很大的成功。
提升定格動畫(stop motion animation)的性能也是一個亮點。游戲中包含瀑布動畫,這些瀑布通過交換積木上的網(wǎng)格實現(xiàn),由數(shù)百個不同的 GameObject 組成,導致性能較慢?!拔覀冏罱K采用了一種分步處理的方式,而不是為每個 GameObject 逐幀處理。我們會等待并在不同瀑布流之間每隔幾幀處理一次。這大大提升了性能?!盕redborg 說道。
尋找合適的解決方案和合作伙伴
在為 Apple Vision Pro 開發(fā)應用的過程中,Light Brick Studio 團隊必須保持靈活、快速解決問題,并通過不斷迭代來完善應用。
Fredborg 說道:“我認為必須戴上頭盔才能真正理解那種體驗。我們建議進行多次構(gòu)建,并盡可能多地使用真實設備進行測試,重點關注觸摸和運動交互。雖然你可以在Mac上運行模擬器來了解應用的運行情況,但輸入方式是不同的。這是一個更注重物理交互的平臺?!?/p>
最終,團隊對游戲的表現(xiàn)非常滿意,很大一部分原因在于與強大的支持合作伙伴的合作。他繼續(xù)說道:“Unity 的 PolySpatial 團隊在 Slack 和 Discussion 論壇上都非常及時地回應我們。當我們遇到阻礙時,他們會迅速為我們提供解決方案,這非常有幫助。他們?yōu)槲覀兲峁┝藦姶蟮闹С郑⑾M覀兡軌虼蛟斐龈哔|(zhì)量的 PolySpatial 版本。”

“只要是 Unity 支持的平臺,我們就能讓內(nèi)容在上面運行?!薄狹IKKEL FREDBORG,LIGHT BRICK STUDIO 技術(shù)負責人
使用 Unity 引擎為 Apple Vision Pro 開發(fā)應用,歡迎聯(lián)系我們, 通過與我們的團隊交流,了解我們可以如何幫助您利用 Unity 的強大工具和工作流,打造引人入勝的空間計算體驗。
Unity 官方微信
第一時間了解Unity引擎動向,學習進階開發(fā)技能
每一個“點贊”、“在看”,都是我們前進的動力
熱門跟貼