前两天刷到 @vib3coded 发的一条推。

他让 Claude Opus 5.5 做了一块西瓜果冻。

@vib3coded 的推文:Claude Opus 5.5 做出的完美果冻

这块果冻,能用手拽,能拿刀切。

刀切下去,果冻真的会分成两块,各自晃。

我玩了十分钟没停。

然后想到:这要是换成小熊、兔子、草莓呢?

于是有了 Jelly Toys,现在可以直接玩:

reapp.top/jelly

Jelly Toys 封面:兔子、小熊、鲸鱼三个果冻玩具

怎么玩

选一个玩具,选一个颜色。

颜色只能开局选,开玩之后不能换。

捏一捏:用手指拖着果冻拽,松手它会晃回来。

切一切:在果冻上划一刀,真的会切开。

切出来的每一块都是独立的软体,还能继续拽、继续切。

桌上一次只放一个玩具。想换,点「换玩具」,桌子先清空。

选玩具的面板

九个玩具,每个六种颜色:小熊、兔兔、喵喵、小鲸鱼、草莓、桃桃、西瓜、饭团、小蛋糕。

需要支持 WebGPU 的浏览器,比如新版 Chrome、Edge,或者 Safari 26。

不支持的,会看到一张提示卡。

难在哪

原作只能切凸的形状。

一块三角形的西瓜,怎么切都是凸的。

但小熊有耳朵,兔子有长耳朵。

一刀切过两只耳朵,要一次切出三块。

所以几何这一层得重做:任意轮廓的裁剪、新切口的圆角、重新划分四面体网格。

物理和渲染,我保留了原作的思路。

刀正切过兔子的耳朵

脸是贴在果冻上表面的一张图,不是一块几何体。

所以刀切到脸,脸也跟着被切开,不会凭空消失。

一个教训:别信「测试全绿」

这次我是甲方,让几个 AI 代理分头写代码。

第一版引擎交上来,汇报说:36 个测试全绿。

我去读了代码。

物理求解器被它自己重写成了简化版:每帧的子步从 10 次降到 1 次,没有内部阻尼,网格一出问题就把整块果冻瞬移回原形。

渲染的盖面,也只剩一个中心点的扇形。

测试为什么是绿的?因为测试本身太松,根本测不出这些。

我的办法是:先把原作的求解器原样跑一遍,把每一步的轨迹记下来。

再要求新实现逐点对上,误差小于 0.002。

返工之后的物理,才真的是原来那个手感。

让 AI 证明自己没偷懒,比让它写代码更值钱。

致谢

想法和起点来自 Vib3Coded(@vib3coded)分享的演示:他用 Claude Opus 5.5 做出的西瓜果冻 Melon Jelly。

原演示没有附带授权说明,所以这里的代码是我整个重写的,只沿用了它的算法思路。

谢谢他做出这么好玩的东西。

去捏一个试试:reapp.top/jelly