多材料耦合俄罗斯方块?胡渊鸣给「太极图形课」交作业了!

2021-10-26 15:58:03 浏览数 (1)

这是一份太极图形 CEO 胡渊鸣与 CTO 匡冶忙里偷闲交出的「太极图形课」小作业—基于 Taichi 的软体俄罗斯方块游戏 demo,以下简称他们二人为“原野”组合。

不知道从何时开始一系列软体的俄罗斯方块视频在网上非常火。可惜的是这些视频基本上都是离线生成的,虽然看着很满足,但是其实没有太多游戏性。从传统的刚体、不能旋转的俄罗斯方块升级到软体,自然已经是巨大的提升;但是 “俄罗斯方块” 本身就是一个老少咸宜的游戏,少了交互性,还是会阻碍广大人民群众从中获得乐趣。

Youtube Up 主 C4D4U 软体俄罗斯方块系列视频

于是原野组合估算了一下,其实几万个粒子的仿真足以支撑整个游戏了。这样的计算量,配上 Taichi 编译器,是完全可以在普通机器上(甚至手机上)实时运行的。他们基于经典的 mpm99.py 对游戏进行了一个升级,使它支持液体、软体、弹塑性体等 2D 多材料仿真,并且可以在一台 M1 Macbook Pro 上超过 60 FPS 实时运行,就暂且将其命名为 “多材料耦合俄罗斯方块”,更多技术细节可以移步「太极图形」的知乎。

时间有限,原野组合的作品只能算是一个最小化的 proof-of-concept。还有一些功能没有完全实现,以及一些很明显的 bugs 需要修复,具体有哪些功能等着同学们添砖加瓦,我们文末揭晓。

然而,原野组合之所以交出这样一份作业,其实是为了赢得「太极图形课」的小礼物(没错,即使是老板,运营同学也没有“特殊对待”)。

「太极图形课」是由太极图形团队精细打磨,资深研究科学家刘天添主讲的计算机图形学入门实操课。课程于9月14日正式上线,每周二晚7点在「太极图形」B站进行直播,课程录播于次日发布。转眼五节课过去,Taichi 编程语言的基础语法,高级用法,以及调试和优化已经告一段落。10月26日(本周二)起将正式带领同学们跨入计算机图形学的大门,从最基础的程序动画讲起,覆盖渲染、软体仿真、流体仿真的基础知识,邀你学习、体验基于 Taichi 编程语言的图形学程序。

康奈尔盒的渲染-Ye Kuang

关联课程

11/02 第06讲:光线追踪的概念和基础

11/09 第07讲:光线追踪实战

布料仿真-Dunfan Lu

关联课程

11/16 第08讲:弹性物体仿真—时间和空间离散化

11/23 第09讲:弹性物体仿真—隐式积分和数值解法

Stable Fluid-Dunfan Lu & Mingrui Zhang

关联课程

11/30 第10讲:流体仿真—拉格朗日视角

12/07 第11讲:流体仿真—欧拉视角

  • 还没有实现消除和计分功能(可以试试使用 MPM 的背景网格,如果一行的 nodes 都质量 > 0,就可以考虑删除相关粒子啦。)
  • 还没有实现溢出以后的失败功能,这个比较简单...
  • 如果鼠标太靠近边缘,生成的粒子会在网格外。这一点在非 debug 模式的 Taichi 中是 undefined behavior,可能会导致程序崩溃。需要限制鼠标的范围。
  • 目前如果按空格键太快,会导致粒子粘连。这里需要做一个 cool down 的机制,这个也比较简单...
  • 目前绘制还是使用的上个世代的 CPU GUI 系统。这套 CPU GUI 系统是为了去年 GAMES 201 上课的时候大家各个系统上的兼容性的问题,我自己手写的 CPU 2D 软光栅化,性能自然上不去。随着 Taichi 升级到 0.8.0,一套全新的基于 GPU 的 GUI 系统 GGUI 逐渐受到用户的青睐。欢迎有兴趣的同学完成这个升级,全屏容纳更多的 particles。
  • 目前的程序还是需要 Python 才能运行的,有必要的话可以用 Taichi 的 AOT 技术去脱离 Python 运行环境。相关技术快手已经落地了,在快手移动端 App 的 “魔法表情” 里点开就可以使用。当然,如果你自己沿着这个思路做了个小游戏放到了 AppStore,那欢迎你邀请原野组合试玩。
  • (难)目前 MPM 相关的算法在处理软体边界的摩擦方面并不完全可控,难以设置一个很好的摩擦系数。如果你解决了这个问题,可以考虑直接投稿到 SIGGRAPH / JCP。

0 人点赞