3D遊戲中人物換裝解決方案

3D遊戲中人物換裝解決方案

          換裝基本上是每個網遊都必須有的一個功能,每種網遊的做法都各有不同,有些是換掉整個模型,有些則是通過可以換掉模型的一個部分完成。前者屬於整體換,相對簡單些;後者則是通過部分替換實現,目前用的比較多,本文主要描述後者的。

       在開始描述換裝前,首先要具備骨骼動畫的知識,如果對骨骼動畫的原理不熟悉,換裝是比較難以理解的。換裝的核心其實並不在換上,而是要理解爲什麼能換,而這些都和骨骼動畫密不可分。骨骼動畫是通過關鍵幀驅動骨骼運動,隨之依次調整每塊骨頭的朝向和座標,骨頭再帶動頂點運動(爲了高效,現在很多都使用GPU加速,這樣就不需要修改頂點緩衝區了),蒙皮信息就描述了了每個頂點受哪些骨頭的影響,以及他們的權重,這樣骨骼動畫就運動起來了。其他的原理先略過,google上解釋比我的好,^_^。

       目前一般網遊的換裝都是採用替換掉模型某個部分來實現的,臉型、頭髮、衣服、手套、褲子、裙子、鞋子等一般都和人物肉身做在一起,可以在需要時顯示或隱藏對應部分。這裏一般有一個原則,如果對應部分需要支持形變,則必須和肉身做到一起,因爲必需要有蒙皮信息才能實現形變。

       在我這個設計中,人物分成六個部分,分別是頭髮,頭,上身,手,腿,腳。骨骼只採用一套,男女共用,動作也分開來,每個動作都可以驅動骨架。每個部分都需要包含蒙皮信息,但不需要骨架,因爲骨架可以共用,不需要保存多份,動作也一樣,也只要一份就可以了,想要實現高效的換裝,骨架和動作一定要支持共享。在Ogre中,骨骼和動作被合起來放到一個skeleton文件中,爲了換裝,自然要把這些東西分拆掉,難道天龍八部就是這個原因?(^_^,我猜的,可能是)

       分成六個部分後,就可以在需要是把對應部分替換掉實現換裝,剛纔說了,換裝的難點在於爲什麼能換。能換的原因是在接縫的地方,只要沒有接縫,這個部分就好像被換掉了,那怎麼保證沒有接縫呢,那就要使接縫處的頂點受到骨頭影響的權重保持一致,只要一致了,換裝就可以實現了。

再說點題外話,一般手裏拿的武器屬於掛接物體,不屬於換裝範疇,掛接相對來說更簡單一點,創建一個節點綁定到某塊骨頭就可以了,這類物體的共性是物體只有剛性變化。還有一些換裝是通過換模型的貼圖來完成。總之,換裝如果不考慮效率和資源共享並不難,換裝的原理是何骨骼動畫相關的,當然這隻適用於本文提到的換裝方式,如果你有其他更巧妙的換裝方法,請告訴我,一起分享啊,^_^。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章