如何讓3D遊戲中人物上下樓腳踏實地?

小白求教

像gta這些遊戲中

角色的布娃娃效果十分真實

在上下樓梯時,每一步都會塔在台階上

斜坡或者有碰撞物體的時候,站立的角色會彎腿

求大神指導一下思路

雖然是菜鳥,也不希望自己的東西粗製濫造

目前找了很多地方都沒有相關的文章


這套系統叫locomotion (和布娃娃也不是一回事,ragdoll主要還是用來做無動畫的人體碰撞)

正常的遊戲只要判斷一個虛擬碰撞膠囊體的底部位置和地面的碰撞即可

locomtion就涉及了各種狀態下人的重心和雙腳之間的關係

具體說unity裡面這個叫foot ik

autodesk的解決方案叫humanIK 可以去搜索下

這套系統頗複雜,不是三言兩語可以說清楚的,如果沒有人物骨骼系統的了解,說不太清,可以自己去搜索下


搜一下IK就行了,搞明白IK剩下的自己就推出來了。


先解單邊約束,一旦發生碰撞,就把碰撞的部位沿法向推回表面,然後解一下IK就可以了。


以前有個老遊戲Operation Flashpoint,簡單的把角色下肢縮放到地形高度,坡度不大時還好,坡度稍微大一些就穿幫了


Foot IK

====================================================================

稍微說詳細點吧。

單說FootIK本身原理挺簡單:raycast到地面求交,加一個美術設好的offset,得到腳的位置,然後求TwoBone-IK,再調整下腳掌姿態。在走路動畫中,標記出腳貼地的階段,持續算這個。這樣能做出一個demo效果。

但要讓動作自然到GTA水準,對各種地形魯棒,就會有各種問題了。

舉個例子,在下樓梯或下坡時,除了下肢的IK鏈,pelvis甚至整個身體都可能被pull到向下移動,這時如何保證整體動作自然?如果是躡手躡腳或者蹲著下樓呢?等等這些要根據遊戲、地圖,具體實驗才能知道。

GTA這樣的質量的遊戲,很難有哪個引擎或者哪個庫能直接滿足要求;要用也都是買源碼和支持,自己修改的。更多的是需要實現者熟悉基礎的理論,積累很多經驗(trick),根據具體地圖去驗證、調整。


在上古捲軸5中也有樓主說的那種效果,後來知道用的是foot IK


如果只是實現,找引擎或者引擎插件手冊更靠譜一點

原理的話,其實也很簡單,說白了就是對地面做n條射線(有幾條腿做幾條,比如你做的是個蜈蚣精什麼的。。。那計算量著實大)

獲得法線和接觸點位置,然後根據這兩個參數對骨骼動畫進行改變

但是說的容易,實現起來其實還蠻麻煩的。。。

非要自己實現的話,在開源源碼里找吧,ue應該是有,ogre有沒有不知道(應該是有)

unity好像物理引擎自帶這個功能,具體我沒試過。。。我做的都是2d遊戲。。。


這是物理引擎做的,建議題主調整一下自己的關鍵字,重新搜索。


IK

通過定位較低的骨骼使較高的骨骼旋轉,來調整姿勢

像在UE4中在IK設置里填寫腳底骨骼和對應的關節骨骼,以及腿長等一些參數就可以實現這效果


3dmax裡面有個東西叫動力學,給不同的物體加上相應的屬性,可以模擬出一定的效果。例如我放一個長方體在地面上,設置剛體屬性;其上方放一個長方形的面,設置cloth屬性。給場景添加重力並開始模擬以後,平面就會下落,最終達到下面這張圖裡的效果(圖片來自網路,侵刪)

遊戲里應該也是通過設置這一些物理屬性來實現真實效果的模擬的。


可以看一下ikinema runtime 中間件 它可以自動修正角色動作和腿部與地面不貼合的問題,目前虛幻4引擎最好的遊戲人物中間件,可以試用體驗14天。


前面的朋友,百度IK的話,會出很多莫名其妙的東西喲。

那東西的全稱叫「Ikinema」,是需要付費的喲,不過,不想付費的辦法也是有的,這裡就不提供了


ik


IK 反向動力學


推薦閱讀:

unity開發工作流程?
Unity引擎編譯後的程序是如何運行在iOS和Android上的?
遊戲程序員入門應該從Unity3D或Cocos2dx開始,還是從OpenGL和DirectX開始?
DirectX和OpenGL如何抉擇?
unity3d里的Surface shader中的surf,LightingName,finalColor,到底屬於渲染管線的哪個階段?

TAG:遊戲開發 | C編程語言 | Unity遊戲引擎 | 3D建模 | 虛幻引擎 |