電影中的數(shù)學(xué)
Joan Lasenby
關(guān)鍵詞: 數(shù)學(xué),電影,三維動(dòng)畫(huà) 我們都曾經(jīng)對(duì)電影里呈現(xiàn)出來(lái)的一些電腦制作的精美畫(huà)面驚嘆不已,可很多人不知道的是,如果沒(méi)有數(shù)學(xué),我們就無(wú)法看到諸如《侏羅紀(jì)公園》里的恐龍和《指環(huán)王》里的奇景,尤其是Gollum超炫的旋轉(zhuǎn)。 這些令人嘖嘖稱奇的畫(huà)面是怎么做出來(lái)的呢?答案是計(jì)算機(jī)圖形學(xué)和計(jì)算機(jī)視覺(jué)學(xué)。本文將簡(jiǎn)單討論一下一部電影是如何在數(shù)學(xué)的幫助下制作完成的。我們首先討論如何描述我們所看到的電影畫(huà)面,然后我們將討論如何鮮活地呈現(xiàn)這些電影畫(huà)面。 場(chǎng)景設(shè)置![]() 使用電腦制作一部電影的第一步是創(chuàng)造電影故事的人物以及這些人物所處的環(huán)境。這些目標(biāo)都是用一些相連的多邊形(通常是三角形)組成的曲面來(lái)表示。電腦要將每一個(gè)三角形的頂點(diǎn)記錄下來(lái)。而且非常重要的一點(diǎn)是,電腦需要知道用于表示一個(gè)人物或目標(biāo)的三角形的外部。注意一個(gè)三角形的外部是可以由右手旋轉(zhuǎn)法則唯一確定的。這里右手旋轉(zhuǎn)法則的意思是指我們的右手只有唯一的一個(gè)方式可以順著一個(gè)三角形的給定的頂點(diǎn)順序握緊拳頭。這時(shí)候大拇指將指向三角形的一面,而這一面我們就定義為三角形的外部。讀者可以試一下下面這個(gè)簡(jiǎn)單的例子。你可以發(fā)現(xiàn)三角形(A,B,C)的外部(或者叫外部法向量)正好與三角形(A,C,B)的外部方向相反。 ![]() 我們用三角形組成的網(wǎng)格來(lái)表示一個(gè)目標(biāo)的表面。接下來(lái)我們就應(yīng)該對(duì)每個(gè)三角形著色了。其中很重要的一點(diǎn)是我們需要準(zhǔn)確地描述我們所關(guān)心的場(chǎng)景的光照。這一任務(wù)通常是由一種叫光線追蹤的過(guò)程完成。從我們的視點(diǎn)出發(fā),我們反向追蹤那些一個(gè)目標(biāo)發(fā)出的通過(guò)反射后會(huì)進(jìn)入我們眼睛的光線。如果一個(gè)光源發(fā)出的光線經(jīng)過(guò)一個(gè)小平面(也就是組成目標(biāo)的表面的一個(gè)三角形)的反射后會(huì)進(jìn)入我們的眼睛,那這個(gè)小平面就應(yīng)該是亮色。這樣看上去就像是這個(gè)小平面被該光源照亮。反之,這個(gè)小平面就著上更暗的顏色。 ![]() 為了通過(guò)光線反向追蹤到一個(gè)特定的小平面,我們需要用數(shù)學(xué)知識(shí)來(lái)表示一個(gè)目標(biāo)的表面,并且需要求解一些涉及到光線和這個(gè)小平面所確定的二維平面的幾何方程。這時(shí)候向量的概念就很重要了。對(duì)我們關(guān)心的場(chǎng)景,我們可以建立一個(gè)以視點(diǎn)為原點(diǎn)(即(0,0,0)這一點(diǎn))的三維坐標(biāo)系統(tǒng)。一個(gè)向量v=(a,b,c)表示的是一個(gè)從原點(diǎn)出發(fā)的矢量,其中在各個(gè)坐標(biāo)軸上的坐標(biāo)值分別是a,b和c。我們可以將向量v乘以一個(gè)常數(shù)。比如說(shuō),v乘以2,我們得到的新向量定義為 因此,2v是一個(gè)與v同方向的,但長(zhǎng)度是v兩倍的向量。 現(xiàn)在我們看一下v這個(gè)表達(dá)式,其中 由三角形小平面確定的二維平面可以由三條信息來(lái)描述:一個(gè)頂點(diǎn)(記為a1)的位置,以及表示從a1到a2和a3這兩條直線的向量。 下面的方框里,我們列出兩類表達(dá)式:即從視點(diǎn)出發(fā)的光線方程以及三角形小平面確定的二維平面方程。為了確定一條光線是否通過(guò)一個(gè)三角形小平面和他們相交的位置,以及計(jì)算反射光線方程,這兩類表達(dá)式在我們需要求解的方程里都會(huì)出現(xiàn)。 光線方程:r= 定點(diǎn)是
通過(guò)光線追蹤技術(shù),我們可以制作出很逼真的場(chǎng)景。但這個(gè)過(guò)程非常耗時(shí)。如果用電腦來(lái)制作電影,這或許不是什么大問(wèn)題。但是對(duì)于電腦游戲制作等,我們需要不停地快速改變場(chǎng)景的光照。這時(shí)使用光線追蹤技術(shù)的話,速度就顯得不夠了。對(duì)于諸如陰影、散焦、多重反射等更復(fù)雜的現(xiàn)象,動(dòng)態(tài)地建立數(shù)學(xué)模型來(lái)刻畫(huà)這些情節(jié)是不容易的。這時(shí)候,我們需要更復(fù)雜的數(shù)學(xué)模型,比如預(yù)計(jì)算輻射傳輸和光能傳輸。 我們需要的只是一點(diǎn)想象力場(chǎng)景的設(shè)置和光照都準(zhǔn)備好了,等導(dǎo)演一喊“開(kāi)拍”,我們的人物就要?jiǎng)悠饋?lái)了?,F(xiàn)在我們看一下如何呈現(xiàn)鮮活的電影畫(huà)面。 一個(gè)目標(biāo)需要完成的最基本的動(dòng)作就是順著一個(gè)給定的軸旋轉(zhuǎn)一個(gè)角度。坐標(biāo)幾何學(xué)為我們提供了工具,使得我們可以準(zhǔn)確地計(jì)算目標(biāo)旋轉(zhuǎn)后的每一個(gè)點(diǎn)的位置,而且,這一工具十分的快速有效。 為了理解這一工具,我們還是先補(bǔ)充一點(diǎn)數(shù)學(xué)知識(shí)。我們知道25這個(gè)數(shù)有兩個(gè)平方根,即+5和-5,因?yàn)?span id="owbywda" class="MathJax_Preview"> 由于i的引入,類似于 業(yè)余數(shù)學(xué)家Jean-Robert Argand在1806年最先給出了復(fù)數(shù)和i這個(gè)數(shù)的幾何解釋。Argand將復(fù)數(shù)與二維平面中的點(diǎn)聯(lián)系起來(lái)了:即復(fù)數(shù)的實(shí)數(shù)部分與虛數(shù)部分分別由兩個(gè)坐標(biāo)軸來(lái)表示。比如,1+i這個(gè)復(fù)數(shù)對(duì)應(yīng)到(1,1)這個(gè)點(diǎn)。一般的情形是,a+bi這個(gè)復(fù)數(shù)對(duì)應(yīng)(a,b)這個(gè)點(diǎn)。 ![]() Argand還意識(shí)到復(fù)數(shù)的乘法也有一個(gè)幾何描述:旋轉(zhuǎn)。我們可以看一下(1,1)這個(gè)點(diǎn)表示的復(fù)數(shù)1+i如果乘以i會(huì)得到什么結(jié)果: 即得到了(-1,1)這個(gè)點(diǎn),也就是說(shuō)由原來(lái)的點(diǎn)旋轉(zhuǎn)90度得到的點(diǎn)。再次乘以i,我們得到: 即得到(-1,-1)這個(gè)點(diǎn),也就是說(shuō)又旋轉(zhuǎn)了90度。用數(shù)i去做乘法得到的效果是旋轉(zhuǎn)90度!事實(shí)上,不僅僅是90這個(gè)角度,任何的旋轉(zhuǎn)角度都可以通過(guò)乘以某一個(gè)復(fù)數(shù)來(lái)實(shí)現(xiàn)。 3D畫(huà)面數(shù)學(xué)家漢密爾頓(Sir William Rowan Hamilton)可能是都柏林三一學(xué)院(Trinity College Dublin)最有名的校友。他在人生的最后二十年一直致力于找到一個(gè)類似二維空間里的復(fù)數(shù)那樣的數(shù)來(lái)表示三維空間的旋轉(zhuǎn)。 ![]() 在他人生的最后時(shí)刻,漢密爾頓找到了答案。他把這些數(shù)命名為四元數(shù),其表達(dá)式是 其中 正如我們對(duì)復(fù)數(shù)的討論一樣,我們可以用幾何來(lái)解釋四元數(shù)并用他們來(lái)描述旋轉(zhuǎn)。但這時(shí)我們考慮的是三維空間里的旋轉(zhuǎn)。 具體來(lái)說(shuō),我們用i,j,k來(lái)表示三維空間的基本平面:即i表示yz平面,j表示xz平面,k表示xy平面,它們各自的外部法向分別是x,y,z。 ![]() 如果我們想將點(diǎn) 然后,我們用這兩個(gè)四元數(shù)去乘一個(gè)數(shù)a。注意a表示為x,y,z三個(gè)坐標(biāo)軸的單位向量的組合,而乘法遵從適用于平面i,j,k以及單位向量的特殊準(zhǔn)則。這樣我們得到 可以驗(yàn)證, 漢密爾頓這一在都柏林的一座橋下散步時(shí)產(chǎn)生的靈感,成為刻畫(huà)三維空間里旋轉(zhuǎn)的最有效的工具。但是也有人不喜歡他定義的這個(gè)新乘法。物理學(xué)家Lord Kelvin就曾經(jīng)這樣評(píng)價(jià)四元數(shù)“雖然十分巧妙,但對(duì)任何接觸過(guò)它的人而言都絕對(duì)是一個(gè)禍患!” 從實(shí)用角度看,有人覺(jué)得四元數(shù)的一個(gè)不方便之處是兩個(gè)四元數(shù)相乘,其結(jié)果取決于二者相乘的次序,也即四元數(shù)乘法的不可交換性。舉例來(lái)說(shuō),根據(jù)Hamilton的準(zhǔn)則,我們可以得到ij=k以及ji=-k??墒?,如果我們將i,j,k看成是基本平面,那些令開(kāi)爾文(Lord Kelvin)和他同時(shí)代的人所擔(dān)心的四元數(shù)的性質(zhì)是顯而易見(jiàn)成立的。 逼真畫(huà)面的制作漢密爾頓的發(fā)明現(xiàn)在在圖形應(yīng)用領(lǐng)域里被廣泛的使用,用以描述目標(biāo)的移動(dòng)和動(dòng)作。在計(jì)算機(jī)圖形學(xué)里,兩個(gè)最重要的工具是變形和插值。插值和一種叫關(guān)鍵幀的技術(shù)用來(lái)確定一個(gè)目標(biāo)的初始和終止形狀和位置,并使用計(jì)算機(jī)將中間狀態(tài)描述出來(lái)。下圖是一個(gè)例子。 ![]() 讀者可以在網(wǎng)上下載一些程序,來(lái)看看Richard Wareham是如何通過(guò)動(dòng)畫(huà)來(lái)制作一條發(fā)育不完全的小蛇。給點(diǎn)幾個(gè)指定的點(diǎn),這些程序便可以使用插值技術(shù)逐漸呈現(xiàn)出一條蛇的形狀。 變形則可以幫助我們由一些簡(jiǎn)單的目標(biāo)制作成復(fù)雜的目標(biāo)。如下圖所示,通過(guò)一些數(shù)學(xué)的處理,一塊搭在變形曲面上的布可以由一個(gè)很規(guī)則的曲面來(lái)生成。變形與插值都需要快速穩(wěn)定的數(shù)學(xué)技術(shù)以及與四元數(shù)相關(guān)的方法。
如何制作逼真的Gollum上述技術(shù)都是制作經(jīng)典動(dòng)畫(huà)的核心技術(shù)。事實(shí)上這些技術(shù)制作出來(lái)的卡通人物是十分逼真的。但是,這些技術(shù)如果用來(lái)制作真人的話,我們馬上能看出來(lái)效果并不好。為了制作逼真的人物畫(huà)面,動(dòng)作抓取這個(gè)技術(shù)就很有必要了。 ![]() 很多人物,例如電影版的《指環(huán)王》里的Gollum是由動(dòng)作抓取技術(shù)來(lái)完成的。通常我們需要安置一些反射器來(lái)表示一個(gè)人身體的關(guān)鍵部分,例如頭、肩膀、肘關(guān)節(jié)、膝蓋等。每一個(gè)人都由好幾套攝影器來(lái)拍攝,并且要用電腦記錄這些反射器的位置變換。我們?cè)儆萌S的數(shù)據(jù)來(lái)填充一個(gè)人的骨架。最后,前面所述的所有技術(shù)都會(huì)用來(lái)給骨骼部位添上肌肉,從而制作出鮮活的、有呼吸的、和會(huì)運(yùn)動(dòng)的人物。
如果你試過(guò)看完一部電影的完整的職員表,你會(huì)發(fā)現(xiàn)一部成功的電影需要融合各種人才的聰明才智,比如編劇、導(dǎo)演、演員、服裝設(shè)計(jì)、布景等等等等。但是還有一個(gè)名字常常被電影的職員表所忽略,那就是數(shù)學(xué)家。假如沒(méi)有攝像追蹤技術(shù)或空間四元數(shù)旋轉(zhuǎn)物體,今天很多火爆的電影根本不可能與觀眾見(jiàn)面。所以,下次當(dāng)你再次走進(jìn)電影院享受這些數(shù)字技術(shù)帶來(lái)的精美場(chǎng)面時(shí),不妨舉起你的爆米花向我們的幕后英雄----數(shù)學(xué)家致敬吧! |
|
來(lái)自: 西納 > 《今日閱讀重點(diǎn)》