UCLA 蔣陳凡夫:從轉系生到終身教授,十二年圖形學物理模擬的自我回顧

語言: CN / TW / HK

機器之心轉載

來源:知乎

作者:蔣陳凡夫

最近評上 tenure,有人來祝賀:”Now you can freely decline review requests!”。我想了想,似乎對心態上的改變確實如此而已。又想到也許可以寫個什麼紀念一下。那這 19 歲到 31 歲,有什麼拿來回味的沒有?好像有很多,但不整理一下的話,又不知從何說起。那還是直接寫一點吧。從物理本科,到 CS PhD,CS 教職,又在數學 tenure,這看似曲折的十二年竟是在做同樣的研究,一年都沒有浪費。一路走來,有很多東西值得緬懷和總結,也許能幫助思考未來。順便把這一路幹過的牛逼的事,和遇到過的牛逼的人都寫下來,看著應該很舒爽。

第〇章:我的三叉戟

第一章:緣起

第二章:一炮炸出來兩個坑

第三章:雪與海的浪漫

第四章:摩擦摩擦,在光滑的路上,摩擦

第五章:少年英雄胡淵鳴

第六章:與 timestep 結緣

第七章:摩擦碰撞的第三次戰役,IPC 魔童降世

第八章:下一個“Timestep”

第〇章:我的三叉戟

十二年來摸爬滾打地給計算機圖形學做了些物理模擬相關的科研。拿的出手的代表方向有三:物質點法(Material Point Method: MPM),仿射粒子元胞法(Affine Particle In Cell: APIC),和增量勢能接觸法(Incremental Potential Contact: IPC)。每個方法的人和事下面的章節再去回憶,這一章,先籠統概括一下。

第一個方向:MPM。說到物質點法,按照慣例,或許得提一下自己多多少少參與了的冰雪奇緣。2012 年發掘 MPM 後我去做了些別的事情,組裡其他同學拿 MPM 驗證了雪;我在早期沒有去參與最初的 SIGGRAPH 工作。迪士尼工作室的程式碼很臃腫,遠遠不止 99 行,而且迪士尼的律師可不是吃素的,向來有荒島求生畫米奇一說。既然不能描繪太多程式碼的事情,那就只放好看的劇照:

MPM 擅長做雪在短期內成為了一個刻板印象。於是我決定花一些功夫來重塑一下 MPM 的形象。從技術層面上來說,MPM 只是一個基本的 Galerkin 空間架構,物理過程數值模擬的真正技術點在於時間和空間的離散演算法、本構模型的設計、效能的加速、以及巧妙求解偏微分方程數值解的不同手段。MPM 是一塊高品質的畫布,這些技術點的創新才是真正的筆法(stroke)。但是技術點是裡子,MPM 是面子。於是從面子上看到的,便是我與一干志趣相投之士用 MPM 去平 A 物理的世界的各種固體和流體:巧克力,果凍,麵包,牙膏,冰淇淋,泡沫,泥土,岩漿,牛排,東坡肉,橘子,西瓜,肌肉,骨骼,內臟,布料,毛衣,頭髮,雪山,沙海,冰川,河流,無人機,炸藥,等等。這裡有固體,有牛頓流體,有非牛頓流體,有粒狀體,有固液混合體,還有人體。大到山川河流,小到雨露甘霖,MPM 從一個鐵頭功,逐漸被擴寫成了一本七十二絕技。

後來跟人合開了公司,寫了一個實用的 MPM 特效解算器。最近 Autodesk 買下並放進了 Maya,相信未來的幾年,更多的電影裡會看到 MPM 的應用場景。

第二個方向:仿射粒子元胞法(APIC)。這是我 2015 年得意的文章,是 2014 年的聖誕節獨自一人在迪士尼的大帽子 studio 里加班完工的。迪士尼所在的 Burbank 是大洛杉磯地區一個荒漠城市,我卻在荒漠和大海結了緣。於是那一年,APIC 給海洋奇緣裡的水提升了許多豐富的細節。

時間快進到 2017 年,有一位氣血翻騰的胡姓少年來訪問我,一起把 APIC 和 MPM 系列工作推到了高潮:Moving Least Squares MPM(MLS-MPM)。那之中與後來太極圖形的淵源和 MPM 在可微分模擬領域的拓展,已有好文記錄。

第三個方向:IPC。2020 年 12 月 31 日,賓夕法尼亞大學計算機圖形學中心,23 點 59 分,手裡的咖啡還燙。有一塊補天的石頭,它吸滿了天地靈氣日月精華,突然炸裂開了。增量勢能接觸法 IPC 橫空出世。王婆賣瓜自賣自誇:我竊以為,IPC 改良了固體模擬,啟動了“工業革命”,把連續固體的模擬科學(不只在圖形學)帶入了“蒸汽機時代”。2022 年,它的衍生故事還在不斷上演:

第一章:緣起

2010 年,我遇到了改變了我一生的三個人。第一個人是我的妻子;這十二年,我們相戀五年,結婚七年,她挽著我踩下了每一個有深有淺的腳印。十二年來做過的每一個回頭來看無比正確的決定,大到職業道路,小到咬文嚼字,我的許多影響深遠的選擇背後都有她默默的付出不休不眠的時間陪我去抽絲剝繭和理性分析。我在中科大少年班選的專業是等離子體物理,2010 年在 UCLA 入學後想轉到計算機,如果沒有她絕對理性地安撫我的急躁和幫我規劃合理的步驟,我可能連第一學期都沒讀完就自暴自棄、不知所向。她還會陪我走很遠很遠。

2010 年改變我命運的另兩個人,就是我讀 PhD 的聯合導師 Demetri Terzopoulos 和 Joseph Teran。他們的成就是我一生奮鬥的目標。

我在 UCLA CS 系的導師 Demetri 是英國皇家學會的院士(並列於牛頓、本傑明富蘭克林、霍金等人),奧斯卡技術獎得主,他是 1980 年代計算機圖形學裡第一個做物理模擬的人,可謂元宇宙物理引擎之父。他同時也是計算機視覺泰斗,發明了 snake 演算法。他其實還跟 Hinton 一起在二十多年前就發表了世界上第一篇用神經網路做物理模擬的圖形學文章,似乎常常被人漏 cite。我在數學系的共同導師是 Joseph,他是陶哲軒的同事(我現在也是了),level set 發明人 Stan Osher 的徒孫和同事,曾被 discover 評為 40 歲以下最聰明的 20 個大腦之一(20 Best Brains Under 40),他是圖形學裡最有名的做有限元固體模擬的人。

2010 年秋天,我跟一個朋友一起聯絡了 Demetri,以及 Joseph 和朱鬆純老師。朱老師給出了很理性的不贊成我轉系的答覆。(後來朱老師對我改觀,跟 Osher 一起加入了我的博士委員會,再後來通過摯友,如今北大智慧學院的朱毅鑫教授,形成密切的學術合作關係,這是後話。)Demetri 和 Joseph 冒著很大的實驗室財務浪費的風險,看著我一段蹩腳的彈簧模擬程式碼(MATLAB 寫的),但是考慮到我以前發表過相對論相關的論文應該腦子不笨,給了我一個機會。我趕緊紅牛下肚,花了幾個通宵強行通讀了一本教材,並復現出了一篇有限元肌肉模擬的 siggraph 文章。諸如此行為,是 impress 圖形學教授最簡潔有效的手段。從此一發不可收拾。

寫程式碼和圖形學,我入門都很遲。胡淵鳴初中就寫剛體引擎小遊戲了,我博一還在自學 C++ 模板。跟許多有理想的圖形學或遊戲愛好者一樣,從頭搭建一個自己的引擎是一個抑制不住的衝動。2012 年初,補完所有計算機和應用數學課程的我結合自己的物理背景,摸索出了一個長期目標:用物理模擬去重建這個世界。Demetri 也鼓勵我:你比誰都適合去 close the gap between virtual reality and physical reality, 把虛擬世界跟物理世界給打通。那時候沒有元宇宙這個說法,但是我的兩個導師都是 digital double 虛擬人體的深度發燒友,這對我的科研興趣的影響不可謂不大。回到物理引擎這個構想上,心動不如行動,這世界五顏六色千變萬化,那這引擎就叫魔方大,哦不,百變怪吧!於是 ditto 誕生了:

ditto 裡包含了幾個固體模擬和碰撞處理的練手專案,特別是隱式有限元的 3D 布料模擬。當時有 taichi 語言的話,應該寫出來能當一次 GAMES201 大作業拿個 A+。可惜 Ditto 維持了半年後,我投入一篇 siggraph 文章的具體工作中,便沒有再更新了。後來 2018 年 z-emotion/ZelusFX 公司的 CEO 突然聯絡我,說他 2012 年跟我要的 ditto 程式碼幫助他弄出來一個布料設計軟體的公司,現在有很多使用者。我開心了很久。

第二章:一炮炸出來兩個坑

我博士期間花了兩年時間合作的第一個專案,是物體破碎。網上有人說,計算機圖形學是程式設計師的三大浪漫之一(另兩個是作業系統和編譯原理),但那時的我還沒有看到浪漫,只看到了狂拽炫酷,只想在 siggraph 上播最帥的 demo,做最靚的仔。

那時我學完了計算固體力學。跟許多做模擬的初學者一樣,一切都是從模擬果凍開始,畢竟果凍是最典型的彈性體,並且往往很軟,不會給 ODE(常微分方程)的時間步離散格式帶來過分 stiff 從而要麼 dt 小,要麼系統難解的這個數值問題。於是在彈塑性固體裡面,我找到一個想要模擬的案例:子彈射穿果凍。那時乃至今日看來,都沒有多少比這更炫酷的實拍視訊:

現在教職期間,我常告訴自己的學生,想做什麼科研,在大致調研相關工作並確定學術品位和潛在影響力之後,可以直接開始擼程式碼,不要太擔心 techinical contribution 不夠。因為你開始做之後,很快就會遇到你之前多半沒預料到的問題,解決它們將成為你文章的最主要 contribution。我們用有限元去寫果凍破碎,不到半個月,就碰到了兩個重大的難題:(1)如何自然破裂,即不能在裂面看到三角形醜陋的樣子,和(2)如何穩健地處理複雜碎片之間的摩擦碰撞。

拓撲變化哪家強,levelset 敢稱王。要實現自然破裂,結合有限元和 level set 方法是一個非常巧妙的思路。Level set 有非常強的靈活性,可以從各種自然的角度去分裂四面體,而且可以完全避免重新劃分網格(remesh)。

Levelset 方法的發明人 Stan Osher 在 UCLA,給了我們一些寶貴的建議,很快,破裂的問題便迎刃而解了。

這篇文章,我更主要負責的是做摩擦碰撞。建模破裂之後,這順其次成為最頭疼的事情。levelset 的 marching tetrahedra 切割法帶來了無數形狀 “噁心” 的果凍碎片:在裂面上,有的三角形瘦如一道閃電,有的扁如一張大餅。計算幾何上,這些奇特的三角形被稱作是“ill conditioning”,想要用普通幾何方法去搞定它們的碰撞,不說碰撞演算法本身的 case 難以窮舉,光是浮點數精度帶來的千變萬化的誤判就足以讓人望洋興嘆。我花一年時間試了很多演算法,皆以宣告失敗。

最值得講的一個演算法,是一個非常大膽的 idea。我把解算完的固體投射到一個規則的網格上,然後讓網格假裝看到的是不可壓流體,求解一個泊松方程,把速度場變成無散的,再插值回到固體上。這竟給出了非常漂亮的不穿透解!但是缺點在於,物體的運動被變的太像流體一般輕盈靈動了,缺少了那份固體特有的執拗。我便去問我的導師 Joseph,有沒有類似於這個解流體方法的解固體的方法,我想拿來在碰撞上試一試。他回憶良久,說出了我一個我隨後持續專注十年的名稱:MPM。

MPM 是 1995 年在美國的國家實驗室發明的。它是一個混合拉格朗日粒子和尤拉網格的固體解算方法。往前追溯到 1960 年代的 Particle-In-Cell(PIC 法,最初用於求解等離子體物理的麥克斯韋方程)和 1980 年代的 Fluid-Implicit-Particle-Method (FLIP 法,用於流體結算,張心欣的導師 Robert Bridson,我的師叔,於 2005 年引入圖形學)。它像流體一樣,自動防止了材料間的穿透,又可以漂亮地求解固體的方程。把 MPM 拿過來做碰撞處理,在當時的我看來,再合適不過了:

終於,我交了一份目前回頭看來遠遠不夠完美的答卷:

這顆子彈大的有點誇張,更像一枚炮彈。它被評為了 SCA 2013 的 Best Paper Award。它也炸開來兩個 MPM 帶來的學術大坑:拓撲變化的多材料,和自動處理的摩擦碰撞。我和 MPM 被湊到了一起,從曖昧到沉迷。

彩蛋:文章裡還首次用刑了一隻犰狳,引起了許多論文讀者的不適。但後來這個場景,竟多次被別的研究者作為 benchmark 來 follow,那可不怪我咯。

第三章:雪與海的浪漫

學習 MPM 的那幾個月,同組的俄國師兄 Alexey 也加入到粉絲小分隊中來,並主導了廣為流傳的 “MPM snow” 的那篇文章。一時間,我們組和迪士尼的聯姻傳為佳話。有我在內的好幾個學生去迪士尼實習和參與寫作 Production 軟體程式碼。在冰雪奇緣的慶功宴上,我第一次嚐到技術產業化的喜悅。

冰雪奇緣之後,迪士尼做了一個 Big Hero 6 超能陸戰隊。在那裡,MPM 被用在模擬一些奇怪的材料上,這是個未怎麼宣傳過的資訊。

Disney's Big Hero 6

時間隨之轉移到 2014 年。我打算博士畢業了,想做一些在 MPM 和 PIC 裡面更數學更基礎的東西,又同時希望能在現有的 FLIP 流體和 MPM 固體上做出有應用價值的變革。那麼回顧一下,用 FLIP 做流體,和用 MPM 做固體,流程中的數學上有什麼不合理的 hack 呢?內行人一定會指出:是 FLIP-PIC blending ratio。FLIP 和 PIC 其實可以指代混合粒子網格法中,網格向粒子插值的那個步驟。PIC 直接做速度場的插值,但是會引入巨大的數值粘性,FLIP 插值速度增量,但是會引入巨大的不穩定性。於是圖形學的流體泰斗 Robert Bridson 教授在 2005 年就提出,把 FLIP 的結果乘以 0.97,再把 PIC 的結果乘以 0.03,然後把它們加起來。這個數字是一個使用者可調的引數,但可調而不可控!不同的場景下,不同數字會給出非常不同的結果。它是藝術家的噩夢,是強迫症的地獄。於是我決定幹一票大的,把這個東西除掉,因為我有一個信念:需要設定 heuristic 引數的模擬演算法絕不可能是一個好演算法的最終形態。

再結合對於角動量守恆方程的理論分析,跳過一些技術細節,Affine Particle In Cell (APIC)被誤打誤撞推導了出來。FLIP 流體和 MPM 固體進入了一個新的篇章,藝術家們可以更輕鬆的得到它們需要的模擬結果粘稠度,無論是山川大河,還是岩漿滾滾。它們在我心中,是可以媲美冰雪的浪漫。

迪士尼非常高興,迫不及待地把 APIC 用進了海洋奇緣:

2015 年夏天,我畢業和結婚。婚禮在洛杉磯南邊的玻璃大教堂,有山有海有樹林。那年暑假的 SIGGRAPH,我認識了很多很多志同道合的朋友。印象最深的是在流體的 session 上,我看到一位風流倜儻的銀髮少年。他跑來問我,“今年的好文章眾多,能長久流傳的是哪幾個?”我隨便應付了幾句。他說道:“今年的文章,有兩篇最 diao,一篇是我的 IVOCK,另一篇是你的 APIC。”我吃了一驚,連忙互換姓名。原來這位霸氣的少年,叫張心欣,他現在帶領 “澤森科工” 在為中國特效打天下。那時純粹的我們,在對方雙眸反光裡,都看到了一個勇者,持各自打造的巨劍,浴血挑戰著一頭叫做數值耗散的惡龍。自那天起,我們也開始了迄今長達七年的並肩合作。

畢業之後,我繼續深耕 MPM 固體和流體。學術界的人其實蠻喜歡立 flag。我就一直儘量堅持去貫徹一個基本原則:即使我的模擬文章是投在圖形學會議和期刊上,我也絕不為了視覺效果去做任何不符合物理和數學原理的 hack;我需要每個演算法都普適到整個計算物理學。這個原則給後來教授期間的我帶來了很多的好處:包括了(1)自然科學研究基金的青睞,(2) 在 Nature 子刊發表的 MPM 自然災害預測技術(雪崩,山體滑坡,泥石流,冰川碎裂,海嘯),

以及(3)醫院十分喜愛的虛擬創傷和手術的模擬平臺:

它們也許沒有雪與海一樣浪漫,但卻更加真實和直接地影響到了這個世界,甚至幫忙拯救生命。這些工作也給圖形學裡做物理模擬的同行在自然科學和醫學領域贏得了更多的尊重,糾正這些別的領域的人關於圖形學就是不斷引入他們做的東西的誤解。畢竟很多圖形學論文喜歡把這個叫作 contribution:“We introduce the XXX method to computer graphics.” 我想做的,是要物理學和數學的人發論文說同樣的這句話,但是把 “to” 改成“from”。最近遇到的一位做經典力學的同事發出感嘆:“好一波反向輸出!”

既然想到固體模擬在醫學上的應用,一縷額外的回憶又湧上心頭。2016 年,我特別想把虛擬人體給產業化,也探索了很多不同的方向。其中比較有意思的,便是與 lab 師弟,也是好哥們的如今體素科技 CEO 丁曉偉討論的整形手術預測。當時我跑了個隆胸動力學預測的 demo(包含了對胸部軟組織、面板、和矽膠假體全方位的模擬),也在洛杉磯聊了一些整形醫生,但感覺市場需求度不夠大,所以沒有繼續下去。也不知道元宇宙跨領域越來越火熱的今天,這個方向現在怎麼樣了。

第四章:摩擦摩擦,在光滑的路上,摩擦

前面說到,2012 年我便用 MPM 的思路去嘗試處理了破碎模擬裡的物體碰撞。但是那個演算法只能對付不同碎片之間的碰撞,對自碰撞 self collision 無可奈何。MPM 作為一個用粒子來描述物體的離散格式,畢竟天然最適合如冰雪沙土般像粒子一樣的物體。

布料和毛髮則是每一個做固體模擬的人都想攻克的東西。科學研究應當儘量以人為本,而布料和毛髮跟人的關係真的太大了。處理摩擦碰撞的演算法很多,它們做的好的地方都一樣優秀,做的不好的地方卻五花八門。於是 2017 年,我重新回到摩擦碰撞這個戰場。跟 MPM 處在 105 度熱戀中的我,選擇了一個所有人都沒有想過的思路:用 MPM 塑性去挑戰這個課題。

那時我已經學會了 Druker-Prager 塑性屈服面,併成功用它做出了 MPM 沙子。沙子的本構模型有兩個要素:第一,它支援分開,不支援擠壓;第二,它往邊上滑的時候,切向力和法向力要滿足庫倫摩擦定律。仔細回味一番,這兩個特性,明明不只是沙子所特有的啊!布料、毛髮、橡皮、剛體等等,哪個常見固體的碰撞不是要遵循這兩個定律呢?

於是我決定拋棄傳統的基於點和三角形,邊和邊幾何相交特性的摩擦碰撞理念(ditto 裡實現過的那一套),而是採用 MPM“連續介質力學”的觀點。管他是布料還是毛髮,都是一些連續的空間佔用而已。在這個觀點下,它們跟沙子唯一的區別便是,沙子是三維的“體”,而它們分別是三維空間中二維和一維的曲面。想到這一點,一切便豁然開朗:如果 Drucker-Prager 塑性可以讓三維的 MPM 沙子滿足摩擦碰撞的性質,那麼我只需要推匯出二維和一維子空間上所對應的類似的塑性,便可以讓 MPM 布料和毛髮滿足同樣自動摩擦碰撞的性質!

以布料為例,通過對形變梯度的 QR 分解,我們可以設計一個精巧的彈效能量和塑性屈服面來 “管理” 布料在法向上摩擦碰撞力所需要滿足的應力條件。直觀上來講,在曲面方向,布料彷彿一束束被交織的沙礫,沿著布料的切向望去,滿布上都寫著兩個字“庫倫 "。

意識到了這一點,處理一維二維曲面的摩擦碰撞便與處理三維沙子的摩擦碰撞別無二致。只需要將這新的本構模型寫入曲面上的頂點,MPM 便全自動地默默處理了剩下的一切。從布料到毛髮,從地毯到毛衣,一切傳統的碰撞檢測和碰撞處理都被拋棄,一把粒子,一架網格,便能生成一段美妙的動畫。這種顛覆式的建模方式,如今我回頭看,仍覺得是走出了魔鬼的步伐,是自己學術生涯最滿意的 MPM 論文。

那一年去 siggraph 2017 宣講物質點法,抒發的情感只能用已故的李兆基老師的經典臺詞來形容,“比我的初戀更加詩情畫意。”

這篇文章的 2D 版還在太極語言中被實現了出來,程式碼十分簡潔,妙不可言。

後來第二年的 SIGGRAPH2018,哥倫比亞大學殺出來一員猛將 Raymond Fei,把這套步法跟 APIC 結合起來,做了一份令人歎為觀止的布料與水相互作用的工作(libwetcloth),一百分的賞心悅目。

參會 SIGGRAPH 2017,我還有一個額外的目的:招納自己的第一個學生。開會時,我在賓夕法尼亞大學的助理教授生涯剛開始不久,孤苦伶仃。一場場燈紅酒綠的派對,一間間熙攘喧囂的酒吧,我在會場外面的夜搜尋著那個可以一起談笑風生個幾年的小夥伴。高階的獵人都會偽裝成獵物。在一個昏暗的角落,我看到一個熟悉的身影在月下獨酌,對我目送秋波。那不是一年前張心欣在烤肉店介紹給我的李旻辰嗎?我記得他!UBC 的一個精壯帥小夥兒,跟張心欣做過一篇流體的文章。我點了兩杯火辣的蘋果馬提尼,搖搖晃晃地走了過去。“還記得我嗎?”“記得記得,來,搞一杯!”那一杯,給下一個不醉不歸的五年學術夜宴,拉開了序幕。

第五章:少年英雄胡淵鳴

2017 年的夏季註定要遇到更多不平凡的人。話分兩頭,在酒吧初遇李旻辰之前的那一年早些時候,圖形學領域廣泛流傳著這麼一個都市傳說。有一位策馬揚鞭的少年武士,他沒有發表過一篇 SIGGRAPH 論文,但他實現了一百篇;他沒有開源過一套程式碼,但他有一百萬行張弓待發;他接手的圖形學模擬實現,可以在一夜之間效率提高十倍;他三天沒有睡覺,便重現了四年來的所有 MPM 論文,並且提出了一百種改進的方法。他究竟是神仙的化身?還是地獄的使者?一時間流言四起,有人甚至說他要建立新的計算機圖形學秩序。還在默默想著 MPM 問題的我更是夜不能寐。這小子,是何方神聖?

他果不出所料地殺上門來了。如想象般翩若驚鴻的胡淵鳴,帶著一位比他更加神祕且靦腆的小夥伴,從清華殺到了我 UPenn 實驗室的門口。“我們來跟你一起做 MPM。”他的話簡短有力。“好,開始吧。”那時的我們,不會寒暄客套,只需要看到一個共同的研究目標便一切盡在不言中。那時他帶來的小幫手,叫方火奧,我去 google,哦,方燠 yù。現實絕非一帆風順,我們高速迭代經歷了一些失敗的科研專案,才最後有了 MLS-MPM 的發明和後續,簡潔而又精彩。

那時,我有一套自己的 C++ 庫,遠超當年的 ditto。我的庫叫做“jixie”(機械)。胡淵鳴帶來了他的庫,叫做“taichi”(太極)。那時太極還是一個 C++ 庫。兩個庫各有千秋,碰撞出許多熱烈的火花。胡淵鳴對我助理教授生涯的研究重心,尤其在對榨乾計算機效能的追求上,起到了很大的啟發性作用。

英雄相惜,終須一別,胡淵鳴要遠赴 MIT 去做別的專案,我在披薩店餞別。“MPM 的發展將緩慢下來!”我悵然若失。他笑了笑,告訴我,仍有一個人跟我去打 MPM 多物理模擬的江山。我目光一瞥,才猛然驚醒,這段時間在刀光劍影裡一起談笑風生的,還有另一位比他更年輕的英雄少年!言辭不多的他,在科研的戰場上,雖不像胡淵鳴一樣耀眼的豔麗,卻散發出一股更加剛猛的熾熱。

方燠成為了我第二個學生。如果旻辰是一杯濃厚的酒,底蘊日漸成熟,方燠就是一把嗜血的刀,愈加鋒利凶殘。他在隨後的 5 年裡,把舊論文的實現和新想法的嘗試這兩件事的速度都做到了像居合斬一般,一刀斷骨刀刀落命。

在那段日子裡,在方燠、旻辰、和一干猛將的拼搏下,我們一直推進高效能的 MPM 多物理模擬,直到億萬粒子級別的模擬也變得輕鬆寫意。我們通過跟超算中心的合作,把 MPM 發展到了能進行 Exascale computing 的超算機上,每秒算 10 的 18 次方個浮點運算。這樣看來,對於高解析度的追求,我們是認真的。

後來,我的實驗室彙集了更大一批意氣風發的孩子們,屈子吟,仇宇星, 王鑫磊,李軒,陳宇諾, 曹亞帝等等,他們圍繞著方燠主導架構的 c++ 模擬引擎 ziran(自然),在物理模擬的海洋裡盡情嬉戲。他們飄逸的學術舞曲還在不斷被譜寫,有他們在身邊,我感覺自己永遠抓住了青春,每天都是學術上的“掰餅聚會”:

To break bread is to affirm trust, confidence, and comfort with an individual or group of people.

在幫助人類打通虛擬世界和現實世界的歷史使命上,我們致力於模擬這一個點,用硬核的根基散發千萬的枝葉。下面的這些都是我的實驗室這些年研究過的方向。這些成果中也充滿了極其珍貴的如北京大學朱鬆純教授、陳寶權教授、以及浙江大學唐敏教授等前輩傳授的經驗和給予的幫助。

第六章:與 timestep 結緣

步者乃一身之根基,運動之樞紐也。——《太極拳十大要論》

在元宇宙的 “基礎架構” 之中,如果建模是內功,渲染是招式,那麼物理模擬就是步法或身法。步法與時間和運動緊密繫結在一起,在時間上做微分和積分,從過去預測未來,用未來指引過去。(指引過去,靠的是可微分模擬。)不管是逍遙派的凌波微步,泰森的蝴蝶步法,還是奧拉朱旺的夢幻腳步,它們都反映了一個道理:有一套成熟的步法是一位集大成者立於不敗之地的一個可靠的保證。

在動力學物理模擬中,大家最常說的一個詞,就是 timestep:時間步長,Delta t。正向物理模擬的過程,本質上往往就是微分方程在時間軸上積分的過程,這個過程,又被稱為 timestepping method;我願譯其為“時間步法”。

現實中的時間是連續的,但模擬中的時間是離散的。對於一段 24 FPS 的動畫來說,每秒鐘的理想情況,是讓模擬演算法從一個過去的時刻往前走 24 步,每步走 1/24 秒,生成 24 個幾何形態。除非希望對現實的逼近追求更加極致的準確性,一個通用圖形學演算法最好具備只需要走 24 步的能力。如果往前預測 1 秒需要走 48 步,或者 240 步、2400 步,那就往往是成倍的效率降低。

可惜的是,直到 2015 年左右,甚至今日,仍然有無數的圖形學模擬演算法需要走子步(substeps)。更令人痛苦的是,即使走了子步,它們中的絕大多數仍然不能保證數值的穩定性,俗稱“爆了”:

放錯圖了。爆了的模擬其實長這樣:

模擬爆了就意味著得調節引數把程式重跑。我 2011 年在工業光魔 ILM 實習,我那時的實習導師告訴我,ILM 裡在幫復仇者聯盟的綠巨人設計肌肉模擬演算法,浩克一發力,程式就爆炸,重跑停不下來,delta t 小的不能再小了,機房空調費都要燒個上百萬。

為了能夠邁出 1/24 秒或更大的步子,我開始致力於研究基於優化的時間步法。非線性非凸數值優化是一個非常厲害的領域,如今整個神經網路和深度學習都靠它。這個宇宙最基本的物理規律:熱力學第二定律(熵增原理)本身也定義了一個優化問題。因此,越來越多的應用數學家開始用優化和變分法的思路去重新思考動力學偏微分方程的數值解。

彈性體模擬的方程便是一個可以重新定義為尋求最小值的優化問題!在此框架之下,時間步長可以邁的任意大,不會扯到蛋。

此間工作很多,圖形學裡早期工作比較有代表性的,包括劉天添 2014 年的巧妙投影動力學“Projective Dynamics: Fusing Constraint Projections for Fast Simulation” 及其 2017 年的擬牛頓法“Quasi-Newton Methods for Real-time Simulation of Hyperelastic Materials”,和我 2015 年參與的比較中規中矩的牛頓法“Optimization Integrator for Large Time Steps”。

2019年(第八屆)中國科學技術大學《計算機圖形學前沿》暑期課程:https://www.bilibili.com/video/BV1hM4y1L7VY?p=5

冰點藍:計算機圖形學前沿(2019) Towards Real-time Simulation of Deformable Objects:https://zhuanlan.zhihu.com/p/480006669

我的實驗室後來則在下面四個地方分點發力:

李旻辰在 2019 年把擬牛頓法跟 domain decomposition 結合了起來,打敗了一系列競爭對手,得到了一個非常高速度的有限元彈性體解決方案 Decomposed Optimization Time Integrator “DOT”(點點有限元法):

王鑫磊則另闢蹊徑,考慮多尺度網格 multigrid,讓 MPM 也走到了超大的時間步長上面,發明 Hierarchical Optimization Time Integrator “HOT”(熱辣物質點法),可以高效處理超級 “硬” 的彈塑性體,幫助工程力學設計的模擬:

方燠則跳出牛頓和擬牛頓的思路,以 “快” 為目的,把 MPM 的加速結合上了交替方向乘子法(Alternating Direction Method of Multipliers,ADMM)上。這個方法被稱為“Silly Rubber”(愚人橡皮法),可以快速模擬各種 MPM 適合的材料,比如奶油:

我們最為得意的,也是最新搞出來的,便是李軒、李旻辰和我一起用幾支爛筆頭推匯出來的 SIGGRAPH 2022 論文 Energetically Consistent Inelasticity (ECI)。這個工作在數值計算理論上,我認為有很可觀的意義:它首次讓塑性力可以邁著同樣大的步伐,被真正隱式求解了!也就是說之前的方法,包括上面提到的,都不準,都對塑性力做了一個強相關於 delta t 的其實很不準確的近似。那算的準有什麼好處呢?當然是去跟現實對照了。跟現實連定性的視覺效果都對不上的虛擬物體,步法不夠穩健,不能叫數字孿生,永遠都只是遊戲(沒錯, 這裡說的的正是 PhysX/PBD)。我們的堅持,是第一性原理,是我們希望一直盡力朝著真正的數字孿生方向前行的一些固執的原則。

第七章:摩擦碰撞的第三次戰役,IPC 魔童降世

開始的那些年,從最初 level set fracture 中的一炮雙響,到 MPM 布料,我一直在跟 “摩擦碰撞” 這個難題對幹。每一場仗都打的很漂亮,但都還是存在很多 Limitation。以 2017 年的 MPM 布料為例,作為它的締造者,我比任何人都能更清晰的看到它光芒下令我不堪面對的缺憾。作為一個 MPM 方法,它在隱式積分條件下效能非常差。它對粒子和網格的依賴給幾何體強加了許多苛刻的要求:比如兩者的解析度需要儘量吻合。同時,它又像一臺看似美好的特斯拉自動駕駛汽車,一不小心甩給你一個不大也不小的錯誤(數值粘性和偶爾的數值穿透),讓你在使用時總是心懷忌憚。比如正如下圖所示,MPM 布料做毛衣雖然厲害,但是仔細看去,還是出現了許多穿透:

穿透會非常嚴重的影響模擬的精度和可信度。它不只是模型視覺上的錯誤,隨之而來的彈性力和摩擦力也會因穿透而變得離譜和虛幻。因此,長久以來,至少在布料這一個小方向上,我並沒有能夠把 MPM 從特效和遊戲的應用中打出去。換而言之,因我堅信元宇宙和遊戲的最重要區別是對 “準” 的把握上(這也是我不認為 NVIDIA 的 omniverse 拿著一個基於不物理方法推匯出來的 PhysX 引擎可以做成真正元宇宙物理引擎的根本原因),MPM 在布料這個方向上要走的路還很長,還需要後來者的努力。

時鐘撥到 2020 年前夕,沒有徵兆又似蟄伏許久的一件事情發生了。之前我把旻辰比作美酒,他便真的是這樣一個學生,在陳釀的千錘百煉中一不小心就飽滿豐厚,醇香持久。沒幾年,他便從一個學生瀟瀟灑灑地蛻變為一個成熟的合作伙伴。那晚,我鄭重的告訴旻辰,“你剛完成的這個叫做 IPC 的專案,把一個困擾了計算機圖形學和工程力學無數研究者幾十年的一個領域給終結掉了,完美本無法觸及,但 IPC 是我入行以來見過的,最接近完美的模擬技術。”在這一年後,旻辰以 IPC 斬獲 SIGGRAPH 年度最佳博士論文獎,毫無懸念。

IPC 的全稱是 Incremental Potential Contact,中文作增量勢能接觸,很拗口,還是就叫 IPC 吧。它的演算法冗長而又毫不晦澀,剛猛而又不失優雅。在數值優化的框架下,IPC 把所有基於 mesh 的物理模擬中 “不許穿透” 這個令學術界和產業界都為之痴迷的難題,從模擬問題的數學形態上就直接通過一個靈巧的定義給徹底斃掉了,其後的演算法自然是如出入無人之境。“從此穿模是路人。”

技術上,IPC 提出了一個嶄新而又巧妙的關於 “碰撞” 的數學描述方法:所謂碰撞,便是在動力學過程的最小作用量原理下,要求任何非鄰接幾何表面之間的歐氏距離在連續的時間軸上恆大於零。它正是又一個 timestepping 的時間步法!如此一來,我們得到了一個可以用數學完美描述的約束優化問題。再配以些許精巧而不詭野的演算法設計,最終的 IPC 技術在數學、演算法和實現上都令人信服。毫不誇張的說,IPC 是數值模擬自發明以來,唯一的把精確碰撞和摩擦這兩個要求完美解決掉的辦法。它唯一的缺點是計算效率不夠快;被我們後來攻克,按下不表。

IPC 及其 2021 年後續工作賦能了無數之前計算機模擬界根本做不了的事情,以絕對的穩定性、精確性、和數值收斂性涵蓋了三維柔性體(“百萬四面體的毛球”和“是繩子就堅持一百秒”):

二維布料(輕鬆處理打結,和 任意多層 布料上身,這裡只展示了四層,畢竟我們的建模製版技能點加的比較少):

二維薄殼(跟真實的一疊撲克牌的厚度完全吻合,沒有任何別的方法可以做到)(這是不是可以拿去開元宇宙賭場?):

以及首次有 “不穿透保證” 與“精準摩擦力”兩個性質的的一維細杆(麵條、毛髮):

旻辰向來沉穩低調,他宣傳 IPC 的文章(李旻辰:IPC: SIGGRAPH 2020 開源有限元碰撞獨家處理方案)也跟他的人一樣靠譜實在。2020 年 1 月,我在 IPC 的第一篇論文裡,寫下過這麼一段總結(中文意譯略有改寫):

“IPC 技術適用於所有基於網格的固體模擬。無論是自碰撞、外碰撞、甚至是來自於低維曲面的碰撞,IPC 都是一個絕頂靈活、有效、和無條件保證成功的解決方案。IPC 對圖形學和工程力學基於或不基於有限元的全部應用都提供了有史以來第一個幾何不穿透,體積不反轉的可證明的直接保證。從此以後,跑固體模擬只需要輸入真實世界可以測量的物理引數和幾何引數,而再不需要去調節所謂的數值引數。在此之上,IPC 承諾必定能夠對任意複雜的狀態給出求解,並且這個解就是這個世界上現存所有演算法能給出的,最接近真實世界摩擦碰撞結果的解。”

幾年過去了,這個總結被圖形學、機械工程、以及機器人領域的同行不斷的引述和驗證。作為一個學者,我從未如此誇過一個工作,畢竟有吹牛皮之嫌。但是 IPC 不一樣,我不擔心,因為這個牛皮是鋼鐵鑄成,永遠也吹不破。

IPC 這麼完美,還有什麼可以改善的呢?正如上文所說,它的計算效率存在一定的問題。在我們一籌莫展之計,一位老友突然與我們取得了聯絡。此人名作陰陽(Yin Yang),繼胡淵鳴之後成為第二個讓我瞧見八卦圖頭像便能開懷之人。克萊姆森大學的楊垠教授(現在遷去了猶他大學)姍姍來遲,他是降維模擬和 GPU 加速模擬的代表人物。我們一拍即合,開始建立深厚的革命友誼。自那天起,楊垠、旻辰和我開始了圍繞 IPC 技術的一系列深度合作專案。在我們的思維火花碰撞之下,浩如煙海的腦洞和研發專案撲面而來。以 2022 年為例,我們便讓 IPC 生態系統在剛體模擬和實時模擬兩個方向取得了不亞於原始 IPC 的嶄新成果。

第一個成果,是我們在剛體模擬上取得的重大成就。剛體與柔性體自古以來便被分開處理,求解它們的方法不能說是關係不大,只能說是幾乎毫無關係。在 IPC 的加持下,我們提出了嶄新的“Affine Body Dynamics (ABD)” 仿射體動力學,在淘汰傳統剛體模擬的路上直接飆到終點,讓剛體重新迴歸成它們在真實世界中的樣子:即使最硬的物體,也會微小的形變,硬度是振金還是木頭,該是多少就是多少,不需要被假設成絕對剛體。在 ABD 技術的加持下,我們在擁有所有 IPC 優點的同時,達到了媲美現有剛體引擎的速度和全方位碾壓的精度。高速而又精準的機械體模擬首次成為可能。

真實碰撞驅動的齒輪:

及其受力分析:

帶傳動結構的小車(含簡易氣缸):

及其傳動引擎的簡易氣缸運動的視覺化(活塞運動帶動旋轉)

鐵鏈彈性波的傳播:

比較傳統的場景當然也不在話下:

值得一提的是,ABD 在機器人抓取的任務上,已經被機器人領域的學界和工業界同行驗證,其成功率和對接觸力 / 摩擦力的準確性上,已經遠遠超過了 PBD、Bullet、Mujoco 等一眾現有剛體引擎;強化學習在我們的 solver 上,輕鬆訓練出了真正可以轉化到物理世界的控制演算法,誤差之小,模擬過程之愜意,非機器人業內人士不可言喻:

英偉達 Omniverse 也宣傳了很多工業機器人的場景,它的技術仍然基於 PhysX(PBD),那套簡單易學但毫無真實物理原則的手段。剩下的一切,還何須多言呢?也許在有些人心中,元宇宙只需要以假亂真,”看上去差不多就行了。”那麼,就等時間給出 “自然” 選擇的答案。

我從方法論上表述我自己的觀點。我認為,像 PBD 一類的技術,以快為出發點,在當年的低下算力和就是面向遊戲的兩個前提下,無可厚非。但是由於對數學和物理原理的修改與簡化,使其在元宇宙的未來想要從快到準,路途難如蜀道。與它們截然不同的是,IPC 直接先把 “準” 這一步做到了幾乎完美,那麼在這個前提下,再做快有多難呢?在算數、演算法、算力的三重加持下,IPC 加速之路順暢無阻。舉例而言,我們 2022 年的第二個成果,便輕鬆地實現了多層布料的實時互動模擬,並且,沒有犧牲任何 IPC 在碰撞上所承諾的美好保證:

第八章:下一個“Timestep”

十二年,我從 C++ 都不會寫的等離子體物理專業的學生,到拿到 CS PhD,去常青藤做 CS 教授,再到 UCLA 應用數學拿 tenure,回想一下,這其中竟沒有一年被浪費,純粹跟著喜愛的研究走,順其自然。記得網上常有人討論計算機圖形學的交叉學科本質。我想我本人應該就是一個不錯的活標本吧。十二年的職業道路上,我也是無比幸運(畢竟射手座),遇到了太多牛逼的師長、同學、摯友、和學生,每個人都讓我學到了很多。

那下一個十二年,我應該主要做些什麼呢?思考了許久,不為立志,但求有一個計劃。我想, “closing the gap between virtual reality and physical reality”,這個目標絕沒有變,圍繞物理模擬這一指引運動規律的軸心的原則也依舊在我心上打著思想鋼印。在此之外,我與攜有同樣想法的三個人(李旻辰,方燠,楊垠)一起成立了 Timestep,致力於穩健、精準、高效、普適的物理模擬 “步法” 及它們在不同產業中的應用,並在國內以及世界多地積極打造和佈局一個可持續發展的體系。萬水千山不停步,希望在下一個十二年,我們跟更多同道中人一起,通過有趣和有用的技術和想法把虛擬世界和現實世界真正打通。

本文為機器之心轉載,二次轉載請聯絡作者獲得授權。