跳转至

照着别人带来的图改编画风

「这是一张图,照这个画风画。」规则是:借手笔,绝不借画。 手笔是一种落笔的方式:什么东西接触纸面,边缘怎么处理,各层按什么顺序落下,纸,配色。画则是题材、构图和版式,这些一样都不带过来。

数字帮你看;它们不做决定。一张图的每一项统计都混合了题材、版式、光照和媒介,所以一页大部分空白的纸,不管是谁的手笔画的,读出来都是「浅、边缘少」,而文字会被读成「线条」。定论是一份写成文字的配方,加上一张用那种手笔画的另一个题材的并排对照。(在下面的两个验证里,统计上最近的样张两次都错了:水彩那张给出的是炭笔(charcoal)和碎色(broken-colour),剪贴簿那张给出的是鹪鹩(wren)。)

工作流

  1. 分析。 node tools/analyze-style.mjs <image> --json <dir>/profile.json(在 engine/ 下运行)。把不属于手笔的东西排除掉,首先是 UI:--exclude x,y,w,h;x,y,w,h,或者用 --crop x,y,w,h 裁到一块干净的区域。它会打印:配色(OKLab k-means、纸色和墨色、面积占比)、明度调性和对比度、线条的有无和宽度、填色的方向和一致度(对纹理求结构张量)、笔画长度、斑点、积色的边缘、各种硬度边缘的占比、频谱斜率、周期性网格(网点或规则的排线),以及最近的几个样张,连同吻合和不同的那些数值。
  2. 看。 以原尺寸打开图片,并且把一块繁忙的区域放大 3 倍裁出来看。在相信任何数字之前,先写下你看到了什么。分析结果只用来读眼睛可能漏掉的东西:笔画方向、网点间距、边缘有没有积色。
  3. 用文字写出媒介配方(MEDIUM RECIPE),写成一个新样张的文件头注释,先于任何代码:

    • 笔触(MARK):什么东西接触纸面,多湿或多干,一个单位笔触是什么。
    • 边缘(EDGE):硬、软、消失、积色、撕裂、毛边;边缘在哪里变深或消失。
    • 顺序(ORDER):什么先落、什么最后落。顺序就是手笔的一半。
    • 纸(PAPER):颜色、纸纹、新旧;平铺哪些纹理、用多大的不透明度。
    • 配色(PALETTE):用哪些颜色,以及它们所处的明度范围。

    再写它不是什么:它最接近哪个样张,以及让它与那个样张不同的一两点。

  4. 挑选或长出最近的样张。 凭眼睛判断哪个最近,分析结果只在难分高下时用来裁决。复用它的工具包,改的是笔触;只换颜色就是失败(references/style-guide.md 的「你自己的画风」(Your own style)一节)。

  5. 用那种手笔画一个不同的题材。 新题材、新构图,同一份配方。题材仍然必须读得出来:让它相对于底子有自己的一级明度差和冷暖差。
  6. 并排比较:node tools/compare.mjs <reference> <new.png> --out compare.png [--exclude ...]。用文字点评:笔触、边缘、顺序、纸、配色,每项一行,写「吻合」或「不同,因为……」。再对你的静帧跑一遍 analyze-style.mjs 作为诊断。
  7. 迭代的是配方,不是数字。两三轮是正常的。
  8. 存成自家画风:styles/house/<name>.json,里面有样张、配方、关键参数、分析摘要,以及来源记录:参考图的 sha256、文件名、日期、是谁带来的、embedded: false,再加一句话说明没有从它那里拿什么。从此以后,这个品牌的每一件作品都用这种手笔。

不抄袭规则

  • 永远不要描摹参考图,不要给它重新排版,也不要重新搬演它。它的题材、构图、角色、标志性母题和文字都不是素材。在世艺术家的标志性母题永远不复制;id 和标签用技法的名称。
  • 参考图的任何一个像素都永远不会被画出来。美术核心从不读取这张图;只有工具读。
  • 用户自己的图片,只有在用户恰恰要求这样做时,才可以被嵌入(作为素材)。
  • SSIM 或 pHash 距离无法证明「不是抄袭」,画风距离小也无法证明「改编得令人信服」。这条规则靠构造来守住:新题材、新版式。
  • 教学模式是唯一允许紧跟一张图的姊妹流程:见 teach-drawing.md。

验证(2026-09-25)

参考图 一句话概括手笔 新样张 验证产物
一张粉彩水彩背景图(排除了终端 UI) 边缘像锯齿海岸线的水渍、积色的边缘、留出纸白的停顿处、溅点、水粉点出的闪光 adaptAquarelle.ts,一只海月水母 styles/house/pastel-blotch.json
一帧讲解片画面(Ritwika,f_10) 整齐的撕边粉彩卡片配柔和阴影、打字机字体、细钢笔图解、一幅版画 adaptScrapbook.ts,酸面包为什么会发起来 styles/house/quiet-scrapbook.json
梵高《盛开的杏花》(Almond Blossom,1890,公有领域) 饱蘸颜料的短油画笔触组成方向彼此转折的小块,最后落下一道断续的蓝绿色轮廓线,厚而起棱的白色 adaptAlmond.ts,发布片里那条锦鲤在它的池塘中 styles/house/almond-blossom.json

一份填好的媒介配方(杏花那次验证)

分析器给出的最近样张是炭笔和绘本;凭眼睛看是 paintedOil,所以这个样张复用油画的工具包,改的是笔触。配方如下,就是先于任何代码写在样张文件头里的那段:

  • 笔触:不透明的油彩,饱蘸颜料的硬鬃笔,笔画约一指长。底子用一小块一小块的笔触铺成,每块里的笔触朝同一方向,块与块之间方向彼此转折。形体顺着自身的长度方向画。亮部厚涂、起棱。
  • 边缘:硬。最后用一支小圆头笔落下一道深蓝绿色轮廓线,断断续续,在背光一侧更重。没有任何东西跨过边缘被晕开。
  • 顺序:先在各处铺满底子;再用中间调画形体;然后是亮部;然后是轮廓;最后是最亮的白。
  • 纸:上过底料的亚麻画布,布纹透过较薄的底子笔触显出来。
  • 配色:明度范围窄、整体偏亮的绿松石色底子;形体用灰绿色;奶油色和铅白;一点朱红;任何地方都没有黑(最深的一笔是轮廓)。
  • 不是:paintedOil 会把形体塑造出纵深;这种手笔让底子保持平面和装饰性,阴影只有一级。题材是影片自己的锦鲤,永远不是那幅画里的树枝。

参考图本身放在 anidoodle 仓库的 engine/assets/refs/ 下(不在安装后的插件里),是仓库里唯一一张不是由代码画出来的图:公有领域(梵高于 1890 年去世;这是对一件二维公有领域作品的忠实照片),从 Wikimedia Commons 下载并保持逐字节一致,它的来源、许可和 sha256 记在 engine/assets/refs/PROVENANCE.json 里。发布片只把它当作用户在聊天里附上的那张图来展示;adaptAlmond.ts 从不读取它。你以这种方式随作品发布的任何参考图都要有同样的记录,而且只有真正属于公有领域的作品才有资格。