把一切变得黏糊糊、Q 弹,且不太体面。
上传一张图,让 AI 把它做成可以按、揉、往外扯的 3D 捏捏。按下去一块,拉出来一截,松手以后晃晃悠悠地恢复——也可能在中途出现一种难以解释的表情。
你可以把朋友的形象做成老鼠干捏捏,把自己的头像拉成一条,把老板画成的饼真的捏扁。它的目标不是让万物端庄,是让你忍不住再扯一下。
上传一张朋友同意拿来玩的形象图:
把他做成一个老鼠干捏捏。脸尽量认得出来,身体可以离谱一点。我要抓住脸往外扯,松手以后黏糊糊地弹回去。
做人有点累,先当一会儿可以拉长的老鼠干。这里的“老鼠干”是造型梗,不是每次都会自动变成同一种老鼠;想要哪种离谱,请直接告诉 AI。
头像平时负责体面,捏捏负责替你变形。开会前还是圆的,开会后已经可以当书签了。松手再给它一点恢复时间。
蛋糕、布丁、泡芙,甚至一颗土豆。看起来应该能吃,拉起来又明显不对。数字食品,不计热量,也不建议认真研究它的口感。
给原创 IP、吉祥物、小怪兽做一个黏弹分身。正常的时候还是它,一上手,事情就开始抽象。
这是给 AI 助手用的开源 Skill,不是需要注册的新应用。
git clone https://github.com/EverettFish/squishy-skill.git ~/.codex/skills/squishyCodex 用户放到 ~/.codex/skills/squishy 后重新打开会话。其他支持 Skills 的助手放到对应目录,例如 ~/.claude/skills/squishy;也可以让有代码执行能力的助手直接读取 SKILL.md。
然后上传图片,说:
用 $squishy 把这张图变得黏糊糊、特别 Q 弹。可以局部按下去,也可以抓住一点往外拉。脸和衣服尽量保留,形变幅度可以不讲体面。网页纯白、干净,别写一堆原理。
想要老鼠干、糯米团子或者别的抽象造型,就在这句话里说明。不指定改造时,仍然优先保留原图身份;抽象的是手感,不是随便换一张脸。
- 认一下受害对象。 提取脸、颜色、衣服、花纹和不能丢的特征。
- 补一下没拍到的地方。 用环境里可调用的生图工具补充三视图。原图已经是 3D 形象,就保留它;没有生图工具,也能直接参考原图继续。
- 给它一个可以变形的身体。 用 Blender 制作有体积的模型和贴图。没安装 Blender 时,先查找已有安装,再按环境权限下载、校验官方便携版。
- 开始不太礼貌的物理互动。 打开白色网页,按压、拉扯、松手。设置藏起来,别让参数比被捏的东西还抢戏。
做好后会有 Blender 工程、建模脚本、GLB、实际渲染和一个能玩的网页。生图可用时还会有三视图。运行网页不需要在线生图 API;发布链接或公开原始素材由你决定。
给想改手感、换角色或者贡献代码的人留一点实现说明。
| 部分 | 实现 |
|---|---|
| 图片与参考 | 使用环境里实际可用的 imagegen 等工具;没有就回退原图。不会假装调用一个不存在的 3D 服务。 |
| Blender 建模 | 根据主体编写 Python 脚本,制作体积、UV/投射贴图和材质。已有 3D 角色优先保留原图细节,不用通用圆脸代替。 |
| 局部按压 | 射线拾取表面,映射回静止姿态;有限半径的平滑权重控制凹陷和周围鼓起,远处顶点不跟着缩放。 |
| 向外拉扯 | 鼠标抓取平面位移加上向外的法线分量。眼睛、字样和衣服贴图跟着同一片表面变形。 |
| Q 弹与拖尾 | 阻尼振子负责快速跟手、松手后晃动;缓慢衰减的记忆项负责不情不愿地恢复。 |
| 材质 | 普通模型用泡棉/硅胶风格 Physical Material;原图贴图模式保留已有颜色,再用法线变化增强凹陷明暗。 |
| 网页 | Three.js 静态页面,依赖本地打包。无 Logo、无技术面板,按压/拉扯/转一转就够了。 |
Blender 时间轴里也有局部按压、拉扯和回弹的示范动画。网页交互实时计算;时间轴是可编辑的演示,不是 Blender 软体求解缓存。
这是为手感设计的简化黏弹模型,不是有限元、流体、自碰撞或严格体积守恒求解器。猛拉时可能折叠、穿插,形变有时会很怪——所以这份 README 也不再假装每一只成品都精致可爱。
图片变模型同样需要按主体调整,不是一键扫描。塔塔示例使用原图贴图保留正面外观,侧背体积和纹理由参考补建;侧看仍可能有投射拉伸,不能保证所有角度都和单张原图“一模一样”。我们会检查相似度,也会把这种限制写清楚。
想要脸不变,就明确说“保留脸和比例”;想要老鼠干,就明确说“大胆改身体”。可读、可改、能玩,比假装什么都能完美还原更实在。
python scripts/ensure_blender.py --search-root /your/workspace
python scripts/init_project.py /your/new-toy --name "某位朋友的临时形态"
# 把模型放到 /your/new-toy/web/assets/toy.glb
python scripts/serve.py /your/new-toy/web --port 4173web/toy.json 可设置名字、模型路径、语言、主题色、material: "gel" 或 "foam"。referenceTexture: true 用于已带光照的参考贴图。外观和形变可以分别调整。
- Blender 配置:检测/安装、坐标、材质、渲染、文字投射、动画和导出。
- 相似度与贴图:别把朋友捏着捏着,建成了陌生人。
- 交互参数:影响范围、阻尼、慢回弹和已知边界。
- 塔塔实例 · 通用网页 · 建模工具。
node --test tests/physics.test.mjs tests/gel.test.mjs
python -m unittest discover -s tests欢迎带着奇怪的图、离谱的效果和有用的修复来提 Issue。代码与说明采用 MIT;角色、商标及素材的权利仍归原权利人,见 素材说明。
先拉一下。体面等会儿再恢复。
