聊聊《最後生還者 第二章》的動作系統_風聞
观察者网用户_228361-2018-07-08 17:04
作者:Jame945(機核)
搬運國外各廠大佬對頑皮狗動作系統的深入研究!
因為考慮到絕大多數人看不懂,我修改了整體的描述,會以大白話的形式表達一下內容!
必讀:
“動作”統一稱作“動畫”(動畫更具體,動作不具體)
“姿勢”指的是“動作”
“混合器”指的是動畫與動畫之間匹配結合
“權重”指的是最佳或者優先級最高
“昂貴”指的的是高級或者實現起來特別吃機能
“廉價”指的是低端或者不那麼複雜好實現的
早期的遊戲引擎是沒有包含動畫編輯器的。需要單獨的動畫引擎。目前的成熟的商用引擎都整合了地形/建築/動作/特效/Ai/物理。(不過現在還有的公司還沒整合明白!)

實時動畫提示和技巧
Joakim Hagdahl @RH_Hagdahl多年來積累的提示和技巧:
你應該匹配姿勢
遊戲動畫的一大挑戰是如何從一個動畫轉換到另一個動畫。您是否創建了更多過渡動畫並將其添加到狀態機?你能讓你的混合長一點嗎?您是否為每個可能混合在一起的動畫添加同步點標記?您是否實現,基於關節目標朝向變化速度和其他動作的混合過渡?您是否實現了動作匹配並且創建了龐大的動捕數據庫?
您可以做一件實際上並不太複雜或昂貴(高級)的事情,您可以立即使用它來替換可能存在標記問題的同步標記點。

向前移動
開始動畫通過姿勢匹配轉換為循環。這是一個理想的情況,這是動畫師通常製作的情況,除非你想在右腳或左腳動畫結束前做進一步的動畫,否則通常不需要姿勢匹配。
姿勢匹配
姿勢匹配指的是檢查兩個姿勢的相似性和計算優先級。如果將此姿勢匹配計算應用於搜索,則可以在動畫中找到最佳姿勢,並根據該姿勢更改要混合的動畫的開始時間。如果您將姿勢匹配基於最後一幀中,角色的實際輸出姿勢,就可以找到與當前混合姿勢最接近的匹配動畫。
我們完成姿勢匹配計算的方法是通過計算幾個關節的位置差和速度差,其權重優先考慮位置差。當您需要更好的銜接上下姿勢匹配時,還可以計算旋轉速度以改善此匹配並添加更多關節動作。

改變方向
旋轉移動方向開始變得更難,因為動畫的開始與向前奔跑移動不同,因此姿勢匹配能夠更好的幫助動畫師。
動畫處理
(Naughty Dog自己引擎不是商用的所以無法得知細節,這裏拿Epic的Unreal4引擎做解讀。)
在遊戲動畫引擎中,某些操作需要導入動畫時運行。這些姿勢會以正確的旋轉方式糾正根節點錯誤還將進行重新定位,並且減少每個動畫師無法實現所想的遺憾。以上這些操作在早期的動畫引擎中進行了硬編碼,因為開發者他們想要在遊戲裏實現流暢的動畫只能通過引擎預渲染這些動畫。
Epic去年實現了一個功能,他們將虛擬引擎稱為動畫修改器,這是一個能夠編輯實時動畫的系統。您可以更改代碼,以便它在重新導入時運行。這樣,每當動畫師改變動畫時,修改器將會重新處理。
動畫修改器基本上是在動畫序列上運行的藍圖,它們可以調用您想要的任何類型的代碼並對原始動畫數據進行處理。您可以創建動畫原數據,生成同步點,您可以預先計算關節速度和旋轉速度的曲線,您可以添加動畫通知,還可以將新的原始數據軌跡寫入關節(如果將此代碼添加到Unreal中)。

奔跑停止後關節動作
實施姿勢匹配
我們實現姿勢匹配的方式是添加一個動畫修改器,在所選動畫序列上創建姿勢匹配動畫元數據。
此動畫修改器能夠將動畫逐幀進行修改,並計算幾個關節的組件空間變換及其速度。我們的動畫修改器將作用到左腳和右腳關節以及臀部。這實質上意味着我們正試圖找到通常適用於運動的動畫階段。
在我們的動畫序列和混合空間中,我們有一個函數,我們可以選擇在動畫啓動時進行姿勢匹配。這將在動畫序列中搜索最佳姿勢匹配,並將開始時就設置為該匹配。在混合空間中,它首先查找具有最高權重的動畫並計算該動畫的開始時間,然後同步以確保混合空間中的其餘動畫能夠在正確的時間出現。

閃避後移動無延遲
如何使用它
最簡單的姿勢匹配應用是,將其用作循環動畫的開始時間。在循環動畫中,它們將從哪裏開始並不重要,因為它們只是循環,並且如果動畫是循環運動的,則是最完美的姿勢匹配。
通過姿勢匹配,您可以創作每個方向的動畫,並且你可以讓動畫師把運動的腿腳以不同姿勢結束,並依靠姿勢匹配來找到運動動畫中的最佳姿勢。
用於轉換成遊戲動畫,如閃避/擲骰/攻擊/跳躍/等。姿勢匹配將自動找到最佳姿勢進入運動,因為這樣對於響應性和動作感覺很重要,你可以讓設計師調整那些分支窗口,你可以依靠姿勢匹配來做出讓別人看起來很棒的動畫(假設它們分支時角色是自立的)。

跳躍落地後,手因為慣性自動撐一下地面
超越的一步
姿勢匹配的另一個案例是轉換為腳本的時候。在上面的運動循環案例中,姿勢匹配尋找的是整個動畫庫。對於製作腳本時,您將在動畫的入口部分進行搜索,您可以直接跳到角色匹配的動畫部分。
除此之外的第二步是獲得可能的動畫列表,並在所有這些動畫中搜索最佳匹配姿勢並選擇播放該動畫。這可以輸入,觸發,啓動動畫等。
如果遊戲正在進行近戰格鬥部分,那麼你可以用姿勢匹配來擴展選擇,這樣它就可以檢測手的位置,你做出一個攻擊動作,接下來姿勢匹配就會找出最接近起手動作的下一個動作作為銜接,一直匹配到停止攻擊,最後會以一個結束動作做收尾。需要設置一個攻擊動作序列。
如果你想做的更好,而不僅僅是從已有匹配動畫列表中選擇。你接下來可以做到以下這一點,即便在翻滾狀態下你有一些不同的翻滾姿勢(需要擴充相應動畫),當你激活一個布娃娃系統,然後姿勢匹配搜索最佳姿勢,因為角色是在翻滾的狀態下。這將使得布娃娃系統不斷處於動態,動態的地形或物理碰撞測試翻滾最佳的方法!
需要代碼
·姿勢匹配動畫修改器
·姿勢匹配搜索功能用於動畫的開始
·Pose Matching數據庫選擇器代碼

我們看一組動作圖
這組動圖來自GDC開發者大會技術講座,用以演示不同情況下的動作狀態。

預先捕捉的動作
動捕後導入動作庫中,實際受到物體碰撞後產生的物理效果。

受到單次物理碰撞

動作捕捉01
受到物理碰撞或擠壓後根據受力方向做出相應動作(自動調取動作庫相近的動作)隨後根據Joystick的控制方向做出相應的動作。

連續受到物理碰撞(力反饋)

動作捕捉 02
《The Last of Us: Part II》中展現的物理碰撞。

The Last of Us: Part II中的物理碰撞
Naughty Dog在GDC(開發者大會)的技術演講
視頻內容太長了,我就取其精華:打擊感的表現。

拳頭力量的衝擊力
攻擊動作是向設定好的攻擊點做出動作,這樣的處理手法會給人拳拳到肉的感覺,畢竟一個動作的“打擊感”是需要和一個物體互動,在出拳擊中目標,拳頭或武器會做出擊打到物體表面的停頓也就是卡肉。但是受力的Ai會在一定距離內,做出相對應的被打擊反饋動作,有的時候可能都沒完全觸及表面,因為速度快和電影鏡頭的把握。能讓玩家覺得我真的打到的感覺,加上鏡頭抖動和聲效特效增加的視覺,聽覺效果。“打擊感”就這樣呈現出來了。有的會通過手柄的震動來提高這一感受!如果一個物體沒有做出相對應的反饋或者根本沒有接觸到物體表面的反饋,這樣的打擊反饋是不紮實的。

力反饋
攻擊敵對Ai最後一下取決於目標是否依靠物體,如果是依靠物體那麼他最後的終結動作是統一的。只是最後一下的動作會依據依靠物體的高低判斷起手的方向!

依靠物體連續攻擊的終結技
連續攻擊下回判斷是否依靠物體做出動作篩選(動作數據庫)選着最接近的動作,作為銜接動作。依靠不同高低大小的物體最後一下的終結時相同的,只是方向不同!

兩個不同依靠的物體艾莉的攻擊動作

扔出天下
艾莉用板磚砸暈敵對Ai造成的硬直,使用蝴蝶刀跳起攻擊(因為身高差)起手第一下,認真看蝴蝶刀是吸附到到Ai脖子上的。後續的連續攻擊時匹配數據庫中最接近的攻擊動作作為銜接。

蝴蝶刀命中的第一下是吸附上去的
這裏喬爾把Ai或玩家推到牆面後處決動作是在起手攻擊後最後一下判斷是否依靠牆面,而牆面的距離判定過遠就不會觸發該動作,如果在5步以內(包括5步)就會根據推搖桿的方向來觸發這個動作。會把Ai吸到相應牆面或物體上,沒錯就是吸過去。因為鏡頭始終在玩家背後,加上電影鏡頭的表現,再觸發推牆動作的時候不會覺得很不自然

喬爾把Ai推向牆面
下面的圖可以看出喬爾觸發這個動作的時候是吸過去的(對應方向)。

吸過去了
敵人Ai和喬爾的攻擊動作系統是一致的,也就是喬爾能打出什麼動作Ai也可以打出一模一樣的動作(只是ND限制了Ai動作幾率)喬爾可以用的劫持動作,Ai也可以趁你不注意劫持你。只是玩家不會這麼傻,導致這個劫持動作Ai幾乎用不到,人多例外。

相同的動作庫
最後生還者:第二幕,艾莉的動作庫也是和敵對Ai是一樣的,換句話説玩家和Ai的動作享用同一個動作庫
可能你未發現的動作(反擊與閃避)
下面這個連續的動作估計很少人能觸發吧。是反擊動作,在你連打的時候 ,敵方閃避,這時按△ 三角觸發反擊(一定的反應速度,沒有提示),有武器的時候是用武器擋,空手時是將對方推開。很多動作是在很苛刻的條件下才能攻擊出發,也就是很多人説這個動作我怎麼沒見過。或者在發售後是不是刪除了,遊戲難度有關係,簡單難度下敵人基本無雙,連續多變的動作基本用不到。然而困難或絕地難度下這些動作就會被慢慢發現,因為絕地難度下物質匱乏,主角脆皮很容易死,一般都會忽略這些動作。所以取而代之的是猥瑣流或者看視頻攻略,這樣就缺少了探索新東西的可能性,從而忽略了這些動作。

連續攻擊和反擊!
連續閃避動作

閃避

喬爾簡直就是……我喜歡!

結語
科技日新月異,技術的發展都是有根據的,也不用大驚小怪的去懷疑。在未來的演示中,也許還有更高級的Ai系統和更真實自然。甚至到達真人反應的動作系統的存在,可能只是因為目前的硬件技術沒有跟上呢?E3 demo展示是經過特意的安排與指定的路線去實現的,畫面肯定會調整(比如去掉一點特效提高一下貼圖)這個不用懷疑,但我相信頑皮狗能實現的大部分內容,將會和他們承諾的一樣。
