1. 程式人生 > >【遊戲開發閱讀列表2】動畫(Anima2D、粒子、物理等)

【遊戲開發閱讀列表2】動畫(Anima2D、粒子、物理等)

遊戲中動畫的實現有很多不同方法,幀動畫、骨骼動畫、基於物理的動畫、基於Shader的動畫、粒子等。

在這篇文章中,列出了我最近讀到過的不同種類動畫入門級的文章、視訊。關於Unity動畫狀態機這一類太常見的,這裡不再贅述。

所分享的內容都親自品嚐,保證無毒無害,營養價值極高!在網際網路上我們缺少的不是內容,而是索引。

1. 基於物理的動畫

與其他的動畫相比,基於物理動畫最大的好處是互動時更真實。


這篇文章非常詳細的介紹了Verlet Integration,基本不需要什麼數學基礎。並且有大量示例直接在瀏覽器執行。最後兩個示例可以說非常酷炫了。

一個示例是rag-doll(布娃娃)。雖說這裡只是2D模型,很多AAA遊戲中,屍體也是用類似的方法在3D中模擬的。

另一個示例是Fabric(布)。


用上面學到的Verlet Integration或者別的方法,可以簡單的實現Spring(彈簧)的效果。利用Spring,可以實現頭髮、絲帶、裙子等真實物理效果。這裡提供兩種效果拋磚引玉。

第一篇文章更加具體,從如何寫Mesh講起,第二篇只講了大體思想。如果覺得第一篇中的Mesh程式設計還不夠入門,推薦**《Unity實現歡樂球球(上)Mesh生成》**。

第二篇文章的作者也寫過Spring實現2D水面的文章,仍然非常簡潔,感興趣也可以看一看:

2. 骨骼動畫

我本身3D動畫實踐得非常少,而且傳統骨骼動畫值得閱讀的材料非常容易找,這裡不再推薦。


Unity有一個免費的外掛叫做Anima2D,提供了非常好的2D動畫開發流程。其中的一些原理與3D動畫是相同的(例如骨骼、IK等)。一套基本使用教程:


提到骨骼動畫,有一個不得不提的東西,就是Inverse Kinematics(IK)。如果對其原理感興趣推薦幾篇博文:

又是Alan Zucconi的博文,這位老哥每次都寫得具體、全面。這一系列中為了避免通過數學推導求解IK,直接使用Gradient Descent(梯度下降)求解,如果瞭解過機器學習的話,應該不陌生。

但梯度下降是個迭代演算法,效率比較低。之後他又寫過在只有兩個自由度下2D機械臂IK的數學推導:

3.物理與骨骼動畫的結合

前面基於物理的動畫中已經提到了Ragdoll、Spring。基於物理的動畫和幀動畫、骨骼動畫各有優劣,很多時候能夠組合在一起。


Unity中,Springs與骨骼動畫的結合:

仍然是Anima2D,只是使用了有Spring特性的特殊骨骼。下面的頭髮就是使用這種骨骼完成的。


EA的一些體育遊戲中,Ragdoll與骨骼動畫結合:

這是18年GDC的一個talk,可惜youtube上還沒有對應視訊。

4. 粒子

使用粒子,能夠實現技能特效、火焰、天氣等效果。


這是我見過最好的Unity粒子系統入門的視訊。

5. 其他


在動畫資源非常少的情況下,將IK、Ragdolls等方法發揮到極致來做出非常好的遊戲動畫。很有樂趣的一個分享。


Motion Matching是比較現代化的遊戲動畫技術,在《For Honor》、《The Last of Us Part II》等遊戲中已經使用。但由於他要求捕捉一套完備的動畫,在很多種類的動作中仍然是不可行的。在《For Honor》中,也幾乎只應用在了腳部動作。