既然《神秘海域4:盜賊末路》已經(jīng)正式發(fā)布了,那么我可以談?wù)撓略凇渡衩睾S?:盜賊末路》我負責開發(fā)的部分了,我主要負責的部分有單人模式下同伴的人工智能、多人模式下的戰(zhàn)友的人工智能,還有一些游戲邏輯部分。我忽略了沒有在最終游戲中體現(xiàn)出來的那些東西,還有一些零散的工作太過于瑣碎而沒有提及。所以下面就是我要談到的內(nèi)容: 派遣系統(tǒng) 在本文開始之前,我想先談?wù)勎覀冇脕碜孨PC尋找合適位置的派遣系統(tǒng)。這個系統(tǒng)的核心邏輯不是我開發(fā)的,我只是幫助寫了一些客戶端的代碼來調(diào)用這個系統(tǒng)。派遣系統(tǒng)中的位置都是可行走空間中的離散位置,這些位置大部分是用工具自動生成的,也有一些是設(shè)計師手動放置的?;谖覀兊男枨螅覀儎?chuàng)建了不同的派遣系統(tǒng)選擇器,會對可能的位置有不同的評分方案(比如說我們實現(xiàn)的有潛行派遣系統(tǒng)選擇器、戰(zhàn)斗派遣系統(tǒng)選擇器,我們會根據(jù)需求來選擇對應(yīng)的派遣系統(tǒng)選擇器,然后按照這個選擇器對位置進行評分),然后我們會選擇分數(shù)最高的位置,告訴NPC移動過去。 同伴跟隨 同伴跟隨系統(tǒng)是繼承自游戲《最后的生還者》。基本的想法就是同伴會在玩家的周圍去尋找一個位置進行跟隨。這些可能的位置是從玩家位置扇狀分散開的一個區(qū)域,而且必須要滿足以下的線段路徑是否為空的測試: 玩家位置到跟隨點位置之間沒有阻擋 跟隨點到前方的投射點位置之間沒有阻擋 前方投射點位置到玩家位置之間沒有阻擋 出現(xiàn)在《神秘海域4:盜賊末路》的攀爬系統(tǒng)是《最后的生還者》沒有的系統(tǒng)。 為了讓攀爬系統(tǒng)與現(xiàn)有的同伴跟隨系統(tǒng)能夠一起工作,我們添加了攀爬跟隨位置選擇器,它會在玩家攀爬的時候給同伴尋找合適的攀爬位置。 這個系統(tǒng)比我想像中的要復(fù)雜一些。如果只是在玩家沒有攀爬的時候告訴同伴使用常規(guī)的跟隨邏輯而在玩家開始攀爬的時候告訴同伴使用攀爬位置是不行的。如果玩家快速的在攀爬與非攀爬的狀態(tài)之間進行切換,同伴就會跟著 在這兩種狀態(tài)發(fā)生非常嚴重的振蕩。所以我們在同伴的行為選擇上增加了一些滯后,只有當玩家切換到攀爬狀態(tài),并且保持此狀態(tài)移動了一定距離以后,同伴才會切換到攀爬狀態(tài)??偟膩碚f,增加滯后時間是解決行為閃爍振蕩的好辦法。 同伴帶領(lǐng)玩家前進在《神秘海域4:盜賊末路》中的某些特定場景中,我們要讓同伴帶領(lǐng)玩家前進。帶領(lǐng)玩家前進的系統(tǒng)是從《最后的生還者》移植而來的并進行了一定的更新,主要是允許設(shè)計師使用樣條曲線在關(guān)卡中標記他們想讓同伴帶領(lǐng)玩家前進的大致路線。 在一個關(guān)卡有多條引導路線的時候,設(shè)計師要放置多條樣條曲線并使用腳本來切換當前使用哪一條引導路線。 玩家的位置會被投射到樣條曲線上,領(lǐng)導者的參考位置會比玩家的位置往前放一點,而往前放多少的距離是由設(shè)計師調(diào)整的。當領(lǐng)導者的參考位置超過一個被標記為等待點的樣條曲線控制點,同伴會前往下個等待點。如果玩家在走回頭路的話,同伴只有在領(lǐng)導者的參考位置與上一次移動經(jīng)過的最遠等待點相距過遠的情況下,同伴才會走回頭路。這也是利用增加滯后時間來避免行為的閃爍振蕩。 我們也把動態(tài)移動速度調(diào)整的功能整合進同伴帶領(lǐng)玩家前進的系統(tǒng)。根據(jù)同伴和玩家在樣條曲線上之間的距離,“速度平面”會沿著樣條曲線放置。同伴有三種移動模式:走路,跑步,沖刺。根據(jù)玩家撞到的速度平面,玩家的同伴會選擇合適的移動模式來保持他到玩家的距離。設(shè)計師可以根據(jù)他們的想法來打開或者關(guān)閉“速度平面“。此外,玩家同伴的行進動畫速度也會基于他與玩家距離做微調(diào),這樣當切換移動模式的時候,就不會有太突然的速度變化。 我們也把動態(tài)移動速度調(diào)整的功能整合進同伴帶領(lǐng)玩家前進的系統(tǒng)。根據(jù)同伴和玩家在樣條曲線上之間的距離,“速度平面”會沿著樣條曲線放置。同伴有三種移動模式:走路,跑步,沖刺。根據(jù)玩家撞到的速度平面,玩家的同伴會選擇合適的移動模式來保持他到玩家的距離。設(shè)計師可以根據(jù)他們的想法來打開或者關(guān)閉“速度平面“。此外,玩家同伴的行進動畫速度也會基于他與玩家距離做微調(diào),這樣當切換移動模式的 時候,就不會有太突然的速度變化。 同伴的掩體共享 在《最后的生還者》中,玩家和玩家的同伴可以在不離開掩體的情況下讓玩家從玩家同伴身上移動過去。這被稱為掩體共享。 在《最后的生還者》中,喬爾可以伸手按著墻從埃莉和苔絲的身邊走過,這沒有問題,是因為她倆的體型都比喬爾的體型要小。但是我們覺得同樣的動作就不適合身型差不多的內(nèi)特,山姆,蘇利,和埃琳娜。此外,《神秘海域4:盜賊末路》的游戲節(jié)奏比較快,讓內(nèi)特在掩體內(nèi)移動的時候伸手去按著掩體只會讓動作流暢性打折扣。 所以我們決定就只讓玩家的同伴靠緊掩體,而玩家稍微規(guī)避下繞開同伴。 我們在這里使用的邏輯非常的簡單。如果玩家位置往移動方向投射得到的點,落在位于掩體的同伴周圍的一個方框內(nèi),那么同伴就會取消他當前在掩體中的行為,并且會快速向掩體靠緊。 醫(yī)療兵助手在多人模式中醫(yī)療兵助手需要一種與單人模式完全不同的新的行為模式:他們既要救治被擊中的同伴,又要復(fù)制玩家在掩體中的行為。 醫(yī)療兵助手會嘗試復(fù)制玩家在掩體中的行為,并且盡量待在離玩家很近的地方。所以當玩家被擊倒的時候,他們就可以迅速跑過來進行救治。如果周圍有同伴被擊倒的話,只要玩家還沒有被擊倒,那么醫(yī)療兵助手也會過去救治這些被擊倒的同伴。 如果玩家有給醫(yī)療兵助手裝備救援包這個道具,那么醫(yī)療兵助手會在跑到被擊倒的目標進行救治之前朝這個被擊倒的目標丟救援包。救援包的丟擲基本上就是復(fù)用手榴彈的拋物線判空測試邏輯和丟擲動畫,只是我把手榴彈的模型替換成了救援包的模型而已。 在草叢中隱蔽的功能 在隱蔽草叢中蹲行也是《神秘海域4:盜賊末路》才有的新功能。 要實現(xiàn)這個功能,我們需要某種能夠標記場景的手段,這樣的話游戲邏輯才可以判斷玩家是否身處隱蔽草叢中。在一開始,我們想的是通過在Maya中將模型的背面進行標記作為草叢的碰撞表面,但是發(fā)現(xiàn)這么做的話美術(shù)人員和設(shè)計師之間的溝通時間太長,很難頻繁改進關(guān)卡。于是我們決定使用另外一種方法標記隱蔽草叢的區(qū)域。我們在編輯器里面給設(shè)計師添加了一個額外的草叢標記供他們使用,這樣他們就可以直接在導航網(wǎng)格上對他們希望視為草叢的地方進行標記,而且精度還非常高。有了這個額外的信息,我們也可以根據(jù)玩家是否在草叢中隱蔽來對隱蔽的位置進行評分。這對于玩家在草叢隱蔽的時候同伴在移動的情形也特別有用。 感知 因為《神秘海域4:盜賊末路》沒有類似《最后的生還者》聆聽模式的功能,所以我們必須要找另外一種方法,讓玩家有辦法得知附近有敵人臨近的威脅,這樣的話玩家就不會因為敵人位置的不可知而感到迷惑和挫折感。我們利用敵人的感知數(shù)據(jù),加入了有顏色的威脅標示,比如當敵人開始接近玩家的時候我們使用的是白色,當敵人開始對玩家起疑的時候我們使用的是黃色,當敵人已經(jīng)發(fā)現(xiàn)玩家的時候我們使用的是橙色。這些標示會適時地提醒玩家。 另外,我們也會在進行威脅提示的時候播放背景聲音來制造緊張感,當玩家被發(fā)現(xiàn)的時候,則會播放大聲的提示音效, 這些音效的安排和做用跟《最后的生還者》是類似的。 調(diào)查功能 這是游戲在發(fā)布之前我參與的最后一個主要的游戲功能。我在頑皮狗通常不會參加正式會議,但是在游戲發(fā)布之前的最后幾個月,我們一個周會至少有一個會議,一般是由布魯斯·斯特拉尼或者尼爾·查克曼主持的,會議的內(nèi)容會聚焦在游戲的人工智能方面。幾乎每次開完會之后,調(diào)查系統(tǒng)都有需要更動的地方。在游戲的最終版本發(fā)布之前,整個調(diào)查系統(tǒng) 前前后后總共經(jīng)歷了好幾次大改。 會讓敵人起疑并展開調(diào)查的因素有兩種:玩家的存在和尸體。 當敵人起疑了(起疑者),他會找最近的同伴來跟他一起調(diào)查。離起疑點較近的人會成為調(diào)查者,另外一個人則會成為看守者。起疑者可能會是調(diào)查者,也有可能是看守者。針對這兩種場景我們設(shè)置了不同的對話來適應(yīng)這兩種情況(分別是“那邊有異狀,我去看看”與“那邊有異狀,你去看看”)。 為了讓調(diào)查的開始和結(jié)束看起來更加自然,我們會錯開這兩個調(diào)查者的行動和威脅標示時間,所以這兩個調(diào)查者不會在同一時間以一種很機械的方式來執(zhí)行完全相同的操作。 如果引起調(diào)查者懷疑的是一具尸體,調(diào)查者將被提醒玩家的存在并會告訴其他所有人開始搜查玩家,會讓所有人不可逆的離開不知情的狀態(tài)。發(fā)現(xiàn)的尸體也將被凸顯,以便讓玩家知道敵人為什么進入警戒。 在某些難度下,短時間內(nèi)連續(xù)觸發(fā)調(diào)查,會讓敵人的感應(yīng)力變的更加敏銳, 他們會更容易發(fā)現(xiàn)玩家,即使玩家隱蔽在草叢中也一樣。在極端困難模式下,敵人永遠處于敏銳感知狀態(tài)。 對話動作系統(tǒng) 這也是我負責的最后幾個功能之一。對話動作系統(tǒng)負責操控角色在對話的時候?qū)υ挼膬?nèi)容做出一些響應(yīng),比如說像是在對話的時候看著其他人或是做一些手勢。之前在《最后的生還者》開發(fā)的過程中,開發(fā)人員花了好幾個月的時間給游戲中所有的對話用腳本加上了對話時候的注視和手勢。我們可不想再做一次這種苦工。在我開始開發(fā)這個功能之前,我們已經(jīng)有了一些通過手工標注的對話的腳本了,但是我們需要一個默認系統(tǒng)來處理那些沒有被手工標注的對話。動畫師可以通過調(diào)整參數(shù)來改變轉(zhuǎn)頭速度、最大轉(zhuǎn)頭角度、注視時間、轉(zhuǎn)頭的冷卻時間等等。 吉普車動量的維系開發(fā)初期遇到的問題之一,就是馬達加斯加的吉普車駕駛那一關(guān),一旦玩家的吉普車在撞到墻或者敵人的載具之后,玩家的吉普車就很容易旋轉(zhuǎn)并掉速,從而讓玩家遠遠的落在車隊的后面導致整個關(guān)卡失敗。 我使用的解決方法是,當玩家的吉普車撞到墻或者敵方載具的時候會短暫地限制吉普車的角速度以及線性速度方向上的改變。這個簡單的方法相當有效,從此玩家就比較不容易旋轉(zhuǎn)掉速而導致關(guān)卡失敗了。(主要是限制速度方向的變化,不會讓玩家的吉普車旋轉(zhuǎn))。 載具的死亡可駕駛的載具是《神秘海域4:盜賊末路》新引入的一個系統(tǒng)。在這之前,所有的載具都是NPC駕駛并且這些載具是沿著固定軌跡行進的。 我負責的是載具死亡的部分。 有幾種方法都可以摧毀敵人的載具:殺死駕駛載具的敵人、射擊載具并持續(xù)足夠長的時間、開著你的吉普車撞飛敵人的吉普車以及開著你的吉普車撞敵人的吉普車讓它旋轉(zhuǎn)掉速。基于死亡原因的不同,載具死亡系統(tǒng)會選擇載具和乘客的死亡動畫來播放。死亡動畫會與物理引擎控制的布娃娃系統(tǒng)想混合,所以死亡動畫會平滑地過渡到物理引擎模擬的翻車。 當敵方吉普車被撞飛死亡的時候,我們使用的是敵方吉普車在XZ平面上投影的包圍盒和碰撞點來判斷要使用四個撞飛死亡動畫中的哪一個。 至于沖撞使得敵方吉普車旋轉(zhuǎn)掉速的情況,我是拿敵方吉普車與預(yù)設(shè)行進方向之間旋轉(zhuǎn)量的差值來與一個閾值進行比較。如果超出這個閾值,就讓敵方吉普車開始旋轉(zhuǎn)掉速。 載具播放死亡動畫的時候,死亡的載具會有一定的幾率穿透墻壁。我使用了一個球體投射,會將載具如果沒有死亡所在的預(yù)設(shè)位置投射向載具現(xiàn)在的實際位置。如果投射結(jié)果是與墻壁碰撞,則會把載具稍微往墻壁的法向量方向移動一點點微小的量,而這個修正不是在一幀中全部完成,而是會持續(xù)幾幀,主要是為了避免太過劇烈的位移。 我們還制作了一種特殊類型的載具死亡動畫,叫做載具死亡提示。這些死亡提示是可以與周圍環(huán)境進行交互的死亡動畫。動畫師和設(shè)計師在場景中沿著樣條曲線放置好死亡提示,每個死亡提示在載具行進軌道上都有個進入范圍。 當一個載具在死亡提示進入范圍中死亡的時候,就會開始播放對應(yīng)的特殊死亡動畫。 之所以開發(fā)這個功能,主要是實現(xiàn)2015年E3展演示作品中的超帥氣吉普車的死亡動畫。 混色用的貝爾矩陣 我們想要消除攝像機能夠看穿物體內(nèi)部的瑕疵,特別是當攝像機與游戲中的各種植物主要是葉子離得太近的時候。 于是我們決定要讓靠近攝像機的像素淡出,淡出的程度是由物體到攝像機之間的距離決定,通過像素著色器實現(xiàn)。使用半透明像素并不是個好主意,因為非常消耗性能并且葉子的數(shù)量實在是太多了。相反, 我們使用的技巧,是所謂的混色,結(jié)合像素到攝像機的距離以及一個預(yù)先決定的貝爾矩陣的模板,像素的某些部分完全丟棄掉從而創(chuàng)造了透明的幻覺。(有序抖動也是一種常用的半色調(diào)技術(shù)方法,可以說是最簡單的領(lǐng)域處理過程的方法。它是用一個固定大小的閾值矩陣在原始灰度圖像上面一邊“移動”,一邊比較。如果原始圖像中像素的灰度值大于相應(yīng)閾值矩陣中的閾值,那么抖動后該像素的值為白色,否則為黑色)。 拜耳陣列是實現(xiàn)CCD 或CMOS 傳感器拍攝彩色圖像的主要技術(shù)之一。它是一個4×4陣列,由8個綠色、4個藍色和4個紅色像素組成,在將灰度圖形轉(zhuǎn)換為彩色圖片時會以2×2矩陣進行9次運算,最后生成一幅彩色圖形。該陣列于1976年注冊專利。拜耳陣列模擬人眼對色彩的敏感程度,采用1紅2綠1藍的排列方式將灰度信息轉(zhuǎn)換成彩色信息。采用這種技術(shù)的傳感器實際每個像素僅有一種顏色信息,需要利用反馬賽克算法進行插值計算,最終獲得一張圖像。拜耳陣列的問題之一是,在拍攝具有重復(fù)細節(jié)(如紡織品)的畫面時,容易產(chǎn)生彩色干擾信息。該問題是由于其規(guī)則的分布方式而造成的。其具體表現(xiàn)為在畫面中產(chǎn)生難看的色帶,而解決該問題的方法是在傳感器其安裝一塊會將畫面細節(jié)模糊化的AA(或稱低通)濾鏡。 低通濾鏡可以減弱摩爾紋,但同時也降低了相機分辨 率 我們一開始使用的貝爾矩陣是個8×8大小的矩陣,取自維基百科里面。我認為這個矩陣太小,會造成不美觀的帶狀瑕疵。所以我想要使用16×1大小的6的貝爾矩陣,但是網(wǎng)絡(luò)上都找不到相關(guān)的資料。于是我試著用逆向工程找出8×8大小的貝爾矩陣的模式并注意到模式里面存在遞歸性。 光用目測法,我想我應(yīng)該可以直接解出16×16大小的貝爾矩陣,但是我想要讓過程更有趣一點,于是我寫了一個工具,可以生成二的任意次方大小的貝爾矩陣。 切換到16×16大小的貝爾矩陣之后,可以看到對帶狀瑕疵有明顯的改善。 爆炸聲的延遲 在這個問題上我的貢獻很小,但是我還是覺得值得一提。事情發(fā)生在2015年E3(E3游戲展又稱電子娛樂展。是全球電子游戲產(chǎn)業(yè)最大的年度商業(yè)化展覽,也是第三大的游戲大會,由娛樂軟件協(xié)會主辦。展覽只對電子游戲產(chǎn)業(yè)圈內(nèi)人士及記者開放,并且規(guī)定18歲以上才能參觀。一般于每年5月第3周在美國洛杉磯的洛杉磯會展中心舉辦。很多電子游戲的開發(fā)者會在展會上展示他們即將上市的游戲,或者發(fā)布即將面世的硬件產(chǎn)品,其中的1/5是從未向公眾展示過的。大展上面的獨立獎項“游戲批評獎”(Game Critics Awards)從1998年開始,頒發(fā)給E3上面最出風頭的各種游戲。)演示版本的幾個周前,我指出可以同時看到和聽到塔的爆炸是非常不合理的。因為內(nèi)特和蘇麗離塔的距離非常非常的遠,他們應(yīng)該先看到塔的爆炸,稍微晚一點才能聽到塔的爆炸聲。在我指出這個問題之后,美術(shù)團隊就在最終版本的演示作品里面對爆炸聲添加了一小段延遲。 繁體中文版的本地化 直到游戲正式發(fā)布的兩周前我才在游戲中改用繁體中文字幕,我在這里面找到了很多翻譯方面的錯誤。大部分的錯誤都是由于英文直譯成繁體中文,而變成四不像的用語的緣故。我認為我沒有足夠的時間可以單槍匹馬地玩通整個游戲并在同時找出翻譯錯誤。于是我向幾個測試部門的人員請求了幫助,讓他們分章節(jié)地玩繁體中文版本的《神秘海域4:盜賊末路》,然后我再瀏覽錄下來的他們玩繁體中文版本的視頻,事實證明這個方法非常有效率。我成功的記錄下了我找到的所有翻譯錯誤,而本地化小組也有足夠的時間在游戲最終發(fā)布之前來修正這些翻譯。 就這么多內(nèi)容了 以上就是我在開發(fā)《神秘海域4:盜賊末路》的過程中值得一提的貢獻。 希望你能喜歡閱讀這篇文章。:) 作者的簡介 我是供職于頑皮狗的一個游戲程序員,對以下這些游戲開發(fā)內(nèi)容比較有經(jīng)驗:基于限制的剛體物體、計算機圖形渲染、程序動畫、視覺反饋設(shè)計、游戲人工智能和游戲邏輯方面的編程。 近期熱文: 騰訊游戲開發(fā)者平臺長按,識別二維碼,加關(guān)注 經(jīng)驗分享丨項目實踐 項目孵化丨渠道發(fā)行 做有夢想的游戲人 -GAME AND DREAM- |
|
來自: zyhgame616 > 《待分類》