これは何か
オープンソースの人工生命エンジン chrxh/alien を Apple Silicon の Metal に移植したフォークを土台に、細胞が連結して体を作り、体が動いて互いに触れ、その集積が一枚の絵になる世界を育てている。目的はシミュレーションそのものではなく、そこから絵を取り出すことにある。
3000 体の細長い体を撒くと、紙の上には筆記体のような線が広がる。同じ密度のレシピを別の体の形で走らせると、別の書体になる。どの体がどんな書体を書くのかは、走らせて測るまで分からない — だからこの仕事の大半は、育てることではなく測ることと、測り方を疑うことに費やされている。
ゲートは成立可否を決め、記述子は価値を決める。混同すると作品が落ちる。構図のゲートを設けていたら最も均一なページは落ちていたし、マーク数の下限を設けていたら融合して 11 個の痕跡しか残さない織物は落ちていた。価値はこれらの軸の上にあり、軸上の一点にはない。
パターンは 5 つの層にある
「作ったパターン」と呼べるものは互いに別のレイヤーにあり、混ぜると判断を誤る。一つの庭が、ある美学では合格し別の美学では不合格になることは設計どおり起きる。
| 層 | 何のパターンか | 個数 |
|---|---|---|
| A 形態 | 体の形。長軸を持つ体だけが線を描き、閉じた体はタイルを押す | 7 |
| B 庭 | 実際に育てて撮った世界。パラメータと計測値と seed だけを保存する | 7 |
| C 探索 | 自律探索が見つけた「種類」。1 セル 1 エリート | 50 |
| D 作品 | 人の判断を通り、映像になったもの | 15 |
| E ルック | 同じ保存データの描き方。マーク・天候・カラーマップ | 29 |
自律探索 — 最適解ではなく種類を集める
庭を提案し、育て、映像が live する媒体と瞬間で採点し、新しい種類であるか既知の種類のより良い個体であるときだけ保存する。そしてアーカイブの中身を使って次を提案する。映像はループが試したものではなく、アーカイブが保持したものから作られる。
採点は 100% スクリプトで、モデルは一切数字に触れない。提案は最も安いモデル(またはモデルが届かないときは決定的なフォールバック)、判定は助言のみ、ゲートの変更は人間のコミットだけ。ループが自分の審判を再較正できないようにしてある。
| プログラム | 美学 | ゲート | セル |
|---|---|---|---|
| script | 書くページ | ink ≥ 10 / stroke ≤ 5.0 / linelen ≥ 60 | 17 |
| creature | 読める個体 | 30 ≤ blobs ≤ 900 / mov ≥ 0.4 | 11 |
| field | 素材と模様 | ink ≥ 8 のみ | 12 |
| motion | 動きそのもの | mov ≥ 0.6 | 8 |
MEDIUM 判定は較正された媒体でのみ有効。raw で「静か 0」の庭がグレード後には「静か 3」を読む。
MOMENT ゲートのフレームは瞬間であって庭ではない。従来の窓は 7,200 ステップの最初の 0.67 秒だけを見ており、その読みは再撮影 1 本分のコストで覆された。
FRAMING 同一ジオメトリでのみ比較可能。同じズームでもフレームが広ければ写る世界が増える。
「この 2 枚は同じ絵か」を測る
アーカイブは自分のエリートを別々の種類だと言う。それを 5 つ見せられた所有者は「どれもほとんど同じ印象だ」と答えた。両方が真でありうる — そして真なら、探索は見る人に見えない距離を最適化していることになる。
そこで、アーカイブが分類に使う 5 つの密度スカラーとは種類の違う 5 つのヒストグラム(明度・輪郭・スケール・方向・痕跡の大きさ分布)で距離を測る計測器を作った。これは距離であって順位ではない — どちらが良い絵かは言えない。
| 較正 | 距離 | 意味 |
|---|---|---|
| 同一入力の 2 回走らせ | 0.022 | 何もないときに読む値 = 床 |
| 所有者が「一つの作品」と呼んだ 2 カット | 0.019 | 床と同じ = 同じ絵 |
| ゲート族をまたぐ差 | ≈ 6×床 | 目が確認した最大の跳び |
この物差しが探索の向き先を変えた。ゲートの内側は全部ひとつの家族であり、ゲートこそが目の読む境界だった。
2026-08-24 の測定 — 体の中に勾配を入れる
エンジンに新しい機構を入れて「ルックが変わった」と言うには、先に変わったの定義が要る。この仕事ではこう定めてある — 既存の全作品から眼距離で床の 6 倍以上、名前のついた署名の 1 つが壊れること、そしてキーを切った再生育で旧作が床以下に戻ること。
今日測ったのは connectionDistanceSlope — 体の軸に沿って結合の長さに勾配をつける機構。中央は元の値を保つので、体の真ん中は変わらず頭と尾だけがずれる。出荷済みの一枚と同じレシピで、勾配だけを変えた 7 本を育てた。
| 勾配 | ink | stroke | 眼距離 | ×床 | セル | 判定 |
|---|---|---|---|---|---|---|
| cd 0(複製) | 18.43 | 2.780 | 0.023 | 1.0× | i2q0m3v0l0 | これが床 — 同じ命令を2回 |
| cd −0.8 | 14.54 | 2.854 | 0.054 | 2.3× | i1q0m3v0l0 | バー未満 |
| cd −0.4 | 16.30 | 2.902 | 0.045 | 2.0× | i1q0m3v0l0 | バー未満 |
| cd 0(制御) | 18.58 | 2.807 | — | — | i2q0m3v0l0 | 条件 (3) 通過 |
| cd +0.4 | 13.82 | 2.912 | 0.062 | 2.7× | i0q0m3v0l0 | バー未満 |
| cd +0.8 | 12.95 | 2.834 | 0.077 | 3.3× | i0q0m3v0l0 | バー未満(最大) |
| st +0.8 | 18.76 | 2.966 | 0.021 | 0.9× | i2q0m3v0l0 | 床以下 — 見えない |
| cd +0.95 | 13.11 | 2.766 | 0.071 | 3.1× | i0q0m3v0l0 | +0.8 より下 — 反転 |
| cd −0.8 st +0.8 | 13.91 | 3.027 | 0.062 | 2.7× | i0q0m3v0l0 | 合成しない |
バーには届かない。+0.4 から +0.8 で稼げるのは 0.015。0.077 から 0.132 まではあと 0.055 必要で、この率なら勾配 2.3 相当 — 勾配 1.0 で頭側の結合長が 0 になり体が壊れるので、そこには行けない。しかも +0.95 は +0.8 より小さい — 効きは範囲の内側で反転する。外挿するまでもなく、そこに到達する勾配は存在しない。この機構は「既知の種のより良い個体」であって、新しい絵ではない。
近接ズームの切り抜きを見たとき、勾配アームの線は太さが一本の中で変わっているように見え、制御は端から端まで等幅に見えた。そこで一本の線の稜線に沿って局所幅を測ったところ、幅の中央値は 3 本とも 2.4–2.5 で同じ、ばらつきの比は 0.93–1.14 倍 — 制御自身のフレーム間ばらつき 13% の中だった。署名「一定のストローク幅」は壊れていない。私が見たのは線ごとの重さの違いと、どの線にもある端の細りだった。
動いたのは痕跡の大きさの分布と向きで、勾配 +0.4 と +0.8 は 6 世代の自動探索が一度も届かなかった空きバンドに着地した。そして stiffnessSlope だけを入れたアームは 0.021 — 床を下回る。同じ命令を 2 回走らせたほうが差が大きい。体の軸に沿って硬さを変えても、紙の上では何も起きない。
最初、近接ズーム(z7)で制御からの距離が 0.079–0.129 と出たので「作業ズームの倍以上、床の 5–6 倍」と書いた。それは間違いだった。床 0.022 は作業ズームで較正された値で、寄りの絵には使えない。複製ペアを z7 で測ると 0.122 — 全アームがその 0.6–1.1 倍の中にいる。寄りのフレームには体が数本しか入らず、どの体が入るかが確率的だから、同じ命令の 2 回でも大きく離れる。床は較正された幾何の中でしか有効ではない — この仕事が 7 月から書いている法則を、私が破った。
間違いを追いかけて、床が二つあることが分かった
上の失敗が起きたのは、この仕事が床を一つの数(0.022)としてしか書き残しておらず、それがズームでどう変わるかを誰も見えるようにしていなかったからだ。複製ペアを 5 つのズームで測り、さらに同じ保存データを同じスタイルで 2 回描くという別の問いも測った。世界が変わっていないなら、それは違う床になる。
| zoom | 見えている世界 | RENDER 床 | GROW 床 |
|---|---|---|---|
| 1.1 | 1455 | 0.0047 | 0.023 |
| 3 | 533 | — | 0.046 |
| 7 | 229 | 0.0171 | 0.122 |
| 14 | 114 | — | 0.214 |
| 45 | 36 | 0.0262 | 0.264 |
GROW 床(同じ命令で二つの世界を育てる)は、このズーム範囲で 11.4 倍動く。理由は素直で、広いフレームは数千の体を平均するので 2 回の実行が一致し、寄りのフレームには数本しか入らないのでどの体が入るかが確率的になる。RENDER 床(世界は同一、描き直すだけ)も上がる — レンダラは自分自身とも一致しないから — が、5〜10 倍小さい。
どちらの床が要るかは、たった一つの問いで決まる — 世界は変わったか。勾配のアームはそれぞれ別の世界なので GROW 床。スタイルの比較は同じ保存データを描き直すだけなので RENDER 床。この区別を落としていたために、寄りの比較は倍率が過大に、スタイルの比較は過小に読まれていた。
作業ズームの GROW 床(0.023)と、ズーム 45 の RENDER 床(0.0262)は、ほとんど同じ数字だ。だから拡大したスタイル比較は、偶然ほぼ正しい定数で割られ続けてきた。二つの床が 5 倍離れる比較(今回のもの)が来るまで、誰も気づけなかった。
別の書体でも同じことが起きるか
自律探索に新しい軸を開いて盲目の 1 世代を回したところ、5 候補中 3 つが勾配を持ち、新しい種類は 1 つも見つからなかった。ただし 1 件が引っかかった — zigzag の体に勾配 +0.75 を入れた庭が、6 世代で最高の ink 24.81 を出した。filament では勾配が ink を下げたのに、である。
ただしその庭は個体数と結合距離も同時に動いていたので、勾配の効果とは言えない。切り分けるため 2×2 を作った。filament 側は既に同じ引数・同じバイナリで育ててあるので、追加で育てたのは zigzag の 2 本だけ。
| 体 | 勾配 | ink | stroke | linelen | marks |
|---|---|---|---|---|---|
| filament | 0 | 18.58 | 2.807 | 108.9 | 904.5 |
| filament | +0.8 | 12.95 | 2.834 | 71.1 | 931.0 |
| zigzag | 0 | 27.95 | 3.060 | 187.1 | 700.0 |
| zigzag | +0.8 | 20.39 | 3.204 | 120.2 | 752.0 |
同じ向きだった。ink は filament で −5.62、zigzag で −7.56。線の長さは −35% と −36% で、1 ポイント以内で一致する。勾配の効果は体に依存しない — 開くべき「勾配 × 形態」という軸は存在しない。
勾配なしの素の zigzag が ink 27.95 を出した — 探索が見つけた 24.81 より高い。つまりあの「6 世代で最高」は勾配のおかげではなく、単に zigzag だったからで、勾配はそこから ink を削っていた。アーカイブは、weather なしの素の zigzag をこの設定で一度も育てたことがなかった — 正しい対照が、そもそも存在しなかった。
同じ機構が、ゲートによって無価値にも新種にもなる
ここまでで、この機構がやることは一つだと分かった — ink を奪い、線を 3 分の 1 短くする。書くページを探す探索(script)にとって、それはただの劣化だ。あの探索のゲートは ink ≥ 10 を要求し、価値は「どれだけ余裕をもって書けているか」で測られる。実際、軸を開いて回した 1 世代は新しい種類をひとつも見つけなかった。
素材と模様を探す探索(field)は、ゲートが ink ≥ 8 で、被覆が低いことは欠陥ではなく価値だ。そしてそのアーカイブは、世代 4 からずっと同じ空きを報告していた — ink 8〜15 の帯。走らせる前に、勾配がそこを埋めると書いて commit した。
| 候補 | 体 | 勾配 | ink | 粒 | areaCV | 結果 |
|---|---|---|---|---|---|---|
| fb005_0 | slab | — | 27.93 | 336 | 2.82 | 通過(既存セル) |
| fb005_1 | filament | cd 0.51 | — | — | — | 32bit 壁で死亡 |
| fb005_2 | filament | cd −0.52 / st 0.54 | 13.80 | 188 | 6.10 | 新セル — 予測した穴 |
| fb005_3 | tubeY | cd −0.50 / st 0.40 | — | — | — | 32bit 壁で死亡 |
| fb005_4 | zigzag | — | 35.38 | 486 | 15.24 | 新セル(軸とは無関係) |
fb005_2 が ink 13.80 で穴を取った。4 つのアーカイブを通じて、この軸があるから存在する初めてのセルである。
fb005_2 — 自律探索が勾配つきで育て、field の空きバンドを埋めた庭。ink 13.80、粒 188、areaCV 6.10。書くページを探すゲートにとっては「薄すぎる」失敗作で、素材を探すゲートにとっては新しい種類である。同じ 1 枚が、どちらでもある。11 本のアームを他の 2 つのゲートで採点し直したところ(リグレードは無料なので新しく育てていない)、制御アームでさえ空きセルを開くことが分かった。理由は軸ではなく seeding の穴 — どちらのアーカイブも「静止した歩様の dense page」を一度も採点していない。fb005_2 のセル獲得自体は成立している(勾配が ink バンドを動かしたから)が、「空きセルを取った」を全部この機構の手柄にするのは誤りだ。勾配は creature の分類を一切動かさない。届く軸は ink ひとつだけである。
機構それ自体に良し悪しはない。良し悪しは、それを裁くゲートに対して決まる。同じ勾配が、片方の美学では「劣った標本」になり、もう片方では「新しい種類」になった。この仕事は以前、ゲートこそが目の読む境界だという結論に別の道から辿り着いている。今日それは、ゲートが「その機構を持つ価値があるか」まで決めているところまで伸びた。
作品
15 件のうち 10 件を、バイリンガルのレビューページで公開している(原本は SHA-256 付きで保管)。判断待ちのものは公開していない — 何を作品として出すかは計測ではなく人の判断だから。