用代码做动画:把「Vibe Motion」拆成可复现的步骤
这位博主原创了一套叫 Vibe Motion 的动画做法——不靠图生视频,而是让 AI 写代码,用数学公式和渲染引擎生成画面。这份手册把他散在十几条视频里的心法、案例、提示词抽出来,编成一条学习路径。
00导读:先搞清楚值不值得学
这 48 条里,大部分是作品展示和大模型测评,真正在讲「怎么做」的只有下面这些。我把它们按学习价值排了序:
| 难度 | 视频 | 你能学到什么 | 点赞 |
|---|---|---|---|
| 入门 | 教程来了!Gemini 星空粒子手势识别 | 单文件网页 + MediaPipe 手势 + Three.js,零环境起步 | 1.9w |
| 入门 | 动效自由!Vibe Motion 速成班 | 面向对象思维替代分镜思维,物理引擎入门 | 2366 |
| 入门 | 豆包 + 扣子空间 PPT 终极方案 | 一条完整的「文本→成品」工具链,20 分钟能上手 | 248 |
| 中等 | 新流派!Vibe Motion 教程公开 | 跟随算法(Follow)、两关节 IK、实时手势驱动 | 2979 |
| 中等 | 新流派!Vibe Animation 教程公开 | 完整生产线:检测→导出 JSON→渲染序列帧→ffmpeg 合成 | 9445 |
| 中等 | vibe coding + git = 无限动画 | 用 Git 做子目标拆解,复杂动画唯一的可行路径 | 6959 |
| 中等 | 思花的「数字艺术」howto 构建 | 事件驱动创作法、XPBD 软体、从开源里借物理对象 | 1521 |
| 进阶 | 借用鱼群的数学公式,我 vibe 了 3D 粒子群 | Boids 算法三条规则、调参、卡住时怎么找作者求助 | 688 |
| 进阶 | 算到 GPU 冒烟,vibe 求解特斯拉飞行轨迹 | 把「平稳」翻译成代价函数,MPC 最优控制 | 6263 |
| 进阶 | 声学 研究 1 年,做了这个 sound skill | A/B 盲测 harness——他所有方法里最硬的一条 | 5245 |
| 进阶 | 【硬核技术拆解】howto vibe 一款网络游戏 | 抽象机制怎么变成看得懂的动画(帧同步) | 3767 |
| 进阶 | 在伊斯坦布尔用 AI 还原 500 年前的拜占庭 | 实拍 + AIGC 混合,抽卡成本压到 1/5 的办法 | 1728 |
01他到底在做什么
一句话:自然语言 → AI 写代码 → 代码渲染成画面。
「无论是鱼的外形还是运动轨迹,都是完全由数学公式和代码定义的。顺着这个思路,绝大部分矢量动画或效果都可以通过自然语言的描述,到 vibecoding 生成代码,到代码渲染为动画画面,这个过程我称之为 Vibe Animation。」
为什么要多这一步?
因为有一类画面,端到端的图生视频根本做不到。他自己反复举三个例子:
- 精准跟随——一条鱼要实时跟着你手指动。「目前的图生视频技术还没有办法做这么精准的跟随。」
- 精准物理——弹弓的橡皮筋回弹。「即使强如 seedance2,在面对需要精准物理计算时都显得有心无力。」
- 精准数值——鱼群的上万个体、飞行器的轨迹,每一帧都要对得上。
他给的配比很实在:
「如果说 seedance 完成了 AI 做视频的 70%,那它打通了剩余的 25%。有了它,你在网页上浏览到任意喜欢的动效,只要代码开源,都可以让 AI 魔改效果并渲染为视频。」
剩下 5% 他没说,大概是实拍和人工剪辑的部分。
这套东西和「让 AI 生成视频」的本质差别
| 图生视频 / 文生视频 | Vibe Motion | |
|---|---|---|
| 输入 | 一段描述画面的提示词 | 一段描述对象和规则的提示词 |
| 产出 | 不可编辑的像素结果 | 一份可改的代码 |
| 改一个细节 | 重新抽卡,整段变样 | 改一个变量,其他不动 |
| 改一百次 | 一百次抽卡成本 | 一百次改代码,几乎零成本 |
| 擅长 | 真实质感、光影、人物 | 数学可视化、精准运动、UI 动效 |
这张表里最关键的是第三行。他在数字艺术那期说得很直白:
02五条心法
这五条是贯穿他所有视频的底层方法,比任何具体技术都重要。
心法一:面向对象,而不是面向过程
这是他讲得最重的一条,在速成班和数字艺术两期各讲了一遍。
「当用 AI 生视频时,提示词往往会依次描述分镜画面,这是面向过程的思维模式,而 vibecoding 要求我们用面向对象的思维模式。」
同一个弹弓,两种写法:
| ❌ 面向过程(写分镜) | ✅ 面向对象(写对象) |
|---|---|
| 「第 0 秒弹弓出现,第 1 秒橡皮筋被拉长,第 2 秒松手,弹丸以抛物线飞出,第 3 秒撞墙碎裂……」 | 「弹弓:Y 字形躯干固定不动;橡皮筋有两个状态——拉动时终点跟随鼠标,释放后按拉伸距离给弹丸一个正比于偏移量的速度,然后立即回到初始状态。弹丸:刚体,受重力加速度。环境:四周是碰撞体。」 |
面向过程的写法你写一百句也写不完,因为每个瞬间都要描述;面向对象的写法三四句话就定义完了整个系统,剩下的交给物理引擎逐帧去算。
数字艺术那期他补了一个更精确的说法:
举个例子:思花作品《解药》的核心不是「药片飘动」,而是构建那个包裹药片的薄膜。薄膜建好了,动起来是必然的事。
心法二:从简单到复杂,先用几何体
「其实 90% 的时间我都在和这些圆锥体打交道。正确的 vibe 思路就是从简单到复杂,所以鱼缸咱们简化为长方体,鱼简化为圆锥体。」
他管这个叫 procedural mesh(程序化模型):模型等价于一段代码,可以让 AI 生成,你只需要给出喜好——高矮胖瘦、用什么颜色。
这个习惯解决的是一类很常见的失败:新手一上来就要「一条逼真的沙丁鱼」,AI 给你一个模型,你连它为什么不动都看不出来。先把鱼变成圆锥,运动对了再换模型,问题立刻变得可定位。
心法三:用 Git 做子目标拆解(最重要的一条)
如果你只记一条,记这条。这是「为什么我 vibe 不出复杂动画」的标准答案。
「从 0 到 1 vibe 一个复杂的动画并不是由一句很长的提示词一步到位,而是拆解成若干个子目标逐一实现。每完成一个子目标进行一次 git 存档,清空上下文后再去攻克下个子目标。当某个目标比较困难时,AI 往往不能一次性搞定,此时我们可以用 reset 回退到上个存档点,优化提示词,提升模型思考深度,然后再来一次。这像不像游戏中的 boss 战以及存档点?」
具体操作步骤:
- 选一个已有的开源 demo 做起点。他 vlog 里的 3D 屏幕动画,起点是一个 three.js 官方展示案例——因为它已经完成了「把 HTML 贴到 3D 屏幕上」这个子目标。
- 界面只留三块:左边 VSCode 看代码和 git,右边浏览器看效果,下面终端跑 AI。三个东西同屏,改完立刻看到。
- 装 Git Graph 插件。VSCode 自带的 git 面板太小,看不到项目目录。Git Graph 会在左下角加一个按钮,点开是完整的分支树。
- 把 commit message 翻译成中文。他直接给 AI 一句提示词,把 AI 自动生成的英文提交说明改成中文——因为每次存档你都要回头读,读得懂才用得起来。
- 每完成一个子目标 → commit。然后开新对话(清空上下文),再做下一个。这一步很多人省掉,结果上下文越来越长,AI 开始忘事、开始改坏前面的代码。
- 卡住就 reset。回退到上一个存档点,把提示词改得更具体,或者让模型「想久一点」,再来一次。
- 分支 = 支线副本。要试一个新效果但怕搞坏主线,就开分支;成了 merge 回来,废了直接删。
心法四:真实感来自观察,不来自提示词
「基本功能有了,接下来就是让画面更真实,这需要一点点经验。不过积累经验的方法也很简单,只需要你更细致地去观察世界。」
他举了两个具体例子,这两个例子本身就是可以直接抄的细节:
- 过冲回弹:「弹弓的弹性绳释放后并不会立即停止运动,而是会过冲再回弹,反复几次后直到能量消散。」——一个阻尼振荡,加上去质感立刻不一样。
- 动态模糊:「当你用相机拍摄高速物体时,成像会有残影,所以我就告诉它,在弹弓速度大于一定阈值的时候,给它加上动态模糊的效果。」——注意这里的关键是阈值触发,不是全程加。
心法五:借力已有的代码,不要从零 build
他的态度很明确:不是所有物理对象都要自己写。三条借力路径:
- openprocessing.org——上面有大量物理对象的开源实现。他提到一个叫
broken glass的作品,思花老师好几个片子都是从它魔改的。 - GSAP 官方 demo / CodePen——找现成动效,导出代码再让 AI 换内容。他的流程是:点
CodePen→ 右下角Export→Export Zip→ 解压得到代码。 - GitHub 作者本人——这条最有意思,见案例四。
03技术栈:他实际用的东西
写代码的 Agent
| 组合 | 为什么用它 |
|---|---|
| Claude Code + MiniMax M2.x | 主力。Claude Code 能操作本地文件、跑自动化脚本;模型侧用 MiniMax 是因为「用 Claude 自带模型并不方便」,而且 M2.5 在 Multi-SWE-bench 多语言任务上排第一——他常用 Godot 的 GDScript,属于冷门语言,这时候多语言能力很关键。 |
| Gemini Canvas | 只做纯前端、不需要本地文件的场景。星空粒子那个案例就是全程网页版。 |
| 豆包 / DeepSeek 网页版 | 只适合问答。涉及本地视频处理、跑脚本就不行了。 |
! 就变成 shell 模式,可以直接执行终端命令,不用切窗口。这种小操作在高频使用中省很多时间。
渲染 / 创意编程引擎
| 工具 | 用在哪 |
|---|---|
| p5.js | 2D 创意编程。多关节跟随 demo、弹性网格都用它。最适合入门。 |
| Three.js | 3D。星空粒子、粒子群、鱼群 3D 版。 |
| Processing | Java 版创意编程。鱼跟随手指那条就是用它渲染的,轻量。 |
| Godot (GDScript) | 做游戏和带物理的互动 demo,弹弓就是它。 |
| Remotion | React 写视频,适合 2D 动效批量出片(他的 create-vibemotion 脚手架基于它)。 |
| Puppeteer | 他后来做了 create-vibemotion-threejs,不基于 Remotion,而是用 Puppeteer 驱动 Three.js 逐帧截图导出——因为 Remotion 做不了 3D 序列帧。 |
专项库
| 库 | 用途 |
|---|---|
| MediaPipe | 手部关键点检测。所有「手势控制」的视频都是它。可以只取食指指尖的 2D 坐标,逐帧存成 JSON。 |
| XPBD | 基于位置的动力学仿真。比 mass-spring 系统稳定,做软体、布料、弹性网格优先选它。 |
| ffmpeg | 序列帧合成视频。可以让 AI 自己装、自己跑命令。 |
| 剪映 | 最终剪辑。他的原话是「并不用安装 PR 这类高端的剪辑工具」。 |
他自己做的脚手架与社区
npx create-vibemotion --vibemotion—— 一条命令搭好本地 2D 开发环境,预览、调参、渲染都集成好了。vibe-motion-skills—— GitHub 仓库,把动效做成 skill,Agent 装上就能对话出片。motion-face—— 「一人复刻,万人共享」。跳过最耗 token 的复刻步骤,直接解锁别人复刻好的代码工程。
导出格式怎么选
| 格式 | 什么时候用 |
|---|---|
| ProRes 4444 | 需要透明通道时。接近无损,文件大。 |
| H.264 | 不需要透明背景时。体积小很多。 |
| PNG 序列 | 中间产物,方便导入剪映再处理。 |
04六个案例,由浅入深
每个案例都写了:目标长什么样、按什么顺序拆、真实提示词、卡点在哪。建议按顺序做,前一个做完再开下一个。
为什么从这里开始
全程在网页里完成,不需要装任何东西。一个 HTML 文件就是整个项目,出问题也好排查。这是唯一一个他明确说「适合小白」的案例。
目标效果
一片橙色的粒子星球,外面两层白色星环。转动手指星球跟着转,握拳拉远镜头会远离,五指张开靠近镜头会推近。
四步做完
- 打开 Gemini 网页版,切到 Canvas 模式。他特别说别用 AI Studio——默认生成 React 多文件项目,对新手不友好。
- 把技术栈写死在提示词第一句。指定 vanilla js + html + css + Three.js + MediaPipe,并且要求 MediaPipe 走 CDN 时用普通
<script>引入变量。这一步是为了让 AI 把所有代码揉进一个 HTML 文件。 - 描述画面 + 描述交互映射。视觉和手势各自说清楚,两者用「当……时,会……」连起来。
- 本地预览。新建文本文件命名
index.html,粘贴,拖进 Chrome,全屏。
他用的原始提示词
create a webapp using vanilla js, html, css, modern threejs, mediapipe. 如果 mediapipe 来自 CDN,要用常规的 <script> 方式引入变量。 画面中是由大量球形小的粒子构成的一个绚烂的橙色的星球,星球球面应该能显现出来(可能在球面聚集了更多的粒子)。周围环绕着白色的粒子,构成星球的两层环绕星环。 摄像头的中心一直对着星球的中心,可以通过用户的手势控制摄像头,用户旋转手的时候,摄像头会随之旋转,就像星球在同步的顺时针或逆时针旋转;当握拳并拉远摄像头的时候,相机会较快远离星球,速度先慢后快,而当 5 指张开并靠近摄像头的时候,摄像头会快速靠近星球,速度先快后慢(摄像头距离星球的中心有个最小距离)。
- 第一句锁技术栈,而不是让 AI 自己选。避免它给你一个 React + Vite 的工程。
- 括号里补边界条件:「可能在球面聚集了更多的粒子」「有个最小距离」。这种补充是控制效果的抓手。
- 速度曲线也写进去:「先慢后快」「先快后慢」。缓动函数直接决定了手感,不写 AI 就给你匀速。
两个坑
- 在线预览没法全屏,所以一定要落到本地文件再用浏览器打开。
- 「怎么就 500 行不到的代码」——那是假象,库的代码没显示出来。别以为自己写错了。
目标效果
弹弓被拉开、松手、弹丸抛物线飞出、撞墙、碎屑四溅。看起来像实拍,但完全没用到 AI 生视频。
拆解:只需要定义四个对象
| 对象 | 属性与规则 |
|---|---|
| 弹弓 | Y 字形躯干。这是固定不变的部分,直接画个形状就行。 |
| 橡皮筋 | 两个状态:拉动——绳的终点跟随鼠标;释放——按拉动的距离,给弹丸一个正比于偏移量的速度,同时立即回到初始状态。 |
| 弹丸 | 不会形变,是刚体。受重力,有向下加速度。 |
| 碰撞体 | 四周的墙。 |
注意:这四行里没有一句在描述画面,全是在定义「什么东西、有什么属性、受什么规则支配」。这就是心法一。
真实感加分项(这两条最容易出效果)
- 过冲回弹:橡皮筋释放后不会立刻停,会过冲、回弹、反复几次直到能量消散。加一个阻尼振荡。
- 动态模糊:速度超过阈值时才加,模拟相机拍高速物体的残影。注意是阈值触发,不是全程加。
提示词结构(照这个骨架填)
用 Godot(GDScript)/ 或用 p5.js 做一个 2D 弹弓 Demo。 对象定义: 1. 弹弓躯干:Y 字形,固定不动。 2. 弹性绳:两个状态。拉动时,绳的终点跟随鼠标位置;释放时,根据拉动距离给弹丸一个正比于偏移量的初速度,然后绳立即回到初始状态。绳的运动要有过冲——释放后不会立即停止,会反复回弹几次直到能量消散。 3. 弹丸:刚体,不受形变影响,受重力作用有向下加速度。 4. 环境:四周设置碰撞体,弹丸撞上会被弹开。 画面:背景简洁,弹弓居中偏下。当弹丸速度大于某个阈值时,给弹丸加上动态模糊,模拟相机高速拍摄的残影。
提示:不要想「碎屑怎么飞」,先想「碎屑是什么对象、有多少个、每个的初速度从哪来」。
工具选择
他用的是 Claude Code + MiniMax M2.5,引擎是 Godot(GDScript)。如果你不熟 Godot,用 p5.js + 一个物理库(matter.js)也能做,代价是物理手感要自己调。
共同的内核:一个跟随算法
蜥蜴、鱼、蛇、脊椎——看起来是三样东西,底层是同一个算法。
算法怎么推出来的(他自己在视频里画的图)
- 平面上有两个点 A 和 B,相距一个固定值 L。
- 下一帧,把 A 挪到更远的位置 A′。
- 以 A′ 为圆心、L 为半径画一个圆,取交点就是 B 的新位置 B′。
- 这叫 Follow——「跟随动画:一端的位移带动另一端的位移」。
- 把中间的连线换成骨骼,就有感觉了。
- 如果骨骼有更多节,就能模拟动物的脊柱——蜥蜴、鱼、蛇全是这一套。
所以「一条蛇形跟随」在代码里就是一句话:每个子节点都把和前驱的距离修正回固定值。这就是真正提示词里的写法。
他视频里的真实提示词(p5.js 多关节跟随)
请使用 p5.js 开发一个多关节跟随系统的视觉 Demo。核心需求是实现一条由 N 个圆形节点构成的链式结构(例如 20 个节点),节点间通过线段连接。首个节点(头节点)的位置需实时跟随鼠标光标,对于后续的每一个子节点,必须严格维持与前驱节点的固定距离(如 30px):在每一帧更新位置时,通过计算向量差,将子节点的位置修正到以其前驱节点为圆心、固定距离为半径的圆周上,方向取自子节点当前位置指向前驱节点的方向,从而实现自然的"拖拽"或"蛇形"跟随效果。视觉呈现上,背景设为深色,节点用实心圆表示,连接线用白色线条,整体需保证交互流畅,代码结构清晰以便调整节点数和段长。
- 数学约束用自然语言说清楚了:「修正到以其前驱节点为圆心、固定距离为半径的圆周上,方向取自当前位置指向前驱节点的方向」——这就是几何解法,直接告诉 AI 怎么做,而不是让它自己想办法。
- 参数给成变量:「例如 20 个节点」「如 30px」,并明确要求「代码结构清晰以便调整节点数和段长」。这样后面调参不用改代码。
- 视觉描述放最后:深色背景、实心圆、白线。先逻辑后皮肤。
腿部:两关节 IK
脊柱解决了,腿还得动。他讲得很清楚:
- FK(正向运动学):给定大腿角度 + 小腿角度 → 算出脚在哪。
- IK(反向运动学):已知脚的位置 → 反推大腿和小腿的角度。
这条很关键:两关节 IK 有闭式解,不需要迭代优化。一句话就能让 AI 写出来。关节多了(三节以上)才需要数值方法。
完整生产线(鱼那期,最值得抄的流程)
- 提取轨迹:告诉 Agent「我想要知道每一帧食指指尖的位置,并将结果保存下来」——它会自己想到用 MediaPipe,把坐标存成 JSON。
- 可视化校验:坐标数字没法直接用眼睛验证,所以「继续对话,在原先视频上可视化检测出来的指尖位置」。AI 会再写个 Python 脚本把轨迹画到视频上。这一步是全流程里最专业的习惯,新手几乎都会跳过。
- 渲染主体:在 Processing 里让鱼沿 JSON 定义的轨迹游动,输出 PNG 序列。
- 合成视频:让 AI 装 ffmpeg、跑 ffmpeg 命令合成无损视频。不用装 PR。
- 剪辑:素材导入剪映,配乐、加字幕。
第 2 步为什么重要:如果你不做可视化校验,后面鱼游得不对,你根本不知道是检测错了还是渲染错了。
蜥蜴的额外一步:实时跟随
前四步是「离线」的(先录视频、提取轨迹、再渲染)。蜥蜴那期改成了实时的:
区别只在「存 JSON」变成「每帧直接读取」。同一套代码,改一个数据源。
先看自然,再写代码
他花了将近一分钟讲自然界里的三种鱼群形态,这不是凑时长,是先把「要复现什么」定义清楚:
- 极化(Polarization)——沙丁鱼沿寒流同向游动,形成 30 公里长的超级鱼群。
- 漩涡(Milling)——大眼鲹求偶时聚成巨大的旋转结构。
- 饵球(Bait ball)——遇到捕食者时缩成球状防御。
Boids 算法三条规则
| 规则 | 做什么 | 怎么算 |
|---|---|---|
| Alignment 对齐 | 和邻居同向 | 以自己为球心取邻域内的鱼,算它们速度的平均值。下一帧速度 = 自己的速度 + 邻居平均速度。 |
| Cohesion 凝聚 | 往群体中心靠 | 算邻域内其他鱼的重心,让鱼朝重心连线方向转向(有最大转角约束)。 |
| Separation 分散 | 别撞在一起 | 对过近的邻居施加排斥力。 |
前一步还得先做避障:向鱼的前方射一条射线,如果和障碍物相交,就依次增大偏移角度,直到找到第一条不相交的射线,让鱼沿那个方向走。
调参就是改权重
这就是为什么提示词里要「代码结构清晰以便调整」——调参是这个项目的主要工作方式。
真正的难点:饵球调不出来
三条规则的权重怎么调都模拟不出饵球形态。他的处理方式值得单独记一笔:
- 查作者:搜到 boids 算法原作者是 Craig Reynolds,已经退休但在做独立研究。
- 直接留言:在对方的 GitHub 项目下留言。
- 两天后回复了。经他点拨,在 boids 上加一条类似向心力的全局规则,就能初步模拟饵球。
锦上添花
- 用图转 3D 生成沙丁鱼模型,替换掉圆锥体。红色小球当捕食者。
- 3D 版用他自己写的
create-vibemotion-threejs——基于 Puppeteer 驱动 Three.js 导序列帧(Remotion 做不到 3D)。 - 同一个项目开一堆 git 分支:一些是交互模式(给人玩),大部分是动画渲染模式(出片)。
这个案例真正教的是什么
不是最优控制本身,而是「怎么把一句模糊的需求变成一个能算的问题」。这是所有涉及物理/工程的动画的通用方法。
建模三步
- 把「平稳」量化成一个数。「在最优控制里这叫代价」——触地那一瞬间下落速度越大、车身越斜,代价越大;下落过程中速度过快也要加代价。
- 加约束。气罐的气体总量有限,所以问题变成带约束的最优化:在不超出气量的所有阀门开度序列里,找总代价最小的那一个。
- 选求解器。用 MPC(模型预测控制)求解。
最精彩的部分:改一项代价,行为完全变了
| 代价函数 | 算法给出的方案 | 耗气 |
|---|---|---|
| 只惩罚落地冲击与姿态 | 「稳得近乎保守」——一出桥面底部喷口就一直开着,几乎是拖着整辆车一点点往下放。 | 约 88kg |
| 再加一项:用气量 | 「相当冒险」——先用一小口气控住翻滚,然后几乎关掉阀门让车自由下坠,落地前最后 0.7 秒底部喷口猛开到最大,极短时间里把速度刹住。 | 约 44kg |
第二种就是现实里 Roadster 和猎鹰九号的做法,叫自杀式点火。
为什么必然是这种形态(他要解释的理论)
70 年前苏联数学家庞特里亚金的最小值原理:最优控制在每一时刻都必须使哈密顿量取最小。
在竖直方向上,状态是高度、速度、质量,控制量是阀门开度 U,推力和耗气量都与 U 成正比。于是哈密顿量对 U 是线性的 —— 线性函数在区间上的最小值只会在端点取到。协态随时间单调变化、最多过零一次,所以最省气的轨迹只有一种结构:先全关自由下落,过零那一刻全开满推力,直到触地。
这段是解释「为什么」的,做动画不需要会推。但它示范了一件事:产物 + 解释 = 一条好内容。光有炫酷画面只是 2 万赞,加上「为什么」才是 6 千赞里最耐看的那一类。
你可以直接抄的提示词骨架
用 Python 写一个最优控制仿真,再用 Three.js 渲染成动画。 建模: - 状态量:高度 h、竖直速度 v、剩余燃料质量 m。 - 控制量:底部喷口开度 u,取值 0~1。 - 推力正比于 u,耗气速率也正比于 u,总气量有限。 代价函数: 1. 触地瞬间 |v| 越大代价越高; 2. 触地时车身倾角越大代价越高; 3. 下落过程中速度过快也要加惩罚; 4. 总耗气量计入代价(权重可调)。 用 MPC 求解,输出每一时刻的 u 序列。 请分别跑两组:一组不含耗气惩罚,一组含耗气惩罚,对比总耗气和落地姿态,并画出 u 随时间的变化曲线。
注意最后一句:让他跑对照组。这是这条视频最有说服力的地方——不是「我做了个酷东西」,是「我改了一个参数,行为完全变了」。
难点不在代码,在「画什么」
这类内容的价值是把一个没有任何画面的机制,变成一段看得懂的动画。技术难度不高,难在叙事。
他讲的机制(内容本身也值得学)
| 架构 | 怎么工作 | 代表游戏 |
|---|---|---|
| 状态同步 | 服务器是唯一裁判,自己算出谁在哪、还剩多少血,把结果发给所有人,手机只负责照着画。 | 英雄联盟、守望先锋、CS、和平精英 |
| 帧同步 | 服务器不计算,只当邮差。每 66ms 把 10 个人的操作打成一个包,发给所有手机,每部手机拿同一份操作清单自己推演。 | 王者荣耀、星际、魔兽 3、皇室战争 |
帧同步的好处是服务器压力小(90 年代帝国时代就在 28.8K 拨号猫上同步 1500 个弓箭手),代价是每个客户端必须算得分毫不差。
三个可以直接用的细节
- 追帧:网卡时你的英雄还在跑,因为「画面在动不代表游戏逻辑也在往前走」——逻辑和表现是分开的,画面做了平滑处理。网络恢复后积压的操作补进来,手机会加速补算,这就是追帧。
- 浮点误差会造出平行宇宙:同一个伤害公式,一部手机算出 99.9999,另一部算出 100.0001,跨过判定边界就可能一边活着一边阵亡。原因是不同芯片、编译器、数学库让最后一位不一样。解法:干脆不用浮点,全换成整数模拟的定点数。
- 随机数要可控:共用一个种子还不够,算法和调用顺序也必须一致,还要定期对校验码。
他给的三句入门提示词
帮我 coding 一个帧同步小游戏。 先记住三条原则: 1. 逻辑和画面分开计算; 2. 只用整数,不用浮点数; 3. 随机数共用一个种子,且调用顺序必须一致。 剩下的游戏玩法,vibe different。
「先把这些原则告诉他」——这个顺序很关键。先立规矩,再让他干活。如果先写完再提醒,代码结构已经烂了,改不动。
这类选题怎么找
规律很明显:找一个「大家都在用但没人讲清楚」的技术。王者为什么会卡、为什么会有回放、为什么 10 个人能同步——每个都是普通人有过疑惑但没有答案的问题。
还有一条值得单独看:实拍 + AIGC 混合
拜占庭那期不是 Vibe Motion,但方法很实用,尤其是怎么把抽卡成本压下来。
- 先用便宜模型抽:找到一个平台的 flash 模型免费、支持 12 秒生成、支持全能参考模式(提示词 + 多模态输入都能试)。满意之后再切满血版做成片——「抽卡成本降低到原来的 1/5」。
- 让 Agent 先查资料:普通文生视频没有联网能力,会搞错地理方位。Agent 模式会先联网确认知识,甚至写 Python 脚本做测量标注。
- 先出分镜图再生成视频:复杂镜头先让它生成一个 6 宫格 storyboard,把故事板当参考图,分镜就被控制住了。
05把能力做成 Skill:sound skill 的完整方法论
这条视频点赞只有 5245,但方法论价值是全账号最高的。他做的不是「一个音效工具」,而是一套「AI 缺某种感知时,怎么给它补上」的通用流程。
第一步:发现问题在哪
他先观察到一个现象:Claude 做视觉时经常生成一类叫 CMP(compare) 的图——并排陈列几个不同的视觉方案,经过很多轮比较才打磨出好的动效。它能看见,所以能比较。
但声音这块:
第二步:把模糊问题拆成可分类的子问题
他把「音效不好」粗浅地归为两类:
| 维度 | 问题 | 解法 |
|---|---|---|
| 节奏 | 音效要对齐画面事件(卡片弹出、翻页、logo 落地) | 这不是问题。代码动画的 Agent 能直接读到「第几帧第几个卡片弹出」,卡点天然精准。古法剪辑要一个个拖进去反复试听,才叫麻烦。 |
| 音色 | 声音从哪来、像不像 | 合成器 + 采样库,但选择逻辑需要人类反馈 |
关于合成器他讲了一段很开脑洞的:合成器原理就是振荡器出基础波形、ADSR 包络决定起音和衰减、滤波器修音色。但合成器不是万能的——星战光剑声是把老式放映机马达的嗡鸣和电视显像管电流干扰混出来的,激光枪是拿扳手敲无线电塔钢拉索录的;阿凡达的雨林是录了成吨真实的雨、动物、水流声。纯粹数学合成的声音,人耳一听就知道假。
第三步:给 Agent 补「可判断的锚点」
这是全篇最核心的一招。他对比了几个免费音效库的元数据丰富度:
| 音效库 | 给你的信息 | 判断力 |
|---|---|---|
| Mixkit / Kenney | 只有文件名 | 弱 |
| Pixabay | 有点赞数、下载数 | 中 |
| Freesound | 有评分、评分人数、上传者写的录制说明 | 强 |
为什么这招有效:Agent 听不见,但它能读数字。给它一个带人类反馈的库,等于把你的耳朵借给了它。
第四步:用 A/B 盲测做决策,而不是拍脑袋
这是整条视频最硬的一段。他怀疑「搜索顺序」会影响最终质感,于是设计了一个 harness:
- 固定同一段 7 秒产品动效:标题飞入 → 4 张卡片弹出 → 开关打勾 → 翻页 → logo 落地。
- 让两个 Agent 分别挂载只有搜索顺序不同的两个 skill。
- 人耳盲测(他不知道哪段是哪个)。
结论:A 更好。A 就是「优先搜索带人类反馈的音效库」。唯一例外是开关心——B 里 Kenney 专门做的 UI 音更合适,虽然 freesound 那个真实手电筒开关评分也不错。
于是 skill 里加了一条补丁:UI 音优先 Kenney。这样反复迭代,才有了 sound skill。他前两期百万播放的视频音效,就是 Agent 用这个 skill 自己配的。
- 找到 AI 做不好的那个环节,确认它是感知缺失而不是能力不足;
- 把问题拆成维度,找出哪些维度本来就不是问题;
- 给 AI 一个它能读懂的代理指标(点赞数 = 音质);
- 用固定输入 + 只改一个变量 + 人类盲测验证;
- 把例外情况写成规则补丁回填。
06完整生产流水线
把上面所有东西串起来,一条片子从想法到发布是这样的:
- 选题:找一个「用现成 AIGC 做不出来、但用代码能算出来」的效果。判断标准很简单——能不能用一句话说出它的数学/物理规则。
- 写对象清单:不看画面,只列「有哪些对象、各有什么属性、彼此怎么作用」。这一步在纸上做,比在 AI 里试快十倍。
- 拆子目标:把「做出成品」拆成 3~8 个可验证的小目标,比如「先把 HTML 贴到 3D 屏幕上」「先让一个球受重力落下」「先让链子跟着鼠标」。
- 搭环境:
npx create-vibemotion --vibemotion,或者干脆一个index.html+ 本地浏览器。VSCode 装 Git Graph。 - 逐个 vibe + 存档:做一个 commit 一个,然后开新对话做下一个。卡住就 reset。
- 加真实感:过冲、阻尼、动态模糊、微小的随机性。这一步决定「像不像」。
- 加音效:Agent 读帧号自动卡点,音色靠带标注的库。
- 导出:需要透明就用 ProRes 4444,不需要用 H.264,中间产物用 PNG 序列。
- 剪辑合成:剪映。他不建议为此装 PR。
任何声称「一句话生成复杂动画」的,要么是简单效果,要么是剪掉了过程。
0730 天复现计划
按他自己视频的难度梯度排的。每天 1.5~2 小时,周末可以多花点。
| 周 | 做什么 | 验收标准 |
|---|---|---|
| 第 1 周 熟悉 |
案例一 · 星空粒子 用 Gemini Canvas 复刻一遍,然后改三个变量:颜色、粒子数量、手势映射(比如把「握拳」改成「比耶」)。 | 能从零写出让 AI 一次生成单文件 HTML 的提示词,并且能只改一处就换掉效果。 |
| 第 2 周 换思维 |
案例二 · 弹弓 先按「对象清单」写,不看任何分镜描述。做完加过冲回弹和动态模糊。 | 能对任意一个效果,用 4 句话说出它的对象定义,而不是描述画面。 |
| 第 3 周 上数学 |
案例三 · 跟随链 先做 20 节点鼠标跟随,再加两关节 IK,最后接 MediaPipe 做实时。 | 能自己推导出「A′ 为圆心、L 为半径」这一步,并且能向 AI 描述清楚。 |
| 第 4 周 出片 |
案例四 · 鱼群 先做 2D 圆锥体版本,参数调通再换 3D。全程用 git 存档,至少开一个分支做交互版。 | 能产出一条 60 秒的成片,并且能改一个权重就变一个形态。 |
自检清单
每次开工前问自己这五个问题,能省掉大半返工:
- 我在描述画面还是在描述对象?(心法一)
- 这个效果能不能先用一个几何体跑通?(心法二)
- 我是不是想一次做完?能不能拆成三个 commit?(心法三)
- 这个运动在现实里是什么样?有没有漏掉阻尼、惯性、模糊?(心法四)
- 这个效果有没有人已经做过?openprocessing / CodePen / GitHub 上搜了吗?(心法五)
什么时候该放弃 Vibe Motion
- 需要真实人物、真实光影、真实质感——交给图生视频。
- 需要一次性的、不复用的镜头——抽卡更划算。
- 你说不清规则,只有感觉——那说明它不适合被代码描述。
08坑与提醒
- 网页版 AI 做不了本地任务。「因为动画会涉及到对本地视频的处理,网页版的豆包或 DeepSeek 就无能为力了。」
- 别用 AI Studio 的默认配置做前端单页。它默认 React 多文件,代码会散在很多文件里,新手没法在一个 HTML 里改。
- 图生视频会搞错地理方位。端到端模型缺少联网能力,不知道哪边是海哪边是陆。
- 上下文别拖太长。他每个子目标做完就开新对话,这是硬性习惯,不是可选项。
- 抽卡别一直用最贵的模型。先用便宜的把构图和提示词试对,满意再切满血版。
- 这个号的爆款都不是教程,是「原理 + 视觉奇观」。2 万赞那条 flow matching、1.1 万赞的扩散模型,本质是数学可视化,不是教学。教程类最高 9445。想涨粉可以借鉴这个配比。
- 他的护城河不是会用 AI,是数学底子。浙大数学硕士。跟随算法、IK、boids、最优控制——每个都能自己推一遍,所以提示词能写到「以 A′ 为圆心、L 为半径」这种精度。
- 商单那期他自己说了:「虽然整个过程我没有写一行代码,但我确实用到了很多软件开发的知识,包括设计模式、debug 的经验。我并不认为 AI 让程序员失业了,反而让有经验的程序员从底层的繁琐代码中解脱出来。」
09附录 · 原片索引
本地视频都在 media/videos/,下面是编号对应。点击标题可跳原笔记。
| 编号 | 标题 | 本地文件前缀 |
|---|---|---|
| 004 | 教程来了!Gemini 星空粒子手势识别 | 004_教程来了… |
| 018 | 新流派!Vibe Animation 教程公开 | 018_新流派… |
| 020 | 新流派!Vibe Motion 教程公开 | 020_新流派… |
| 023 | 动效自由!Vibe Motion 速成班 | 023_动效自由… |
| 026 | vibe coding + git = 无限动画 | 026_vibe-coding… |
| 027 | 借用鱼群的数学公式,我 vibe 了 3D 的粒子群 | 027_借用鱼群… |
| 031 | 思花的「数字艺术」howto 构建 | 031_思花的… |
| 034 | 在伊斯坦布尔用 AI 还原 500 年前的拜占庭 | 034_在伊斯坦布尔… |
| 039 | 词元不应该只是一次性消费品(remix 方法) | 039_词元… |
| 040 | 【硬核技术拆解】howto vibe 一款网络游戏 | 040_硬核技术拆解… |
| 046 | 算到 GPU 冒烟,vibe 求解特斯拉飞行轨迹 | 046_算到GPU… |
| 047 | 声学 研究 1 年,做了这个 sound skill | 047_声学… |
| 025 | seedance 不擅长的科普动画,我用 AI 攻克了 | 025_seedance… |
| 002 | 豆包 + 扣子空间 PPT 终极方案 | 002_豆包… |