同じ町の絵が季節違いで並ぶコルクボード

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月に開いたら、木の色が変わっているはずだ。

ボフナのまち(bofuna.com)