3DSMAX 中的CS 骨骼动画插件初探
3DSMAX 中的CS 骨骼動(dòng)畫(huà)插件初探
王玉培 鄭利平1
合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院VCC 研究室, 合肥 230009
摘要:首先介紹了3DSMAX 中的CS 骨骼動(dòng)畫(huà)制作方法,通過(guò)Biped 骨架可以快速方便的制
作兩足動(dòng)物的動(dòng)畫(huà)。并介紹了基于3DSMAX SDK 的插件開(kāi)發(fā),SDK 中類庫(kù)的組織方式和3DSMAX
的場(chǎng)景組織,最后介紹了和3D引擎密切相關(guān)的骨骼動(dòng)畫(huà)導(dǎo)出插件的開(kāi)發(fā)過(guò)程。
關(guān)鍵詞:骨骼動(dòng)畫(huà) 插件開(kāi)發(fā) 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 圖形引擎中角色動(dòng)畫(huà)是一個(gè)重要的組成部分,它在虛擬現(xiàn)實(shí)、電子游戲,甚至是
傳統(tǒng)的動(dòng)畫(huà)制作中均扮演著極其重要的角色。如何實(shí)現(xiàn)一個(gè)良好的角色動(dòng)畫(huà)以引起越來(lái)越
多的研究者的關(guān)注[1]。目前的許多建模軟件都可以快速高效的制作骨骼動(dòng)畫(huà),如3DXMAX
8
和Maya 等,但是如何從這些軟件中導(dǎo)出骨骼動(dòng)畫(huà)供3D 引擎使用,也是目前骨骼動(dòng)畫(huà)系
統(tǒng)的一個(gè)重要方面。
3D Studio Max,常簡(jiǎn)稱為3DSMAX,是Autodesk 公司開(kāi)發(fā)的基于PC 系統(tǒng)的三維動(dòng)
畫(huà)渲染和制作軟件。在3DSMAX 軟件系統(tǒng)下,最大的功能是制作高端的角色人物動(dòng)畫(huà),
它集成了自身?yè)碛械囊惶淄暾慕巧谱骷皠?dòng)畫(huà)實(shí)現(xiàn)的工具和命令,并且完美地融合了第
三方的插件等諸多優(yōu)點(diǎn)。Character Studio(以下簡(jiǎn)稱CS)是3DSMAX 的一個(gè)及其重要的
動(dòng)畫(huà)制作組件,它可以方便快捷地模擬人物及兩足動(dòng)物的動(dòng)作。
CS 由兩個(gè)部分組成,即Biped 和Physique。Biped 是新一代的三維人物及動(dòng)畫(huà)模擬系
統(tǒng),它用于模擬人物及任何二足動(dòng)物的動(dòng)畫(huà)過(guò)程。使用Biped 來(lái)簡(jiǎn)單地設(shè)計(jì)步跡即可使人物
走上樓梯,或跳過(guò)障礙,或按節(jié)拍跳舞等。還可以把一種運(yùn)動(dòng)模式復(fù)制到任意一種二足動(dòng)
物身上而不需要做重復(fù)的工作,這樣對(duì)于諸如群組動(dòng)畫(huà)創(chuàng)作就變得輕而易舉了。
3DSMAX 是一個(gè)開(kāi)放性的系統(tǒng),提供了簡(jiǎn)便的接口和豐富的類庫(kù)支持。3DSMAX 提
供了兩個(gè)層次的開(kāi)發(fā)工具:MAXScript 和SDK。MAXScript 簡(jiǎn)單易學(xué),使用方便,但是它
的限制很多,而且不能開(kāi)發(fā)底層軟件;SDK 則可以充分利用3DSMAX 的豐富的類庫(kù),對(duì)
3DSMAX 進(jìn)行最為徹底的二次開(kāi)發(fā)。用戶通過(guò)SDK 中提供的CS 類庫(kù),可以開(kāi)發(fā)出適合
自己的骨骼動(dòng)畫(huà)插件,常用的是根據(jù)3D 引擎的需要,開(kāi)發(fā)合適的骨骼動(dòng)畫(huà)導(dǎo)出插件。
2 CS 骨骼動(dòng)畫(huà)插件工具介紹
生物是由骨架來(lái)支撐肢體,并通過(guò)肌肉的收縮和拉伸來(lái)控制骨骼的運(yùn)動(dòng),從而產(chǎn)生各
種姿勢(shì)和運(yùn)動(dòng)。在虛擬場(chǎng)景中,為了讓角色的肢體能夠靈活地運(yùn)動(dòng),使用虛擬骨骼來(lái)控制
模型各肢體上的點(diǎn),各部分的骨骼組成角色的骨架[2]。通過(guò)調(diào)整骨架,可使角色模型擺出
各種造型。
CS 中的Biped 提供了一套具有人類骨架特點(diǎn)的骨架系統(tǒng),集成了正向動(dòng)力學(xué)系統(tǒng)
(forward Kinematics)和反向動(dòng)力學(xué)系統(tǒng)(Inverse Kinematics),可以給其骨架設(shè)置任意樣
式的動(dòng)作。Biped 的優(yōu)點(diǎn)在于其骨架能夠調(diào)整,可以精簡(jiǎn)枝節(jié)數(shù)量或是使其變得復(fù)雜,還
能通過(guò)平移、旋轉(zhuǎn)、縮放等變換方式改變?cè)煨汀iped 還可以將角色的運(yùn)動(dòng)保存至外部文
件,這些運(yùn)動(dòng)文件能夠應(yīng)用到不同結(jié)構(gòu)的Biped 骨架上,自動(dòng)協(xié)調(diào)結(jié)構(gòu)差異,得到流暢的
動(dòng)作。
2.1 人體骨架模型
人體是個(gè)非常復(fù)雜的系統(tǒng),由200 多個(gè)旋轉(zhuǎn)關(guān)節(jié)組成的復(fù)雜形體,要模擬真實(shí)的人體
運(yùn)動(dòng),需要提供所有的關(guān)節(jié)數(shù)據(jù),所以人體運(yùn)動(dòng)的仿真遠(yuǎn)復(fù)雜于一般的剛體。由于人體結(jié)
構(gòu)的復(fù)雜性,有必要對(duì)人體進(jìn)行抽象和簡(jiǎn)化[3]。為了更好的描述運(yùn)動(dòng),把人體構(gòu)造成層次
電腦應(yīng)用技術(shù) 二零一零總第七十七期
9
結(jié)構(gòu)。人體骨架建立好后,為了方便的表示關(guān)節(jié)之間的聯(lián)動(dòng)關(guān)系,在一個(gè)骨骼鏈上建立一
個(gè)反向運(yùn)動(dòng)學(xué)鏈,通過(guò)末端效應(yīng)器的位置反向求解鏈上各骨骼的位置。
2.2 創(chuàng)建Biped 骨架
在3DSMAX 的命令面板的Create 欄下打開(kāi)System 按鈕,點(diǎn)擊Biped 按鈕,在任意視
窗中按住鼠標(biāo)左鍵并拖動(dòng)生成一個(gè)類似人體的Biped 骨架,如圖1 所示。用戶可以在Create
Biped 卷展欄中調(diào)整建立參數(shù)來(lái)精細(xì)定制Biped 骨架,決定其構(gòu)成部分以及其枝節(jié)的數(shù)量,
如圖2 所示。
在視窗中創(chuàng)建好biped 骨架后,進(jìn)入Motion 面板,選擇Figure 模式,用戶在此模式下
可對(duì)Biped 骨架中的任一骨骼平移、旋轉(zhuǎn)、縮放。由于Biped 骨架是系統(tǒng)預(yù)設(shè)定的,為了
保證其骨架的完整性,用戶不可以刪除其中的一根骨骼,但可以在其允許的范圍內(nèi)改變其
?
圖1 biped 骨架
圖2 Create Biped 卷展欄
肢節(jié)的數(shù)量。
2.3 制作Biped 動(dòng)畫(huà)
Biped 骨架具備了模擬人體的肢體和關(guān)節(jié)運(yùn)動(dòng)模式的能力,這依賴于其肢體的層級(jí)結(jié)
構(gòu)和運(yùn)動(dòng)關(guān)系。Biped 使用了完全獨(dú)立于3DSMAX 的內(nèi)置IK 系統(tǒng),通過(guò)對(duì)FK 和IK 的自
10
動(dòng)切換和混合使用,用戶可以快速有效地制作各種類型的動(dòng)畫(huà)。
不僅如此,Biped 還提供了一種更加高效的用于提高動(dòng)畫(huà)制作效率的方法——步跡動(dòng)
畫(huà)。只需要建立一些腳印,Biped 就會(huì)利用自身的模擬人類運(yùn)動(dòng)的動(dòng)力學(xué)原理,計(jì)算骨架
各肢體的運(yùn)動(dòng),形成自然流暢的動(dòng)畫(huà),如圖3 所示。通過(guò)選擇不同的歩跡類型,可以創(chuàng)作
行走、奔跑和跳躍的動(dòng)作。按照歩跡自動(dòng)生成的運(yùn)動(dòng)只是精簡(jiǎn)的動(dòng)畫(huà),為動(dòng)畫(huà)設(shè)計(jì)者提供
了一個(gè)框架,在這個(gè)基礎(chǔ)上用戶再發(fā)揮自己的想象空間調(diào)整骨架來(lái)達(dá)到自己想要的效果。
Biped 的歩跡動(dòng)畫(huà)是根據(jù)動(dòng)力學(xué)原理計(jì)算歩跡位置及時(shí)間關(guān)系后自動(dòng)生成的。通過(guò)設(shè)
置Biped 的動(dòng)力學(xué)參數(shù)可以調(diào)整Biped 的運(yùn)動(dòng)方式。Biped 的運(yùn)動(dòng)方式受到以下四個(gè)參數(shù)
的影響:平衡因素(Balance Factor)、動(dòng)力混合(Dynamics Blend)、彈道張力(Ballistic
Tension)和重力加速度(Gravitational Acceleration)。Biped 可以將歩跡以及骨架的所有運(yùn)
動(dòng)保存至外部文件,由于Biped 骨架結(jié)構(gòu)的固定性,可將運(yùn)動(dòng)信息導(dǎo)入到其它的Biped 骨
架上,而且能夠自動(dòng)匹配不同結(jié)構(gòu)和大小尺寸的Biped 骨架,獲得逼真和流暢的效果。同
時(shí)Biped 骨架還可以導(dǎo)入從動(dòng)作捕捉儀器得到的運(yùn)動(dòng)數(shù)據(jù),方便逼真的制作人物的運(yùn)動(dòng)效
果,極大的縮短了制作周期。
圖3 Biped 的歩跡模式
?圖4 SDK 中的類庫(kù)繼承圖
3 3DSMAX SDK 骨骼動(dòng)畫(huà)插件開(kāi)發(fā)
3.1 SDK 二次開(kāi)發(fā)
MAX SDK 是一個(gè)面向?qū)ο蟮某绦驇?kù),提供了一組強(qiáng)大的可重用類庫(kù),專用于開(kāi)發(fā)
3DSMAX 插件。事實(shí)上,3DSMAX 本身就是一個(gè)個(gè)的標(biāo)準(zhǔn)插件(幾何體、修改器、控制
11
器等)組裝而成的。3DSMAX 插件是一些動(dòng)態(tài)鏈接庫(kù),以及為與3DSMAX 緊密集成而添
加的一些特殊機(jī)制:查找插件的機(jī)制,幫助機(jī)制以及插件參數(shù)配置機(jī)制。所有的3DSMAX
插件必須是可重入的、線程安全的[4]。
在3DSMAX 中有一個(gè)定制好的Microsoft Visual C++應(yīng)用向?qū)?#xff0c;可以簡(jiǎn)化制作動(dòng)態(tài)鏈
接庫(kù)的程式化的過(guò)程。通過(guò)此應(yīng)用向?qū)?#xff0c;可以快速生成插件的框架。為插件框架添加功能
與編寫(xiě)C++程序一樣,只是多了SDK 的可重用類庫(kù)使用。SDK 的所有類派生自三個(gè)抽象
基類:Animatable,ReferenceMaker,ReferenceTarget。其中的繼承關(guān)系如圖4 所示。
3.2 3DSMAX 的場(chǎng)景組織
3DSMAX 的整個(gè)場(chǎng)景是樹(shù)狀結(jié)構(gòu),樹(shù)的節(jié)點(diǎn)用INode 來(lái)表示,場(chǎng)景的根節(jié)點(diǎn)通過(guò)
Interface::GetRootNode 來(lái)獲得。INode 中的NumberOfchildren 函數(shù)和GetChildNode 則用來(lái)
訪問(wèn)INode 的子節(jié)點(diǎn)。要遍歷場(chǎng)景中的對(duì)象,只需要通過(guò)Interface::GetRootNode 和
GetChildNode 做一次遞歸循環(huán)即可。INode 僅僅是一個(gè)虛擬的節(jié)點(diǎn),它本身僅僅包含一些
引用標(biāo)記和變換信息,并不表示實(shí)際的Object,實(shí)際的Object 需要附著在INode 上,并以
INode 的坐標(biāo)系為Object 的局部坐標(biāo)系。
3.3 CS 骨骼動(dòng)畫(huà)導(dǎo)出插件
在3D 引擎中,骨骼動(dòng)畫(huà)系統(tǒng)是非常重要的一個(gè)組成部分。3DSMAX 骨骼動(dòng)畫(huà)導(dǎo)出插
件可將3DSMAX 中制作好的骨骼動(dòng)畫(huà)數(shù)據(jù)導(dǎo)出供3D 引擎使用。骨骼動(dòng)畫(huà)系統(tǒng),包括角色
的蒙皮數(shù)據(jù)和頂點(diǎn)與骨骼的綁定信息以及動(dòng)作序列。導(dǎo)出插件分兩個(gè)步驟導(dǎo)出骨骼動(dòng)畫(huà)。
第一,導(dǎo)出角色的蒙皮數(shù)據(jù);第二,導(dǎo)出角色的動(dòng)作序列。
骨骼動(dòng)畫(huà)系統(tǒng)中骨架為動(dòng)畫(huà)的載體,所有的蒙皮附著在骨架之上。骨架上的骨骼其實(shí)
只是一個(gè)INode,骨骼僅僅是一些變換矩陣的信息而已。目前沒(méi)有特別好的辦法鑒定那些
INode 是骨骼,比較可行的辦法是把所有Skin 修改器中使用的INode 都作為骨骼導(dǎo)出,同
時(shí)還需要保存骨骼之間的父子關(guān)系。
骨架導(dǎo)出后,進(jìn)一步需要導(dǎo)出骨架的動(dòng)作序列。采用的方法是先加載一個(gè)已經(jīng)導(dǎo)出的
骨架,遍歷這個(gè)骨架中所有的骨骼,找到此骨骼對(duì)應(yīng)的INode 對(duì)象,然后確定動(dòng)畫(huà)的長(zhǎng)度
和幀數(shù),為每一根骨骼保存一個(gè)變換矩陣。此變換矩陣為骨骼的絕對(duì)變換矩陣,而不是相
對(duì)父骨骼的變換矩陣,這樣省去了從根骨骼開(kāi)始計(jì)算骨骼的麻煩,但是也多了很多的限制。
比如不能進(jìn)行動(dòng)作的混合,不能做動(dòng)作的差值等。對(duì)于動(dòng)作序列的導(dǎo)出,有兩種保存數(shù)據(jù)
的方式,一種是簡(jiǎn)單的導(dǎo)出每一幀的變換矩陣,而不區(qū)分關(guān)鍵幀,這種方法使用簡(jiǎn)便,易
于實(shí)現(xiàn),3D 引擎不需要做復(fù)雜的差值處理等,但是此種方法保存的數(shù)據(jù)量大,讀寫(xiě)麻煩。
Direct3D 中的骨骼動(dòng)畫(huà)導(dǎo)出插件使用的就是這種導(dǎo)出方式;另一種方式是只記錄關(guān)鍵幀的
變換矩陣,對(duì)非關(guān)鍵幀時(shí)刻的變換矩陣則通過(guò)3D 引擎的差值處理得到,此種方法導(dǎo)出的
電腦應(yīng)用技術(shù) 二零一零總第七十七期
12
骨骼動(dòng)畫(huà)需要3D 引擎具有矩陣差值功能[5]。
4 結(jié)束語(yǔ)
骨骼動(dòng)畫(huà)技術(shù)在虛擬現(xiàn)實(shí)、動(dòng)漫游戲中的應(yīng)用日益廣泛,從3D 建模軟件中導(dǎo)出骨骼
動(dòng)畫(huà)數(shù)據(jù)非常重要。一個(gè)完整的骨骼動(dòng)畫(huà)系統(tǒng)導(dǎo)出插件是一個(gè)非常復(fù)雜的工程,本文只是
就3DSMAX 中的CS 骨骼動(dòng)畫(huà)導(dǎo)出插件中的主要技術(shù)做了一些分析和探索,為導(dǎo)出插件的
制作提供了一個(gè)大體的框架。
參考文獻(xiàn)
[1] 王洪福,陳雷霆,李東魁.三維圖形引擎中骨骼蒙皮動(dòng)畫(huà)的一種實(shí)現(xiàn)方法[J].計(jì)算機(jī)應(yīng)用研究. 2006,
12:349-351
[2] 秦文虎,吳宇暉,趙正旭,周曉晶.虛擬角色骨骼模型建立方法研究[J].計(jì)算機(jī)應(yīng)用與軟件. 2008,
25(1):185-186
[3] 李春霞,楊克儉,李波. 人體骨架模型的建立及IK 問(wèn)題的一種解決方式[J]. 武漢理工大學(xué)學(xué)
報(bào),2003,27(6):815-818
[4] 羅勝. 3ds max SDK 插件開(kāi)發(fā)技術(shù)[J].機(jī)床與液壓, 2003,6: 242-243
[5] 金小剛,陸國(guó)棟.關(guān)節(jié)動(dòng)畫(huà)和人體動(dòng)畫(huà).電腦動(dòng)畫(huà)專欄, 1997 (1) : 40-42
再分享一下我老師大神的人工智能教程吧。零基礎(chǔ)!通俗易懂!風(fēng)趣幽默!還帶黃段子!希望你也加入到我們?nèi)斯ぶ悄艿年?duì)伍中來(lái)!https://blog.csdn.net/jiangjunshow
轉(zhuǎn)載于:https://www.cnblogs.com/skiwnchiwns/p/10344193.html
總結(jié)
以上是生活随笔為你收集整理的3DSMAX 中的CS 骨骼动画插件初探的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 最高响应比调度算法_高响应比调度算法(c
- 下一篇: threejs精灵(Sprite)