一、動畫的基本概念
1、幀
在古代,一幅字畫叫一幀,而在計算機中,每次渲染完畢一幅畫面并顯示出來,這一幅畫就是一幀。
連續(xù)切換的幀就形成了動態(tài)的畫面。每秒刷新幀的次數(shù)稱為頻率,單位是FPS(Frames Per Second,幀/秒),也可以簡稱為"幀"。傳統(tǒng)電影每秒顯示24幀就可以保證良好的動態(tài)效果。由于游戲與電影顯示原理的不同,游戲至少需要30幀才能感到流暢,而要保證良好的視覺體驗則最好是60幀。在電子競技領(lǐng)域中,也會追求更高的幀率,以獲得比賽中的優(yōu)勢。
我們普遍希望幀率盡可能穩(wěn)定,但在游戲運行過程中,設(shè)備不一定能維持穩(wěn)定的幀率。當(dāng)運算負載較高時,Unity就會降低畫面和邏輯的更新次數(shù)
2、幀動畫
幀動畫是最古老、也是最容易理解的一種動畫技術(shù)。它是事先準備好動畫中的每一幀畫面,然后依次播放。
? ? ?
?優(yōu)點:簡單直接、技術(shù)門檻低,美術(shù)設(shè)計師在一定范圍內(nèi)可以自由發(fā)揮
缺點:美術(shù)制作的工作量較大,占用的存儲空間也大(每一幀都需要完整保存),目前主要用于2D游戲
3、3D骨骼動畫
早期的3D動畫是由設(shè)計師編輯模型各部分的位置、旋轉(zhuǎn)等,直接制作出動作。這有點類似于橡皮泥手工動畫,要讓人物走路就要不斷調(diào)整頭、身體、手臂、和腿等各個部分的位置,這導(dǎo)致最初的3D動畫工作量大,而且很難做出真實的人類動作。
隨著技術(shù)的發(fā)展,出現(xiàn)了"骨骼動畫"這一技術(shù)。骨骼動畫思想簡單來說,是將人物模型與一個類似火柴棍組成的骨架綁定在一起,每一段火柴棍(骨骼)關(guān)聯(lián)著模型的一部分,這樣只需要移動和旋轉(zhuǎn)骨架,人物就會跟著做出各種動作了。這一技術(shù)不僅節(jié)省了工作量,而且動作效果也更加自然。
另外,同一套骨骼數(shù)據(jù)可以應(yīng)用于體型相近的不同角色模型上這樣就可以批量地制作更多的角色。實踐中甚至可以將一套骨骼和動畫適配到另一套不同的骨骼模型上,這稱為"重定向"。
Unity對3D動畫、3D骨骼動畫君哦與較好的支持,如FBX文件(一種常用的3D模型和動畫文件格式)。
在Project窗口中選定FBX文件,,可以在Inspector窗口內(nèi)看到導(dǎo)入設(shè)置,導(dǎo)入設(shè)置具有Model(模型)、Rig(骨骼綁定)、Animation(動畫)、和Materials(材質(zhì))4個選項。其中的Rig選項中,可以選擇的動畫類型為None(無骨骼)、Legacy(舊版系統(tǒng))、Generic(通用型)、和Humanoid(人形),目前主要使用后兩者。如果是人形骨骼模型,則選擇Humaniod,在其他情況下(沒有骨骼或不是人形角色)都可以選擇Generic選項。Unity對常用的人形骨骼有優(yōu)化,功能更多,使用也更方便。
4、2D骨骼動畫
隨著骨骼動畫的發(fā)展,人們發(fā)現(xiàn)2D動畫其實也可以借用骨骼動畫技術(shù)。思路是將2D角色身體的各個部分切割開,做成獨立的圖片,然后綁定一個2D的"火柴"組成的骨骼,通過調(diào)整骨骼,也可以讓2D角色活靈活現(xiàn)地動起來。這樣可以提高效率和資源利用率。
目前Unity對2D骨骼動畫也有較好的支持,可以借助官方擴展包2D Animation直接制作2D骨骼動畫,也可以使用更專業(yè)的2D骨骼動畫軟件,如Spine和Dragonbones借助相關(guān)插件導(dǎo)入Unity中使用
二、動畫融合
3D骨骼動畫和2D骨骼動畫都有一個共同的特點:動作被抽象畫、數(shù)據(jù)化了,計算機能夠表示幀與幀之間的聯(lián)系,甚至能夠計算出兩幀之間的過渡狀態(tài)。動畫設(shè)計師只需要制定一個動作中的關(guān)鍵幾個幀(關(guān)鍵幀),其他的幀(過渡幀)可以利用數(shù)學(xué)算法進行插值計算(線性插值或其他插值算法)。
以此類推,不僅同一個動作的各個關(guān)鍵幀之間可以自動計算過渡幀,而且不同動作之間也可以計算過渡幀。再進一步,如果動畫設(shè)計師提供了"慢走"和"快跑"兩個動作,甚至還可以通過插值計算出慢跑、中蘇跑等更多介于慢跑和快爬之間的動作。這種在不同動作之間自動計算過渡狀態(tài)的技術(shù)稱為"動畫融合"。
Unity對動畫融合有很好的支持,在動畫狀態(tài)機中有專用的融合樹(Blend Tree),它支持一個或兩個維度的動畫融合。"兩個維度"指的是兩種運動方式,如常用的"轉(zhuǎn)身"和"前進"就是兩個維度,利用Blend Tree可以混合出慢走并快速左轉(zhuǎn),或者快走并慢速右轉(zhuǎn)等不計其數(shù)的動作。
??:在幀動畫中,每一幀都是相對獨立的。幀動畫的數(shù)據(jù)沒有抽象畫、數(shù)據(jù)化,就不肯能進行動畫融合。因此,如果采用幀動畫,就不用考慮動畫融合。
三、動畫狀態(tài)機
目前,幾乎所有的Unity游戲在制作動畫時都要用到動畫狀態(tài)機(Animator),動畫狀態(tài)機目前已經(jīng)是游戲開發(fā)的標(biāo)準配置。
但是,理論上來說動畫狀態(tài)機并不是必須的。特別是對采用幀動畫制作的游戲來說,幀動畫本質(zhì)就是圖片的切換,那么只要及時切換圖片,自然就能正常播放動畫。因此,用腳本直接修改圖片也并無不可,比一定非要使用動畫狀態(tài)機。
只是在實際游戲開發(fā)中,利用動畫狀態(tài)機可以統(tǒng)一動畫制作思路,包括2D動畫、3D動畫、骨骼動畫和動畫融合等。因此,Unity逐漸摒棄了其他的動畫管理方法而統(tǒng)一用動畫狀態(tài)機組件管理所有動畫。
理解動畫狀態(tài)機
要理解使用"動畫狀態(tài)機"的必要性,必須思考一個問題:假設(shè)有站立、下蹲、走/跑和跳躍4種動畫,那如何變成來描述動畫狀態(tài),以便在不同的動畫之間切換?其初步思考結(jié)論如下:
- 在地面上速度為0時,站立。這是默認動畫
- 在站立狀態(tài)下速度大于0,切換為走或跑的動畫,根據(jù)移動速度幀切換速度。
- 在站里狀態(tài)下跳躍,切換為跳躍動畫
- 在走/跑狀態(tài)下跳躍,也切換為跳躍動畫
- 在跳躍狀態(tài)下落地,切換為站立動畫。如果速度部位0,站立動畫會立即切換到走/跑動畫
- 在站立狀態(tài)下下蹲,切換為下蹲動畫
- 在下蹲狀態(tài)下站立,切換為站立動畫
以此類推,逐個分析清楚每一個動畫狀體及轉(zhuǎn)移條件,就可以得出動畫切換的思路。"思路"有一種明顯的模式:當(dāng)前處于某個狀態(tài),如果發(fā)生某件事,就切換到另一個狀態(tài)。
這種思路在編程中極其有用,有一個專門的名稱——狀態(tài)機(State Machine)。雖然本文是在動畫系統(tǒng)中初次提到狀態(tài)機,但實際上狀態(tài)機的應(yīng)用非常廣泛,包括在游戲邏輯框架和AI系統(tǒng)中都經(jīng)常能用到。大學(xué)生第一次了解到通常是在學(xué)習(xí)計算機網(wǎng)絡(luò)時。
狀體??在任意時刻都具有一個"當(dāng)前狀態(tài)",并且默認會保持著一狀態(tài),只有在滿足某個條件時,才會切換到另一個狀態(tài)。也就是說,狀態(tài)機有兩個要素:狀態(tài)和狀態(tài)轉(zhuǎn)移。
用腳本直接實現(xiàn)狀態(tài)機,只需要用一個變量保存當(dāng)前狀態(tài),根據(jù)游戲邏輯切換狀態(tài)即可。而對于動畫系統(tǒng)來說,將狀態(tài)??思想應(yīng)用于管理動畫狀態(tài)極為合適,具有嗯好的通用型。Unity所提供的動畫狀態(tài)機組件,就是專門用來管理動畫狀態(tài),以及動畫之間的切換和過渡的。
四、根骨骼動畫
讓邏輯系統(tǒng)控制角色的運動,而動畫系統(tǒng)只是單純地做表現(xiàn),但從技術(shù)角度看,這種方式比較簡單,也不容易出bug。但隨著3D游戲的不斷發(fā)展,有一個問題一直困擾著游戲設(shè)計師——角色的動畫與移動速度很難匹配。
以跑步為例,如果動畫快一些,實際移動慢一些,會感覺角色在走"太空步";如果動畫慢一些,實際移動快一些,就會感覺角色在"飄"。雖然理論上來說總能找到一個合適的參數(shù)。讓移動速度能夠完美地與動畫配合,讓角色走的更真實,但實際上要做到這一點并不容易。
而且,現(xiàn)代游戲具有攀爬、斬擊、移動射擊和沖刺等越來越多逼真的動作,讓動畫與移動配合的問題變得更加復(fù)雜。要想徹底解決這一問題,只能讓動畫設(shè)計師直接控制角色的移動。
Animator的應(yīng)用根骨骼動畫(Apply Root Motion)選項就是為了解決這一問題而存在的,勾選它意味著開啟跟骨骼動畫功能,物體會根據(jù)動畫自帶的位移改變自身的位置。而這個位移度是由動畫設(shè)計師決定的(直接記錄在動畫中),而非程序控制的。
但是開啟根骨骼動畫功能需要以下三個條件,缺一不可:
- 動畫在制作時,本來就帶有位移信息
- 導(dǎo)入動畫文件時,正確導(dǎo)入了根骨骼動畫信息
- Animaotr中勾選了Apply Root Motion選項
對于使用了根骨骼動畫的游戲來說,角色控制器編寫思路也會發(fā)生變化。由于通過控制動畫狀態(tài)機就能控制角色的移動,那么直接移動角色位置的代碼就需要刪除或做出修改
?文章來源地址http://www.zghlxwxcb.cn/news/detail-462272.html文章來源:http://www.zghlxwxcb.cn/news/detail-462272.html
?
到了這里,關(guān)于Unity 動畫系統(tǒng)基本概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!