# 一幅自己把自己画出来的画

图库里的每一种手笔都从同一份源出两样东西：完成的静帧，以及一部把它画出来的影片，一笔接一笔，按那种媒介的画家作画的顺序。影片的最后几帧就是那张静帧，逐像素一致。这就是人们会分享的延时绘制、幕后制作、教学步骤，以及讲解片里图解逐步拼出来的过程。

## 规则

- **第 0 帧是空白的底子**：纸、板、亚麻画布、黑色刮画泥板、空白的屏幕。
- **媒介自己的顺序**：水彩先用铅笔起稿，然后是浅色渲染、深色渲染、细节、勾线。木刻先印主版，再从浅到深印各个色版。像素画先铺平的色块，清理线条，给色簇上阴影，再加高光。油画先给底子上一层色调，从暗到亮铺大色块，最后厚涂收尾。刺绣把每一针都拉过布面。每个样张的文件头都写明了它的顺序。
- **笔触是画出来的，绝不是淡入的**：一道笔画沿着它的路径生长，一片渲染从笔尖触纸的地方晕开，一块积木落下并卡实，一枚印章盖下去。
- **手的节奏**：长笔画快，细碎的笔画慢，两遍之间有短暂的停顿（最多半秒；对 `kind: "drawing"`，闸门允许这样的停顿）。
- **最后一段就是静帧**：用 `meta.holds` 声明它，让闸门知道这是有意为之。

## 怎么做一部

声明 `meta.kind: "drawing"` 和最后的定格。然后二选一：

- **编写过程**：把笔触列成带时间的操作，在一个只增不减的缓存上回放（就是 `colouredPencilKit.ts` 的 `replay`、`sumiEKit.ts` 的 `runProcess`、`brokenColourKit.ts` 的 `staged` 里用的模式）；或者
- **给现有的样张加一个时钟**：一个可选参数，按每个绘制调用所属的遍次放行它；没有时钟时，样张画得和以前完全一样（改动前后检查主图的 md5）。

对建立在回放缓存上的过程影片，设置 `meta.raster: "cpu"`；GPU 光栅化和软件光栅化混用会破坏确定性。

## 绘制过程片的闸门

`kind: "drawing"` 以一秒为窗口、以 0.02% 的变化面积为下限来判定冷场（细铅笔线每帧改变的很少），并允许最长半秒的停顿。比这更长的冻结仍然判为失败，因为观众看得出来。
