不知道大家看没看《冰雪奇缘2》,反正我看完之后的感觉,就是看两个公主玩了一百分钟的塞尔达...没有任何别的想法...

但有一位清华姚班毕业的大佬 —— 胡渊鸣,在看完之后,试着用 99 行代码实现了冰雪奇缘里的特效场景:

14 万个水,果冻,和雪「粒子”」

是不是很炫酷?

代码虽然很短,但背后的故事却很长。今天我们就来看一下,这 99 行代码背后,横跨了 20 多年的故事。


胡渊鸣其人

胡渊鸣是一个不折不扣的少年天才,读高一的时候就已经被保送了清华。

胡渊鸣第一次尝试编程,大概是小学三年级。当时他的一个堂姐喜欢在家玩《仙剑奇侠传》,觉得特别有意思。当时他就想,也要做出一个这样的游戏来。然后就开始有意识地接触这方面的书籍。刚好他的父亲就是大学信息学教师,帮他买了不少计算机方面的书。

小时候他的父母经常要上课,就把年幼的小胡一个人放在大学研究生工作室里,里面都是计算机,一放就是大半天,他就跟着那些研究生一起,看着他们写程序,一开始看不懂,就是玩。

至于快不快乐,他自己也说不上来。

2013 年胡渊鸣保送进入清华姚班。本科期间,胡渊鸣先后前往东京大学、斯坦福大学访学,并曾于微软亚洲研究院实习,从事深度学习和计算机图形学研究。本科便有多篇论文中选 CVPR、SIGGRAPH 等国际顶会。

2017 年,胡渊鸣进入 MIT 读博。入学 13 个月后,完成硕士论文 ChainQueen,拿到 MIT 硕士学位。博一期间,共发表 6 篇顶会论文。


技术向:99 行代码的《冰雪奇缘》

做CG 特效一直都是一个烧钱的事情,不然我们看动画片时也不会总是刷“五毛特效”、“经费在燃烧”这些关键词。

背后的原因一是门槛高,二是对性能有着极高的要求。自己渲染过视频的人都知道,随便一个小视频,哪怕是高配笔记本也要渲染半天。

然而,胡渊鸣开发的这种新的 CG 特效编程语言 Taichi(太极),大大降低了门槛。就像开头我们提到的,在我们的笔记本上,仅需几分钟就能渲染完成一个简单的物理场景。

Taichi 中的可微分编程,可以通过蛮力的梯度下降有效地优化神经网络控制器,而不必使用强化学习。10 种可微分模拟器中的大多数模型可以在 2-3 小时内实现,而且大部分不需要 GPU。这些示例中,弹性体、刚体、流体、光线的折射、弹性碰撞,常见物理环境应有尽有。

虽然语法看起来是 Python,其计算部分却会被一整套编译系统接管,最后输出可执行的x86_64或者PTX instructions,能够在 CPU/GPU 上高效运行。

这么说大家可能对这个项目的优秀程度没概念,作者的论文里帮我们做一个比较:借助 Taichi 的渲染速度,比 TensorFlow 快 100 多倍、比 PyTorch 快 10 倍。


代码背后的故事

据胡渊鸣说,他是为了解决计算机图形学研究对性能的追求以及生产力低下的问题,才决定重新设计编程语言。

本来胡渊鸣想把 Taichi 做成一种单独的编程语言,但是为了方便大家使用,他用了一句 import taichi as ti 把 Taichi 语言假装成了 Python。这样做不仅能使用很多现成的 Python IDE,与 Numpy、MatPlotlib 等工具库无缝衔接,还降低了学习的门槛。

在他的概念里,计算机图形学,和其他科学一样,应该把"简单性"作为追求之一。就像如果 MLS-MPM 不能被 88 行代码实现,求它的导数可能也就不能“只”用120个公式完成,可能也就不会有ChainQueen(可微物理引擎),更不会有ChainQueen启发的工作(比如DiffTaichi)。

而化繁为简本身就是科研的意义之一。

但做这件事对胡渊鸣来说,也是一个大胆的决定,因为虽然他之前花了很多时间做 low-level performance engineering,但是真动手写个编译器还从没干过。

从 2019 年 1 月起,他便一直在做 Taichi programming language,这个结果最终发表在 SIGGRAPH Asia 2019 上。

毫无疑问,Taichi 编程语言的工作量是非常大的。这是一个全新的系统,项目早期要做的设计决策非常多。这给他带来一正一反两个结果:

1. 设计决策可以只在脑子里进行,而不需要盯着屏幕。这意味着这个项目总体还是比较“健康”的:代码写累了就可以闭眼甚至躺床上想想别的地方怎么设计。

据胡渊鸣在知乎里说的,Taichi programming language 的 1/3 是在床上、公交车上完成的。这样的时间分配一定程度上避免了 Taichi 编译器的开发损伤他的颈椎和视力。

2. 早期设计决策需要随机应变,决策的交流是非常低效的。人与人之间同语言交流的带宽比脑内带宽低好几个数量级,就像 network bandwidth 和 L1-d$ bandwidth 的差异一样,于是他只好一路从底层的代码生成(codegen),到中间表示(IR)和优化(opt),到前端语法,最后到图标设计,都自己干了。

但面对这么大的工作量,有时会“累觉不爱”,但胡渊鸣只要睡一觉起来之后就又会重燃斗志。这可能就是我们和大佬之间的差距了 —— 我睡一觉之后,只想再睡个回笼觉...

我们只看到了牛逼闪闪的结果,但背后的艰辛可能只有这些所谓的“天才”自己才知道了。

据胡渊鸣自己说,他有一次连续在家写了 5 天代码没出门,学长都说他身上“长蘑菇”了。


彩蛋花絮

再牛的人,也逃不过真香定律。不知道胡渊鸣还记不记得高一参加完竞赛后扬州晚报对他的采访:

扬州晚报记者:对自己的未来有什么想法?大学会学什么专业?

胡渊鸣:我父母和我交流过,大学肯定会学计算机相关专业。摆在我面前的其实有两条路,要么做研究,要么做管理。虽然我对编程感兴趣,但我不甘心一辈子就做一个程序员,包括想在做班长的经理,其实还是想做管理。不过现在当务之急还是把眼前的事情做好。

不知道胡渊鸣老师在体验到技术的「创世」魅力后,现在还这么想么?

胡渊鸣知乎原文:

https://zhuanlan.zhihu.com/p/97700605

论文地址:

https://arxiv.org/abs/1910.00935

太极项目地址:

https://github.com/yuanming-hu/taichi

taichi_mpm项目地址:

https://github.com/yuanming-hu/taichi_mpm

扬州晚报采访胡渊鸣:

http://news.163.com/10/1206/15/6N7SBAKB00014AED.html

- END -

备注:公众号菜单包含了整理了一本AI小抄非常适合在通勤路上用学习

往期精彩回顾2019年公众号文章精选适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(第一部分)备注:加入本站微信群或者qq群,请回复“加群”加入知识星球(4500+用户,ID:92416895),请回复“知识星球”

喜欢文章,点个在看

清华毕业生开发新特效编程语言:99 行代码背后 20 多年的故事...相关推荐

  1. 清华姚班毕业生开发新特效编程语言,99 行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐...

    公众号关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 转自量子位,作者边策.鱼羊 只用 99 行代码,你也可以像<冰雪奇缘& ...

  2. MIT博士99 行代码就能实现《冰雪奇缘》的特效引擎入门-用Taichi画太极

    可能最近不少读者也像我一样被某公号的那篇<清华毕业生开发新特效编程语言,99行代码实现<冰雪奇缘>,网友:大神碉堡!创世的快乐>吓了一大跳, 尤其是开篇就引用了冰雪奇缘的动画C ...

  3. 大神碉堡!99 行代码实现的神奇效果

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 边策 鱼羊 发自 凹非寺量子位 报道 | 公众号 QbitAI 只用99行代码,你也可以像<冰雪奇缘>里的 ...

  4. 厉害了!99行代码实现《冰雪奇缘》

    只用99行代码,你也可以像<冰雪奇缘>里的艾莎公主一样拥有冰雪魔法.虽然你不能在现实世界中肆意变出魔法,但却能在计算机的虚拟世界挥洒特效. 或许你不知道,电影和动画中特效有时仅仅短短的一秒 ...

  5. (中文详解篇)smallpt: 99行代码完成全局光照Path Tracing

    目录 0. 什么是SmallPT Features 1. 光线追踪需要了解知识 1.1 什么是全局光照? 1.2 渲染方程 2. SmallPT代码分析 2.1 代码块1 2.2 代码块2 2.2.1 ...

  6. 标准oc算法的推导与99行代码详解

    文章目录 标准oc算法的推导与代码详解 问题描述 OC算法的数学描述 结果展示 OC算法的matlab代码及注释 参考文献 标准oc算法的推导与代码详解 对于变密度的参数化方法,设计变量x为材料相对密 ...

  7. 【Python】胡渊鸣的99行代码——冰雪奇缘

    14万个水,果冻,和雪"粒子" QQ录屏20210710185902 import taichi as ti import numpy as np ti.init(arch=ti. ...

  8. C、C++ 不得宠,微软正开发新的编程语言!

    76 年迭代与更新,编程语言界,谁主沉浮? 在六百多种编程语言中,对于开发者而言,其主观印象中或只有几种主流的编程语言,如 Java.C.C++.C#.新贵 Python 等,而之所以它们能够成为主流 ...

  9. 代码android点击效果,GitHub - likaiyuan559/TouchEffects: Android View点击特效TouchEffects,几行代码为所有控件添加点击效果...

    Android 点击特效TouchEffects TouchEffects能够帮助你更快速方便的增加点击时候的效果,TouchEffects的目标是打造一个稳定.全面.且能更方便的自定义及个性化的一款 ...

最新文章

  1. php实时股票,php获得股票数据
  2. python使用Spacy迁移学习库进行句法分析实战
  3. 单片机简单的计算器c语言程序,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...
  4. C#中自定义PictureBox控件
  5. C 语言编程 — typedef 关键字
  6. 为什么多线程可以利用到多核?
  7. frida hook java层常用模板
  8. html js 控制span值,根据显示/隐藏span标签/ Javascript组设置span文本?
  9. 重构现有代码:Refactoring
  10. Android 系统(176)---Android多线程
  11. 什么是Github?
  12. Atitit 人工智能 统计学 机器学习的相似性 一些文摘收集 没有人工智能这门功课,人工智能的本质是统计学和数学,就是通过机器对数据的识别、计算、归纳和学习,然后做出下一步判断和决策的科学
  13. matlab求解一元函数积分,matlab实现一元函数积分
  14. 物联网卡零售应用的真实案例
  15. 基于SSM框架的借阅图书管理系统
  16. 做一套给三星手机用的导航栏图标(伪装Windows10移动版)
  17. 如何快速通过pmp考试求攻略
  18. springboot中报415错误怎么解决?
  19. CAD文件翻译和本地化
  20. 中国人工智能最高奖,颁给了这些人

热门文章

  1. 鸡肋工具-Oracle建表工具
  2. bzoj3551: [ONTAK2010]Peaks加强版
  3. 四步法分析定位生产环境下MySQL上千条SQL中的问题所在
  4. ckeditor源码编辑模式,添加style、javascript内容丢失的解决
  5. 2016-10-26随笔
  6. Javascript 面向对象编程定义接口的一种方法
  7. Kubuntu中thunderbird最小化到任务栏
  8. python3数字全排列怎么搞_python使用递归解决全排列数字示例
  9. UG NX12.0安装教程
  10. 计算机视觉与深度学习 | 动态背景下的前景目标提取