Sketch to sim 是一个将手绘机械草图转化为物理模拟短片的技能。其核心流程为:读取铅笔草图(或根据需求设计机械)、标注部件与尺寸、将图形从纸上“拎起”变为白色剪影并填充为木制模型、在真实物理驱动下运行。影片包含固定的叙事结构:阅读草图、抬升模型、首次失败运行、调整参数、成功运行、慢速回放关键瞬间,以及可交互的“自己搭建”面板。除相机外,所有运动均由物理模拟产生,而非关键帧动画。
主要能力与使用方式:
- 环境准备:运行 node scripts/setup.mjs 安装 three、Rapier 和 playwright-core,并检查 Chromium 与 ffmpeg。
- 读取与设计:若有草图或照片,识别部件、连接方式、运动部件及标注尺寸;若无草图,则根据需求设计机械。需先以一行一个阶段写出因果链。
- 编写 machine.js:在仓库外的项目文件夹中,参考示例(链式触发用 rube-goldberg,杠杆释放用 trebuchet)并阅读 references/spec.md。部件为侧视图中的盒子、梁、球、轮和凸多边形,坐标以米为单位,hinge() 连接刚体,参数可移动部件但不能改变尺寸。
- 物理调优:使用 node scripts/tune.mjs 运行单次模拟、扫描参数范围或指定速度检查。每次运行报告触发事件及时间。需调整至失败与成功均真实发生且留有裕量。不得伪造结果,应修改机械使物理自然达成。references/physics.md 列出了失败模式及修复方法。
- 编写故事与沙盒:在同一文件中定义 READ 标签与尺寸线、各章节(READ、LIFT、失败运行、TWEAK、成功运行、REPLAY、DONE)、与触发关联的注释以及沙盒参数与预设会话。references/story.md 提供格式与时序规则。
- 查看静帧并渲染:使用 capture.mjs 生成静帧或视频,sound.mjs 生成音频,再用 ffmpeg 合成。静帧命令会打印各章节起始时间供 --stills 和 --at 使用。渲染前对照 references/style.md 检查每个章节。
- 交付:提供 MP4、静帧汇总和本地实时页面(node scripts/serve.mjs 打印本地 URL,支持沙盒滑块、运行与重置)。
规则与限制:
- 物理决定结果。若故事需要失败,须找到真实失败的参数值;若显示数值与模拟测量不符,应修改数值而非模拟。若参考图中的数值物理无法复现,需告知请求者。
- 机械保持在绘图平面内:所有部件为侧视轮廓拉伸深度,运动为平面运动。这保证草图与蓝图一致,并维持 Rapier 稳定。
- 参数仅移动部件,不改变尺寸,确保模型与草图保持同一物体。
- 参考文件:references/spec.md(部件、刚体、铰链、材料、参数、触发、起始与保持)、references/story.md(标签、尺寸、章节、注释、相机、沙盒与脚本)、references/physics.md(模拟方式、调优循环、失败模式与修复)、references/style.md(外观与质量检查标准)。
- 示例:examples/rube-goldberg/machine.js(斜坡、多米诺、落球、带杯跷跷板、服务铃)和 examples/trebuchet/machine.js(配重投石机对塔,含 LOAD 章节上弦、0.48 kg 短投与 0.68 kg 命中)。
适用场景:将简单机械草图转化为物理真实的短片、教学演示或交互式沙盒。限制:所有命令需在技能目录下运行;完整 80 秒 60fps 影片在 M1 Pro 上约需四分钟;无 GPU 时可运行但较慢。