本次發(fā)布的全新動(dòng)畫(huà) AnimGraph Sample 構(gòu)建了全新的角色移動(dòng)(Locomotion)動(dòng)畫(huà)框架,整合了 Facing Warp、Stride Warping、Distance Matching 等關(guān)鍵節(jié)點(diǎn)。該框架能夠在運(yùn)行時(shí)將角色朝向與物理運(yùn)動(dòng)解耦,并通過(guò)動(dòng)態(tài)調(diào)節(jié)下肢跨步間距、基于空間位移精確驅(qū)動(dòng)動(dòng)畫(huà)幀,以及符合物理狀態(tài)的自然姿態(tài)偏移,使角色在全向移動(dòng)、起停切換與快速變向等場(chǎng)景下呈現(xiàn)更真實(shí)、更穩(wěn)定且更具控制力的運(yùn)動(dòng)表現(xiàn)。
在通常游戲的開(kāi)發(fā)流程中,角色移動(dòng)系統(tǒng)的構(gòu)建長(zhǎng)期面臨靈活性與真實(shí)感難以兼得的技術(shù)約束。若采用以膠囊體驅(qū)動(dòng)配合動(dòng)畫(huà)狀態(tài)機(jī)的常規(guī)方案,動(dòng)畫(huà)通常僅按照固定時(shí)間軸及混合參數(shù)播放,難以與角色實(shí)際的物理位移保持嚴(yán)格一致,進(jìn)而容易產(chǎn)生滑步等問(wèn)題。為緩解這一矛盾,開(kāi)發(fā)者往往會(huì)引入根運(yùn)動(dòng)(Root Motion)來(lái)接管角色位移。該方案雖然能夠從機(jī)制上減少滑步現(xiàn)象,但也會(huì)同步削弱系統(tǒng)的運(yùn)行時(shí)可控性與靈活性。
本次推出的 Locomotion 框架,正是針對(duì)上述痛點(diǎn)所作出的優(yōu)化。通過(guò)使用上述節(jié)點(diǎn),系統(tǒng)在保留膠囊體驅(qū)動(dòng)所帶來(lái)的高響應(yīng)性與高擴(kuò)展性的基礎(chǔ)上,實(shí)現(xiàn)了動(dòng)畫(huà)姿勢(shì)與跨步表現(xiàn)的實(shí)時(shí)校準(zhǔn)。由此,角色即使在動(dòng)態(tài)變化下,也能夠呈現(xiàn)接近甚至優(yōu)于傳統(tǒng)根運(yùn)動(dòng)方案的運(yùn)動(dòng)一致性與視覺(jué)真實(shí)感。
歡迎體驗(yàn) AnimGraph Sample
丨體驗(yàn)步驟
為獲得最佳游戲體驗(yàn),請(qǐng)使用 Tuanjie Editor 1.9.0 或更高版本。
1. 下載或克隆本項(xiàng)目:
git clone https://cnb.cool/tuanjie/Animation/AnimGraph_Sample2. 使用 團(tuán)結(jié)引擎 打開(kāi)該項(xiàng)目,引擎版本需為 1.9.0 或以上。
3. 打開(kāi)Assets/AnimGraph_Sample/AnimGraph_Sample.scene場(chǎng)景文件。
關(guān)鍵技術(shù)
丨朝向扭曲
朝向扭曲(Facing Warp)節(jié)點(diǎn)功能的主要作用是在保持角色上半身朝向的同時(shí),動(dòng)態(tài)調(diào)整下半身的移動(dòng)方向。在傳統(tǒng)的動(dòng)畫(huà)系統(tǒng)中,通常需要制作八個(gè)方向的移動(dòng)動(dòng)畫(huà)并配合 BlendTree 使用,容易在過(guò)渡時(shí)出現(xiàn)腳步交叉或穿模。
通過(guò)配置 Facing Warp節(jié)點(diǎn),在運(yùn)行時(shí)節(jié)點(diǎn)通過(guò)讀取計(jì)算出的速度矢量與控制朝向的夾角差,在骨骼鏈上分布旋轉(zhuǎn)扭曲,從而使用較少的動(dòng)畫(huà)實(shí)現(xiàn)自然的全向移動(dòng)效果。
![]()
步幅扭曲
步幅扭曲(Stride Warping)允許開(kāi)發(fā)者動(dòng)態(tài)調(diào)整角色邁步的物理跨度,使其在播放過(guò)程中動(dòng)態(tài)地匹配動(dòng)態(tài)變化的膠囊體移動(dòng)速度。在傳統(tǒng)的動(dòng)畫(huà)系統(tǒng)中,如果游戲邏輯修改了角色的移動(dòng)速度,若只調(diào)整動(dòng)畫(huà)播放速率來(lái)適配,會(huì)導(dǎo)致角色出現(xiàn)“滑步”或由于頻率過(guò)快導(dǎo)致的“小碎步”。
Stride Warping 節(jié)點(diǎn)通過(guò)計(jì)算“期望速度”與“動(dòng)畫(huà) Root Motion 速度”的比值,動(dòng)態(tài)拉長(zhǎng)或縮短角色腿部的跨步距離,從而使角色步幅適配不同的移動(dòng)速度。
![]()
距離匹配
距離匹配(Distance Matching)節(jié)點(diǎn)的核心作用,在于將動(dòng)畫(huà)播放的驅(qū)動(dòng)邏輯由傳統(tǒng)的“時(shí)間軸驅(qū)動(dòng)”轉(zhuǎn)變?yōu)椤翱臻g位移驅(qū)動(dòng)”。它能夠根據(jù)角色實(shí)際移動(dòng)距離動(dòng)態(tài)匹配動(dòng)畫(huà)進(jìn)度,從而有效保證起步、急停和快速變向等場(chǎng)景下,腳步動(dòng)作與物理位移在時(shí)間和空間上的一致性。使用距離匹配首先需要在動(dòng)畫(huà) Inspector 上勾選 lockToRoot 來(lái)生成一根距離曲線,有了距離曲線之后后續(xù)節(jié)點(diǎn)會(huì)通過(guò)采樣曲線數(shù)值來(lái)計(jì)算出實(shí)際的位置。
動(dòng)畫(huà)通常依賴時(shí)間軸播放,常常導(dǎo)致膠囊體已停止但腳步還在滑動(dòng)。該功能需與基于物理預(yù)測(cè)邏輯配合使用:實(shí)時(shí)計(jì)算出角色靜止所需的預(yù)測(cè)停止距離,節(jié)點(diǎn)則據(jù)此直接跳轉(zhuǎn)至對(duì)應(yīng)的動(dòng)畫(huà)幀,確保角色移動(dòng)表現(xiàn)與物理空間位移的一致性。并引入了基于距離數(shù)據(jù)的動(dòng)畫(huà)序列評(píng)估器,支持查詢并直接輸出動(dòng)畫(huà)曲線中與距離標(biāo)記相匹配的幀姿態(tài),可有效解決角色滑步問(wèn)題。
距離匹配需要在 Animation Graph 中通過(guò) AnimationEvaluator Node 進(jìn)行計(jì)算,不同于 Animaiton Clip Node,Evaluator 只能通過(guò)設(shè)置精確時(shí)間來(lái)采樣姿態(tài),姿態(tài)更新需要通過(guò)在右側(cè)的 Binding Functions 欄目里根據(jù)需要執(zhí)行的頻率不同來(lái)在不同的細(xì)分類別中添加函數(shù)來(lái)進(jìn)行驅(qū)動(dòng)(如果全局只需要執(zhí)行一次則在 Init Binding Functions 中添加,如果每幀都需要執(zhí)行則在 Update Binding Functions 欄里添加,如果每次進(jìn)入狀態(tài)執(zhí)行一次則在 Became Revalent Binding Functions 里添加),每個(gè)函數(shù)需要給定一個(gè) AnimEvaluator 格式的入?yún)ⅲ荒苡休敵鰠?shù)。
![]()
實(shí)際運(yùn)行時(shí)可以通過(guò) Distance Match To Target 和 Advance Time By Distance Matching 兩個(gè)函數(shù)節(jié)點(diǎn)來(lái)控制 Evaluator Node 的時(shí)間。前者通過(guò)給出指定距離,計(jì)算出當(dāng)前角色位置向前移動(dòng)指定位置到達(dá)停止的距離,通過(guò)這個(gè)距離來(lái)設(shè)置當(dāng)前角色姿態(tài),保證角色移動(dòng)指定距離后可以停止。后者則通過(guò)給出指定距離,計(jì)算出角色當(dāng)前姿態(tài)向前移動(dòng)指定距離后的新姿態(tài),用來(lái)控制角色前行。通過(guò)兩個(gè)函數(shù)配合,可以精確控制角色的起步和停步,有效避免滑步。
![]()
慣性混合
在團(tuán)結(jié)引擎 1.9.0 的 AnimGraph 中,慣性化(Inertialization)是一項(xiàng)用于優(yōu)化動(dòng)畫(huà)過(guò)渡體驗(yàn)的技術(shù)。下面的視頻展示了角色在轉(zhuǎn)身跑狀態(tài)快速切換動(dòng)畫(huà)的慣性混合:
該節(jié)點(diǎn)基于當(dāng)前姿態(tài)的運(yùn)動(dòng)趨勢(shì),在較短時(shí)間內(nèi)對(duì)骨骼位姿變化進(jìn)行平滑補(bǔ)償,使角色在狀態(tài)切換、動(dòng)作打斷或快速響應(yīng)輸入時(shí),依然能夠保持運(yùn)動(dòng)慣性與視覺(jué)連續(xù)性。相比傳統(tǒng)的硬切換或依賴大量過(guò)渡動(dòng)畫(huà)的方式,慣性化能夠顯著減少姿態(tài)跳變等問(wèn)題,讓動(dòng)畫(huà)切換看起來(lái)更加自然、流暢且符合真實(shí)物理直覺(jué),極大程度地保持過(guò)渡目標(biāo)動(dòng)畫(huà)的運(yùn)動(dòng)特性。
![]()
動(dòng)畫(huà)切換和動(dòng)畫(huà)疊加
AnimGraph 現(xiàn)在已支持運(yùn)行時(shí)切換動(dòng)畫(huà),可以在 Binding Function 中通過(guò) SetAnimationClip 等節(jié)點(diǎn)切換動(dòng)畫(huà),Apply Additive 也已支持 BlendTree。
![]()
下面的視頻演示了角色切換蹲下、行走和跑步的三種狀態(tài)動(dòng)畫(huà)的切換以及根據(jù)攝像機(jī)旋轉(zhuǎn)角度的速率來(lái)傾斜角色以達(dá)到更好的真實(shí)感。
Unity 官方微信
第一時(shí)間了解Unity引擎動(dòng)向,學(xué)習(xí)進(jìn)階開(kāi)發(fā)技能
每一個(gè)“點(diǎn)贊”、“在看”,都是我們前進(jìn)的動(dòng)力
![]()
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.