大家好!我想与大家分享我过去六个月来开发的项目:Nermal Dynamics。

这是一个完整的自定义物理引擎和渲染器,基于Apple Metal。

它没有使用人工智能,也不使用任何外部库。它只是使用传统的物理和渲染。

我最初是为了学习计算着色写这个项目,因为我看到了这篇论文。[1] 我有一些在高性能计算方面的经验,这似乎像一个有趣的问题。

计算着色器的大威力和灵活性自然地驱动了物理架构,使得我发展出了一种设计哲学,我称之为“Everything is Compute Shaders”(EiCS)。如果可以是一个计算着色器,它就是! 物理、重力、碰撞、火焰传播、磁力、胶粘约束等所有都运行在GPU上。CPU只负责管理缓存和驱动UI。

渲染器使用Metal的渲染和光线追踪管道完全自底朝顶堆栈。

在模拟期间,CPU只使用了大约8%的电力,并且处于低功耗模式。

这款游戏的核心是模拟曲率线段(flexible segments that stretch, bend, collide, connect, and break)。线段的数量直接与GPU的力而动。我的 M4 Pro 上我获得大约170k-200k 个线段,我的苹果手表得到大约30k。

核心计算器(Cosserat solver)位于中心,其他系统要么直接提供给它(重力、胶粘、磁力、射击),要么从中获取输出(碰撞、位移、距离)。

这个渲染器利用Metal的渲染和光线追踪管道来将模拟结果呈现出来。它支持:

高动态范围图像中的光晕和透视效果
PCSS 阴影图
体积性云和神光射线
波长计算的海洋系统,具有泡状现象和菲涅尔反射
射线追迹到的玻璃球,可折射或反射(或同时进行!)
GPU驱动的LOD,以及剪裁和遮挡剔除

你可以在这里得到完整的套件来玩这个模拟:你可以:
拉动、切割和扔线段。
点燃线段,看着火灾动态传播和燃烧。
改变材料属性以产生如运动性沙子的、水的、凝胶的等自发性行为。
将磁力器磁化线段或者粘连结构。
放置重力球,吸引、拒绝、脉冲、旋涡或甚至驱动立方波动谐波。
构建可破坏性雕塑、动态设计、Chladni 速度图案抑或任何你能想到的。

我正开始着手制作游戏的音效和音乐,我将尽快拍摄宣传片!我很希望你可以在游戏首映时给出一些反馈,并回答任何问题。

在早期原型中,我使用Python搭建了一个在任何机器上都可以运行的版本。发布了Nermal Dynamics后,我计划将该原型开源(openNermal),因此人们可以使用该物理引擎。

一些游戏中出现的图案和截图来自:[2]

[1] https://dl.acm.org/doi/10.1145/3721238.3730618
[2] https://www.cemyuksel.com/research/yarnmodels/