CG中的動(dòng)畫(huà)基本算法(interpolation,keyframing,skinning,simulation,particles,cloth,fire and water, human loc...

Note

這是對(duì)MIT Foundation of 3D Computer Graphics第23章的翻譯,本章講解了動(dòng)畫(huà)基本算法知識(shí)。本書(shū)內(nèi)容仍在不斷的學(xué)習(xí)中,因此本文內(nèi)容會(huì)不斷的改進(jìn)。若有任何建議,請(qǐng)不吝賜教ninetymiles@icloud.com。

注:文章中相關(guān)內(nèi)容歸原作者所有,翻譯內(nèi)容僅供學(xué)習(xí)參考。
另:Github項(xiàng)目CGLearning中擁有相關(guān)翻譯的完整資料、內(nèi)容整理、課程項(xiàng)目實(shí)現(xiàn)。


已經(jīng)完成的章節(jié)


動(dòng)畫(huà):甚至都不是一個(gè)介紹(Animation: Not Even an Introduction)

在CG電影和視頻游戲中,事物四處移動(dòng)。這被稱(chēng)作動(dòng)畫(huà)。再一次,動(dòng)畫(huà)應(yīng)該有相關(guān)自身的整本書(shū)來(lái)講解,這個(gè)書(shū)我們沒(méi)有資格寫(xiě)。本章中,我們會(huì)針對(duì)用于動(dòng)畫(huà)的一些技術(shù)給你一種概念(并且展示了很多圖片)。感興趣的讀者可能希望在參考書(shū)目[4]中檢出課程注釋。計(jì)算機(jī)動(dòng)畫(huà)有爭(zhēng)議地作為計(jì)算機(jī)圖形中最多挑戰(zhàn)性保留的子領(lǐng)域。即便今天這個(gè)領(lǐng)域中重要的改進(jìn)仍在進(jìn)行。

23.1 插值(Interpolation)

實(shí)現(xiàn)動(dòng)畫(huà)的最簡(jiǎn)單方式為讓藝術(shù)家手工做大部分困難的工作。計(jì)算機(jī)只是被用于插值,或填充,多種需要的數(shù)據(jù)。

23.1.1 關(guān)鍵幀(Keyframing)

關(guān)鍵幀背后的思路讓動(dòng)畫(huà)器在低解析(low-resolution)時(shí)間樣本集合上勾勒出動(dòng)畫(huà)序列。在每個(gè)這樣的時(shí)間樣本上,藝術(shù)家描述場(chǎng)景的完整狀態(tài)。計(jì)算機(jī)隨后使用平滑插值方法生成藝術(shù)家指定的幀之間的幀。我們?cè)诘?章中講解了這種技術(shù)。在關(guān)鍵幀中,困難的工作由藝術(shù)家完成;計(jì)算只是被用于卸去了一些更加單調(diào)和繁瑣的工作。就如看起來(lái)一樣枯燥,很多計(jì)算機(jī)動(dòng)畫(huà)以這種方式完成。它給予動(dòng)畫(huà)器在最終輸出的外觀和感知上的完全控制。

23.1.2 蒙皮(Skinning)

蒙皮是一種簡(jiǎn)單技術(shù),用于在三角形網(wǎng)格中模擬身體部分的畸形(變形)。參考圖示\text{Figure 23.1}。蒙皮易于在頂點(diǎn)著色器實(shí)現(xiàn)并且通常用于視頻游戲中。

Figure23.1.png

Figure 23.1: 通過(guò)靠近關(guān)節(jié)的模型視圖矩陣,你可以輕松使用可變形關(guān)節(jié)產(chǎn)生物體動(dòng)畫(huà)。來(lái)自于參考書(shū)目[74],??Industrial Light & Magic。

讓我們假設(shè)藝術(shù)家始于以描述自然“靜止姿態(tài)”物體的輸入性的三角形網(wǎng)格。在這種輸入中,每個(gè)頂點(diǎn)使用物體坐標(biāo)描述,也就是說(shuō),\tilde{p}=\vec{o}^t\mathbf{c}。接下來(lái),在一個(gè)被稱(chēng)作索具(rigging)的處理中,藝術(shù)家設(shè)計(jì)了幾何輪廓并且把它填充到網(wǎng)格中。這個(gè)輪廓可以被當(dāng)作連接關(guān)節(jié)的骨骼集合。在當(dāng)前時(shí)刻,讓我們假設(shè)每個(gè)頂點(diǎn)被藝術(shù)家關(guān)聯(lián)到一塊骨骼上。

這種輪廓形狀自然形成一種子-物體坐標(biāo)系和子-物體矩陣體系,就如我們之前在小節(jié)5.4中所看到的(參考圖示\text{Figure 5.4})。這些子-物體矩陣表達(dá)了一個(gè)幀和其處于靜止姿態(tài)的“父”幀的關(guān)系?;貞浺幌拢?,在小節(jié)5.4中,我們具有\vec{\mathbfu0z1t8os}_r^t = \vec{\mathbf{o}}_r^tA_rB_rC_rD_r,此處\vec{\mathbfu0z1t8os}_r^t曾為(正交標(biāo)準(zhǔn)化的)右下臂幀,并且矩陣A_r,B_r,C_r,D_r為剛體矩陣。我們已經(jīng)增加“r”下標(biāo)意指“靜止姿態(tài)”。讓我們針對(duì)這種骨骼定義漸增的累加矩陣,N_r := A_rB_rC_rD_r;這種矩陣表達(dá)了幀關(guān)系:\vec{\mathbfu0z1t8os}_r^t=\vec{o}^tN_r。讓我們考慮某種頂點(diǎn),使用輸入物體-坐標(biāo) c,其已經(jīng)被關(guān)聯(lián)到下臂骨骼。我們可以記錄這個(gè)點(diǎn)為
\tilde{p}=\vec{\mathbf{o}}^t\mathbf{c}=\vec{\mathbfu0z1t8os}_r^tN_r^{-1}\mathbf{c}

這在小節(jié)5.4中被實(shí)現(xiàn),在動(dòng)畫(huà)中,我們操縱骨骼,通過(guò)更新它的一些矩陣到新設(shè)置中,比如說(shuō)A_n,B_n,C_nD_n,此處下標(biāo)意指“新”。讓我們針對(duì)這種骨骼定義“新的”累加矩陣,N_n := A_nB_nC_nD_n,其表達(dá)了關(guān)系:\vec{\mathbfu0z1t8os}_n^t=\vec{\mathbf{o}}^tN_n。比方說(shuō),這種骨骼操縱移動(dòng)了下臂幀:\vec{\mathbfu0z1t8os}_r^t \Rightarrow \vec{\mathbfu0z1t8os}_n^t。如果我們要順著這種幀以剛體風(fēng)格移動(dòng)點(diǎn)\tilde{p},那么我們需要以下面表達(dá)更新
\large{ \begin{array}{rcl} \vec{\mathbfu0z1t8os}_r^tN_r^{-1}\mathbf{c} & \Rightarrow & \vec{\mathbfu0z1t8os}_n^tN_r^{-1}\mathbf{c} \\ & = & \vec{\mathbf{o}}^tN_nN_r^{-1}\mathbf{c}\end{array} }
這種情形中,被變換點(diǎn)的眼睛坐標(biāo)為E^{-1}ON_nN_r^{-1}\mathbf{c},并且我們看到針對(duì)這個(gè)頂點(diǎn)的模型試圖矩陣應(yīng)該為E^{-1}ON_nN_r^{-1}

這種處理給了我們一種“堅(jiān)硬的”蒙皮結(jié)果,此處每個(gè)頂點(diǎn)僅僅沿著一根骨骼移動(dòng)。要獲得靠近一個(gè)物體關(guān)節(jié)的平滑蒙皮,我們?cè)试S動(dòng)畫(huà)器要關(guān)聯(lián)頂點(diǎn)到超過(guò)一個(gè)骨骼。針對(duì)其每個(gè)骨骼,我們隨后混合結(jié)果到一起。

更專(zhuān)業(yè)一點(diǎn),針對(duì)每個(gè)頂點(diǎn),我們?cè)试S動(dòng)畫(huà)器設(shè)置一系列權(quán)重w_i,總數(shù)為1,這些權(quán)重指定每個(gè)骨骼的運(yùn)動(dòng)應(yīng)該影響這個(gè)頂點(diǎn)多少。那么,在動(dòng)畫(huà)過(guò)程中,針對(duì)頂點(diǎn)我們計(jì)算為
\large{ \sum_iw_iE^{-1}O(N_n)_i(N_r)_i^{-1}\mathbf{c} \tag{23.1} }
此處(N)_i為針對(duì)骨骼i的漸增矩陣。

蒙皮易于在頂點(diǎn)著色器中實(shí)現(xiàn)。代替?zhèn)鬟f單一模型視圖矩陣到著色器,我們傳遞一系列模型視圖矩陣為統(tǒng)一變量。針對(duì)每個(gè)頂點(diǎn)的權(quán)重被傳遞為屬性變量,借助頂點(diǎn)緩存對(duì)象。方程(23.1)中的求和隨后在頂點(diǎn)著色器代碼中被計(jì)算。

23.2 模擬(Simulation)

物理給予我們隨時(shí)間變化掌控物體的運(yùn)動(dòng)和進(jìn)展的方程式。始于初始條件的輸入集合,這種方程可以以計(jì)算方式模擬,用以預(yù)測(cè)實(shí)際的物體在真實(shí)世界中如何運(yùn)動(dòng)。如果完成的好,這可以生成非常真實(shí)和令人信服的效果。物理模擬其基本形式為預(yù)測(cè)處理;你填入初始條件并且輸出動(dòng)畫(huà)。如何控制這種動(dòng)畫(huà)很不明顯。物理模擬的領(lǐng)域在過(guò)去十年已經(jīng)看到很多進(jìn)步,其在特效生成的計(jì)算機(jī)圖形的成功方面是關(guān)鍵的。

23.2.1 粒子(Particles)

針對(duì)一個(gè)點(diǎn)的時(shí)間進(jìn)化,運(yùn)動(dòng)物理學(xué)始于常微分方程(ODE)。
\large{ f = ma = m\dot{v} = m\ddot{x} \tag{23.2} }
力為質(zhì)量乘以加速度,此處加速度為速度的時(shí)間導(dǎo)數(shù),而速度為位置的時(shí)間導(dǎo)數(shù)。力可以表達(dá)類(lèi)似引力或風(fēng)之類(lèi)的事物。

始于初始條件,我們可以離散化這個(gè)常微分方程(ODE)并且在時(shí)間上使用所謂的歐拉步驟前進(jìn)
\large{ \begin{array}{rcl} x_{t+h} & = & x_t + v_th \\ v_{t+h} & = & v_t + a_th \\ a_{t+h} & = & f(x_{t+h},t+h)/m \end{array} }
這種處理被稱(chēng)為時(shí)間積分。當(dāng)使用歐拉步驟,我們需要采取足夠小的步驟以確保方法不會(huì)最終實(shí)現(xiàn)奇怪的內(nèi)容。可選擇地,存在更成熟方式的完整文獻(xiàn)用以求解常微分方程(ODE)。針對(duì)更多細(xì)節(jié),參考課后書(shū)目[4]中的注釋。

在粒子系統(tǒng)動(dòng)畫(huà)中,我們把我們的場(chǎng)景建模為非交互點(diǎn)狀粒子,根據(jù)方程(23.2)逐步發(fā)展,或者建模為空氣中一縷煙霧粒子。參考圖示\text{Figure 23.2}。通常每個(gè)粒子被渲染為半透明的小斑點(diǎn)(blob)或表面。

Figure23.2.png

Figure 23.2: 模擬一群簡(jiǎn)單粒子可以被用于動(dòng)畫(huà)流動(dòng)的水。來(lái)自于參考書(shū)目[37],??Eurographics and Blackwell Publishing Ltd。

23.2.2 剛體(Rigid Bodies)

要建模剛體隨時(shí)間的發(fā)展(諸如骰子在桌上滾動(dòng)),事情馬上就變得復(fù)雜得多。首先,因?yàn)槲覀兊奈矬w不是點(diǎn),我們需要處理旋轉(zhuǎn)和角動(dòng)量(angular momentum)。存在很多其它需要定位的困難問(wèn)題。要參考更多細(xì)節(jié),查看參考書(shū)目[4]中的注釋。

在剛體模擬中,我們通常想建模彼此互相碰撞和反彈(回應(yīng))的主體(bodies)。計(jì)算碰撞要求我們不停跟蹤所有成對(duì)的主體并且決定它們何時(shí)相交。參考圖示\text{Figure 23.3}。要有效地實(shí)現(xiàn)這種,我們通常使用一種動(dòng)態(tài)進(jìn)化,空間綁定的體系。另一個(gè)問(wèn)題是一旦我們找到一個(gè)相交,這就意味著多個(gè)軀干已經(jīng)互相滲透,這一定要被正確復(fù)原。另一種微妙之處在于真實(shí)的物體不是真正的剛體;它們實(shí)際上在接觸時(shí)以非常輕微地畸形化行為反彈。因?yàn)槲覀儾幌MM這種行為,我么需要想出新的運(yùn)動(dòng)近似方程。

Figure23.3.png

Figure 23.3: 要模擬剛性物體,我們必須計(jì)算碰撞并且同時(shí)處理動(dòng)量、摩擦力和張力。來(lái)自于參考書(shū)目[27],??ACM。

另一個(gè)(驚人)困難的問(wèn)題來(lái)自于正確建模摩擦力(friction)為接觸力。當(dāng)一個(gè)物體在地板上處于靜止時(shí),我們需要正確建模阻止物體滑過(guò)地板的物理學(xué),或者無(wú)窮地反彈和來(lái)回顫動(dòng)。

23.2.3 衣料(Cloth)

一種對(duì)于建模重要的現(xiàn)象是衣料。這種情形中,表面要不被建模為粒子元素的網(wǎng)格,要不作為三角形元素的網(wǎng)格。在一個(gè)基于粒子的方式中,力被添加到這個(gè)系統(tǒng)中以避免拉伸,切削,和過(guò)分彎曲。阻尼也被加入以建模內(nèi)部摩擦力;這消除了震動(dòng)。在一個(gè)基于三角形的方法中,由于拉伸、切削和彎曲,你寫(xiě)下了表達(dá)式E用于衣料狀態(tài)的能量。力從而被解釋為f=\frac{\partial E}{\partial \tilde{x}}。關(guān)于衣料效果要參考更多,參考課后書(shū)目[24]并且由此引用。要建模衣料,我們也需要計(jì)算衣料內(nèi)以及衣料和其環(huán)境之間的碰撞。參考圖示\text{Figure 23.4}。

Figure23.4.png

Figure 23.4: 衣料可以使用多種算法被模擬。存在很多獲得“剛好正確”行為的微妙之處。來(lái)自于參考書(shū)目[24],??ACM。

頭發(fā)建模經(jīng)常被相似地處理為質(zhì)量-彈簧模型。關(guān)于頭發(fā)要參考更多,請(qǐng)查看參考書(shū)目[67]并由此引用。參考圖示\text{Figure 23.5}。

Figure23.5.png

Figure 23.5: 頭發(fā)可以作為質(zhì)量-彈簧系統(tǒng)被動(dòng)畫(huà)化。來(lái)自于[67],??ACM。

23.2.4 可變形材料(Deformable Materials)

很多真實(shí)世界的物體很明顯是可變形的。這可以被建模為合適的物理方程式,并且也在時(shí)間上積分。要建模可變形的物理學(xué),我們需要建模物體的內(nèi)部容積,經(jīng)常作為具體的四面體網(wǎng)格。除了類(lèi)似果凍凝膠之類(lèi)的新奇條目,這對(duì)于產(chǎn)生人體真實(shí)模型也是重要的。參考圖示\text{Figure 23.6}。

Figure23.6.png

Figure 23.6: 要建??勺冃文P?,我們需要在問(wèn)題中表達(dá)容積。來(lái)自于[57],??Springer。

23.2.5 火和水(Fire and Water)

建模和動(dòng)畫(huà)類(lèi)似水和火的物理現(xiàn)象也可能是重要的。參考圖示\text{Figure 23.7}。這些經(jīng)常即借助粒子同時(shí)也借助基于3D網(wǎng)格的技術(shù)被建模。在一個(gè)液體容積中扭曲和回旋的逐漸發(fā)展被納維-斯托克斯偏微分方程(Navier-Stokes partial differential equation)所決定。它是要求自身數(shù)值方法的數(shù)值模擬,諸如非常流行的“穩(wěn)定流體(stable fluids)”方法[70]。關(guān)于流體模擬的更多信息,參考最近Bridson所寫(xiě)的書(shū)[9]。

Figure23.7.png

Figure 23.7: 一張令人震驚的模擬水的圖像。來(lái)自于參考書(shū)目[46],??IEEE。

23.3 人類(lèi)運(yùn)動(dòng)(Human Locomotion)

人類(lèi)不是簡(jiǎn)單的被動(dòng)物體,而且他們的計(jì)算機(jī)模擬已經(jīng)證明比水和灰塵之類(lèi)的被動(dòng)物體要難得多。更進(jìn)一步,在計(jì)算機(jī)動(dòng)畫(huà)中,我們顯然想細(xì)致控制虛擬生物所執(zhí)行的動(dòng)作,而不只是模擬來(lái)自于初始條件集合所形成的結(jié)果。

存在一個(gè)時(shí)刻,當(dāng)研究者寄希望于來(lái)自機(jī)器人、控制理論和優(yōu)化的概念最終能夠完全從頭開(kāi)始產(chǎn)生人類(lèi)運(yùn)動(dòng)的真實(shí)樣子。這個(gè)目標(biāo)是難以實(shí)現(xiàn)的,并且當(dāng)前有前景的技術(shù)極度依賴(lài)于運(yùn)動(dòng)捕捉的使用。在運(yùn)動(dòng)捕捉中,當(dāng)從校準(zhǔn)過(guò)的相機(jī)/傳感器裝置中查看時(shí),真實(shí)的人會(huì)執(zhí)行多種運(yùn)動(dòng)。被捕捉的目標(biāo)經(jīng)常穿著捕捉點(diǎn)以幫助捕獲處理。參考圖示\text{Figure 23.8}。這種數(shù)據(jù)隨后可以被傳輸?shù)教摂M角色。這種數(shù)據(jù)也可以在某種程度上被修改和控制。

Figure23.8.png

Figure 23.8: 一個(gè)人和一匹馬。來(lái)自于參考書(shū)目[41],??Sian Lawson。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容