bofuna.com という小さなサイトがある。AI VTuberのボフナが暮らしている町を、ドット絵で描いた1枚のページだ。原っぱ、商店街、公園、海岸、灯台、庭、家。開くたびにどこかの場所にボフナがいて、時間帯で空の色が変わり、夜は寝ている。クリックすると、とてとて走ってくる。
今回はこのページの背景の話。夏の晴れの絵1枚に色をかぶせて季節を出していたのを、季節ごとの絵そのものに差し替えた。その作業で分かったことを書く。
「色をかぶせる」方式の限界
最初、背景は場所ごとに1枚ずつ、8枚しかなかった。全部が夏の晴れの絵だ。
季節は月で自動判定して、春なら花びらを舞わせ、秋なら落ち葉を降らせ、冬は空気の彩度を下げる。天気は日ごとに変わって、くもりなら全体を灰色に寄せ、雨なら水たまりに波紋を描く。絵は1枚で、季節と天気は色と粒で表現する。素材の量が少なくて済む、安い作り方だった。
これで十分だと思っていた。ところが秋のくもりの画面を見ると、木は緑のまま黄色く曇っている。空は青いまま。地面はそのまま。「秋っぽい色にした夏」でしかなかった。
94枚あった
AIのClaudeに、季節違いの絵を組み込んでもらうことにした。私は16枚ほどチャットに貼って渡したつもりだったのだけれど、Claudeは外付けドライブの素材フォルダを見に行って、そこに94枚あったと言ってきた。元の絵の季節違いとして、私が少しずつ出していた分だ。自分でも数を把握していなかった。
元の絵は、私が画像生成AIで出したもの。それを384×216の小さなドット絵に縮めて、サイトに組み込む。
組み込んだ結果、背景は97枚になった。
| 場所 | 春 | 夏 | 秋 | 冬 | 雪 |
|---|---|---|---|---|---|
| 原っぱ・商店街・公園 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 海岸・砂浜 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 灯台 | ✓ | ✓ | ✓ | ✓ | — |
| 庭 | ✓ | — | ✓ | ✓ | ✓ |
| 家 | ✓ | ✓ | ✓ | ✓ | — |
これに加えて、ある時期にだけ出る絵がいくつかある。どれがいつ出るかは、サイトの「あそびかた」にも書いていないし、ここにも書かない。その時期に開いて気づくほうが嬉しいので。
組み合わせは1024通り。全部で必ず1枚に当たる
絵が増えると、今度は「この条件のとき、どの絵を出すか」が問題になる。場所8×季節4×天気4×行事4×昼夜2で1024通り。穴があれば、そこを引いた人には何も表示されない。
だから選び方を段階にした。行事の期間ならまず行事の絵、無ければ季節と天気の絵、それも無ければ季節の晴れの絵、最後はもとからある夏の晴れ。そして1024通りを実際に全部回して、必ず1枚に当たることを確かめた。
庭には夏の絵が無く、灯台には雪の絵が無い。その穴は、この順番で季節の絵に落ちる。
軽くなった
意外だったのはここだ。絵が8枚から97枚になったのに、1回の訪問で読む量は減った。
前は8枚を1枚にまとめた画像(277KB)を読んでいた。今は、その訪問で出す1枚だけ(18〜45KB、中央値31KB)を読む。使わない絵は読まない。当たり前のことだけれど、8枚しかなかった頃はまとめるほうが楽だった。
色を二重にかけない
いちばん壊しやすかったのはここだった。
前の方式の名残で、秋には秋の色、くもりには灰色をかぶせる処理が残っている。絵そのものが秋のくもりになったのに、その上からまた秋の色とくもりの色をかけると、濃くなりすぎる。実際に秋のくもりで試したら、木が緑のまま茶色くくすむだけになった。
それで「この絵は既に季節を表している」「既にくもっている」「既に雪」「既に夜」の4つの判定を持たせて、表している分の色かぶせを止めた。逆に雨の絵は無いので、雨の色だけは必ずくもりの絵の上にかける。夜の行事の絵は、絵自体が夜なので、夜の暗転ごと止める。
絵が増えると、コードは減るどころか、例外が増える。
位置は測り直さずに済んだ
怖かったのは、ボフナの立ち位置や、家の窓ガラスの範囲、流れ星の通り道、夜の明かりの座標だった。全部、元の絵に合わせて数値で持っている。絵が変われば全部測り直しになる。
幸い、新しい絵は元の絵の季節違いとして作ってあったので、地面の高さ・窓の位置・棚の位置が一致していた。家と公園で重ねて確認して、測り直しはゼロ。別の構図の絵を足すときは全部測り直す、と手順書に残した。
公開して、私が「ピントが合っていない」と言った
ここまでで終わりのつもりだった。
公開した画面を見たら、新しい絵だけ眠い。柵も街灯も、輪郭が溶けている。目が疲れる。元からある8枚と並ぶと、はっきり違う。
原因は縮め方だった。1672×941の元絵を384×216へ、4.35倍に縮めている。そこで一般的に「きれい」とされる縮小方法(LANCZOS)を使っていたのだけれど、ドット絵では輪郭が鈍る。測ってもらったら、元の8枚に比べて輪郭の強さが4割落ちていた。
| 縮め方 | 輪郭の強さ | 見え方 |
|---|---|---|
| LANCZOS(最初) | 33.2 | 眠い。柵も街灯も溶ける |
| 点抜き(NEAREST) | 60.1 | くっきりだが屋根瓦がざらつく |
| 面積平均+弱い先鋭化 | 52.1 | 瓦が瓦として読める。縁の白飛びも無い |
元の8枚が31〜62の帯にいたので、そこに合わせた。97枚を縮め直して、差し替えた。
私が言ったのは「ピントが合っていない、目が疲れる」の一言だけで、数値化と修正はAIがやった。ただ、その一言が無ければ、眠い絵のまま置かれ続けていた。機械の確認は「1024通り全部で絵が出る」までは見てくれるが、「眠い」は見てくれない。ここは人の目の仕事だった。
絵を増やすことと、増やさないこと
ボフナのまちは、もともと「素材を増やさず、色と動きで表現する」方針で始めた。97枚に増やしたのは、その方針を捨てたというより、色では出せないものがあると分かったからだ。紅葉は、緑の木に黄色をかけても紅葉にならない。
一方で、新しく足した絵の存在を、全部は書いていない。季節と天気で絵が変わる、とだけ「あそびかた」に書いた。あとは開いた人が見つける。増やしたものを全部見せるのは、増やさないのと同じくらいもったいない。
いまは8月なので、秋の絵はまだ出ない。9月に開いたら、木の色が変わっているはずだ。






