3DSMAX 中的CS 骨骼动画插件初探
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
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow
轉載于:https://www.cnblogs.com/skiwnchiwns/p/10344193.html
總結
以上是生活随笔為你收集整理的3DSMAX 中的CS 骨骼动画插件初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最高响应比调度算法_高响应比调度算法(c
- 下一篇: threejs精灵(Sprite)