1. 程式人生 > >3DSMAX 中的CS 骨骼動畫外掛初探

3DSMAX 中的CS 骨骼動畫外掛初探

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               


3DSMAX 中的CS 骨骼動畫外掛初探
王玉培 鄭利平1
合肥工業大學計算機與資訊學院VCC 研究室, 合肥 230009
摘要:首先介紹了3DSMAX 中的CS 骨骼動畫製作方法,通過Biped 骨架可以快速方便的制
作兩足動物的動畫。並介紹了基於3DSMAX SDK 的外掛開發,SDK 中類庫的組織方式和3DSMAX
的場景組織,最後介紹了和3D引擎密切相關的骨骼動畫匯出外掛的開發過程。
關鍵詞:骨骼動畫 外掛開發 Biped
Preliminary Study on the CS Skeletal Animation Plug-in in
3DSMAX
WANG Yu-pei ZHENG-Liping
VCC Division, School of Computer & Information, Hefei University of
Technology, Hefei, 230009,China
Abstract: The method of CS Skeletal Animation in 3DSMAX is introduced firstly. Biped
animation can be accomplished quickly and easily by the Biped skeleton. Plug-in Development
based on 3DSMAX SDK, the organization form of SDK library and scene organization form of
3DSMAX are introduced secondly. The design of skeletal animation Export plug-in is described,
which is closely related to the 3D engine.
Keywords: Skeletal Animation Plug-in Development Biped
1 引 言
3D 圖形引擎中角色動畫是一個重要的組成部分,它在虛擬現實、電子遊戲,甚至是
傳統的動畫製作中均扮演著極其重要的角色。如何實現一個良好的角色動畫以引起越來越
多的研究者的關注[1]。目前的許多建模軟體都可以快速高效的製作骨骼動畫,如3DXMAX

8
和Maya 等,但是如何從這些軟體中匯出骨骼動畫供3D 引擎使用,也是目前骨骼動畫系
統的一個重要方面。
3D Studio Max,常簡稱為3DSMAX,是Autodesk 公司開發的基於PC 系統的三維動
畫渲染和製作軟體。在3DSMAX 軟體系統下,最大的功能是製作高階的角色人物動畫,
它集成了自身擁有的一套完整的角色製作及動畫實現的工具和命令,並且完美地融合了第
三方的外掛等諸多優點。Character Studio(以下簡稱CS)是3DSMAX 的一個及其重要的
動畫製作元件,它可以方便快捷地模擬人物及兩足動物的動作。
CS 由兩個部分組成,即Biped 和Physique。Biped 是新一代的三維人物及動畫模擬系
統,它用於模擬人物及任何二足動物的動畫過程。使用Biped 來簡單地設計步跡即可使人物
走上樓梯,或跳過障礙,或按節拍跳舞等。還可以把一種運動模式複製到任意一種二足動
物身上而不需要做重複的工作,這樣對於諸如群組動畫創作就變得輕而易舉了。
3DSMAX 是一個開放性的系統,提供了簡便的介面和豐富的類庫支援。3DSMAX 提
供了兩個層次的開發工具:MAXScript 和SDK。MAXScript 簡單易學,使用方便,但是它
的限制很多,而且不能開發底層軟體;SDK 則可以充分利用3DSMAX 的豐富的類庫,對
3DSMAX 進行最為徹底的二次開發。使用者通過SDK 中提供的CS 類庫,可以開發出適合
自己的骨骼動畫外掛,常用的是根據3D 引擎的需要,開發合適的骨骼動畫匯出外掛。
2 CS 骨骼動畫外掛工具介紹
生物是由骨架來支撐肢體,並通過肌肉的收縮和拉伸來控制骨骼的運動,從而產生各
種姿勢和運動。在虛擬場景中,為了讓角色的肢體能夠靈活地運動,使用虛擬骨骼來控制
模型各肢體上的點,各部分的骨骼組成角色的骨架[2]。通過調整骨架,可使角色模型擺出
各種造型。
CS 中的Biped 提供了一套具有人類骨架特點的骨架系統,集成了正向動力學系統
(forward Kinematics)和反向動力學系統(Inverse Kinematics),可以給其骨架設定任意樣
式的動作。Biped 的優點在於其骨架能夠調整,可以精簡枝節數量或是使其變得複雜,還
能通過平移、旋轉、縮放等變換方式改變造型。Biped 還可以將角色的運動儲存至外部文
件,這些運動檔案能夠應用到不同結構的Biped 骨架上,自動協調結構差異,得到流暢的
動作。
2.1 人體骨架模型
人體是個非常複雜的系統,由200 多個旋轉關節組成的複雜形體,要模擬真實的人體
運動,需要提供所有的關節資料,所以人體運動的模擬遠複雜於一般的剛體。由於人體結
構的複雜性,有必要對人體進行抽象和簡化[3]。為了更好的描述運動,把人體構造成層次
電腦應用技術 二零一零總第七十七期
9
結構。人體骨架建立好後,為了方便的表示關節之間的聯動關係,在一個骨骼鏈上建立一
個反向運動學鏈,通過末端效應器的位置反向求解鏈上各骨骼的位置。
2.2 建立Biped 骨架
在3DSMAX 的命令面板的Create 欄下開啟System 按鈕,點選Biped 按鈕,在任意視
窗中按住滑鼠左鍵並拖動生成一個類似人體的Biped 骨架,如圖1 所示。使用者可以在Create
Biped 卷展欄中調整建立引數來精細定製Biped 骨架,決定其構成部分以及其枝節的數量,
如圖2 所示。
在視窗中建立好biped 骨架後,進入Motion 面板,選擇Figure 模式,使用者在此模式下
可對Biped 骨架中的任一骨骼平移、旋轉、縮放。由於Biped 骨架是系統預設定的,為了
保證其骨架的完整性,使用者不可以刪除其中的一根骨骼,但可以在其允許的範圍內改變其

 

圖1 biped 骨架

圖2 Create Biped 卷展欄

肢節的數量。
2.3 製作Biped 動畫
Biped 骨架具備了模擬人體的肢體和關節運動模式的能力,這依賴於其肢體的層級結
構和運動關係。Biped 使用了完全獨立於3DSMAX 的內建IK 系統,通過對FK 和IK 的自

10
動切換和混合使用,使用者可以快速有效地製作各種型別的動畫。
不僅如此,Biped 還提供了一種更加高效的用於提高動畫製作效率的方法——步跡動
畫。只需要建立一些腳印,Biped 就會利用自身的模擬人類運動的動力學原理,計算骨架
各肢體的運動,形成自然流暢的動畫,如圖3 所示。通過選擇不同的歩跡型別,可以創作
行走、奔跑和跳躍的動作。按照歩跡自動生成的運動只是精簡的動畫,為動畫設計者提供
了一個框架,在這個基礎上使用者再發揮自己的想象空間調整骨架來達到自己想要的效果。
Biped 的歩跡動畫是根據動力學原理計算歩跡位置及時間關係後自動生成的。通過設
置Biped 的動力學引數可以調整Biped 的運動方式。Biped 的運動方式受到以下四個引數
的影響:平衡因素(Balance Factor)、動力混合(Dynamics Blend)、彈道張力(Ballistic
Tension)和重力加速度(Gravitational Acceleration)。Biped 可以將歩跡以及骨架的所有運
動儲存至外部檔案,由於Biped 骨架結構的固定性,可將運動資訊匯入到其它的Biped 骨
架上,而且能夠自動匹配不同結構和大小尺寸的Biped 骨架,獲得逼真和流暢的效果。同
時Biped 骨架還可以匯入從動作捕捉儀器得到的運動資料,方便逼真的製作人物的運動效
果,極大的縮短了製作週期。


圖3 Biped 的歩跡模式

 圖4 SDK 中的類庫繼承圖
3 3DSMAX SDK 骨骼動畫外掛開發
3.1 SDK 二次開發
MAX SDK 是一個面向物件的程式庫,提供了一組強大的可重用類庫,專用於開發
3DSMAX 外掛。事實上,3DSMAX 本身就是一個個的標準外掛(幾何體、修改器、控制

11
器等)組裝而成的。3DSMAX 外掛是一些動態連結庫,以及為與3DSMAX 緊密整合而添
加的一些特殊機制:查詢外掛的機制,幫助機制以及外掛引數配置機制。所有的3DSMAX
外掛必須是可重入的、執行緒安全的[4]。
在3DSMAX 中有一個定製好的Microsoft Visual C++應用嚮導,可以簡化製作動態鏈
接庫的程式化的過程。通過此應用嚮導,可以快速生成外掛的框架。為外掛框架新增功能
與編寫C++程式一樣,只是多了SDK 的可重用類庫使用。SDK 的所有類派生自三個抽象
基類:Animatable,ReferenceMaker,ReferenceTarget。其中的繼承關係如圖4 所示。
3.2 3DSMAX 的場景組織
3DSMAX 的整個場景是樹狀結構,樹的節點用INode 來表示,場景的根節點通過
Interface::GetRootNode 來獲得。INode 中的NumberOfchildren 函式和GetChildNode 則用來
訪問INode 的子節點。要遍歷場景中的物件,只需要通過Interface::GetRootNode 和
GetChildNode 做一次遞迴迴圈即可。INode 僅僅是一個虛擬的節點,它本身僅僅包含一些
引用標記和變換資訊,並不表示實際的Object,實際的Object 需要附著在INode 上,並以
INode 的座標系為Object 的區域性座標系。
3.3 CS 骨骼動畫匯出外掛
在3D 引擎中,骨骼動畫系統是非常重要的一個組成部分。3DSMAX 骨骼動畫匯出插
件可將3DSMAX 中製作好的骨骼動畫資料匯出供3D 引擎使用。骨骼動畫系統,包括角色
的蒙皮資料和頂點與骨骼的繫結資訊以及動作序列。匯出外掛分兩個步驟匯出骨骼動畫。
第一,匯出角色的蒙皮資料;第二,匯出角色的動作序列。
骨骼動畫系統中骨架為動畫的載體,所有的蒙皮附著在骨架之上。骨架上的骨骼其實
只是一個INode,骨骼僅僅是一些變換矩陣的資訊而已。目前沒有特別好的辦法鑑定那些
INode 是骨骼,比較可行的辦法是把所有Skin 修改器中使用的INode 都作為骨骼匯出,同
時還需要儲存骨骼之間的父子關係。
骨架匯出後,進一步需要匯出骨架的動作序列。採用的方法是先載入一個已經匯出的
骨架,遍歷這個骨架中所有的骨骼,找到此骨骼對應的INode 物件,然後確定動畫的長度
和幀數,為每一根骨骼儲存一個變換矩陣。此變換矩陣為骨骼的絕對變換矩陣,而不是相
對父骨骼的變換矩陣,這樣省去了從根骨骼開始計算骨骼的麻煩,但是也多了很多的限制。
比如不能進行動作的混合,不能做動作的差值等。對於動作序列的匯出,有兩種儲存資料
的方式,一種是簡單的匯出每一幀的變換矩陣,而不區分關鍵幀,這種方法使用簡便,易
於實現,3D 引擎不需要做複雜的差值處理等,但是此種方法儲存的資料量大,讀寫麻煩。
Direct3D 中的骨骼動畫匯出外掛使用的就是這種匯出方式;另一種方式是隻記錄關鍵幀的
變換矩陣,對非關鍵幀時刻的變換矩陣則通過3D 引擎的差值處理得到,此種方法匯出的
電腦應用技術 二零一零總第七十七期
12
骨骼動畫需要3D 引擎具有矩陣差值功能[5]。
4 結束語
骨骼動畫技術在虛擬現實、動漫遊戲中的應用日益廣泛,從3D 建模軟體中匯出骨骼
動畫資料非常重要。一個完整的骨骼動畫系統匯出外掛是一個非常複雜的工程,本文只是
就3DSMAX 中的CS 骨骼動畫匯出外掛中的主要技術做了一些分析和探索,為匯出外掛的
製作提供了一個大體的框架。
參考文獻
[1] 王洪福,陳雷霆,李東魁.三維圖形引擎中骨骼蒙皮動畫的一種實現方法[J].計算機應用研究. 2006,
12:349-351
[2] 秦文虎,吳宇暉,趙正旭,周曉晶.虛擬角色骨骼模型建立方法研究[J].計算機應用與軟體. 2008,
25(1):185-186
[3] 李春霞,楊克儉,李波. 人體骨架模型的建立及IK 問題的一種解決方式[J]. 武漢理工大學學
報,2003,27(6):815-818
[4] 羅勝. 3ds max SDK 外掛開發技術[J].機床與液壓, 2003,6: 242-243
[5] 金小剛,陸國棟.關節動畫和人體動畫.電腦動畫專欄, 1997 (1) : 40-42

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述