遊戲和CG裡的人物,都是怎麼動起來的(#2)

深空愛吃肉包兒發表於2021-03-01
上一篇文章中,我們講到了遊戲和CG中的人物利用骨骼來實現動作。但是單純的調整骨骼並不是最快的解決方法。今天我們就來講講在調整骨骼的基礎上,我們還有什麼更加先進的技術來加速動畫的生產製作流程。

骨骼的父子關係

在上一文中,我們提到了移動,旋轉骨骼就能實現人物的動畫了,但是光靠這樣的移動,還是相當的緩慢,所以就有人創造了父子關係這樣的一個概念。父子關係如其字面意思,比如我們找來三個關節,A,B和C:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

這裡畫面中只有兩個骨骼,但是為什麼我寫了三個字母呢?因為實際上我們建立的是三個關節點,而骨骼其實是計算機通過我們建立的關節點算出來的。三個關節點對應了兩根骨骼。而單獨的一個關節點是無法創造出骨骼的。而骨骼的建立,一定是父關節向自己的子關節方向建立,父關節不會和不是自己子關節的其他關節創造骨骼。

我們讓A是B的爸爸,B是C的爸爸,這樣就締造了兩對父子關係了。

遊戲和CG裡的人物,都是怎麼動起來的(#2)

一般的三維軟體都會使用樹狀圖,來現實當前場景裡的物體結構,如上圖我們就可以清晰的看明白父子關係了。

如果我們這時候新建一個關節D。不然其成為任何一個關節的兒子的話,那麼場景物體結構就是這樣的:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

而這個父子關係有什麼用呢?其做用就是讓子物體的位置,朝向,大小,都基於父物體的位置,朝向,大小。

比如,如果我們將上圖的A向畫面右側移動1CM,那麼其下的B也會跟著移動1CM。又因為B移動了1CM,C也會跟著一起移動。而D則不受影響。

遊戲和CG裡的人物,都是怎麼動起來的(#2)

而旋轉的影響則有些不同,旋轉A的時候,B不僅僅會跟著一起旋轉,而且還會發生相對世界座標的位移:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

因此,有了這種父子關係之後,編輯骨骼就更加的方便了。

各位可能會注意到在PS1時代的時候,人物有機率會出現四肢的運動錯位的景象,這正是因為當時這種父子關係的運用並不好,所以很多動畫會需要分開人物的身體與四肢各個關節的骨骼來調整,最後製作出來的動畫就容易出現錯位。

IK與FK

IK與FK是兩個不得不提到的、重要的關於人物動畫的技術了。

先從FK講起。Forward Kinematic,前向動力學,聽起來是一個高大上的名詞,但其實沒有什麼大不了的。上文提到的父子關係中,通過父物體的改變得出子物體的相對位置的這個計算方式,就是FK。

而與之相對的,IK,Inverse Kinematic,反向動力學,則是通過修改子物體的位置來影響父物體的改變。但是具體怎麼影響呢?我們再利用上文的A,B,C關節進行舉例。假如讓三者形成IK關係,然後移動子關節C,就能得到如下的效果:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

這裡發生了什麼呢?其實是電腦利用IK演算法,通過得知子關節C的位置後,反向去調整A和B的位置和朝向,在不改變A,B,C形狀大小的前提下,儘可能使關節C處在我們指定的位置。

如果我們指定給C的位置C無法達到,也就是A,B伸到最長,也夠不到C的位置的話,就會出現如下圖所示的情況:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

而IK非常的實用,比如我們希望一個人的手掌處於某一個位置,比如插在褲子口袋裡,或者放在胸前,那麼直接將手掌放在那個位置之後,小臂,上臂,甚至肩膀就會自動的以合理的姿態處在他們應該處在的位置了。

利用IK來擺動怪物的腿:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

約束

約束,Constraint,顧名思義,就是約束關節點或物體的功能。一般來說,都是將某某物體約束到某個物體上,和父子關係有點類似,但是功能更加豐富一點。比如說,我們創造如下圖所示的5個關節:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

他們在場景裡的物體結構如下:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

這個時候,因為我希望獲得的是兩條獨立的骨骼,所以D不能成為A的子物體,不然就會變成這樣:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

但是我又希望關節點D可以隨著A的移動而移動,那麼我們就可以將關節D約束到關節A上:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

這樣他們就可以一起移動並旋轉了,不過這裡我們發現其旋轉並不像是在父子關係中的旋轉那樣。其實這只是約束方式的不同,約束還有好幾種不同的約束方式,其中就有可以讓他們表現起來像父子關係一樣的約束方式:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

遊戲和CG裡的人物,都是怎麼動起來的(#2)

其他的約束方式我就不一一贅述了,感興趣的可以自行了解。

控制器

控制器,其實就是上文提到的約束、IK、父子關係以及其他一些額外功能的合集。而一般的建模軟體也非常貼心的為使用者自帶了標準人體骨骼的控制器,下圖所示的是C4D裡自帶的人物控制器:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

人物旁邊這些花花綠綠的線條方框,就是一個一個的控制器。

而使用這些控制器來控制人物,就相對簡單輕鬆的多了。

遊戲和CG裡的人物,都是怎麼動起來的(#2)

控制器控制的依然是骨骼,不過其將對骨骼的操作簡便化了。

補間動畫

在製作動畫的過程中,許多的動作並不需要每幀都進行調整。很多時候,我們只需要給電腦指定動作開始的時候、人物的樣子和動作結束的時候人物的樣子,就可以讓電腦自動算出中間的過渡了。

比如,我指定一個起始動作,如下圖:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

然後我再指定一個結束動作如下圖:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

電腦就可以自動將中間的過渡計算出來了:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

並且我們可以看到動作的曲線:

遊戲和CG裡的人物,都是怎麼動起來的(#2)

通過調整這些曲線,便可以使得我們的動作更加的自然連貫。

動畫素材庫/動捕

即便有了上面所述的各種功能,創作自然的人物動畫依然不是一件輕鬆的事情。因此在資金不足的情況下,使用動畫素材庫的動畫為模板,進行各種微調也不失為一種方案。此處推薦一下Mixamo。不過這個網站現在對於做動畫的兄弟來說可以說是無人不知,無人不曉了。

而在團隊擁有充足資金的情況下,動捕則是一種即高效又能有非常好效果的解決方案了。而且最近,利用深度成像的深度感應類的動捕攝像頭的價格也在逐漸親民化,也許之後有一天我也可以搞一個來試試。

最後是帶貨時間,講一下我做的對話臺詞編輯器上架Unity Asset Store了,這是讓你通過視覺化的方式,來編寫多分支多選項的臺詞的工具。支援任何語言的本地化。並且不需要你編寫一行程式碼就可以使用大量的對話特效。目前在商店獲得五星好評。這裡分享一下開發經過完整的使用教程。 各位大哥要是覺得好用別忘了在Asset Store上留下個好評啊。

點此跳轉到Unity商店。

遊戲和CG裡的人物,都是怎麼動起來的(#2)

遊戲和CG裡的人物,都是怎麼動起來的(#2)

另外,最近會開始陸續在我的Bilibili賬號@深空愛吃肉包兒和推特@Lawrence Peng這兩個帳戶上更新關於我現在正在製作的遊戲的開發日誌,感興趣的可以前去看看,謝謝各位了。

遊戲和CG裡的人物,都是怎麼動起來的(#2)

遊戲和CG裡的人物,都是怎麼動起來的(#2)


來源:機核
原文:https://www.gcores.com/articles/133920

相關文章