🌻 设计文档小农场 · 野花笔记
← 全部文档/野花笔记/美术

美术重做 · 生图版

提案 #美术#生图#风格#复盘 docs/野花笔记/美术重做-生图版.md
先说结论:前一版的根本错误不是配色,是**做法**

从第一版到第三版,我所有素材——兔子、30 种花、17 个场景物件、五条风景带—— 全部是 tools/art/notes_art.py 用 Python 的 PIL 画的: ellipse() 画身体、polygon() 画树、quadraticCurveTo() 画耳朵。

我一次 image_gen 工具都没调用过。

然后我花了三轮去调那几个色号(#A8ACB5 → #8E9099 → #8C97A8)。 色号确实调准了——实测饱和 14.617.5%、色度 1922,和参考图基本对齐。 但代码画的椭圆和圆锥,无论调成什么颜色,都不可能是参考图里那种手绘植物插画。

一、错在哪一步#

参考图经复核是:手绘植物花卉插画,细线稿配浅色块填充,带轻微印刷/纸纹质感, 明确"不是扁平几何图形"。

而我做的恰恰就是扁平几何图形。方向从一开始就反了。

我是怎么把自己说服的

我在 AGENTS.md 里写过一条规则: 「角色动画一律用木偶(骨骼)做法,不要用生图序列帧」,并把野花笔记的兔子列为例外—— 「用 PIL 逐帧画,帧与帧之间只有显式参数在变,不存在形变和漂移」。

这条判断对"动画帧"是对的:生图序列帧确实有帧间形变、帧间漂移、帧数不够三个问题。

但我把它从"动画怎么做"扩大成了"整个美术管线怎么做"—— 于是连"兔子长什么样""花的形态是什么""树的轮廓是什么"都交给了代码里的椭圆和圆锥。

"动画不要用生图逐帧" ≠ "美术不要用生图"。 正确分工应该是:

  • 形象与质感(兔子长什么样、花的形态、树的轮廓)→ 生图
  • 帧间运动(同一条腿怎么抬、耳朵的相位)→ 代码驱动(把生图出来的形象拆件或做连续变形)

我把这两件事混成了一件,然后用"动画的考虑"去否决了"形象的考虑"。

二、新做法的第一批结果#

2.1 兔子:旧做法 vs 新做法#

左=代码画的(PIL 椭圆),右=生图工具生成的
左=代码画的(PIL 椭圆),右=生图工具生成的

左边那只:身体是一个椭圆、耳朵是两个叶片形、眼睛是一个黑色小椭圆—— 它是由 4 个几何图元拼起来的,所以看起来就是个几何拼图。 右边那只:细密手绘线稿、米灰平涂带斑驳、有纸张颗粒感。

2.2 环境素材(生图)#

生图生成的场景物件:针叶树 / 阔叶树 / 小树苗 / 灌木 / 高草 / 低草 / 苔藓石 / 石板 / 木头 / 蘑菇
生图生成的场景物件:针叶树 / 阔叶树 / 小树苗 / 灌木 / 高草 / 低草 / 苔藓石 / 石板 / 木头 / 蘑菇

2.3 花草素材(生图,第一版偏弱)#

生图生成的花草素材
生图生成的花草素材
这一张还不达标

视觉复核对第一版花草图的反馈是「约 6 株、多数没有花头」—— 生图工具把"12 株各自有花头"简化成了 6 株枝叶。 重出的一版(上面这张)还没拿到复核结果(视觉接口这轮一直 503)。 花草这一批需要重做,不能算完成。

2.4 用生图素材拼的场景#

把生图素材抠底、切件、拼成的竖屏场景
把生图素材抠底、切件、拼成的竖屏场景

做法:生图工具不支持透明背景,所以生成的是"米白纸底 + 若干物件"。 抠底用从四边 flood fill(不能按"接近米白"直接判——画面里的白花和兔子白毛也是米白, 按颜色判会把主体挖空),再按列投影的空隙切成单件。

三、这一版还没做的事#

下面这些**都还没做**,不要当成已完成
  1. 兔子序列帧。现在只有一张静态的侧面立绘。 「帧动画」要 5 组(待机 / 小跳 / 大跳 / 落地 / 张望)共 42 帧, 而这 42 帧要在手绘质感的形象上做出来 —— 这是这件事真正的难点。 生图逐帧会有帧间形变(这个问题是真的),所以不能简单地"生成 42 张"。 可行的方向在下面第五节。
  2. 30 种植物。现在只有一版偏弱的 6 株,且未复核。
  3. 场景的五条风景带。scene-01.png 只是静态合成的验证图, 演示页 notes.html 里的运行时场景仍然全部是代码画的几何图形,没有换。
  4. 色板与验收标准。这一版是用已验收的色板(灰蓝、色相 216°)去拼的, 但生图素材自身的色度/饱和度还没有过 check_sat.py / check_tone.py。

四、上一版调色的工作作废了吗#

没有完全作废,但它的定位错了。

还成立的部分:

  • 参考图的量化结论:有色元素色相 P50 = 220°、色度恒定 12、饱和 P90 = 15.2%。 这几条是实测的,用来给生图写提示词照样需要。
  • 判据方法论:见 美术规范 4.1.6 与第九节—— 上限拦不住"太灰"、阈值不能比基准严、主观评价也要对基准图做区分度检验。 这些和"用不用生图"无关,仍然有效。
  • 色板的十六进制值(#8C97A8 等)可以作为生图提示词里的颜色约束。

不成立的部分:

  • 用这些色号去画椭圆、锥形、叶片形,然后验收"饱和度达标"—— 颜色对了,东西还是错的。 这部分白做了。
这一轮真正的教训

"风格对不对"是一个比"颜色准不准"高一层的判断。 我三轮都在量颜色,因为颜色能量化; 而"这是手绘插画还是几何图形"我一开始就看见了,却因为没有把它写成一条判据而放过去了。

一条判据如果只覆盖得了一部分维度,"全部达标"就没有意义—— 这句话我在 AGENTS.md 里写过("标准漏了维度,全过也没有意义"), 但那次漏的是"明度",这次漏的是"画法本身"。

补进验收标准的方向:风格一致性要有独立判据, 而且最省的判据是拿基准图与成品并置送人工/视觉复核,问"这两张是不是同一种画"。

五、接下来怎么做(序列帧是难点)#

「形象用生图、运动用代码」这条分工,落到 42 帧上有三条路:

方案 做法 优点 风险
A. 生图出关键姿态 + 代码补间 生图出 5 个关键姿态(待机 / 最高点 / 落地 / 张望…),中间帧用形变插值 形象最正、帧数可控 5 张之间的形象一致性要靠提示词锁住,可能仍需手修
B. 生图出一张 + 连续变形 只用一张侧面立绘,用 tools/art/walkers.py 那套"按行位移 + 相位滞后"做出 42 帧 形象 100% 一致(同一张图),零漂移 变形幅度有限,做不出大幅度的姿态变化
C. 生图出拆件 + 木偶驱动 生图分别出"头 / 身体 / 前后腿 / 耳朵",用代码摆姿势 最像"真的在动",可复用到所有动作 生图出的零件拼不回原样(小农场踩过:切零件时把正面小鸡换成了侧面)

建议先做 B(用一张生图立绘做连续变形): 它是唯一能保证"42 帧形象完全一致"的方案,而一致性正是生图序列帧的死穴。 B 做出来如果幅度不够,再补 A 的关键姿态。

需要你定的:上面这个方向对不对,以及花草和树要不要按 env-01.png 这个质感继续往下做。