動畫位移拉伸方法、裝置及運動控制方法、裝置的制造方法
【技術領域】
[0001] 本發明涉及游戲對象控制領域,尤其涉及一種動畫位移拉伸方法、裝置以及游戲 對象的運動控制方法、裝置。
【背景技術】
[0002] 游戲中常見的控制對象的運動表現的方式往往有如下兩種:
[0003] -種控制對象運動表現的方式是:美術制作一個原地的骨骼動畫,然后程序邏輯 里控制對象移動,比如人物的行走表現,可以美術制作一個原地走路的骨骼動畫,然后程序 代碼邏輯里讓人物按一定速度移動,達到人物在走路的表現效果。這種方式適合于對象運 動速度較固定的情況,比如走路、跑步,但如果是運動速度、軌跡較復雜的情況,就不便于用 程序邏輯去實現。
[0004] 另外一種控制對象運動表現的方式是使用動畫位移。在這種方式下,美術制作的 不是一個原地動畫而是一個帶有位移的骨骼動畫,然后在游戲中播放這個動畫時,就會根 據這個動畫的位移軌跡來移動對象,這種方式的優點是對象在游戲中的表現能夠與美術設 計的一致,可以有速度、軌跡上的復雜變化,增強游戲對象的表現力。因此這種方式經常用 于游戲對象的技能動作上,比如游戲中人物往前跳劈的技能(中間有一定的速度節奏變 化),用這種方式來表現人物的移動,就會比較自然。但在實際使用動畫位移中,經常會遇到 的一個問題是,美術制作了一段動畫位移軌跡可以運動到和當前位置相對的某個目標點, 但策劃希望該對象最后移動到另一個目標點。仍以人物的跳劈技能為例,美術可能制作的 位移軌跡是向前跳到3米處,但實際中人物的攻擊目標是在前面5米處,這樣如果仍然按照 原來的位移軌跡來移動人物,就無法攻擊到目標。這種情況下,就需要根據實際的目標點, 對動畫的位移軌跡進行拉伸,從3米拉伸到5米,這就是所謂的動畫位移拉伸技術。這里的 "拉伸"不局限于拉長,也有可能是縮短,比如實際目標點離對象比較近的情況。
[0005] 目前市面上的游戲引擎的動畫拉伸方法的基本思路是,計算實際的目標點和美術 制作的位移軌跡的目標點之間的位移差,然后將這個位移差除以動畫的運行時間,得到一 個速度,然后在動畫播放過程中,將這個速度疊加到對象身上,作為一個補償速度,這樣在 動畫播放完畢后,相應對象就會有一個位移補償,等于那個位移差,這樣就可以保證最后對 象能夠位移到指定的目標點。
【發明內容】
[0006] 經工程測試研究發現,現有技術的游戲引擎的動畫拉伸方法雖然方案實現簡單, 但其本質上是按照時間無差別的均勻拉伸,拉伸效果僵,無法滿足特殊環境下具體應用。具 體地:在游戲中,我們希望拉伸的過程是能夠和原來動畫本身的節奏相符合,比如仍以跳劈 技能為例,如果跳劈技能在中間有一段時間人物是滯空不動的,那么我們也希望在這段時 間不做拉伸,如果跳劈結束的時候人物運動比較快,我們也希望這段時間拉伸的速度能夠 比較快。如果在滯空過程中因為拉伸而產生了的運動,顯然這在表現上就是不太符合預期 的。
[0007] 以前面提到的跳劈技能為例,如果跳劈中間有一段滯空不動的時候,則按照現有 技術的這種動畫位移均勻拉伸方法,在這段時間仍然會有一個移動速度疊加上去,這樣就 會不太符合玩家對這個技能表現的預期。因此,在游戲中使用動畫位移來移動對象,當需要 移動到的目標點和原來動畫的目標點間有差異,需要進行動畫位移拉伸操作時,采用現有 的動畫位移均勻拉伸的方法不能夠使動畫位移的拉伸過程的運動快慢表現符合原來動畫 的運動快慢表現,不符合玩家對該動畫位移拉伸表現的預期。
[0008] 為實現更優質的動畫拉伸效果,我們提出了一種理想的動畫位移拉伸,理想的動 畫位移拉伸是具有一定的語義性,在原來動畫軌跡中的運動快時拉伸相應快,運動慢時拉 伸也相應慢。
[0009] 為實現上述理想的動畫位移拉伸,本發明提供一種動畫位移拉伸方法及裝置,能 夠使得動畫位移拉伸的速度快慢表現與原來美術制作的動畫位移快慢表現一致,讓對象的 運動表現更加符合玩家的預期。
[0010] 本發明實施例提供了一種動畫位移拉伸方法,包括:
[0011] 計算當前動畫需要移動到的目標點與原動畫位移軌跡的目標點的位移差;
[0012] 計算原動畫位移軌跡中的每一幀的位移補償,使每一幀的位移補償的大小正比于 該幀在原動畫位移軌跡中的位移長度,并使原動畫位移軌跡中的所有幀的位移補償相加等 于所述位移差;
[0013] 將計算得到的每一幀的位移補償疊加到原動畫位移軌跡中對應幀的位移上,從而 得到當前動畫位移軌跡。
[0014] 作為上述方案的改進,通過以下公式(1)~(2)計算原動畫位移軌跡中的每一幀 的位移補償:
[0015] M(i) = 0, i = I (1)
[0016] M(i) = (D-P(N))*|P(i)-P(i-l) |/S,i 彡 2 (2)
[0017] 其中,M⑴為原動畫位移軌跡中的第i幀的位移補償,P⑴為原動畫位移軌跡中 的每一幀的位置,P(N)為原動畫位移軌跡的目標點,D為當前動畫需要移動到的目標點,S 為原動畫位移軌跡的總位移長度。
[0018] 作為上述方案的改進,通過以下公式(3)~(6)計算得到當前動畫位移軌跡:
[0019] V(i) = 0, i = 1 (3)
[0020] V ⑴=P ⑴-P (i-1) +M ⑴,i 彡 2 (4)
[0021] Q(i) = P(i),i = I (5)
[0022] Q(i) = Q(i-1)+V(i), i ^ 2 (6)
[0023] 其中,V⑴為當前動畫位移軌跡中的第i幀的位移,Q⑴為當前動畫位移軌跡中 的第i幀的位置。
[0024] 作為上述方案的改進,所述原動畫位移軌跡中的每一幀的位置是二維平面的坐標 點或三維空間的坐標點。
[0025] 作為上述方案的改進,所述原動畫位移軌跡中的每一幀的位移長度為該幀與前一 幀之間的直線距離;所述位移差為原動畫位移軌跡的目標點指向當前動畫需要移動到的目 標點的位移。
[0026] 本發明實施例對應提供了一種動畫位移拉伸裝置,包括:
[0027] 位移差計算模塊,用于計算當前動畫需要移動到的目標點與原動畫位移軌跡的目 標點的位移差;
[0028] 位移補償計算模塊,用于計算原動畫位移軌跡中的每一幀的位移補償,使每一幀 的位移補償的大小正比于該幀在原動畫位移軌跡中的位移長度,并使原動畫位移軌跡中的 所有幀的位移補償相加等于所述位移差;
[0029] 處理模塊,用于將計算得到的每一幀的位移補償疊加到原動畫位移軌跡中對應幀 的位移上,從而得到當前動畫位移軌跡。
[0030] 作為上述方案的改進,所述位移補償計算模塊通過以下公式(1)~(2)計算原動 畫位移軌跡中的每一幀的位移補償:
[0031] M(i) = 0, i = I (1)
[0032] M(i) = (D-P(N))*|P(i)-P(i-l) |/S,i 彡 2 (2)
[0033] 其中,M⑴為原動畫位移軌跡中的第i幀的位移補償,P⑴為原動畫位移軌跡中 的每一幀的位置,P(N)為原動畫位移軌跡的目標點,D為當前動畫需要移動到的目標點,S 為原動畫位移軌跡的總位移長度。
[0034] 作為上述方案的改進,所述處理模塊通過以下公式(3)~(6)計算得到當前動畫 位移軌跡:
[0035] V(i) = 0, i = 1 (3)
[0036] V ⑴=P ⑴-P (i-1) +M ⑴,i 彡 2 (4)
[0037] Q(i) = P(i),i = I (5)
[0038] Q(i) = Q(i-1)+V(i