第80节:大侠是怎样练成的(1)

作者:周昆

转眼之间,我已经在MSRA(微软亚洲研究院)工作了将近六年,回想六年来的研究经历,感触很多。就和练习武功一样,我从一个学徒,到略通精义的武林中人,再到凭借一技所长叱咤一方的的大侠,我在研究院度过了不平凡的六年。

一.2003年:“打哪指哪”与“指哪打哪”

2002年我加入微软亚洲研究院,刚开始是跟着资深研究员做项目。当时我的老板郭百宁提出了一个很有挑战性的想法:能否用纹理合成技术模拟出豹子皮这样一类的纹理。于是,在实现他这个想法的过程中,我学会了“打哪指哪”的研究方法。

这个项目的研究过程异常艰苦。在最开始的几个月里,我们尝试了很多种方法,可无论如何,我们做出来的豹子皮都像是假的。直到项目结束期限前的一个月,百宁总结了我们能做出来的最好结果,发现尽管我们不能做出豹子皮这种纹理,但是已经能做出一大类有累进变化的纹理。于是,围绕着这个思路,我们对已经取得的算法和结果进行了整理。最后论文被SIGGRAPH录用,这也是我的第一篇 SIGGRAPH论文。

我在学校里受过的科研训练一般是首先有一个好的想法,接着进行实现,通过写程序和做实验来验证想法是否可行,这种方式可以总结为“指哪打哪”法,就是说目标指向哪里,就打向哪里。可是,我在研究院的第一个项目确教会了另外一种不同的研究门路——“ 打哪指哪”。比如说百宁给我提供的想法就像一个目标,而需要我想办法把这个目标击中。可是,由于我的知识和研究实力等方面的限制或者本身这个想法就不是很成熟,极有可能这个目标在当时的情况下是实现不了的。可是,就在这个做不出来的过程中,你有可能做出一些科研环节中的副产品来。虽然,之前是沿着一条研究主路一直在前进,但是却会产生很多的分叉与分支出来,逐渐偏离了原来的研究方向。当走了一段时间之后,会恍然发现其实本来就不应该走原来的那条路,要走的就是现在这条走出来的“弯路”。当时的假定目标是A,后来竟做出了一个B出来,而当我们要总结科研成果,撰写科研论文时,我们会总结说其实我们真正要做目标的是B,这就是所谓的“打哪指哪”,?。

在科研过程中,往往会遇到很多没有设想到、但很有意思的现象,便导致了很多意外的新发现。因此,当一项科研成果出来的时候 ,你可以相信在其背后可能隐藏着另外一个不为人所知的故事。当然你所能看到的几乎所有的科研论文在讲述研究历程时都是运用“指哪打哪”法的,但是它这个结论的发现过程很有可能是“打哪指哪”出来的——没有打到目标A,却把目标B做出来了。

“打哪指哪”法对于刚刚进入研究一两年,脑海中只是有些模糊想法但是又未必做不出来的研究人员比较适用。2003年我们没有做出豹子皮,只是在马身上生成了豹皮的斑点图案,看上去像是披着豹皮的马。两年之后,在2005年的SIGGRAPH上我们真正做到了“指哪打哪”,用纹理映射的方法生成了豹子。

二.2004年:科研成果的产品转换

2004年我发明了一个叫做Iso-charts的技术,主要是借助机器学习的方法对三维网格模型进行自动分片,并且生成纹理坐标。网格参数化是计算机图形学一个非常基础的功能,在游戏和电影产业都被广泛适用。在这一年的工作中,我认识到做研究不只需发论文来展示自己的科研成果,其实还需要看重这项技术的实际价值。被工业界所应用和承认,或许能带来更大的成就感。

通过技术转化组的胡志鹏工程师的辛勤工作,我们成功地在DirectX的Code Base里贡献了三万行代码,使得这项技术成为DirectX中任意网格参数化工具UVAtlas。现在做贴图的程序员和游戏开发者都会用到UVAtlas这个工具,而且这项技术还用在了微软自行研发的 Halo 3游戏引擎里。这就是企业研究院区别于其他科研机构的地方,在企业研究院我们不仅可以发表高水平的顶级论文使得科研成果得到学术界的充分认可,而且还可以使自己的科技成果进行产品转化,被成千上万的用户所使用从而体现其更广泛和深远的价值和影响。

非常有意思是,这个项目起源于一个SIGGRAPH项目,我们的投稿不幸被拒了,可是万幸的是它转化进了微软的产品中,而且获得了研究院2005年的最佳技术成果转换奖。同时,这篇论文也是我第一次与微软总部的研究员合作完成的论文。

三.2005年:渐入佳境

2005年对我来说是丰收的一年,我投了三篇SIGGRAPH论文都被录用了,而且三篇都是以第一作者的身份发表的。在同一年里面以第一作者的身份发表三篇论文,这在SIGGRAPH历史上是前所未有的。这一年的丰收标志着我在SIGGRAPH上成熟,也非常庆幸在这一年找到了可以真正命中SIGGRAPH的感觉和信心。当在这种感觉的指引下做出来的三篇论文得到业界同行认可的时候,即充分证明了自己也可以与他们一样跻身世界领先的行列。

总的来说这一年的收获主要体现在两个方面,首先是2003年金钱豹纹路的创想终于在这一年找到了完美的解决。另一方面就是自己的研究视野更加开阔了,从几何和纹理伸延到了绘制,对图形学本身有了更为深入的探索和了解。我一直觉得计算机图形学是个相对较窄的学科,如果连这个较窄的学科都不能做到比较透彻的理解的话,我担心自己今后能到达的研究高度会非常有限的。我希望自己能在研究的深度和广度上并重。

我不停地扩展自己的研究范围,尝试去学习更多的东西,试图在多个方向上寻找可以解决的问题。在某个方向上的研究功力体现在发现问题的能力,如果连问题都不知道的话,解决问题就无从谈起。可是有太多的文献和太多的方向,使得发现问题变得相当困难。即使当你找到一些问题之后,有些问题可能是十几年/几十年没有解决的问题。那么,就需要创新性地在当前的范围里找到一个可解的问题 ,这其中的难度可能并不比找问题难。

四.2006年:从运动员到教练员

这个阶段我主要从一名运动员转换到同时带学生的教练员,如何培养学生做研究成了我的一个新课题。在研究院工作是幸运的,有很多非常优秀有潜力的学生跟我一起做研究,比如任重、孙鑫、施晓晗、侯启明等。 我在培养学生方面也经历了一个比较有意思的发展过程:

第81节:大侠是怎样练成的(2)

阶段我 学生

阶段一: 全包培养从Idea, 方法,实验,论文起草都由我来完成主要从事一些编程的工作

阶段二: 轻轻放手提出Idea,论文起草由我完成让学生去寻找一些解决方法,从事编程工作

阶段三: 大胆放手只提出Idea 鼓励学生自己寻找方法,尝试撰写论文,从事编程工作

阶段四: 理想状态只提出大的研究方向从Idea, 方法,实验,论文起草都由学生完成,从事编程工作

计算机图形学研究对实习生的要求相对比较严格,因为它的门槛很高,除了要有idea,还需要把这个idea实现到极致,做出最漂亮的结果。我对学生的要求非常严厉,但是从另一方面而言,学生出成果也很快很出色。我有责任让这些学生学到知识,提高能力,做出成绩,这样才对得起把这些学生交给我的老师和家长。对学生要求严格的一个简单方法就是以身作则,如果我对自己要求更严,比学生还用功,那么这种工作态度就会激励身边的学生一起热情地投入到项目中。

就像Harry和百宁常说的,我们从全国各地选拔上来的学生就像是一些优秀的的运动员苗子。我们要培养的是能参与国际竞争的奥林匹克团队。进入研究院的学生都是很好的苗子,但是真的要把这些好的苗子培养成世界一流运动员,需要一个艰巨和漫长的过程。在这个过程中,教练员必须要保持耐心。

五.2007年:科学研究中的猜想

研究院是一个智商密度很高的地方,不仅有许多聪明员工和实习生在这里工作,而且有很多世界一流的科学家络绎不绝地到这里交流访问,形成了一个非常宽松而活跃的学术交流平台。在与这些海内外知名学者的交流中,我总能在研究方法和思路上深受启发。比如每次和前任院长沈向洋的交谈都让我受益匪浅。他会经常鼓励我思考一些视觉和图形学交叉领域的研究问题。与另外一位理论组的访问学者滕尚华教授的交流也极大地帮助我开拓了研究思路。

2005年尚华第一次来研究院访问的时候,我们一起做了一个网格形变的项目,尚华对这个项目中涉及到一些非线性优化算法的稳定性和收敛性做出了重要贡献。我们合作的论文也发表在SIGGRAPH 2006上。此后,每次尚华来研究院我们都会在一起聊天。尽管尚华是一个计算机理论科学家,他对应用领域的很多研究问题却有着浓厚的兴趣。有一次在闲聊时候,他提到在做研究的过程中直觉很重要,有的时候对一些没有把握的方向需要做出猜想(conjecture)。他还提到了自己的一个非常好的研究工作就是这样做出来的。当时理论界已经证明单纯形法在最坏情况下具有指数复杂度。按照常理这样一个高复杂度的算法应当很难被应用,可是单纯形法却在工业界被广泛应用。尚华和他的合作者就猜想既然实践已经证明了单纯形法的实用性,那么一定存在着某种限定条件使得单纯形法的复杂度远远低于指数复杂度。沿着这一思路,他们最终证明了在大量的工业应用中单纯形法只是多项式复杂度。这一研究工作在理论界和工业界都产生了深刻的影响,相对于传统的最坏情况分析(worst case analysis),这一工作开创了光滑分析(smoothed analysis)。他们的论文也在2008年获得了计算机理论学界享有盛名的G?del奖。

当时,我在做一个关于动态散射媒体/烟雾的实时绘制项目,但是却碰到很多困难。烟雾的数据表达是一个包含有很多高频特性的体数据,我们尝试用一些数学模型去近似表达烟雾的数据,然后在这个数学模型上进行有效绘制计算。但是根据这些数学模型得到的绘制效果却不让人满意,因为原始数据在数学函数的逼近下会丢失掉一些细节,所以烟雾绘制出来的效果总是太过光滑,真实感颇为欠缺。 另一方面,直接采用烟雾的原始数据会极大地降低绘制效率并且增加存储开销。这时候我们的项目基本上陷入了停顿。而尚华的关于科研猜想的一番谈话如醍醐灌顶般激发了我的灵感——是不是可以尝试不要丢掉残差(原始数据减去函数逼近而剩下的即为残差),在绘制过程中通过某种途径把残差补偿进去(当时完全不知道该如何补偿)。有了这个思路,我马上找任重一起讨论如何利用残差。很快我们就解决了残差数据的有效存储和绘制算法,实验结果表明这个猜想非常完美地把富有真实感的细节表现出来了。这项研究成果也发表在2008年的SIGGRAPH上。就是这样,一个利用早期被我们丢弃的残差数据的算法成为了这整个项目中最核心的部分,而大胆猜想为我们在穷途末路中找到了重新开路的明灯。

第82节:大侠是怎样练成的(3)

六.2008年: 从计算机图形学到计算机科学

如果说过去5年的目标是对计算机图形学有一个透彻的了解,那么从2008年开始我把研究范畴扩展到计算机科学中的一些更基础的领域:数据结构和编程语言。

近年来多核技术(包括多核CPU和GPU)的发展已经成为趋势,如何在多核环境下进行有效的算法设计和程序开发成为整个计算机科学的一个热点研究方向。这对我们图形学研究人员来说也是一个难得的机遇,因为没有人比我们更了解GPU,?。2007年年初我们就计划在 GPU上开发一些基本数据结构的构建算法,并在暑假的时候确定了要设计一个全新的GPU编程语言的目标。到目前为止我们已经开发了包括八叉树,KD树在内的多个基本数据结构,这些数据结构被应用到图形学和视觉等多个领域。

另外我的学生侯启明和我设计开发的BSGP编程语言使得程序员可以象编写串行C语言程序一样在GPU上进行并行程序设计,大大提高了GPU程序的可读性、可写性和可维护性,使得编程效率提高2~3倍。而我们的BSGP编译器生成的代码可以达到与现有的编程语言相似甚至更高的运行性能。这项成果已经被2008年的SIGGRAPH大会录用。目前我们正在努力把这个新的编程语言产品化。我梦想着有一天我们在数据结构和编程语言上的这些研究工作和成果会为并行计算时代的计算机科学奠定基础。

科学研究是一个没有止境的、艰苦的历程,如果你能保持耐心,并学会享受这一历程,你就能达到自己想象不到的高度。我希望这篇短文中提到一些的科研经历能对刚开始进行计算机图形学研究工作的新手们有所帮助。请你们相信,也许目前你觉得要成为一名计算机图形学专家是一件遥不可及的事情,但是只要你不断努力,你一定会被学术界所认可;也许你还会觉得成为计算机科学家是遥不可及的,那么只要你坚持,你同样可以证明自己可以成为一流的计算机科学家。就象Harry经常和我们说的,the sky is the only limit( 天空是唯一的局限,引申为永无止境)!

作者介绍:

周昆,2002年从浙江大学计算机学院获得工学博士学位,同年加入微软亚洲研究院,历任副研究员、研究员和项目负责人。2008年受聘教育部长江学者特聘教授,回到浙江大学计算机学院工作。在微软工作6年期间曾在国际计算机图形学大会ACM SIGGRAPH上发表17篇论文,其中多项技术被应用在Windows图形系统DirectX,XBOX游戏Halo 3,以及三维电影特技制作软件中。