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