網易高級技術經理申文迪:深度解析《破曉喚龍者》開發經歷與心得

2016 Vision VR/AR亞洲峯會,已於北京時間12月14日正式拉開帷幕,包括VR/AR業界的技術達人、新媒體藝術家、新銳VR導演、VR行業先驅等大咖齊聚一堂,一同探討VR/AR前沿技術與創新應用。當天下午,網易高級技術經理申文迪受邀登臺,分享了Daydream平臺首發遊戲《破曉喚龍者》(Twilight Pioneers)的開發經驗和收穫。據瞭解,這款作品在Vision VR/AR Awards 2017中脫穎而出,獲得亞洲區專家團最高票數的認可。

111

《破曉喚龍者》上線於Google最新推出的Daydream移動VR平臺,採用Unity引擎開發,是一款支持自由移動的第一人稱奇幻寫實風格的VR遊戲。對於非常常見的VR眩暈問題,申文迪介紹團隊發現了三種方案,首先是不要主動控制鏡頭,讓玩家的眼鏡變成攝像機,避免不必要的晃動、眩暈;其次通過好的傳送式移動,減少玩家自身的移動量,從而避免鏡頭的暈動;最後FOV變化也能夠緩解連續移動中的暈動症狀。

以下爲演講實錄:

大家好,我今天分享的主題是Daydream首發遊戲《破曉喚龍者》開發經歷和心得收穫,我特地準備了一段視頻,讓我們先來看一下。

這是一款可以支持自由移動的VR遊戲,今年2月底正式立項。這款遊戲在今年做了首次亮相,於上個月發佈。在遊戲設計之初,我們對於目標羣體進行了分析,我們認爲這是一款移動VR遊戲,其可能面對的潛在用戶羣體相當大,並且在這批用戶中,應該有一批用戶是首次體驗VR遊戲,而我們想給用戶帶來一種進入奇幻世界的新鮮感,並且可以在這個未知的世界中漫遊。因此,我們堅持了一個設計,就是自由移動。但是如果要做自由移動,就會遇到暈動症的問題,這個也是我們必須要想辦法解決的問題。

此外,因爲我們是基於Google最新的Daydream平臺進行製作,Daydream平臺和Gear以及Cardboard最大的不同在於提供了一個三自由度的控制器,而我們肯定要基於這個控制器做一些玩法上的創新以及操作上的嘗試。

但是,因爲這個控制器只提供了三個自由度,即我們只能讀取到這個控制器的姿態角,而無法讀取到控制器的空間座標,所以,如何在這種輸入受限的情況下,能讓玩家也相對自然地在虛擬世界中進行交互,也是我們一直在探索的問題。

最後,當我們能以一種相對舒適、自然地方式體驗我們遊戲的時候,我們就需要面對虛擬現實遊戲和傳統遊戲製作中最大的不同點,如何在虛擬遊戲中講故事。

因爲不同於傳統遊戲,虛擬現實遊戲沒有傳統遊戲的Camera的概念,所以,在無法控制玩家實現的情況下,如何能流暢地將我們的世界觀和故事投放給玩家,讓我們的遊戲流程能順利地進行下去,我們也進行了大量的探索。

今天我就會從這三個方面,來分享一下我們是如何解決這些問題的。

首先是如何讓玩家舒適地在VR世界中自由移動,也就是怎樣和暈動症進行對抗。

先簡單介紹一下暈動症,現在學術界和業界普遍認同的一個說法是,暈動症的產生是由於我們的視覺系統和前庭系統之間的認知不匹配所造成的生理不適,而這種不適感經常用暈車、暈船的感覺來做類比,其實究其產生原因,更像這個(宇航員)。

據NASA的統計,有60%以上的宇航員在首次太空任務時,都會產生太空暈眩症問題。而我們要進行對抗的,就是這個連身體素質比較好的宇航員都難以克服的問題。在我們遊戲開發初期,第一個Demo的時候,我們團隊其實還是一個傳統遊戲開發團隊,我們曾經做過這樣的設計:爲了增強擊敗BOSS的成就感,美術同學設計了一段精彩的斬殺QTE,通過不同的分鏡與鏡頭拉動,來展示這個斬殺過程,我們在編輯器裏面看的時候沒有任何問題,但是當我們把這個QTE輸出到頭顯中,這個體驗幾乎是毀滅性的。我們幾乎都無法站立住,從這個例子,我們得出一個很重要的原則,不要主動控制鏡頭。

所以,在我們傳統遊戲中經常採用的基於鏡頭的敘事方式就不適用了,比如說震屏——千萬不要在VR中震屏;像鏡頭拉動這種敘事方法,也必須要小心謹慎。

並且,在VR設計中有一個務必牢記的鐵律——“玩家眼睛就是攝像機”。

這個結論可能大家覺得太簡單了,但其實在VR設計中,就因爲這個原則太基本了,所以很容易就被我們忽略了,而我們甚至認爲,這個原則應該貫穿於整個設計始終,關於這個結論,我們後面還有個有意思的故事給大家分享。現在繼續回到當前的議題,怎樣移動才能不暈 ,其實,這個問題是有一個解決方案。對,傳送式移動現在是一種業界公認的好的解決方案,很神奇的是,它真的完全不會產生暈動反應

但是請注意,這裏有一個定語——“好的”

傳送式移動本身沒有問題,但是體驗好不好,暈不暈,仍然有很多細節需要處理。

比如,如果傳送的過去的地方是一堵牆,貼着鏡頭,玩家傳過去了一樣會感到生理不適,更甚至穿過了整個場景模型,會顯示BUG,畫面不斷抖動等等問題,那麼這次傳送會是一次極其糟糕的體驗。

所以我們認爲好的傳送式移動,特別注意以下幾點:

選點容易、傳送預覽(能夠清晰地保持自己的位置,不容易在VR空間中迷失)過渡順暢(要讓我們的用戶能注意到這個過程,並且能很快適應這個過程)、目標地點檢測(我們需要保證我們傳送過去的地點,是一個舒適且安全的地方)。

雖然傳送式移動很好,但它並不是萬能藥,因爲有些遊戲是必須有連續移動的,試想一下如何用傳送玩騎馬與砍殺?

在我們遊戲中,傳送式移動只是作爲一個技能存在,可以通過雙擊手柄的觸摸板上對應方向,就往對應方向閃現一段距離,我們會自動計算最遠的可傳送位置,然後用一個快速地模糊效果進行過渡,可傳送範圍比起場景略小一些,這樣來保護用戶不傳送撞牆,傳送式移動在我們遊戲中的主要用途也只是用來躲避敵人攻擊以及大範圍趕路的。對於解密要素,或者戰鬥過程中,都有大量的連續移動需求存在,那這個問題怎麼解決呢?

在今年3月份的3DUI大會上來自哥倫比亞大學Steven Feiner教授團隊,所貢獻的論文獲得了本次大會的Best Paper Award。這篇論文指出,要想減少VR中移動的眩暈感,可以通過縮小用戶的視場來達到這個效果,但是過小的視場會減少VR的沉浸感。所以哥大提出的解決方案是根據運動情況對用戶視場進行動態調節。

看到這篇論文後,我們就參照論文的技術原理進行了嘗試,在速度發生變化的時候適當縮小視場,當速度穩定的時候逐步恢復原視場大小,最終效果也確實很明顯的,在移動改進前後我們進行的UE測試中,絕大部分測試玩家在移動優化後不會產生因爲移動導致的眩暈感。

對於Unity的開發者,還有一個好消息!Google上個月19號告訴我們他們實現了一個叫做tunneling locomotion的技術,並且已經release了一個unity plugin。其原理和哥大的論文一樣,所以,感興趣的同學可以找一下這個Plugin研究一下,可以很簡單地在自己的項目中使用起來。

其實在移動中,還有一種移動不會產生暈動反應,這就是低速移動在《破曉喚龍者》中,我們把低速移動作爲默認方式,這樣可以讓玩家慢慢適應移動。並且,這時我們沒有投放移動教學,在剛進入遊戲的時候,我們用這種移動來代替。爲了保證用戶不暈,我們必須要保證速度足夠低,但這種速度玩家不會喜歡。

在遊戲上線之初,我們經常會搜用戶評論,我們以前也研究過其他的遊戲,有些遊戲甚至需要一把轉椅才能玩。我們發現我們忽略了一個很重要的問題,據玩家用戶特性的報告指出,像移動VR用戶有一個設備使用習慣,他們更希望在一個相對安全且舒適的環境下使用移動VR設備。而這種安全且舒適的環境往往是在客廳、沙發、牀上,在這種地方。因此,如果我們要求用戶有一把轉椅才能玩,這可能是一種無理的行爲。

所以我們了進行迭代,我們最直觀的想法是按住某一個方向,直接轉。但是如果我們真的這樣做了,就違反了我們上面第一個原則,不要主動控制鏡頭,三軸快速轉向。當我們快速轉向的時候,應以當前爲基準,快速旋轉,這樣就真的可以不暈,我們認爲它的原理就和閃現一樣。

至於爲什麼是120度,這個是經過我們實驗的,我們試過90度,手感稍微有點拖沓。 最後的虛擬鼻子我是介紹了一個業界的說法,目前並沒有在我們的遊戲中運用。爲什麼虛擬鼻子能降低暈眩感?因爲在VR世界中,放一個相對固定的參照物,就會極大地減少暈眩感。這並不是一個通用解決方式,我們不可能要求所有遊戲都有一個固定參照物。

普渡大學也提出一個解決方案,也是“鼻子”,其實就是在我們的上面貼了一個鼻子,但卻對我們畫面沒有任何影響,你幾乎注意不到有一個東西在那兒。你看不見,但又真實存在。這個方案我們正在研究,看是否能夠帶來提升,但是如果沒有問題的,這是一個比較優雅的解決方案。

我們做過許多嘗試,我們團隊現在仍然在跟暈動症做對抗。但自產品上線以來,還沒有一個用戶告訴我們有眩暈狀況。其中有一個用戶說:“太奇怪了我既然沒有暈動症反應,這是對我們一個最大的肯定。”

關於暈動症的對抗就暫時分享那麼多,接下來讓我們進入對控制器的探索

Daydream控制器主要部件包括了陀螺儀,磁力計,加速計 。輸入裝置有最上面的觸摸板,中間的APP鍵和下面的Home鍵,側邊還有音量調節按鍵,其中可編程的是觸摸板和APP鍵 。Daydream手柄提供了三自由度,即可以通過API讀取到當前手柄的姿態角參數,而其空間座標是無法獲取的。手柄與手機的連接方式是低功耗藍牙。

其實當我們最開始拿到這個手柄的時候,覺得很爲難,因爲我們認爲在VR中進行交互僅靠三自由度,那麼交互方式就只能以點點畫畫爲主,與其說是一個手柄,其實更像是一個遙控器。所以我們做了一次嘗試,看是否能通過算法來模擬計算手柄的空間位置,經過多次的嘗試與算法的調整,我們最終唯一能確定的是,當我將手柄從這裏移動到那裏,在虛擬空間中,手柄一定不會在這裏,它可能在周圍的任何地方。對此,我們也向Google詢問看是否能提供算法或者支持來達到空間位置模擬,不過答案是“不行”,所以,最開始我們的遊戲中的手柄是這樣的。

在遊戲中我們的手柄是以一把劍的形式存在的,而因爲無法讀取到空間座標,所以我們將劍以劍柄中的某一點爲圓心固定住,劍可以根據控制器的方向做一個剛體轉動,當然這樣體驗並不自然,而我們對控制器使用嘗試的突破,是來自一次意外。

在對施放的迭代中,我們提出了這樣的交互,先按住APP鍵充能,我們手中的劍刃也會同步變色代表進度,當充滿以後,就自動切換成下一段充能,代表另外一個技能,而這個時候,採用特定的觸發方式就能釋放這個技能。當時策劃同學設計了一個類似扔回旋鏢的技能,當充能到這個技能的時候,將手柄用“扔”這個動作發動技能,然後劍就會飛出去轉一圈攻擊敵人,最後回到我們手中。當我們實現了這個技能,我們發現效果很差,因爲劍本來以一種很不自然的形式固定在我們面前,但下一秒種突然飛了出去,感覺很突兀,看起來就像出了個BUG一樣。這時我們的策劃同學提出,能否在這個技能的生效期間,嘗試讓手柄動起來,即使不準確也無所謂,反正用戶馬上就要把劍扔出去,並且劍飛回來的時候正好也可以重置手柄空間位置,也就沒有誤差積累或者位置漂移之類的問題了,我們一想這有道理,於是就在遊戲中實現了手柄的運動。所以,我們最後實現的飛劍效果是這樣的。

在釋放的時候,我們的劍可以稍微有一些位移,當我們把劍扔出去的過程不到0.1秒,有沒有對我們用戶體驗差距是巨大的,當實現了這個技能之後,我們發現我們犯了一個很大的錯誤,我們嚴重地低估了大腦的能力,比如這個手柄我從這裏移到這裏,可能在虛擬世界中,由於誤差手柄纔在這裏,但其實沒有問題,我們大腦會告訴我們“你再移點唄”,我們總會移動到正確的位置。雖然感覺可能有點笨拙,但並不是完全不可行的。這樣做了以後,它會大大地擴寬我們交互的範圍,按照這個思路我們做了更多的嘗試。

我們會召喚出一條神龍,我們會控制神龍飛行軌跡,去攻擊敵人,同時還有別的技能,比如說拉、拔、斬。回顧一下我們對控制器的探索,我們發現有時候在VR設計中的實際狀況比我們單純的理論更復雜。

最後一個議題,如何流暢地在VR中講故事。

其實在VR中講故事是一個很大的議題,而我們的重點在於流暢上面。爲什麼我們要從這個點來切入呢?因爲我們在做一些VR遊戲測試的時候,發現無論什麼背景的玩家,都有可能問到一個問題,“我現在該幹嘛” 並且這個問題會在後續的遊戲進程中再次被提出,“我現在應該幹嘛”,《破曉喚龍者》是一個連續敘事型的遊戲,所以這個問題對於我們來說更加重要。我們分析發現,往往有三個原因:

第一,這個點沒有做引導,或者以前的引導目標不足以維持到現在,他總會迷失。

第二,引導做的不好,比如我寫了一大段字在這裏,但我自己都不知道在寫什麼,用戶更看不懂。

第三,我其實做了一個比較好的引導,但是用戶沒有看見,他看其他地方了,回過頭也沒發現引導。

經過我們大量的嘗試和記錄,最終收穫到一個很重要的經驗,冗餘式引導。因爲我們發現,如果我們設計的引導沒有被玩家看到,那麼玩家就很容易陷入到“我現在該幹嘛?”的狀態中。

要設計一個不會被忽略的引導,我們認爲需要滿足的最低標準是 “一種永久性引導,兩種動態式引導”

雖然這個演示我們用了五種引導方式,但抽離一下,我們認爲最重要的引導是如下三個:第一個閃光的NPC這個永久性引導;加機關發射的第一道光線這個動態式引導,以及解密物件中發射出來的光球這個動態式引導。雖然我們在引導這方面做了那麼多的積累與原則,就像前面說過的一樣,我們很容易就忽略了一個最基本的原則——“用戶眼睛就是攝像機”,讓我們來看一段我們相對不夠好的設計。

這是一位玩家的視頻,是一位大叔,完美地錯過了我們想要投放給他的劇情,但是這位大叔雖然錯過了很多東西,但是由於我們有永久性引導,他仍然可以繼續遊戲下去,不過,就會成一位渾渾噩噩的玩家,他不會知道這個NPC剛剛做了什麼, 也不知道爲啥自己爲啥突然有了強大的力量,這對於敘事這個方面來說是很難接受的。對我們的損害也是非常嚴重的,因爲這樣一種劇情被玩家忽略掉了。

經過對這個例子的反思,我們認爲這種有展示需要的情景,應該採取觸發式引導,讓玩家主動觸發下一步劇情,這樣可以更好地讓玩家的注意力回到我們想要他注意的地方,也讓我們的故事能更完整地傳達給玩家。

這是我今天的分享,感謝Unity給我這個機會分享,也感謝我的團隊,讓我們一起樂在其中,謝謝。