發(fā)布時間:2024-01-08 14:00:19 瀏覽量:121次
作者:Jerish,首發(fā)公眾號“游戲開發(fā)那些事”
“角色移動”是大部分游戲的玩法基礎(chǔ)。不過在游戲中,他看起來如此的簡單自然以至于很容易被玩家所忽略掉。實際上,角色的移動涉及到動畫、渲染、物理、同步等多項開發(fā)技術(shù)以及大量的美術(shù)工作。即使單從設(shè)計上講,“角色移動”也經(jīng)常會給開發(fā)者們帶來一些讓人陷入兩難的問題。總而言之,想將角色移動做到完美確實是相當(dāng)困難的。
虛幻5演示的Demo中有一段爬墻的動畫,想做出這種效果其實是非常不容易的
這篇文章會圍繞3D角色的移動,來談?wù)劄槭裁慈绱嘶A(chǔ)的功能卻需要極高的技術(shù)力與細(xì)節(jié)成本?
一、移動原理與常見問題
之前一篇科普文章中曾講述過“游戲角色移動的基本原理”。
游戲世界與真實世界相同,也是一個三維的空間(2D游戲是二維空間),我們游戲中的所有角色,都會在這個三維的世界里面出生、移動、交互直至死亡。除了角色以外,游戲中的其他對象也是如此產(chǎn)生的,比如說建筑、武器、道具等等。他們身上都保存著自己的坐標(biāo)位置,當(dāng)我們在移動我們的角色的時,其實就是在不斷的修改當(dāng)前角色的坐標(biāo)值。
所以想讓一個對象在游戲世界中動起來其實很簡單——改變他的位置即可。
但假如我們控制的是一個人形的角色,只是簡單的修改他的位置是不夠的,我們還需要讓角色走得更自然和真實。換句話說,就是讓角色的移動看起來更貼近真實世界。這里面其實涉及到人體結(jié)構(gòu)、物理受力等很多復(fù)雜的問題,我們很難通過簡單的數(shù)學(xué)模型或物理引擎來達(dá)到期望的效果。因此,目前游戲界通常采用人為制作的動畫的方式來取代真實的物理模擬。
動畫的實現(xiàn)有頂點動畫和骨骼動畫兩種方式,現(xiàn)在普遍采用骨骼動畫來處理角色的移動。骨骼動畫,會將3D模型抽象為一些關(guān)鍵點的集合,這些關(guān)鍵點互相連接成“骨骼”并組成一個完整的骨架結(jié)構(gòu),我們通過改變骨骼的朝向和位置來既可以為模型生成動畫。
由此可見,一個角色的動作是否自然,很大程度上取決于動畫師的設(shè)計。
現(xiàn)在,有了位置以及動畫,角色就可以真正的動起來了。游戲中每一個角色的移動需要有兩個基本的系統(tǒng)共同維護(hù),一個是角色的動畫系統(tǒng),另一個是隱藏在代碼背后的位置計算系統(tǒng)(可以稱為移動組件系統(tǒng))。角色動畫系統(tǒng)負(fù)責(zé)按照時間戳播放其動畫,一般由美術(shù)通過三維建模軟件制作(2D的比較簡單,就是按幀替換圖片,3D一般是骨骼動畫)。將動畫導(dǎo)入到游戲引擎中,就可以看到該角色會不停播放移動的動畫,但是他不會向前產(chǎn)生任何位移。
那么角色是不是就可以完美的動起來了呢?不,噩夢才剛剛開始。首當(dāng)其沖出現(xiàn)的就是一個非常常見的基本問題——“滑步”,滑步產(chǎn)生的根本原因是動畫上的表現(xiàn)與其實際位置的移動距離不匹配(角色一步走10米,看起來像是在滑行)。
解決滑步通常從兩個方面考慮:
第一個方面是針對角色常規(guī)的移動。一般來說,玩家在走路、跑步的過程中速度是有規(guī)律的,要么是勻速、要么是勻加速。這時候可以把移動組件系統(tǒng)應(yīng)用起來,也就是每當(dāng)玩家播放移動動畫的時候通過玩家的狀態(tài)來合理的計算其應(yīng)該走的位移長度并應(yīng)用。這種方式就可以實現(xiàn)通常意義上的角色移動了。也就是說,這些比較有規(guī)律的移動計算可以交給代碼層面去處理,代碼需要仔細(xì)考慮角色所處的狀態(tài)通過合理的數(shù)學(xué)模型去模擬計算位移。
第二個方面是針對比較復(fù)雜的特殊移動。角色如果不是勻速移動也不是勻加速移動,我們的移動組件系統(tǒng)根本沒法算,就算你代碼寫的再好也很難達(dá)到美術(shù)想要的效果。所以我們通常會采用Rootmotion的解決方案,即每一幀的位置交給美術(shù)處理,他們在做動畫的時候把位移信息也寫到動畫里面,我們移動的時候讀取美術(shù)的數(shù)據(jù)就好了。
當(dāng)然,考慮到美術(shù)工作量等問題,我們不能都用rootmotion解決。角色還有一些特殊處理但是又比較通用的狀態(tài),比如轉(zhuǎn)彎、轉(zhuǎn)身、突然停住等,顯然轉(zhuǎn)彎的時候玩家的身體會傾斜、轉(zhuǎn)身時候我們的腳步應(yīng)該逐漸踩過去,突然停住要有一個剎住腳步并恢復(fù)的效果(而不是直接滑過去),這些一般我們使用動畫狀態(tài)機(jī)配合混合空間(Blendspace:可以根據(jù)兩個輸入的動畫來進(jìn)行混合)可以解決大部分問題,不過還是需要美術(shù)制作很多動畫資源。
而狀態(tài)機(jī),和計算機(jī)的FSM(有限狀態(tài)機(jī))概念是相似的。在游戲里面,其實就是我們預(yù)先定義了一些節(jié)點作為角色行為狀態(tài),比如跑,站立,下蹲等。當(dāng)我們按下下蹲按鈕的時候,判斷一下是否滿足某種狀態(tài)切換的條件,滿足的話角色將就會從默認(rèn)狀態(tài)轉(zhuǎn)移到下蹲狀態(tài)。
仔細(xì)觀察,你會發(fā)現(xiàn)很多以前游戲都沒有處理這些細(xì)節(jié),就是因為太過繁瑣。
最近幾年,一個稱為MotionMatch的技術(shù)流行開來,用來解決各種動畫的銜接問題。他的基本原理就是首先制作一個豐富的動畫資源庫,然后在角色移動的時候不斷的根據(jù)當(dāng)前角色的動作與狀態(tài)信息根據(jù)算法從資源庫里面挑選最適合下一幀播放的動畫。育碧的“榮耀戰(zhàn)魂For Honor”就采用了這種技術(shù),同時配合深度學(xué)習(xí)去挑選動作,達(dá)到了非常不錯的效果。不過這項技術(shù)對于小的團(tuán)隊明顯不太適用。也許多年后會出現(xiàn)一套完善的共享開源動作庫,大家都可以體驗到該技術(shù)帶來的便捷了。
https://www.gdcvault.com/play/1023280/Motion-Matching-and-The-Road
好了,如果我們成功解決了上面的這些問題,是不是就可以讓角色愉快的移動了呢?
答案當(dāng)然是NO!下面還有一堆進(jìn)階的問題等著我們解決,而且不同的游戲面對情況截然不同!
二、移動進(jìn)階問題
1.碰撞
一個玩家動起來了,那如果遇到了障礙怎么辦呢,是推著障礙走還是被阻擋住,這其中的標(biāo)準(zhǔn)如何制定?如果撞到了另一個玩家,可以把人頂走么?玩家上樓梯是一級一級上還是平滑著上?玩家在多少度的斜坡上可以走呢?類似的問題數(shù)不勝數(shù),很多都是游戲設(shè)計上的問題。
這些問題大部分可以在物理引擎的支持下,通過射線檢測等方式解決,但是也有一些不好處理的情況。
對于上面的問題,這里簡單給出常見的方案。比較大的物件都會設(shè)置為靜態(tài)的(也就是不會移動的),所以玩家移動時會被擋住,而小的東西玩家可以直接踩過去。至于能否頂走其他玩家,要看游戲的類型而決定。上樓梯我們?yōu)榱吮3謹(jǐn)z像機(jī)的平滑,會把臺階的物理設(shè)置成平滑的。
2.特殊模式
前面說了那么多都只是角色行走,而在游戲中設(shè)計者的思路是天馬行空的,策劃可能想讓角色飛起來、游泳、吊單桿、爬梯子、以及各種逼著牛頓從棺材板出來的反物理行為(如多段跳、輕功)等,那么要如何處理這些移動模式呢?
其實上面的每一種特殊的移動方式,都需要特殊的處理方式,幾乎沒有統(tǒng)一的解決方案。比如爬梯子,為了讓玩家的手能夠與梯子的把手重合,我們需要嚴(yán)格設(shè)置梯子的每隔的間距,并做到與動畫相適應(yīng)。同時,也需要做出一種特殊的移動模式,只當(dāng)角色處于爬梯子狀態(tài)時只能勻速的修改坐標(biāo)的Z值。
簡而言之,特殊模式很復(fù)雜,每一個功能拎出來一個都夠程序和美術(shù)做一陣的。
《尼爾機(jī)械紀(jì)元》2B爬梯子的過程設(shè)計的非常舒適
3.特殊對象
我們控制的角色不一定是人形的角色,還可能是汽車、動物。
對于汽車對象,有一點好處是我們基本不用考慮動畫的適配問題,因為汽車不需要像人一樣揮動四肢,只要輪子動起來就可以了(當(dāng)然像地平線、極品飛車這種3A級別的賽車游戲,車身的動畫也是相當(dāng)復(fù)雜的)。但是我們需要在程序里面比較完美地模擬出其移動的軌跡,這就必須要涉及到物理引擎的使用和優(yōu)化,難度也是相當(dāng)之高。
對于動物,我們需要解決一些骨骼的處理問題,由于人形角色在游戲中使用的比較廣泛,相關(guān)的系統(tǒng)支持的都還算不錯。但是由于動物的骨架結(jié)構(gòu)與人不同,所以我們需要制作新的美術(shù)資源,這也就意味著人形的骨骼資源不能適配到動物上。如果你做了各種結(jié)構(gòu)迥異的生物,那美術(shù)肯定就要被累死了。(所以,仔細(xì)觀察的話你會發(fā)現(xiàn),一個游戲里面很多小怪角色的身體結(jié)構(gòu)都是相似的)
4.多個移動狀態(tài)的銜接
前面提到了角色可能走、跑、唱、跳、飛、游等,當(dāng)你從一個狀態(tài)切換到另一個狀態(tài)時應(yīng)該如何銜接?走著走著突然被車撞飛(有點慘),是應(yīng)該頭著地還是屁股著地?是被撞的一瞬間就切換成飛出去的動畫么?假如你往前翻越一個柵欄的時候被打了一槍,應(yīng)該往前還是往后倒?翻墻的時候能翻越多高多厚的墻體?
有些時候我們可以通過開啟角色的Ragdoll(布娃娃系統(tǒng)),完全交給物理引擎去處理一些移動模擬。但是很多情況下,我們想要玩家能夠控制最后的效果,所以又不能完全交給物理引擎。目前的部分引擎的動畫系統(tǒng)支持基于物理的動畫,我們可以按照固定權(quán)重進(jìn)行物理和動畫的混合,一定程度上減少了美術(shù)的工作量,也可以做到一些更真實的效果。
5.移動同步
前面說了那么多,還只是針對單機(jī)游戲。如果你是網(wǎng)游,那么你的角色動起來的時候應(yīng)該如何告訴其他客戶端怎么動?如果延遲過大造成兩個客戶端的位置或者動畫不一樣怎么辦?在很多游戲中,移動同步是一個相當(dāng)大的難題,因為玩家的位置每一幀都可能在變化。
常見的同步方案有“幀同步”(Lockstep)和“狀態(tài)同步”,也有很多優(yōu)化的方案。
6.其他細(xì)節(jié)
比如關(guān)卡這個地方能不能走,不能走怎么防止玩家過去?(可以采用的空氣墻處理,然而玩家很討厭空氣墻)
能不能兩個人一起走過一個狹小的空間?因為如果一個玩家站在那里,其他玩家過不去可能體驗會很差,所以可能考慮調(diào)整碰撞體大小來讓兩個人可以并排通過。當(dāng)然,這也涉及到關(guān)卡的設(shè)計問題。
走了一半穿模怎么辦?調(diào)整動畫或者碰撞體。
類似的問題還有很多很多,我這里就不再一一列舉了。
三、總結(jié)
總的來說,角色移動不是簡單的與某幾個系統(tǒng)有關(guān),可以說他涉及到了整個Gameplay的大部分設(shè)計邏輯,甚至在一些游戲中,我們認(rèn)為他是游戲的玩法核心也毫不為過。
然而,很多時候,他顯得那么自然以至于很多玩家都將其忽略了。
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點擊咨詢報名。
2. 手機(jī)游戲如何開發(fā)(如何制作傳奇手游,都需要準(zhǔn)備些什么?)
?如何制作傳奇手游,都需要準(zhǔn)備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說明時代在進(jìn)步游戲在更新,更趨于方便化移動化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費、一鍵制作炫酷特效,適合新手小白??靵碓囋嚕?/span>
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇。《天命奇御》具有多線劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟(jì)體系揭秘,不同玩家角色的經(jīng)濟(jì)活動
Bigtime加密游戲經(jīng)濟(jì)模型分析,探討游戲經(jīng)濟(jì)特點,幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動漫建模全過程,不是一般人能學(xué)的會的,會的多不是人?
步驟01:面部,頸部,身體在一起這次我不準(zhǔn)備設(shè)計圖片,我從雕刻進(jìn)入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
7. 3D動畫軟件你知道幾個?3ds Max、Blender、Maya、Houdini大比拼
當(dāng)提到3D動畫軟件或動畫工具時,指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動畫的軟件程序。但是,在3D動畫軟件中還包含了其他類型的...
8. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅固
想讓你的3D打印模型更堅固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計技巧,讓你輕松掌握!
?三昧動漫對于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會推出《巫師4》。因為《巫師》系列在策劃的時候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
10. 如何自己開發(fā)一款游戲(游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧)
?游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧無論您是剛剛起步開發(fā)自己的第一款游戲,還是已經(jīng)制作了幾款游戲,本篇文章中的5大獨立游戲開發(fā)技巧都可以幫助您更好地設(shè)計下一款游戲。無論你對游戲有著什么樣的概念,都
最新文章
同學(xué)您好!