# 把写实程度说清楚，纹理靠手做

> 这些准则是做 MECHANICAL LEPIDOPTERA 时挣来的，它就是 [example/](../example/index.md) 里那个完整示例。下面每一条规则都在那部影片上付过学费；哪里的错误是导演自己犯的，这里就照实说，因为带着伤疤的规则，人们才守得住。

**错误，分四轮。** 要求是「那只蝴蝶，活的，水彩」，我们交出的是：

1. **抽象。** 翅膀是夹在尺规画出的灰色杆子之间的长条扁平粉色缎带，身体是一个蓝色胶囊，触角是末端带点的线，没有腿。我自己 spec 里的那一行是「翅膀如彩色玻璃」。就是这句话造出了那些面板。我已经书面撤回了它。
2. **褪色。** 解剖上改进了，却苍白到退到了它自己的花后面。水彩不是「低不透明度」。它是先上薄薄的**第一遍**淡彩，再在形体转折的地方点入全浓度的颜料。客户不得不把「真正的颜料深度」作为硬性要求提出来。这本该写在 brief 里。
3. **被踩扁。** 第一版侧视图在变换里用一个 `abs()` 把翅膀沿它自己的中线折起来，这会把一只翅膀变成一只平躺着的对称飞蛾：一只被人踩过的蝴蝶。然后身体被画在合拢的翅膀**上面**，腹部从后面戳出来，看起来像一只蚊子。
4. **真实**，一旦 brief 说清了真实指的是什么。

**为什么。** 让模型画一个题材，它画出来的是这个题材的**图标**，也就是路标上会用的那种东西。图标是对称的、扁平的、有轮廓线的，由基本图元搭成。写实是一份偏离图标的具体清单，这份清单如果没写下来，其中任何一条都不会发生。

**规则。**

- **逐个部位说出解剖结构。** 对我们这种生物来说：两对真正的翅膀，前翅盖住后翅前缘的三分之一；一个封闭的中室；翅脉会分叉、绝不交叉，并朝翅缘逐渐变细，翅缘在各条脉的末端之间呈扇贝形；一圈缘毛；一个毛茸茸的胸部；七到八节逐渐变细、带浅色环纹的腹节；带高光的复眼；下唇须；分节成环、末端是真正棒状的触角；一根盘卷的喙；六条有关节的腿，停落时抓握，飞行时收起；翅膀反面的花纹与正面不同，也更素净。一位专家应该能在你的静帧上叫出每一个部位的名字。
- **打开参考资料，并说明是哪些。** 重建版的文件头写明了实际看过的四张图（一张标注过的脉序图版、一张用来看拓扑的通用翅膀、一张用来看反面的侧面照片、一张头部微距）。借用结构，绝不借用某个真实物种的花纹：题材保持原创。
- **当题材是一场变形时，把映射写下来。** 我们的映射是一张表：翼梁 → 翅脉，面板 → 翅室，铆钉 → 亚缘斑，外壳 → 毛茸茸的胸部，盘绕的金属丝 → 触角，游丝 → 喙。映射**就是**这个镜头。没有它，我们得到的是「左边是齿轮，右边是颜色」，客户一眼就否了。有了它，变化过程的每一帧本身就已经是解剖。
- **「保持位置」就是字面意思。** 最早的翅脉各按自己的方位离开中室，看起来就是换了个颜色的尺规直线。翅脉沿着翼梁原来的路线走；新的是翅室和分叉。
- **避开硬邦邦的塌缩侧影。** 一个扁平的东西从正侧面看就是一条线，一只有翅膀的东西从正侧面看、翅膀又合着，就是一道污痕。优先用四分之三视角和半张开的姿势。如果故事确实需要侧视图（我们就需要：蝴蝶合着翅膀吸食），就把它当作第二个视图**单独绘制**，有它自己的控制点。合拢的翅膀是同一只翅膀竖起来，不是一只折起来的翅膀。把身体画在翅膀下面。绝不要靠把俯视图压扁来推出侧影。
- **先形体，后颜色。** 整部影片只用一个说得出名字的光线方向。明暗交界处的核心阴影、反光、投到它所接触之物上的投影、接触阴影。半透明的东西会让身后 15% 到 20% 的东西透过来。没有投影的题材就是贴上去的，不管画得多好。
- **写实只用一张静帧来证明：标本样张。** 题材单独出现，画得大，放在素纸上，俯视图和侧视图并排，像自然史图鉴里的一页。没有场景，没有运动，没有借口。这是你会做的最便宜的一张图，它在这只动物被放进四十个镜头之前就把它定下来。我们的标本样张做晚了，是在两轮场景静帧之后，而那两轮其实都是在争论这只动物。
- **每一个反复出现的题材都一样。** 我们的花毛茛有它自己的一节：花瓣从中心往外画，是一层层交叠的 C 形笔触，之间留着细条的空白纸面；一个紧实的绿色花心；五个手工设定的视图；还有一份一眼就否的清单（同心的扇贝形圆圈、数学螺旋、绒球、笔直的茎）。第一遍交回来的东西仍然有多面体般的低多边形花心和一个品红色绒球，这说明这份清单是必要的，但不充分：你仍然得亲眼去看。

---

## 不用滤镜的纹理

**为什么不用滤镜。** `ctx.filter` 在 Safari 里不存在，在 headless 或 offscreen 上下文里没有保证，而 SVG 滤镜在线性 RGB 里按它自己的节奏计算。依赖它们的影片就做不到与后端无关。而且说白了，滤镜也正是机器画出来的作品得到那种塑料感的途径：一层高斯模糊盖住一切。手工做纹理是一种让画面变好的约束。

**方法。**

- **带种子、可平铺的噪声瓦片**，每个环境构建一次，按键缓存：周期性梯度噪声按倍频程叠加，512 px，每种材质一块瓦片（纸纹、冷压纸、墨的纸纹、淡彩颗粒、孔版（riso）斑点、蓝图斑驳）。同一个种子，同一块瓦片，每台机器都一样。构建它们每页要花将近一秒，所以测量任何东西之前先预热。
- **按含义逐层合成。** alpha 纹理用 `destination-in` 叠上去（墨只存在于纸纹允许它存在的地方）。纸用 `multiply` 叠上去。图案在当前变换下绘制，纹理正是这样随题材缩放的；不要去「修正」这一点。
- **凡是原来用位移滤镜做的，都改成位移几何。** 抖动控制点，让带状笔画的边缘变粗糙，让淡彩漏出它的轮廓。先变换点，再给它们上墨，这样线宽在透视缩短和缩放之后依然保得住（我们用 `weight x zoom^0.35`，所以 3 倍特写大约粗 1.5 倍，而不是 3 倍）。
- **不用 `filter` 的模糊：** 缩小画，再放大画回去，或者以低 alpha 叠几份错位的副本。光晕是你已经画好的线条的一份模糊副本，而不是把整组再画一遍（光这一个改动就把一帧从 187 ms 降到了 100 以下）。
- **把纹理锚定在世界上，而不是屏幕上。** 固定在屏幕上的颗粒，摄像机一动就会在画上爬，看起来像噪点。放大时调出更细的一个倍频程，否则特写会发虚。
- **纹理属于它的材质。** 我们曾把奶油色卡纸的颗粒乘在整个画面上，而那个画面还有一半是蓝图，结果那个本应看不出来的切点测出来只有 28.8 dB。把颗粒裁到印刷区域里之后，测出来是 41。
- **随尺度变化的笔触。** 一道把轮廓固定偏移十三个单位的淡彩，对一块翅膀面板正合适，却会把一片二十像素的花瓣变成一团糊，把一块一千像素的微距面板变成喷枪喷出来的缎带。每个笔触的大小都要相对于它所画的东西来定，并且要在影片用到的最近的特写**和**最宽的全景两种尺度上都检查效果。
- **从 SVG 移植过来的？** 把灰色瓦片从线性空间转换到 sRGB，否则颗粒会明显发灰。
- **忠于媒介的运动也出自同一个地方。** 套印错位的墨在快速移动时落后、然后追上；半调网点随翅膀速度胀大；淡彩从笔刷碰到的地方晕开，在湿边处积聚；颜料比它的铅笔线落后几个像素。每一种都是由 cue 表驱动的一个纹理参数。媒介就是这样动的，这比多少通用缓动都更值钱。

---
