當前位置: 華文問答 > 遊戲

塞爾達傳說:荒野之息的超遠視距是如何實作的?

2020-08-28遊戲

遊戲程式設計師,但並不是做主機遊戲開發的,只能以非常初級的知識來簡單回答下作為拋磚引玉,具體細節和深度的技術還要等大牛來。

1. 比較容易觀察到的是 遊戲裏用了LOD [1] (Level of Detail)和Mipmap [2] 。一個用於3D模型,一個用於貼圖。兩者的原理比較相似,這裏以LOD舉例。

(這裏應該有一張同物體的不同精細度模型的對比圖)

首先制作組會制作出高精度(多邊形數量較多)到低精度(多邊形數量較少)幾個級別的模型。當想要渲染的物體距離攝影機(即玩家視角)很近時,會使用高精度的模型。當物體離攝影機特別特別遠的時候,則用低精度的模型,大致看起來像那麽回事即可。貼圖所用到的Mipmap基本同理

(這裏應該有一張,隨著林克的飛行,面前的地形等發生肉眼可見變化的GIF=> 可以先看下面的影片 )

2. 另外就是一些 細節隱藏

比如 怪物、草、粒子系統、光照 等等。這些在近處看才能分辨出來的細節,離遠之後細節的顯示與否從視覺上來說影響不大,所以開發時候會設定一定距離以外就隱藏 [3]

其實遊戲裏也設定了 物品有效距離 。比如林克打怪掉了把劍,但是如果這時候玩家沒撿,被前面的呀哈哈吸引,然後又看到更遠處有另一只呀哈哈……等走出去很遠時突然想起返回去撿劍時,就會發現劍已經消失了。這個體驗我感覺不少人都應該遇到過吧。

(雖然與題目無關吧,遊戲裏經常出現的最佳化手法還有:物體如果在攝影機對映範圍內則顯示,出了攝影機範圍就被隱藏等等。這個在遊戲裏火把附近轉動攝影機時有時就會註意到。大師之劍那裏好像也容易看到來著,有點記不清了)

速通影片裏,玩家從初始高地直接飛向城堡時候的 畫面停止 ,就是因為來不及載入這些高精度模型和貼圖以及各種細節,而刻意被引擎強制執行的吧。

(這裏應該有一張,因為載入而卡住的GIF)

Update: 沒法傳圖就去油管上錄了段最新的any%速通影片 [4] 的片段。可以看到,

  • 從00:35林克起飛開始,因載入造成的卡頓出現了多次
  • 0:57左右,林克右邊地上的石頭經過了2次模型精度的提升
  • 1:11左右,城堡的附屬模型被載入,之後崖壁的高精度貼圖(謹慎來說還有法線貼圖等)被載入...
  • 最後1:22那個像雪一樣的東西,應該是為了遮蔽低精度模型,或是純粹為了從遠處看城堡時會比較美觀吧。
  • 其實如果仔細觀察的話,林克最初飛到平原的時候就有不少變化的地形,或是突然蹦出個石頭啊、旗桿啊、樹啊之類的。進入加農城堡前的城鎮下面也是多了殘桓等等很多細節。

    3. 這次荒野之息的地圖是由以 宏大地圖而聞名的【異度之刃】開發商Monolith 幫忙制作的,相關介紹可以參考下面的答案。(雖然沒有太多技術細節,但是裏面有技術資料的索引)

    我忘了在哪看過的話了,大概是說異度之刃的制作人高橋當初,為了讓玩家真實感受到自己是在 巨神 機神 2個神的身體上活動,便沒有采用其他遊戲的那種「近處用模型、遠處用貼圖」的手法,而是執念於無論距離遠近,都使用真實的地形的略極端的手段。

    (這裏應該有一張【異度之刃】可以體現巨神的龐大的圖)

    這雖然因為占用了大部份機能,在一定程度上導致了當年【異度之刃1】在wii上的很多畫面效果都較差(比如很多人詬病的人物建模),但是當玩家發現自己走到巨神上半身時還能看到巨神腳的殖民地9時,那種震撼不是簡單的畫面優美就能比較的了。

    其實在【荒野之息】發售時市面上已經有很多開放世界遊戲,分區載入等開放世界相關技術 [5] 也比較成熟了。而就如題目描述所說的," 身處地圖中任意位置都能清晰看到Boss的城堡"這點上,我相信Monolith他們是把開發【異度之刃】積累的3D大地圖制作經驗,活用在【荒野之息】上面了

    這裏建議喜歡荒野之息大地圖的玩家,一定要去試試異度之刃系列~

    擴充套件閱讀 :之前看到過一篇特別幹貨的荒野之息所用引擎的技術分析。雖然和本題無關,但裏面的每個技術點都有GIF演示,作為非開發者也能大致看懂那些技術的效果。如果感興趣可以看看

    (這篇大多是幾年前自己玩荒野之息時註意到的地方,可能不夠嚴謹,有錯的地方請見諒)

    參考

    1. ^https://en.wikipedia.org/wiki/Level_of_detail
    2. ^https://en.wikipedia.org/wiki/Mipmap
    3. ^ 雖然與題目無關吧,遊戲裏經常出現的最佳化手法還有,物體如果在攝影機對映範圍內則顯示,出了攝影機範圍就被隱藏等等
    4. ^https://www.youtube.com/watch?v=xuZtjTmM6F0
    5. ^ 知乎上已經有大牛回答過了,雖然是幾年前的回答了吧 https://www.zhihu.com/question/26538198