編譯/VR陀螺
WWDC 2023 從北京時間 6 月 6 日至 10 日以在線形式舉行,在主題演講系列活動中,為了幫助開發(fā)者了解如何將現(xiàn)有的Unity VR應用和游戲帶到VisionOS中,以及如何在應用和游戲中使用Unity輸入系統(tǒng)為眼睛和手部構建內(nèi)容,蘋果公司與Unity帶來了一系列相關分享。
圖源:apple
以下是 “將你的Unity VR應用程序帶到一個完全沉浸的空間”的主題分享(VR陀螺編譯,基于原文略有修改):
Christopher Figueroa:你好,我是蘋果公司ARKit團隊的Christopher Figueroa。
Peter Kuhn:我是來自Unity的Peter Kuhn。
Christopher:Unity已經(jīng)把他們的引擎和XR生態(tài)系統(tǒng)帶到了這個新的平臺上,使得像Peter 這樣的Unity開發(fā)者可以很容易地把自己的項目帶入到VisionOS中。Peter和我將向大家展示如何使用你已經(jīng)熟悉的Unity工作流程,建立一個完全沉浸式的體驗,就像這里的《Rec Room》。你將從創(chuàng)建一個具有完全沉浸式風格的沉浸式空間開始。這允許你的應用程序隱藏Passthrough,并把人帶到另一個世界。在完全沉浸式體驗中,Unity利用了Compositor Services,并讓你的應用程序具有金屬渲染能力。
Unity還利用ARKit的優(yōu)勢來識別你的身體位置和周圍的環(huán)境,包括骨骼手的追蹤。Unity以這些技術為基礎,在Unity引擎中提供同樣的服務。在這個平臺上用Unity創(chuàng)建沉浸式體驗有兩種主要方法。你可以把完全沉浸式的Unity體驗帶到這個平臺上,用你自己的環(huán)境取代玩家的環(huán)境?;蛘吣憧梢詫⒛愕膬?nèi)容與Passthrough功能混合,創(chuàng)造出與周圍環(huán)境相融合的沉浸式體驗。
如果你對第二種方法感興趣,我推薦你查看“創(chuàng)建沉浸式Unity應用程序”?,F(xiàn)在,Peter將介紹一下這些新的蘋果技術如何幫助Unity開發(fā)者將完全沉浸式的VR游戲帶到這個平臺。
Peter:謝謝你,Christopher。首先,我想向你展示來自Against Gravity的《Rec Room》。這是一個流行的VR社交平臺,允許用戶與來自世界各地的人們一起創(chuàng)造內(nèi)容和玩耍。它建立在Unity游戲引擎上,這為游戲開發(fā)提供了一個強大而靈活的平臺。我將向你介紹其中的一些工具和技術,這些工具和技術將使你更容易將自己的VR內(nèi)容帶到這個新平臺,就像《Rec Room》一樣。我將告訴你一些在計劃將你的Unity內(nèi)容帶到這個新平臺時需要注意的事情。
首先,我將介紹你用來將內(nèi)容從Unity部署到設備上的工作流程。還有一些你需要記住的與這個平臺上的圖形有關的事情。最后,我將談談如何將控制器輸入適應于手部輸入,以及Unity提供的一些工具來幫助你完成這一轉變。
建立Unity工作流程
首先,需要有一個構建和運行的工作流程,你應該已經(jīng)熟悉了。我們已經(jīng)在Unity中建立了對這個平臺的全面支持,所以你只需幾個步驟就可以看到你的項目在這個設備上運行。首先是選擇這個平臺的構建目標。然后,像對待其他VR平臺一樣,啟用XR插件。如果你的應用程序依賴于本地插件,它們將需要針對這個平臺重新編譯。另一方面,如果你使用的是原始源代碼或.mm文件,那么你就已經(jīng)可以直接使用了。
圖源:apple
現(xiàn)在從Unity構建將生成一個Xcode項目,就像它為iOS、Mac或Apple TV目標所做的那樣。然后,在Xcode中,你可以構建并運行到設備或設備模擬器上,以加快迭代。用來將某人的周圍環(huán)境轉化為完全沉浸式體驗的圖形管道可能也是你熟悉的內(nèi)容。但是有幾個新的概念是必須要了解的。每個項目在開始時都會做出的一個選擇是使用哪條渲染管道。通用渲染管線是一個理想的選擇,它可以實現(xiàn)這個平臺獨有的一個特殊功能,即注視點渲染(Foveated Rendering)。
注視點渲染是一種技術,它能將更多的像素密度集中在眼睛可能聚焦的每個鏡頭的中心,而在眼睛對細節(jié)不太敏感的屏幕外圍則減少細節(jié)。這將為使用設備的人帶來更高質量的體驗。
當你使用通用渲染管線時,靜態(tài)注視點渲染將被應用于整個管線。而且它將與所有URP功能一起使用,包括后期處理、相機堆疊、HDR等。如果你有定制的渲染通道可以從注視點渲染中受益,Unity 2022中的新API可以利用這項技術。由于現(xiàn)在的渲染是在非線性空間中進行的,所以也有著色器宏來處理這種重映射。利用靜態(tài)注視點渲染的優(yōu)勢意味著你會把資源花在重要的像素上,并產(chǎn)生更高質量的視覺體驗。
在這個平臺上優(yōu)化圖形的另一種方法是使用單通道實例渲染(Single-Pass Instanced Rendering)。在Unity中,單通道實例渲染現(xiàn)在支持Metal圖形API,它將被默認啟用。使用單通道實例渲染,引擎只為雙眼提交一次繪制調(diào)用,并減少了渲染管道的某些部分(如剔除和陰影)的開銷。這就減少了渲染立體場景的CPU開銷。
好消息是,如果你的應用程序已經(jīng)在其他VR平臺上使用單通道實例渲染正確渲染,著色器宏會確保它在蘋果的新平臺中也能工作。還有最后一件事要考慮,即確保你的應用程序能正確地寫入每個像素的深度緩沖區(qū)。系統(tǒng)合成器使用深度緩沖區(qū)進行再投影,只要缺少深度信息,為了進行提示系統(tǒng)就會渲染一個錯誤的顏色。一個例子是天空盒,它通常離用戶無限遠,所以它寫入了一個深度為0的反向Z,這需要修改才能出現(xiàn)在設備上。
我們已經(jīng)修復了Unity的所有著色器,使其向深度緩沖區(qū)寫入正確的值,但如果你有任何自定義的效果,如自定義天空盒,或者水效果或透明效果,應確保每個像素都有一些值能寫入深度。
為Unity應用程序添加交互
現(xiàn)在你已經(jīng)把你的圖形渲染到設備上了,是時候讓它們開始交互了。這個設備上的交互是獨一無二的,人們將使用他們的手和眼睛與內(nèi)容交互。有幾種方法可以讓你在這個平臺上為你的Unity應用程序添加交互。
圖源:apple
XR交互工具包增加了手部追蹤,使你更容易適應現(xiàn)有的項目。你還可以通過Unity輸入系統(tǒng)對內(nèi)置的系統(tǒng)手勢做出反應。你也可以通過Unity Hands Package訪問原始手部關節(jié)數(shù)據(jù),進行自定義交互。
XR交互工具包,也被稱為XRI,提供了一個高水平的交互系統(tǒng)。該工具包旨在使輸入轉化為交互變得容易。它同時適用于3D和UI對象。XRI抽象了輸入的類型,如手部追蹤,并將輸入轉化為你的應用程序可以響應的動作。這意味著你的輸入代碼可以在接受不同類型輸入的平臺上工作。XRI使得在3D空間和3D空間世界的UI中響應常見的交互(如懸停、抓取和選擇等)變得更容易。該工具包還包括一個運動系統(tǒng),因此人們可以更舒適地在一個完全沉浸式的空間中旅行。
當人們與你的世界交互時,視覺反饋對沉浸感很重要。XRI使你能夠為每個輸入約束定義視覺反應。XRI的核心是一套基本的Interactable 和 Interactor組件。Interactable是你的場景中可以接受輸入的對象。你定義Interactor,指定人們?nèi)绾闻c你的Interactor互動。交互管理器將這些組件聯(lián)系在一起,第一步是決定場景中哪些對象可以被交互,以及當這些交互發(fā)生時如何反應。我們通過向對象添加一個可交互的組件來做到這一點。
有三種內(nèi)置類型。Simple交互項可以將對象標記為可以接受交互。你可以用這個組件訂閱SelectEntered或SelectExited等事件。使用Grab交互項,當對象被選中或被抓住時,它將跟隨Interactor走動,并在釋放時繼承其速度。
像Teleport 交互項(如TeleportArea和TeleportAnchor)這樣的傳送互動組件使你能夠為玩家定義傳送的區(qū)域或點。你還可以創(chuàng)建你自己的自定義交互器。交互者負責選擇或與你標記為交互者的對象進行交互。他們定義了一個有可能在每一幀上懸?;蜻x擇的可交互對象的列表。
有幾種類型的交互器,其中Direct Interactor用于選擇接觸到它的可交互對象。當你想知道一個人的手什么時候接觸到可交互的對象,或者他們什么時候接近可交互的對象時,你就會使用該組件。
圖源:apple
Ray Interactor用于從遠處進行交互。這種交互器是高度可配置的,有弧線和直線,以及可定制的可視化效果,以幫助你適應項目的視覺風格。一旦用戶開始交互,你就可以選擇這種互動的方式。例如,如果是抓取互動,你可能想把物體移到用戶的手上。而Ray Interactor可以限制抓取的自由度,以滿足你的游戲需求。
圖源:apple
在完全沉浸式體驗中,一個常見的交互是抓取一個物體并把它放在與該物體相關的某個地方。例如,把電池放在一個插座上。Socket Interactor可以向玩家顯示某個區(qū)域可以接受的一個對象。這些交互器并不附在手上,相反,它們放置在世界的某個地方。通過手部追蹤甚至是控制器,用戶自然想要進行的一種常見的交互類型是戳式(Poke)互動。這類似于Direct Interactor,不同之處在于它包括方向過濾,所以必須執(zhí)行正確的運動才能觸發(fā)交互。
圖源:apple
如果你想讓人們通過觀看進行交互,Gaze Interactor可以為Ray Interactor提供一些擴展,使注視變得更容易處理。例如,Gaze Interactor可以自動地使互動對象的碰撞器變大,這樣他們就更容易被選中。
為了將這一切結合起來,交互管理器會充當交互器和可交互對象之間的中間人,促進交互的交換。它的主要作用是在指定的已注冊交互器和可交互者群體中啟動交互狀態(tài)的變化。通常,建立一個單一的交互管理器,以使所有的交互者都能影響所有的可交互者。另外,也可以利用多個互補的交互管理器,每個管理器都有自己獨特的交互者和可交互者的組合。這些管理器可以被激活或停用,以啟用或停用特定的互動集。例如,你可以在每個場景或菜單中使用一組不同的交互器。
最后,XR控制器組件可以幫助你理解收到的輸入數(shù)據(jù)。它從手或追蹤設備中獲取輸入動作,并將其傳遞給交互者,這樣他們就可以根據(jù)該輸入決定選擇或激活什么。
你需要為每個XR交互狀態(tài)(例如選擇)綁定輸入操作引用。這并不局限于每個手或控制器只能使用一個XR控制器組件,這使我們可以靈活地獨立支持兩個手和控制器。與XRI捆綁在一起的示例代碼向你展示了如何做到這一點。
手勢輸入
除了XRI的高級功能外,你還可以選擇直接使用Unity輸入系統(tǒng)的系統(tǒng)手勢輸入。然后,你可以把平臺的內(nèi)置交互,如輕敲手勢,映射到你自己的交互系統(tǒng)中。你可以使用Unity輸入系統(tǒng)的綁定路徑來訪問和響應這些系統(tǒng)手勢。
例如,捏合手勢在激活時作為一個值出現(xiàn),并帶有位置和旋轉。這些都可以被綁定到輸入動作上。人們將注意力集中在與捏合手勢相同的框架中,具有位置和旋轉。為了獲得更多的靈活性,你可以使用Unity Hands子系統(tǒng),通過Unity Hands Package訪問系統(tǒng)中所有的原始手部關節(jié)數(shù)據(jù)。
Unity Hands Package提供了對低級手部關節(jié)數(shù)據(jù)的訪問,這些數(shù)據(jù)在各個平臺上是一致的。例如,你可以編寫代碼來查看每個關節(jié),并確定該姿勢與某種手勢的接近程度,如豎起大拇指或指向食指,并將這些轉化為游戲動作。這很強大,但由于每個人的手大小不同,而且人們的動作范圍也各不相同,所以要想做對是很有難度的。
這段代碼定義了一個方法,告訴你用戶的食指是否伸出。你可以從OnHandUpdate事件中調(diào)用這個方法,并傳入其中一只手。首先,得到幾個特定的關節(jié)來檢查食指是否伸展。如果其中任何一個無效,它將返回false。如果所有的關節(jié)都有效,做一個簡單的檢查以確保食指沒有彎曲。
你可以把這個邏輯擴展到其他手指,開始實現(xiàn)一些基本的手勢檢測。原始手部關節(jié)數(shù)據(jù)的另一個用途是將其映射到一個自定義的手部網(wǎng)格視覺。這可以幫助使手部更符合你的游戲藝術風格。例如,《Rec Room》使用原始手部關節(jié)數(shù)據(jù)來顯示符合其視覺風格的風格化手部模型。他們還展示了其他玩家的手部模型,以增加沉浸感。
如果你想探索更多關于原始手部關節(jié)的信息,Unity Hands Package有一些示例代碼可以幫助你入門。我很高興看到你的VR體驗來到了這個新的平臺。要獲得更多關于Unity對這個平臺的支持信息,并注冊早期的測試版訪問權,請訪問unity.com/spatial。
Christopher:這些是你可以使用的工具,使用你已經(jīng)熟悉的Unity工作流程為這個新平臺帶來完全沉浸式的VR體驗。
Peter:總而言之,這次演講向你介紹了一些工具和技術,這些工具和技術將使你更容易把自己的VR內(nèi)容帶到這個新平臺,就像《Rec Room》一樣。如果你要開始一個新的項目,請使用Unity 2022或更新的版本。如果你有一個現(xiàn)有的項目,請升級到2022。你需要考慮采用通用渲染管線,雖然支持內(nèi)置的圖形管道,但所有未來的改進都將在通用管道上進行。以及,開始考慮將任何基于控制器的交互適應于手部。你可以從今天開始使用XR交互工具包和Unity Hands Package。
Christopher:最后,要了解更多關于如何使用Unity創(chuàng)建具有Passthrough功能的沉浸式體驗,我推薦查閱“創(chuàng)建沉浸式Unity應用程序”。開發(fā)者們還可以查看“為空間計算建立偉大的游戲”,以了解游戲開發(fā)者在這個平臺上的可能性。
Peter:我們很期待看到你會給這個平臺帶來什么樣的內(nèi)容。
Christopher:謝謝觀看。
來源:apple
投稿/爆料:tougao@youxituoluo.com
稿件/商務合作: 六六(微信 13138755620)
加入行業(yè)交流群:六六(微信 13138755620)
元宇宙數(shù)字產(chǎn)業(yè)服務平臺
下載「陀螺科技」APP,獲取前沿深度元宇宙訊息