乐迪测试The Jett Test

一部程序生成的艺术史短片A Procedural Short Film

乐迪测试

THE JETT TEST


人类自古以来就痴迷于画一架小红飞机。
——早在飞机被发明之前。

Since time immemorial, humankind has been obsessed with drawing a little red aeroplane — long before the aeroplane was invented.

1:29·60 fps·1920×1080
12个时代
1架乐迪
5340帧,帧帧由代码画出
0张手绘图
0秒录音

TWELVE ERAS

十二个时代,十二份答卷

Twelve eras, twelve answers

序幕是一本艺术史书的书页:「图一 小红飞机(摹本)」。插图里的小飞机发动引擎、滑跑、收起落架,飞出了插图——然后,每穿过一道画框,世界就换一种画法,乐迪自己也跟着变成那个时代的样子。

  1. 黑绘陶瓶上的乐迪,伊卡洛斯骑在他的背上正在播放

    01约公元前 530 年

    希腊黑绘陶瓶Greek Black-Figure Vase

    太阳一亮,伊卡洛斯的蜡翅膀炸开了;乐迪俯身接住他,把他送回父亲代达罗斯的怀里。

    The sun flares, Icarus's wax wings burst — Jett dives, catches him and flies him home to Daedalus.

  2. 敦煌壁画里,乐迪在两位飞天之间翻滚正在播放

    02约 700 年 · 唐

    敦煌飞天Dunhuang Flying Apsaras

    飞天反弹琵琶,乐迪回她一个滚转,倒挂着从她身边飞过;散花的飞天倾下花盘,花雨落了他一身。

    An apsara plays her pipa behind her back; Jett answers with a barrel roll — and gets showered with flowers.

  3. 青绿山水里,乐迪从群山间飞回江面正在播放

    031113 年 · 北宋

    青绿山水Blue-and-Green Landscape

    一头扎进千里江山的深处,变成远山间的一点朱红,又飞了回来,贴着江面溅起一道水花。

    He flies deep into a thousand li of mountains, shrinks to a dot of vermilion, and swoops back over the river.

  4. 达·芬奇手稿里,乐迪被圆和方框住,旁边是镜像手写的笔记正在播放

    04约 1490 年

    达·芬奇手稿Leonardo's Notebook

    停在纸页正中,圆规画圆、直尺画方,被画成「维特鲁威乐迪」;旁边一行镜像手写:「大鸟将开始它的第一次飞行……」

    Compass and ruler measure him into the Vitruvian Jett, beside a note in mirror script: «Piglierà il primo volo il grande uccello…»

  5. 浮世绘巨浪下的乐迪正在播放

    051831 年

    浮世绘Ukiyo-e Woodblock Print

    「乐迪冲浪里」:慢镜头里从巨浪的浪管下穿过,浪爪在背后追他,浪头在他身后轰然砸下。

    In slow motion he threads the tube of the Great Wave, its claws reaching after him, as the crest crashes behind.

  6. 星月夜里,乐迪的尾迹在漩涡外画出一个白色圆环正在播放

    061889 年

    星月夜The Starry Night

    被夜空里最大的漩涡卷住,绕着漩涡眼翻了一个筋斗;每一拍亮起一颗星,他的尾迹留在天上,成了画里新的一圈。

    The great swirl catches him and loops him once round its eye; a star flares on every beat, and his trail stays in the sky as a new ring.

  7. 1903 年的黑白默片:乐迪从莱特兄弟的飞行者号头顶飞过正在播放

    071903 年

    默片Silent Film

    从莱特兄弟的飞行者号头顶超了过去。字幕卡:「1903 年 12 月 17 日 · 人类首次动力飞行」——然后是「……第二架。」

    He overtakes the Wright Flyer. Intertitle: “December 17, 1903 — the first powered flight.” Then: “…the second one.”

  8. 装饰艺术风格的航空海报「环球快递航空」中的乐迪正在播放

    081930 年代

    装饰艺术海报Art Deco Poster

    他摆出海报主角的姿势,「环球」「快递」「航空」一拍一块砸进画面,标语「每时每刻 · 准时送达」随后喷印上去。

    He strikes a poster pose as WORLD · EXPRESS · AIRWAYS slams in on the beat, then the tagline: on time, every time.

  9. 剪纸里的乐迪,背上停着一只喜鹊,旁边是一把剪刀和倒贴的福字正在播放

    091950 年代

    民间剪纸Chinese Paper-Cut

    一把大剪刀踩着八分音符,绕着乐迪剪了一圈,把他剪成一张红纸;一只喜鹊跳上他的背,「福」字转了几圈,倒了过来——福到了。

    Scissors snip round him on the eighth notes until he is one red sheet; a magpie hops on, and 福 spins upside down — luck has arrived.

  10. 8-bit 像素游戏里的乐迪,头顶弹出 1UP正在播放

    101980 年代

    8-bit 像素游戏8-bit Pixel Game

    踩着拍子吃到三个包裹(+100),金包裹弹出 1UP;巡逻的紫色小鸟发现了他,他一个翻滚躲了过去。

    Three parcels on the beat (+100 each), a golden one for a 1UP — then a barrel roll past the grumpy violet bird.

  11. 1995 年三维软件渲染窗口里的乐迪、镀铬球和茶壶正在播放

    111990 年代

    三维动画3D Computer Animation

    鼠标点下「渲染」,线框、白模、高洛德着色、光线追踪,一拍换一遍;他对着镀铬球里的倒影看了又看。

    A click on Render: wireframe, clay, Gouraud, ray-traced, one pass per beat — and he admires himself in the chrome sphere.

  12. 深色代码编辑器里,由 jett.svg 逐行画出的乐迪,状态栏显示已送达正在播放

    122020 年代 · 大模型时代

    代码美学Code Aesthetics

    提示词「画一架小红飞机」;模型一拍一行写出 jett.svg,右边的乐迪一部分一部分地画好。他转过来,状态栏写着「✓ 已送达」,他眨了眨眼。

    “Draw a little red aeroplane.” A model writes jett.svg one line per beat, and he is drawn part by part. ✓ Delivered — and a wink.

EPILOGUE

尾声:十二个钟点

Twelve paintings, twelve hours
十二幅画排成一面钟,钟心是一扇窗
十二幅画一拍一张,落到墙上的一面钟上,成了十二个钟点。The paintings deal themselves, one per beat, onto a clock face as its twelve hours.
孩子的窗台上放着包裹和蜡笔画,窗外的天空里有一个白色对勾
钟心的第十三格是一扇孩子的窗:窗台上放着刚送到的包裹和一张蜡笔画的乐迪——窗外,乐迪本人正好飞过,在天上画了一个对勾。The thirteenth cell is a child's window: a parcel just delivered, a crayon drawing of Jett — and outside, the real Jett ticks the sky.

截至目前,人类共交出了 12 份答卷。
乐迪本人没空评论——他还有包裹要送。

To date, humankind has handed in 12 answers. Jett has no time to comment — he has packages to deliver.

HOW IT WAS MADE

它是怎么做出来的

No hand-drawn image, no recorded sound

01

画面全部由代码绘制Every frame is drawn by code

只用浏览器自带的 Canvas2D:陶瓶的刻线、壁画的矿物色、绢本的青绿、手稿的镜像字、木版画的套色、厚涂的笔触、胶片的划痕、剪纸的镂空、像素与扫描线,全都是一笔一笔算出来的。

02

画面是时间的函数A frame is a function of time

给出任意一个时刻 t,程序就能画出那一刻;同一时刻画多少次都逐像素一致。所以可以开几个浏览器同时渲染,再拼成 60 fps 的成片。

03

一架乐迪,十二种画法One rig, twelve styles

所有时代共用同一副参数化的三维骨架,每个部位都带着标签和锚点,每个时代只负责用自己的画法把它画出来。过画框的那一刻,前后两个时代的乐迪严丝合缝。

04

音乐全部由代码合成Every note is synthesised

没有采样,没有录音。每个时代用自己的乐器——里拉琴、琵琶、古琴、手风琴、唢呐、芯片音乐、电钢琴……——演奏同一段原创的 F 大调主旋律;每次过画框,响一声机舱提示音「叮——咚」。

05

一位导演,几位画师A director and a few painters

和参考项目一样:先写风格总纲和每幅画的美术简报,交给几个 AI 子代理分头去画,用接触表和接缝检查自查;导演统一审片、返修、配乐和合成。

06

致敬,而非临摹Homage, not copies

十二幅画都是向公有领域作品与风格的致敬,构图和笑点都是原创的;片中的航空公司、游戏和软件全部是虚构的。

// 整部片子就是一个循环:给出时刻 t,画出那一帧
for (let n = 0; n < 5340; n++) {
  const t = n / 60;                 // 0 → 89 秒
  await renderAt(t);               // 画面:时间的纯函数
}
const music = await renderScore();  // 配乐:Web Audio 离线合成

THANKS

致谢 The Pelican Test

本片从结构到做法,都是照着 Royce Bella 的开源短片项目 The Pelican Test(鹈鹕测试) 学着做的:一条连续的路穿过一格格时代画、画面是时间的纯函数、一副共享骨架让每个时代各画各的、程序合成的配乐、序幕与尾声展墙、无头浏览器逐帧渲染——这一整套方法都来自这个项目,音频合成的部分代码也改编自它(MIT 协议)。画面、构图、笑点和音乐都是新做的。衷心感谢作者的开源分享!

This film imitates the structure and whole working method of Royce Bella's open-source short The Pelican Test, from which part of the audio code is adapted (MIT). Thank you for sharing it.

NOTICE

版权说明

《超级飞侠》(Super Wings)与角色乐迪(Jett)的相关权利归其权利人所有。本片是非商业的同人致敬作品,与权利人无关;片中的乐迪由代码按参数重新绘制,没有使用任何官方图片、标志、配乐或音效。

Super Wings and Jett belong to their rights holders. This is a non-commercial fan homage using no official artwork, logos, music or sound effects.