最近评上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代码帮助他弄出来一个布料设计软件的公司,现在有很多用户。我开心了很久。
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次方个浮点运算。这样看来,对于高分辨率的追求,我们是认真的。 后来,我的实验室汇集了更大一批意气风发的孩子们,屈子吟@ziyin(ziyin:北京电影学院发了一篇满是数学公式的计算机顶会论文,并开源了其代码) ,仇宇星,@王鑫磊,李轩,陈宇诺,@曹亚帝,等等,他们围绕着方燠主导架构的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”(2019年(第八届)中国科学技术大学《计算机图形学前沿》暑期课程_哔哩哔哩_bilibili)(冰点蓝:计算机图形学前沿(2019) Towards Real-time Simulation of Deformable Objects),和我2015年参与的比较中规中矩的牛顿法“Optimization Integrator for Large Time Steps”。我的实验室后来则在下面四个地方分点发力: 李旻辰在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)。我们的坚持,是第一性原理,是我们希望一直尽力朝着真正的数字孪生方向前行的一些固执的原则。
那下一个十二年,我应该主要做些什么呢?思考了许久,不为立志,但求有一个计划。我想, “closing the gap between virtual reality and physical reality”,这个目标绝没有变,围绕物理仿真这一指引运动规律的轴心的原则也依旧在我心上打着思想钢印。在此之外,我与携有同样想法的三个人(@李旻辰,方燠,杨垠@Yin Yang)一起成立了Timestep,致力于稳健、精准、高效、普适的物理仿真“步法”及它们在不同产业中的应用,并在国内以及世界多地积极打造和布局一个可持续发展的体系。万水千山不停步,希望在下一个十二年,我们跟更多同道中人一起,通过有趣和有用的技术和想法把虚拟世界和现实世界真正打通。 参考资料:https://zhuanlan.zhihu.com/p/560415998 若对本文进行二次转载,请联系原文作者