文/郝笑弘
在我們平時(shí)的學(xué)習(xí)和生活中,隨處都可以接觸到計(jì)算機(jī)實(shí)時(shí)動(dòng)畫技術(shù),比如炫目的3D動(dòng)畫電影、游戲人物等。在物理模型下進(jìn)行實(shí)時(shí)動(dòng)畫設(shè)計(jì),充分考慮各種外力形式對(duì)布料等模型的形變作用,可以達(dá)到動(dòng)態(tài)仿真效果,使計(jì)算機(jī)模擬動(dòng)畫充分反映出現(xiàn)實(shí)世界的物理規(guī)律,從而給人帶來更加真實(shí)的視覺感。對(duì)計(jì)算機(jī)實(shí)時(shí)動(dòng)畫技術(shù)進(jìn)行分析,有利于提高我們的計(jì)算機(jī)和物理學(xué)應(yīng)用能力。
本次設(shè)計(jì)的布料實(shí)時(shí)動(dòng)畫以Visual C++為開發(fā)平臺(tái),采用C++語言和OpenGL 圖形API。OpenGL 是一款功能強(qiáng)大的計(jì)算機(jī)三維圖形接口,包含120 多個(gè)圖形函數(shù)庫(kù),支持幾何模型構(gòu)建和動(dòng)態(tài)仿真。初學(xué)者也可以快速上手應(yīng)用,軟件開發(fā)難度較低。OpenGL 的三維場(chǎng)景交互程度高,渲染效果逼真,性能非常卓越。采用OpenGL 三維圖形設(shè)計(jì)界面,可以滿足本次設(shè)計(jì)的軟件需求。物理引擎則選擇Physx 引擎,可以自動(dòng)引入牛頓動(dòng)力學(xué)原理,增加系統(tǒng)交互性,高度模擬自然界中的物體特征,得到較為逼真的模型和動(dòng)畫效果。在上述模擬環(huán)境配置條件下,我們可以將布料模型設(shè)計(jì)為具有質(zhì)量的三角網(wǎng)格模型,遵循牛頓第二定律進(jìn)行設(shè)計(jì),為仿真效果提供保障。
從上述分析可知,質(zhì)點(diǎn)-彈簧模型易于計(jì)算和實(shí)現(xiàn),因此在計(jì)算機(jī)實(shí)時(shí)動(dòng)畫制作中得到了廣泛應(yīng)用。本文采用該模型構(gòu)建的布料模型由一系列均質(zhì)、離散化的質(zhì)點(diǎn)組成,質(zhì)點(diǎn)之間連接有不同類型的彈簧,假定彈簧長(zhǎng)度不為零,且不考慮其質(zhì)量,加入彈簧的目的是模擬布料紗線之間的相互作用力。布料紗線的內(nèi)部作用力可分為結(jié)構(gòu)力、彎曲力和剪切力,因此彈簧也分為三種類型,即結(jié)構(gòu)彈簧、彎曲蛋黃和剪切彈簧。通過三種彈簧的應(yīng)用,可以充分模擬布料的各種運(yùn)動(dòng)形式,獲得真實(shí)的視覺感。此外,還要考慮布料所受的外力作用,模擬布料在下落、懸掛或與其他物體發(fā)生接觸時(shí)的運(yùn)動(dòng)狀態(tài)??梢詫⑼饬Ψ譃橹亓Α⒛Σ亮涂諝庾枇Φ?。其中,重力使布料模型各質(zhì)量的重力之和,空氣阻力能夠減緩彈簧拉伸形變,使布料模型逐漸趨于穩(wěn)態(tài)。
在布料的質(zhì)點(diǎn)-彈簧模型動(dòng)畫模擬過程中,若將布料某一點(diǎn)固定,此時(shí)受到的拉伸力如果過大,會(huì)導(dǎo)致布料被撕裂或斷開。在拉力作用質(zhì)點(diǎn)附近,彈簧會(huì)出現(xiàn)超形變現(xiàn)象,而遠(yuǎn)離拉力作用點(diǎn)的質(zhì)點(diǎn)拉伸長(zhǎng)度則接近正常,這種現(xiàn)象被稱為布料的超彈性形變,是布料動(dòng)畫模擬過程中需要處理好的問題。在布料質(zhì)點(diǎn)-彈簧模型的模擬過程中,為方便計(jì)算,通常假設(shè)彈簧彈性因子為線性變化,但在實(shí)際受力情況下,其形變并不完全符合線性規(guī)律,這是超彈性形變問題的根本成因。另一方面,布料動(dòng)畫的幀刷新速度要能夠被人的肉眼所接受,實(shí)時(shí)動(dòng)畫仿真對(duì)畫面更新率有較高要求,需要適當(dāng)降低動(dòng)畫時(shí)間步長(zhǎng),過大的時(shí)間步長(zhǎng)也會(huì)引發(fā)超彈性形變問題。
針對(duì)這一問題,傳統(tǒng)的解決算法主要包括基于質(zhì)點(diǎn)速度的修正方法和基于質(zhì)點(diǎn)位置的修正方法。其中,質(zhì)點(diǎn)位置修正法是由Provot等人基于逆向動(dòng)力學(xué)原理提出的修正方法。在每個(gè)時(shí)間步長(zhǎng)模擬結(jié)束后,對(duì)各質(zhì)點(diǎn)位置進(jìn)行計(jì)算,進(jìn)而計(jì)算彈簧拉伸鋁,如果超過最大拉伸率的設(shè)定值,就對(duì)彈簧兩端質(zhì)點(diǎn)的位置進(jìn)行修正,將彈簧拉伸率控制在最大拉伸率范圍內(nèi)?;谒俣鹊男拚椒ㄗ钤缬蒝assilev 提出,是在每個(gè)時(shí)間間隔結(jié)束后對(duì)彈簧拉伸率進(jìn)行檢查,與預(yù)先設(shè)定值進(jìn)行比較,根據(jù)實(shí)際拉伸率與設(shè)定閾值的關(guān)系,對(duì)質(zhì)點(diǎn)速度進(jìn)行修正。該方法后來經(jīng)House.tal 和Bridson 等人的改進(jìn),修正效果有所提高,但總體來看,修正效率較低,且約束不嚴(yán)格,可能會(huì)再次引起超彈性形變?yōu)椤?/p>
針對(duì)傳統(tǒng)解決算法的不足,目前又提出一種新的解決方法,即基于拉伸張量的排序算法,該方法針對(duì)布料超彈性形變的特征和形成原因,采用拉伸張量對(duì)質(zhì)點(diǎn)進(jìn)行倒序排列,優(yōu)先對(duì)拉伸張量值較大的質(zhì)點(diǎn)狀態(tài)進(jìn)行調(diào)整,采用迭代算法進(jìn)行排序和更新,可以明顯提高超彈性形變問題的處理效率,滿足實(shí)時(shí)動(dòng)畫模擬效果要求。
本文采用經(jīng)過優(yōu)化的AABB 層次包圍盒法實(shí)現(xiàn)碰撞檢測(cè),該方法對(duì)三角化的布料模型和待碰撞物體建立層次包圍盒二叉樹,遍歷兩棵發(fā)生碰撞的二叉樹,判斷重疊區(qū)域,檢測(cè)某個(gè)動(dòng)畫時(shí)間點(diǎn),布料與其他物體的碰撞情況。AABB 包圍盒法的應(yīng)用分為兩個(gè)階段,即初步檢測(cè)階段和詳細(xì)檢測(cè)階段。在初步檢測(cè)階段,通過判斷包圍盒在三個(gè)坐標(biāo)軸的投影情況,判斷包圍盒是否存在相交,若包圍盒的投影都重疊,則兩包圍盒必然相交,若至少有一個(gè)投影布重疊,則不發(fā)生相交,從而將三維碰撞檢測(cè)轉(zhuǎn)化為一維空間的碰撞檢測(cè)問題。在湘西檢測(cè)階段,主要應(yīng)用直線-三角形碰撞檢測(cè)方法,判斷碰撞是否發(fā)生,并執(zhí)行碰撞響應(yīng)函數(shù)。采用上述碰撞檢測(cè)方法,可以同時(shí)滿足計(jì)算機(jī)動(dòng)畫模擬的真實(shí)性和實(shí)時(shí)性要求。
綜上所述,通過對(duì)計(jì)算機(jī)實(shí)時(shí)動(dòng)畫的實(shí)現(xiàn)原理和實(shí)現(xiàn)方法進(jìn)行分析,可以了解到計(jì)算機(jī)實(shí)時(shí)動(dòng)畫制作的關(guān)鍵技術(shù),明確模擬平臺(tái)的配置條件。在此基礎(chǔ)上,構(gòu)建合理的計(jì)算機(jī)動(dòng)畫模型,做好超彈性處理和碰撞檢測(cè),可以使動(dòng)畫效果接近真實(shí),并滿足實(shí)時(shí)性要求。通過本次研究和實(shí)踐,使我對(duì)三維動(dòng)畫的制作有了一個(gè)新的認(rèn)識(shí),并在查閱資料和實(shí)踐過程中,提高了知識(shí)技能的應(yīng)用能力。