SuperAPI AI 工具集

guided-cartoon-short

设计与创作

查看项目

更新于 10-24 06:48

技能介绍

卡通短片(guided-cartoon-short)是一个 Helios 技能,用于用代码绘制一段短卡通:一个角色想要某样东西,发生某事,然后作出反应。所有画面都在单个 window.renderAt(t) 页面内用 Canvas 2D 绘制,因此适用 make-video 约定——每一帧都是 t 的纯函数。

方法部分(按读点分镜、绑定、表演式情绪变化、确定性抖线、评审循环)适用于每一部卡通。它记录的默认外观(平涂、沸腾墨线、纸张颗粒)只是一种选择,并非硬性要求:黑板粉笔、剪纸、横线纸上的马克笔、单色笔刷线或平涂海报形状都能用同一套方法实现。

starter.html 是一个经过测试的 6 秒镜头,演示了各项技术如何协同工作:抖线种子、上色配方、emotions()、jump()、虹膜转场。可阅读它了解每项技术的构建方式,但不应复用其角色、草地、配色或笑点,这些应来自随机种子和用户的想法。

使用方式上,先做种子化:在设计之前抽取一个随机种子,避免与上一部卡通雷同;若可用 apply-randomness 技能则使用它,否则用提供的 tr 命令生成 256 字符字符串,从中找出可验证的模式(数字串、重复片段、大写字母簇、对称性),让这些模式在你事先写下的选项之间做选择:三个角色剪影、三个世界、三条故事梗概、两三种外观(含默认的墨线与平涂)。用户明确要求的部分保持不变,种子只决定其留白之处。在 STORYBOARD.md 顶部记录种子与一行“模式→选择”映射。代码绘制的角色是一种刻意的风格:简单、标志性的形状加沸腾墨线,不能替代真实插画;若需求要求细节丰富或写实的角色,应说明并索要美术素材。

三个目标是:手工感(线条沸腾、平涂 2D、小色板、有底材)、有生命力(始终有东西在动、面部表演不突兀、角色足够大)、完整一体(一部有弧线的短片而非片段堆砌,先规划再绘制,镜头之间相互衔接)。最核心的是观众必须能跟上,而节奏正是生成式动画最常出错的地方。

角色设计:绝不复用已有的吉祥物或知名角色,也不复用起始示例中的豆形角色;只为该视频设计一个,由种子在你的剪影之间选择。剪影需在填充纯黑时仍可辨认:一个主体形状加少量部件(眼睛、手臂、腿)。定义尺寸单位 u,绑定中所有坐标都是 u 的倍数,使同一函数能画远景和特写。身体用两到三色:基础色、较亮的受光色、较暗的沉淀色;不使用纯黑或纯白,而用类似 #2b2233 的深墨色和 #fff5e2 的奶油色。references/rig.md 给出绑定约定、面部绘制器、转面视图表与模型表页面。

分镜先于场景代码:STORYBOARD.md 需写明故事梗概(角色想要___,但___,于是___)、世界(场景、4–6 种颜色、光线、颜色在视频中如何变化)、母题(反复出现并在结尾回应的元素)、弧线(整部视频的情绪关键帧)以及镜头列表,每个镜头标注起止时间、入/出转场、看到的内容、事件、反应与摄像机,并列出读点及其时间区间。一个读点是观众必须理解的一件事,每件事都需要被找到、理解并领会的时间。一次只放一个读点;因果与反应按顺序排列,不能重叠。动作可以快(若有预备),含义需要停顿。重要读点前要用视线、镜头移动或物体先动来引导观众。长度由读点决定:宁可加长镜头或删掉读点,也不要挤压。结尾读点需要落地时间。文档给出了把一个约 1.3 秒的仓促结尾修到约 4 秒的实例。检查分镜:每个镜头都有事件、每个读点都有时间、每个接缝都有转场、没有文字、结尾与开场押韵(同一地点、姿势或母题,但已改变)。

规则:每个镜头都要有事件,首尾帧之间必须有变化;“角色站在草地上卖萌”不算镜头。不使用文字:不要字幕、标签、招牌或对话气泡词语;反应靠绘制符号(!、?、汗滴、爱心、灯泡、雨云)表达,重复故事内容的招牌是典型失败;若需求确实需要文字,只将其绘制进场景一次。仅限平涂 2D:转身通过绘制的关键视图(正面、四分之三、侧面、背面)完成,绝不用 3D 旋转;深度靠重叠、比例和颜色(越远越小、越蓝、越淡)。任何东西都不静止:每种情绪都有待机动作,镜头漂移或推进,草摆动,线条沸腾;冻结帧会被视为 bug。角色要大:以 10u 宽的字符为例,远景 10–16u,中景 20–28u,特写 40–70u;极小尺寸只用于建立镜头。统一脉搏:待机、弹跳和击打共享一个节拍(starter 中的 BPM,或用 helios analyze 得到的真实节拍),即使没有音乐也如此。每个接缝都有转场:入场、镜头之间和出场;选择属于故事的转场,如虹膜或形状虹膜、笔刷擦除、带拖影的甩镜、匹配剪辑、动作剪辑、镜头携带;动作剪辑需在剪辑点改变景别或角度,否则会读成跳切;道具沿弧线进出,绝不凭空出现。

构建:抖线以每秒 12 次重新播种,因此每幅画保持两帧,像手绘动画;每个元素都从稳定键和抖线序号获得自己的种子,如 rng('hill')、rng('tuft' + i)、rng(key + 'armL');若共用一个随机流,移动元素每帧消耗的随机量不同,其后绘制的所有元素都会抖动。绝不应移动的元素(草丛位置、星星布局)使用 hash(i),它不沸腾。手绘片段以 24 fps 渲染,使 12 fps 的每幅画恰好保持 2 帧;30 fps 下会不均匀地保持 2 或 3 帧,导致抖动;若必须 30 fps,则在 15 沸腾。默认墨线与平涂的上色配方:略微偏离线条的抖动填充、左上方的亮色池、底部的暗色沉淀,最后以墨线轮廓收尾并加一层更淡的干笔第二遍;背景用柔和填充,无描边或细描边;光(辉光、灯)用加法混合(globalCompositeOperation = 'lighter' 或 'screen'),而非涂料。详见 references/look.md。镜头为 fn(t, lt, dur):视频时间、镜头开始后的时间、镜头长度,每个函数绘制整帧;将它们放在列表中,在 renderAt 中选择活动镜头,与 starter 一致。表演来自数据和封闭式辅助函数,绝不来自状态,示例见文档中的 mood、hop、bean 代码;emotions() 从不在两帧之间直接换脸:每个关键帧前后眼睛在 0.1 秒内闭合,闭眼时换脸,0.14 秒内睁开,按新情绪大小触发反应,姿势在 0.4 秒内带过冲混合,颜色在 0.3 秒内交叉淡入。references/acting.md 提供情绪表、辅助函数、行走与动画原则。

评审:无法通过阅读代码看到运动,应使用 Helios 的评审工具在三个缩放级别检查:sheet 查看每个镜头的首、关键、末帧;strip 查看某次反应、跳跃或转场的每一帧;crop 查看承载故事的面部;verify 捕捉依赖渲染顺序的帧。文档给出对应的 npx 命令(sheet --at、--strip、--crop,verify --duration)。检查项包括:读点是否仅凭图就能看清、角色是否够大且与背景分离;以固定 0.1–0.15 秒步长渲染并顺序阅读,统计每个读点获得的帧数(24 帧=1 秒);运动中是否有预备和跟随、有无弹跳或突变、双臂或两个角色是否同步(twinning)、姿势是否足够夸张;在 24 fps strip 中每两帧应相同,除非有东西移动,静止却每帧变化的东西需要独立种子;接触点(脚在地面、手持道具接触手、抛出物从手离开);接缝(每个镜头首尾 0.5 秒);规则(是否有文字、3D、死段、纯黑或纯白);预算(每个镜头至少一张 sheet,每个关键动作和转场一条 strip,每张承载故事的脸一张 crop)。

渲染:使用文档给出的 render 命令导出 mp4(12 秒、24 fps、canvas 模式、medium 预设),可用 --audio 添加音乐并让击打落在节拍上。常见失败包括:两帧之间直接换脸而非经过 emotions();所有东西同一快节奏、读点重叠、结尾在理解前就结束;整部视频都是大空框中的小角色;双臂镜像、两个角色同时眨眼、人群同步弹跳;静止物每帧抖动(共享随机流)或完全不沸腾;招牌或字幕解释笑话;没有转场的硬切、以硬帧开始或直接停止;用旋转 3D 盒子代替绘制转面;道具凭空出现而非沿弧线进入。文档注明其工作方法改编自 ClaudeAnimationBase(MIT 许可),详见 THIRD_PARTY.md。