# 水墨画（sumi-e，画在宣纸上）

模块：`engine/src/canvas-core/sumiE.ts`（工具集：`sumiEKit.ts`）。主画面：风中的竹子和一只树麻雀。

**媒介的物理形态。** 一支软的兼毫笔（羊毫加狼毫），从砚台上蘸墨，画在未上胶矾的生宣上，墨一碰纸就被吸进去。什么都不修改，什么都不覆盖：每一笔都是一个动作，只落一次。

**笔触。** 一支由真实毛发组成的笔（工具集里的 `brush()`）。每根毛带着自己的墨量，随着行笔消耗，边缘的毛先耗尽。墨饱时，毛合成一道实心的笔触；墨将尽时，在纸占上风的地方毛就跳过去，于是出现飞白：*顺着*笔势走的露白条纹，以及提笔时散开的分叉笔毛。笔是一个圆锥：外圈的毛落得晚、抬得早，所以笔画两端是尖的或圆的，绝不是方的。

**边缘。** 湿的地方柔和，带羽状的晕散：在每个慢下来的点（落笔、在竹节处的停顿、提笔），墨渗进纤维，形成一圈晕，细细的羽毛状纹路向外洇开。干的地方破碎、起毛。`wet` > 0 时把一笔落在潮湿的纸上，整条边缘都会变柔（麻雀腹部的淡墨）。永远没有勾出来的轮廓线。

**色调。** 只靠加水稀释，即五种墨色：焦（1）、浓（0.82）、重（0.6）、淡（0.38）、清（0.2）。稀释后的墨略微偏冷，绝不发褐。单独一笔永远不会和自己叠加（它先渲染成一道不透明的笔触，再按它的色调铺上去）；只有第二笔和第一笔交叉的地方墨色才会变深，这就是为什么叠在一起的竹叶会显出颜色更深的菱形。

**顺序。** 《芥子园画谱》的顺序：先画竿，每一节都用一笔向上画成，一次一节，笔在每个竹节处停顿、提起（底部的节短，竿中段的节最长）；竹节用更深的墨；枝从节里生出；竹叶成组，用按下再提起的笔法画，前面的叶用浓墨，后面的叶用淡墨；鸟按画谱里的顺序画（喙、眼、头、背、翅、尾、腹、足）；干笔点缀（草的挑笔、苔点）；最后盖印。

**调色板。** 一锭墨，五种浓淡，一方朱砂印（`#b8352b`，正片叠底，印上的字是刻凹进去的，所以印出来是纸的颜色）。印上的字是杜撰的篆书记号，不是文字。

**纸。** 暖色、未漂白的宣纸 `#f3ede0`，长长的抄纸纤维和树皮碎屑作为几何图形画进底色，`paper` 以 0.1、`coldpress` 以 0.045 正片叠底在一切之上。没有纸面颗粒（tooth）。

**和最近的近邻（`wren`，钢笔淡彩）不同。** Wren 先上淡彩颜色，再用软笔尖沿着形体勾一圈**线**；水墨既没有线也没有颜色：形体**就是**笔触，一片叶子一个动作，色调只来自稀释。Wren 的淡彩积在形状的底边；水墨的墨在笔行进路径上的慢点处洇开，并沿着笔画的长度方向干成飞白。

**运动语法。** 影片就是这幅画被画出来的过程：一笔以手的速度沿路径生长（长的竿节快，画鸟的笔画慢一些），笔离开之后，慢点处还在继续往外洇（晕圈在几帧之内扩大），两遍之间停一拍，印章短促地一下按上去。没有任何东西是淡入或缩放进场的。

**工具集原语（可提升进核心的候选）。** `runProcess` + `timeline`（一张静帧，在一个只增不减的已完成缓存之上，以定时操作的形式把自己画出来）和 `brush`（毛发模型的笔触，带墨量、飞白和纤维洇散）。基于它们构建的影片应当设置 `meta.raster: "cpu"`：否则多出来的那张缓存画布会迫使 Chromium 混用 GPU 栅格化和软件栅格化，帧在不同的渲染顺序下就不再一致。
