走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

YuanyuanLi發表於2020-03-31
2019 ACM 圖靈獎大獎出爐,最終花落計算機圖形學專家 Patrick M. Hanrahan 和 Edwin E. Catmull,以表彰他們在概念創新和軟硬體方面的貢獻,以及對計算機圖形學所產生的根本性的影響。而上一次圖靈獎頒給圖形學領域的科學家,還是在 32 年前——1988 年計算機圖形學之父 Ivan Sutherland 憑藉其發明的 Sketchpad 而獲得圖靈獎。這種圖形使用者介面的早期版本直接影響了計算機的使用者互動方式,現在早已在個人計算機中無處不在。它發明了一系列在今天的使用者介面中被視為「基本操作」的功能:繪製水平線和垂直的線、將繪製的線組合成不同形狀、調整圖形大小、旋轉圖形以及縮放視窗等。

本次獲獎的 Patrick M. Hanrahan 和 Edwin E. Catmull,則從另一個角度深刻的改變了我們的生活。作為皮克斯的創始人——Edwin E. Catmull 還曾是華特 · 迪士尼動漫工作室的總裁——他們的貢獻主要集中在從計算機圖形學發展出的電腦生成影像(Computer-generated imagery,CGI)技術中,他們的研究成果展示了利用計算機來繪製的故事影片能夠如何為電影製作賦予新的靈感。

正如 Patrick M. Hanrahan 和 Edwin E. Catmull 本身的興趣在電影製作上,CGI 最廣為人知的應用是在影視作品中創造角色,又稱「CGI 動畫」,比如迪士尼動畫電影中的所有角色都是透過 CGI 技術創造出來的。但 CGI 在印刷媒體、影片遊戲、商業廣告、互動多媒體等方向也有廣泛應用,例如宜家 70% 以上的場景圖都是在電腦中建模渲染完成的,並且 CGI 的商業應用還在呈逐年上升的趨勢。如果我們跳出 CGI 的定義範圍,進入它的父領域計算機圖形學(computer graphi,CG),那麼應用該技術的研究幾乎涉及到我們生活中與計算機有關的方方面面了,比如使用者介面設計、渲染、光線跟蹤、計算機動畫、3D 建模、著色器、GPU 設計等等。

為什麼 CGI 應用如此廣泛?直觀來講,CGI 的主要目的是提供足夠逼真的視覺效果。這種視覺效果,最直接的的作用就是提供更好的感官體驗——比如用 CGI 技術為電腦生成的影像加上一些「瑕疵」,使其更貼近我們在現實生活觀察到的形象。或者對一些紋理的渲染——毛髮、皮膚、布料等,電腦直接生成的影像往往銳度過高並且不具有紋理。在一些現代醫學治療中,由於一些植入產品需要根據患者的情況進行高度定製,CGI 已經成為制定手術計劃的一部分,用以對患者的器官進行精準建模。類似地,利用 CGI 生成的 3D 建築模型比傳統圖紙更準確,並且可以提供互動式體驗,從而為客戶提供更好的概覽,並且能夠對細節、特殊的應用環境進行檢測。由於互動式視覺化可以動態展現資料,CGI 也可以允許使用者從多個角度檢視資料,比如對複雜機械結構的視覺化。

在過去的半個世紀,CGI 以電影行業為起點,的確悄然無息將其影響力擴散到了電子遊戲行業和 VR、AR 等行業,包括資料中心管理和人工智慧在內的多個領域。本文接下來的內容中,以皮克斯為中心,走過 CGI 半個世紀的發展,我們將看到 CGI 是如何從一些非常基礎的應用,發展到今天這樣的規模的

1950 年代-1970 年代

這一階段是 CGI 的創始發展期,一個「從無到有」的時期。

1958 年,阿爾弗雷德·希區柯克(Alfred Hitchcock)釋出了首部應用 CGI 技術的電影 VERTIGO,在該片中,一個綠色的螺旋動畫從一隻眼睛中緩緩升起。這個「簡單」的特效,是世界上第一個計算機動畫。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

電影 VERTIGO 截圖。來源:youtube

在這一期間最重要的技術之一當屬由 N. Konstantinov 領導的一組蘇聯數學家和物理學家所研發的貓的運動的物理數學計算模型。該演算法是在 BESM-4 計算機上程式設計的,使用時需要用計算機列印出數百幀,以後再轉換為膠片。他們使用的模型和其理論形成了今日動畫電影和計算機遊戲的基礎技術之一。

但整體來看,這十幾年中有關 CGI 技術 的研究寥寥無幾,直到下一個十年的來臨。

1970 年代-1980 年代

70 年代,Edwin E. Catmull 等大佬工作逐漸起步。當時還是猶他大學的學生的 Edwin E. Catmull 和 Fred Parke 合作,於 1972 年製作了世界上第一部 3D 多邊形動畫(polygonal 3D animation):A Computer Animated Hand。這部動畫模擬了他自己的左手,被視為 CGI 發展史上的 milestone 之一。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

動畫 A Computer Animated Hand 截圖。來源:youtube

1974 年,Fred Parke 在發表的論文中將他們的工作延伸到了人臉建模領域,這是世界上最早的高模擬人臉 3D 渲染作品之一。這兩項工作最終於 1976 年彙集在了電影 future world 中。由於 Edwin E. Catmull 和 Fred Parke 的傑出工作,猶他州立大學計算機圖形實驗室吸引了來自各地的人,這些人隨後散佈在各行各業,創造了許多我們意想不到的聯結——比如慕名而來的約翰·沃諾克(John Warnock),他之後成立了 Adobe Systems。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

電影 future world 海報 來源:https://en.wikipedia.org/w/index.php?curid=5819539

這一時期 CGI 技術發展突飛猛進,大量目前使用的演算法的雛形都在這一時期被創造出來,而這之中,最重要的恐怕要數渲染(render)技術在這一時期的突破了。在 CGI 技術之中,一般在影像初步建立之後,就要進行渲染了,渲染效果將會直接決定模型與動畫最終顯示效果。簡單的來說,渲染涉及到如何將 3D 物體投射到 2D 影像中,並儘可能的符合在肉眼情況下我們會觀察到的幾何效果。

下圖給出了一個簡單的例子——圖左中,可以看到一組已經建模好的 3D 物體,每個物體的位置和形狀都由幾個頂點定義,在這裡頂點之間僅簡單的透過直線連線,並形成了多個平面,以組成該物體的表面。很顯然,在現實世界中,我們無法直接透視到物體被遮擋的部分。因此,渲染程式首先需要根據定義好的視角來決定哪些表面可以被觀察到、哪些則不能,也就是下圖中所呈現的效果。隨後,渲染程式可以在物體表面上進行著色,來進一步突出其表面紋理、物體位置等資訊。在下圖右中物體僅被填上了不同程度的灰色,沒有涉及更多的步驟。在實際應用中,出於不同的目的,渲染程式可以將重點放在影像的不同特徵上——為圖片增加更豐富的色彩和亮度、為物體表面增加紋理、為物體表面增加凹凸起伏、模擬光照在不同環境(如霧)中散射的效果、增加陰影、增加反射、調整透明感、增加光的折射效應、模擬間接光源光照的效果、增加景深、運動模糊、不追求真實感而增強影像的藝術性等。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

一個簡單的渲染示例 來源:http://www.graphics.cornell.edu/online/tutorial/objrender/

更準確的定義的話,渲染是透過計算機程式從 3D 模型生成 2D 影像。在這一定義中,模型是用語言或者資料結構進行嚴格定義的三維物體或虛擬場景的描述,它包括幾何、視點、紋理、照明和陰影等資訊。如前文提到的,出於不同的目的,渲染程式可能會側重不同的角度——被渲染物體本身的質感、紋理、透明度、真實感等。用計算機語言來模擬這些過程,涉及到大量的幾何原理、光學原理和數學計算。皮克斯在今天的電影動畫中有如此重要的地位,很大程度上也源於他們在渲染領域中做出的突出貢獻。

當時,早期使用的光柵化渲染方法主要透過考慮視角和被渲染物體之間的光線連線來確定物體在 2D 影像上的投影,但這種方法沒有考慮深度資訊,因此無法確定重疊物體的遮擋情況。也就是說,在上例中,我們甚至無法完成從圖左到圖中的步驟。1974 年,Edwin E. Catmull 博士畢業,在他的畢業論文中,他描述了深度緩衝演算法(Z-buffering)用於管理計算機圖形學中影像深度座標的方法。根據他的演算法,在進行物體渲染時,程式需要同時生成一個緩衝區用以儲存生成的畫素的深度。如果之後發現另一個物體所生成的畫素與此有所重合,就根據緩衝區中儲存的深度進行選擇,以達到較近的物體遮擋較遠物體的效果。下圖給出了深度緩衝演算法圖例。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

深度緩衝演算法圖示(左):3D 場景(右):深度緩衝表示 圖源:https://en.wikipedia.org/wiki/Z-buffering#/media/File:Z_buffer.svg

但帶有深度的光柵化渲染方法仍然無法解決物體在光照下應該具有的反射、折射、陰影效果。幾經發展後,1979 年,Turner Whitted 提出了極大影響了渲染技術的光線追蹤演算法(ray tracing)。在這種演算法中,當光線從視點發出並撞擊到物體上時,會產生最多 3 種型別的光線:反射、折射和陰影。如下圖所示,從相機發出的(紅色)光線打到了球體上併發生了反射,如果反射光最終反射到了光源,根據光線可逆原理,我們知道該光源可以照亮這個球體。而在球體的另一側則處於陰影之中,因為在其和光源之間存在球體的其他部位,遮擋住了光源。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

光線追蹤圖解 圖源:https://upload.wikimedia.org/wikipedia/commons/8/83/Ray_trace_diagram.svg

光線追蹤演算法在今天也是一個十分活躍的研究領域,一個主要原因是光線追蹤的計算複雜度極高,一般都需要利用蒙特卡洛方法等求近似解。在遊戲等產品上應用實時光線追蹤直到幾年前都是一個挑戰,今年在英偉達 GTC GPU Technology Conference 上仍然有好幾個 session 的主題是如何對光線追蹤計算進行加速。

1980 年代-2000 年代

從 80 年代開始,越來越多的電影參與進了 CGI 技術的使用中,其中今天我們耳熟能詳的經典電影多到令人目不暇接,這種繁榮在一定程度上也反哺了 CGI 技術的發展。1982 年,在著名電影星際迷航 II 中,「創世紀效應」(Genesis Effect)大放異彩——在電影中,Carol Marcus 博士解釋道創世紀專案是一種計算機模擬的專案,旨在將不宜居住的世界轉化或重塑為鬱鬱蔥蔥的天堂。

為在電影中實現這種視覺效應,電影首次使用了當時還在盧卡斯影業旗下的皮克斯創造的 32 位 RGBA 繪畫軟體,並使用了分形生成的景觀(fractal-generated landscape)和顆粒效果進行渲染。其實在當時,勇於應用 CGI 技術的電影除了科幻片以外,還有很多恐怖片——這倒也很合理,畢竟這兩者都需要豐富的想象力,需要創造更多的「異形」,只不過當時使用 CGI 拍攝的恐怖電影中流傳到今天成為經典的較少。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

電影著名電影星際迷航 II 中「創世紀效應」截圖 圖源:https://www.youtube.com/watch?v=QXbWCrzWJo4

光線追蹤演算法的提出,使 CGI 生成影像的真實感大大增加,因為它本質上是在試圖模擬自然界中光線傳播的過程。在此基礎上,為了更進一步增強 CGI 生成的某些型別的影像的真實感,Hanrahan 於 1988 年提出了立體渲染技術(volume rendering)。其背後的思想主要是在自然界中有一些物質本身就是以一定體積存在的——如雲、火、霧——用前文提到的那些幾何渲染方法很難取得逼真的效果。立體渲染技術仍然致力於如何將 3D 物體投射到 2D 影像中,但更關注如何在體素(voxel)而非畫素(pixel)水平上實現這種渲染,以及如何保證物體紋理質感的呈現,比如生成一副傷口的影像需要關注如何真實的表示肌肉的走向、紋理等。

1993 年,Hanrahan 還開發了利用次表面散射(subsurface scattering)描繪皮膚和頭髮、利用蒙特卡羅光線追蹤來渲染複雜照明效果的技術。次表面散射模擬的是光在穿透半透明物體時以不規則的角度在物體內部反射多次,然後再從不同角度離開物體表面的效果。這種現象在大理石、皮膚、蠟等型別的材質上非常常見,因此要逼真的渲染這種材料,首先必須模擬光的這種傳播機制,下圖左中給出了一個現實生活中的例子——當光穿透手指時,會產生一種半透明、光亮、毛茸茸的質感,圖右則給出了計算機根據次表面散射演算法渲染的影像。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

人手的次表面散射現象。圖源:By Davepoo2014 - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=39205630

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

計算機渲染的次表面散射現象圖源:By Piotrek Chwała - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=7615927

也是在這一時期,3D 建模技術開始初露頭角。透過專用軟體在三個維度上進行數學表示,3D 建模可以對被建模物件的任何表面進行建模。具體來說,3D 模型使用 3D 空間中的點集合表示實體,點與點之間由三角形、直線(Polygonal modeling)、曲面(Curve modeling)等進行連線。這個點集可以由使用者手動建立、根據已有演算法建立、或者透過掃描實體建立。初步建模完成後,再透過紋理對映(texture mapping)技術,對建模的物體表面進行最佳化。紋理對映——又是 Edwin E. Catmull 對 CGI 領域一個重要貢獻,由他在自己的博士論文中最早提出——主要是為物體表面著色的一種方法

現實世界中的物體一般都具有非常豐富的顏色,即便是黑色的物體也不可能具有同一的黑色,要令電腦生成的影像足夠逼真,為影像上的物體新增這些多樣的顏色必不可少,有無紋理的物體對比見下圖所示。然而,如果程式要為影像中的每一個畫素制定顏色,效率就太低了。紋理對映要做的,簡單來說,就是找到選擇一個紋理/影像,然後將它「貼」到影像中制定的物體上。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

圖(1)沒有紋理的 3D 模型(2)有紋理的 3D 模型圖源:By Anynobody - Own work, CC BY-SA 4.0,https://commons.wikimedia.org/w/index.php?curid=3441137

立體渲染技術 + 3D 建模 + 紋理對映,為電影業帶來了新的革命。1995 年,皮克斯(首映電影)與迪斯尼製片廠合作製作出了玩具總動員,這無疑也是對 CGI 技術影響最大的電影。這是第一部完全由計算機動畫(CG)製作的長篇電影,也是全 3D 動畫。在當時的電腦計算能力下,每幀需要 4 到 13 個小時才能完成。在這部電影發行之前,計算機圖形(CG)通常用於短片或具有特殊效果的真人電影的補充,直到在 1990 年代中期,人們多少都認為用計算機制作整個數字電影是不切實際的。

在此片出現後,CGI 展示了其巨大的潛力,計算機動畫電影或多或少已成為新規範,並取代了傳統的手繪動畫電影。皮克斯在這部電影的製作中使用的自家軟體 RenderMan 負責 3D 建模和動畫應用程式與渲染引擎之間的通訊,到今天,RenderMan 無疑成為了好萊塢工業中的標準工具。據統計,在 47 部被提名了奧斯卡最佳藝術特效的電影中,44 部使用了這一工具。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

電影玩具總動員 圖源:https://zh.wikipedia.org/wiki/玩具總動員 #/media/File:Movie_poster_toy_story.jpg

在電影行業之外,CGI 技術的影響也逐漸擴充套件到了影片遊戲中。1992 年,在 Sega Model 1 街機系統板上執行的 Virtua Racing 奠定了全 3D 賽車遊戲和在更廣泛的受眾中普及實時 3D 多邊形圖形的基礎。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

電影玩具總動員 圖源:https://zh.wikipedia.org/wiki/玩具總動員 https://en.wikipedia.org/w/index.php?curid=60308343

渲染一直是對計算資源要求很高的一類演算法,很難不認為渲染技術的發展對電腦的計算資源的發展沒有起到推動作用,兩者至少一直是緊密結合的。也是在 90 年代,在目前深度學習中最為重要計算資源的 GPU 開始流行,並將這一趨勢持續到了今天。90 年底後期,Hanrahan 和他的學生擴充套件了 Renderman 著色語言,使得其可以在當時剛打入市場的 GPU 上實時執行。Hanrahan 和他的學生為 GPU 開發的程式語言帶動了商業版著色語言的開發(包括 OpenGL),從而徹底改變了電子遊戲的程式編寫

1999 年,英偉達釋出了具有開創性的 GeForce 256,這是第一張被稱為圖形處理單元或 GPU 的家庭影片卡,計算機使用通用的圖形處理框架——例如 DirectX 和 OpenGL——的慣例也是在那時建立起來。正是由於功能更強大的圖形硬體和 3D 建模軟體,計算機圖形才變得更加詳細和逼真。這十年中,AMD 佔據的市場份額也不斷增加,最終形成了我們今天所熟悉的「雙寡頭」市場。

2000 年代至今

進入千禧年後,CGI 技術的發展仍然非常快,其中不乏圖形處理單元的持續增長和日益成熟帶來的推動力——到了此時,3D 圖形 GPU、3D 渲染功能已成為臺式計算機的標準配置。CGI 開始變得無處不在——CGI 電影激增,諸如冰河世紀和馬達加斯加等傳統動畫動畫片電影以及諸如《海底總動員》等眾多皮克斯產品在該領域的票房中佔據主導地位;在影片遊戲中,索尼 PlayStation 2 和 3,Microsoft Xbox 系列遊戲機以及 Nintendo 的產品(例如 GameCube)和 Windows PC 都吸引了大量的追隨者,諸如超級俠盜獵車手,刺客信條,最終幻想,生化奇兵,王國之心,鏡之邊緣。CGI 在這兩個領域的成功發展將計算機圖形學的影響力傳播到了主流領域,並逐漸引入其他領域,比如電視廣告。

軟體方面,OpenGL 也變得更成熟,它與 DirectX 有了很大的改進。在這一十年中,第二代著色器語言 HLSL 和 GLSL 開始流行。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

電影冰河世紀。圖源:合理使用, https://zh.wikipedia.org/w/index.php?curid=294080

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

遊戲最終幻想。圖源:合理使用,https://zh.wikipedia.org/w/index.php?curid=3621086

這一時期,在電影製作中大量應用了另一非常重要的技術:動作捕捉(motion capture)。運動捕獲,又稱運動捕捉或運動捕捉,是記錄物體或人的運動的過程。最早在 1978 年的電影指環王中其實就有用到,但由於當時的技術限制,還不能做到對演員的表情等細節進行捕捉。2009 年,阿凡達(Avatar)以使用運動捕捉技術為其角色進行動畫而不是使用軟體來手工繪製/建立角色而聞名。另外,阿凡達(Avatar)是最早使用「Simulcam」的電影之一。這款特殊的攝像機能夠將 CGI 動畫影像疊加在實時拍攝的實時影像之上(Outlaw)。

走過半個多世紀,計算機圖形學的發展歷程告訴你5毛錢的電影特效究竟多難

電影阿凡達。圖源:By Source, Fair use, https://en.wikipedia.org/w/index.php?curid=23732044

到了 2010 年後,CGI 在影片中幾乎無處不在,預渲染的圖形在科學上幾乎是真實照片級的。這時期的工作主要集中在整合更復雜的多階段的影像生成。紋理對映也已經發展為一個複雜的多階段過程,使用著色器(shader)將紋理渲染、反射技術等多種演算法整合到一個渲染引擎中的操作並不少見。

阻礙 CGI 技術,特別是渲染技術,發展的一大瓶頸仍然是計算,在深度學習、人工智慧火爆的今天,AI 也為 CGI 在這方面的突破助了一臂之力。幾天前英偉達釋出的 DLSS 2.0(deep learning super sampling),根據官方宣傳,可以保證渲染程式在較低解析度下對遊戲畫面進行實時光線追蹤,而 DLSS 2.0 則會將渲染後的畫面進行 4 倍超取樣,從而保證細節與幀率的兼顧。也就是說,在 DLSS 2.0 下,要執行實時 4k 遊戲,渲染程式只需要在 1080k 的解析度下進行計算。「要在遊戲中的每一幀上執行一個神經網路」,像這樣瘋狂的想法還有很多,很難想象 AI 和渲染結合起來將會把 CGI 生成影像帶到什麼方向上。

至此,CGI 技術從一開始只能對一些簡單的形狀進行建模的研究,逐漸發展成了一個子研究極度豐富的複合學科,其對其他電腦科學領域的影響數不勝數,涉及到 CGI 的跨學科領域也屢見不鮮。正如 ACM 主席 Cherri M. Pancake 所說:「Hanrahan 和 Catmull 做出的貢獻表明,計算機某個專業領域的進展能夠對領域內其他學科產生深遠影響」。

在這一小苗成長為一顆參天大樹的過程中,始終有 Patrick M. Hanrahan 和 Edwin E. Catmull 的參與,他們也因此獲得了 ACM 大獎。Patrick M. Hanrahan 和 Edwin E. Catmull 的成功對所有正在從事自己所熱愛的工作的人都是一個巨大的鼓勵,因為他們證明了個人在自己的研究領域內的堅持和貢獻,不僅可以推動該單個領域的進步,甚至還可以改變世界。我們所生活的世界真正由我們的雙手親自創造。頒獎典禮預期 6 月在美國舊金山舉行,Patrick M. Hanrahan 和 Edwin E. Catmull 將分享 100 萬美元獎金。可見,五毛錢的特效可能隨處可見,但好的特效,不僅費時費力,還很值錢。

作者介紹:李媛媛,幾次轉行,本科國際貿易,研究生轉向統計,畢業後留在比利時,選擇從事農用機械研發工作,主要負責影像處理,實現計算機視覺演算法的落地。欣賞一切簡單、優雅但有效地演算法,試圖在深度學習的簇擁者和懷疑者之間找到一個平衡。我追求生活的寬度,這也是為什麼在工作之外,我也是機器之心的一名技術分析師。希望在這裡和大家分享自己對於技術的理解,透過思想的碰撞拓寬思路和眼界。

相關文章