我所遭遇过的游戏中间件---HumanIK
?我所遭遇過的游戲中間件---HumanIK
????? Autodesk HumanIK游戲中間件,為游戲創建更加可信、真實的角色動畫。該中間件的全身逆向運動(FBIK)系統支持角色真實地與所在環境及其它角色進行交互。通過動態地將FBIK信息分層置于運行中的現有視頻中,創建、修改和重新利用角色動畫,以此來節省動畫師寶貴的時間。
????? 以上語句拷貝自HumanIK廣告手冊.所謂IK(反向動力學)就是相反于正常的骨骼動作播放,提供骨架上某幾根骨骼的變換狀態,讓骨架動態的擺出合理的位置.舉個具體應用的例子,如果要實現兩個高度不定的角色間的握手,不使用IK只能為每兩種高度的角色編輯一套動作,這樣做工作量和數據量都很大.如果游戲中的角色高度是用玩家任意設置的,那么不使用IK是辦不到的.
????? 憑心而論,HumanIK是我接觸的Autodesk的三款中間件中最讓我省心的,另外兩款是Scaleform和Kynapse.省心的原因是它的復雜程度比其他兩款小很多,更為重要的是,我做的項目壓根沒用使用到HumanIK.所以我對HumanIK的研究只是停留在寫了幾個Demo的測試階段.這已經是兩年前做的事了,由于時間過久,很多細節已經忘卻了.
????? HumanIK的需要自己一套文件數據,HumanIK提供了Maya的導出插件可以編輯生成該數據.但也可以使用現成的骨骼動作生成該數據.HumanIK提供了這方面的接口,當然開發者可以不保存該數據的文件,而是每次創建動作時生成該數據.骨骼動作的關節間有個自由度范圍,在其Maya導出插件中,可以編輯該范圍,而自動生成的范圍則采用默認參數.當時有個小坑是,角色的腿分為兩類,一種是普通的膝關節,另一種膝關節是反的,用于鳥類.我直到搞了HumanIK才意識到鳥類的膝關節是反的,之前吃了那么多雞腿都沒有注意過.
????? HumanIK的集成比較容易,依照其Demo,按照流程,可以輕松創建一個HumanIK的對象HIKCharacter.
??? //Step 1: Define which joints my character use.
??? // 步驟 1. 創建HIKCharacterDefinition
??? //Step 2: Create a HIKcharacter for my definition.
??? // 步驟 2. 根據HIKCharacterDefinition創建 HIKCharacter
??? //Step 3: Setup my character geometry, T Stance.
??? // 步驟 3. 設置HIKCharacter的幾何體
??? //Step 4. Set up Degrees of Freedom (optional)
??? // 步驟 4. 設置自由度(可選)
??? // 通過自由度,可以增加針對特定角色的這些內置旋轉限制,以創建對骨架靈活性的其他約束。
??? //Step 5: Characterize your character geometry.
??? // 函數完成角色化之后,無法隨時更改自由度
???
?????? 記得去年夏天,有個師弟來我家,他在上海一家游戲公司,混的比我好,早已經是項目經理了.想實現角色握住門把手,或者拿起桌子上的東西的功能.我給他推薦了HumanIK,不知道他現在搞的怎么樣了.但如果他是今年問我這個問題的話,我一定不給他推薦HumanIK,這個功能用三角形的余弦定理,可以實現.余弦定理是已知三角形的三個邊長求三個內角.具體調試起來有點麻煩,我大概花了一天的時間搞定.可以修改骨架的胳膊或腿的兩級骨骼,雖不像HumanIK那樣能修改骨架的N級骨骼,以及設置關節間的自由度,但也能滿足需求.
????? 由于時間過久,對HumanIK的記憶有點模糊,我記得它的DEMO中有個爬梯子的小人,具體的實現代碼卻沒有細看.但游戲中對IK的需求并不只是爬梯子這么簡單,策劃更希望能實現角色間的動態交互,這與物理有些關系.比如,角色受到攻擊時,根據被攻擊的位置和力度動態地做出不同的反應.但這種功能,在HumanIK中沒有,在三個物理的中間件中也沒有.我曾經在一款游戲中見到這種功能,還自己寫算法簡單模擬過.當角色某一部位受到攻擊時,讓相關骨骼向后做一點旋轉,將就著還湊合吧,沒有細調.但要實現角色受攻擊時,退后幾步再回來,有點麻煩.希望有朝一日,HumanIK或者物理的中間件能提供個解決方案.
轉載于:https://www.cnblogs.com/WhyEngine/p/3504189.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的我所遭遇过的游戏中间件---HumanIK的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 58同城买二手电脑的感想
- 下一篇: php中empty(), is_null