當前位置:首頁(yè) > 新聞資訊 > 動(dòng)畫(huà)知識
動(dòng)畫(huà)知識發(fā)布人:admin 發(fā)布時(shí)間:2021-08-18 10:27:21
動(dòng)畫(huà)控制了整個(gè)游戲角色戰斗的節奏,聲音、特效、鏡頭等表現元素要和位移做好匹配,才能有好的表現效果;游戲中有大量的A類(lèi)和B類(lèi)劇情動(dòng)畫(huà),動(dòng)畫(huà)數據占據了游戲中很大一部分的運行時(shí)內存和計算消耗……動(dòng)畫(huà)貫穿了游戲開(kāi)發(fā)的方方面面,所以,學(xué)好動(dòng)畫(huà)的相關(guān)知識對游戲開(kāi)發(fā)非常重要。
01 骨骼蒙皮動(dòng)畫(huà)
3D動(dòng)畫(huà)主要有幾種動(dòng)畫(huà)技術(shù):第一種是剛體層級動(dòng)畫(huà),它的特點(diǎn)是連接處有折斷、不自然,是適合機器人的動(dòng)畫(huà);第二種是頂點(diǎn)動(dòng)畫(huà),即在每一個(gè)關(guān)鍵幀改變頂點(diǎn)的位置,它的特點(diǎn)是效果棒、數據爆炸、工作量大;第三種是骨骼蒙皮動(dòng)畫(huà),它可以解決前兩種動(dòng)畫(huà)技術(shù)的缺點(diǎn)。首先介紹一下骨骼蒙皮動(dòng)畫(huà)的幾個(gè)概念。
骨架:在生物學(xué)中,骨架是由一系列關(guān)節以樹(shù)狀結構組織而成,關(guān)節就是下圖中藍色球的部分,而關(guān)節之間的連接,即圖中紅色部分,稱(chēng)為骨骼。而在游戲動(dòng)畫(huà)領(lǐng)域,骨骼就是指關(guān)節,而關(guān)節之間的連接是沒(méi)有意義的。
姿勢:姿勢就是骨骼的形態(tài),它描述了骨骼當前的位置。
蒙皮:在游戲里是看不到骨骼的,骨骼只是一個(gè)邏輯數據,玩家看到的是渲染的皮膚,也就是蒙皮之后的形象。蒙皮就是把皮膚綁定到骨骼上的過(guò)程,綁定好之后,皮膚才能隨著(zhù)骨骼的運動(dòng)而運動(dòng)。
動(dòng)畫(huà)數據:在動(dòng)畫(huà)內容制作時(shí),動(dòng)畫(huà)師只會(huì )做關(guān)鍵幀的數據,其余的部分都是通過(guò)插值來(lái)完成,通過(guò)插值可以取得任意點(diǎn)的姿勢。電影里的動(dòng)畫(huà)是以固定幀率來(lái)播放,并不需要插值,而游戲里面,它的幀率會(huì )隨時(shí)發(fā)生改變,會(huì )隨著(zhù)當前一幀需要計算的內容變多而變少,所以中間狀態(tài)都需要插值算法來(lái)完成。
那么,為什么骨骼蒙皮動(dòng)畫(huà)可以解決掉剛體層級動(dòng)畫(huà)和頂點(diǎn)動(dòng)畫(huà)的缺點(diǎn)?首先,游戲在啟動(dòng)時(shí),需要去讀取骨骼的層級數據、動(dòng)畫(huà)數據、帶有蒙皮的網(wǎng)格數據;在運行時(shí),會(huì )根據時(shí)間從動(dòng)畫(huà)數據中算出骨骼的位置,再根據當前骨骼的位置和蒙皮信息計算出網(wǎng)格頂點(diǎn)信息,最后根據網(wǎng)格信息和材質(zhì)渲染出角色。
骨骼動(dòng)畫(huà)的頂點(diǎn)是受多根骨骼影響的,關(guān)節處的皮膚會(huì )由多根骨骼拉伸而變形,這個(gè)變形和拉伸是符合規律的,所以它不會(huì )產(chǎn)生折斷。另外骨骼動(dòng)畫(huà)數據產(chǎn)生的方式是改變骨骼的位置,而不是改變頂點(diǎn)的位置,我們一個(gè)人一般會(huì )有幾十上百根骨骼,我們去改變這些骨骼的位置,比直接改變幾千乃至幾萬(wàn)個(gè)頂點(diǎn)的數據量要小非常多,這個(gè)對動(dòng)畫(huà)師來(lái)說(shuō),需要做的工作同樣也會(huì )小很多,正是這些特點(diǎn)使得骨骼蒙皮動(dòng)畫(huà),成為當前游戲開(kāi)發(fā)中應用最多的一種動(dòng)畫(huà)技術(shù)。
02 動(dòng)畫(huà)是如何流轉的
動(dòng)畫(huà)融合
游戲的交互性,使得動(dòng)畫(huà)都是一個(gè)個(gè)的小片段,連接這些片段就需要動(dòng)畫(huà)的融合。通常融合有兩種類(lèi)型:一種是多個(gè)動(dòng)畫(huà)的融合;另一種就是一個(gè)動(dòng)畫(huà)到另一個(gè)動(dòng)畫(huà)的過(guò)渡,過(guò)渡的方式有兩種,一種是平滑過(guò)渡,一種是凍結過(guò)渡。
平滑過(guò)渡是在動(dòng)畫(huà)A還沒(méi)有結束的時(shí)候,就開(kāi)始向動(dòng)畫(huà)B融合,而凍結過(guò)渡是在動(dòng)畫(huà)A結束之后才開(kāi)始向動(dòng)畫(huà)B融合,游戲里面會(huì )根據表現的需要來(lái)選擇哪種過(guò)渡方式。
動(dòng)畫(huà)狀態(tài)機
游戲里有多種狀態(tài)機的結構,正是這種復雜的結構,才能支撐游戲里流暢自然的動(dòng)畫(huà)效果和良好的交互響應。以外層狀態(tài)機為例,它的結構分為Idle、Move和Fight。Idle,即待機,包括戰斗待機、休閑待機等;Move,包括轉向移動(dòng)等;Fight,即攻擊動(dòng)畫(huà)。這些外層的大狀態(tài),可以通過(guò)驅動(dòng)信號來(lái)進(jìn)行相互之間的過(guò)渡,來(lái)達到動(dòng)畫(huà)片段流轉的目的。
動(dòng)畫(huà)邏輯管線(xiàn)
在游戲代碼里面,有AI和動(dòng)畫(huà)的接口層,AI會(huì )通過(guò)游戲接口層向動(dòng)畫(huà)狀態(tài)機發(fā)送各種信號,比如跑、跳、攻擊,以及跑的速度、轉向角度等等,這些參數告訴動(dòng)畫(huà)狀態(tài)機,狀態(tài)機會(huì )根據它自己的結構來(lái)進(jìn)行跳轉,或是融合到具體的動(dòng)畫(huà)片段,計算出當前幀的骨骼偏移,再通過(guò)這些骨骼信息,計算出蒙皮網(wǎng)格,最后再渲染。