ブラウザの上で、ゲームボーイとゲームボーイカラーを動かす道具をひとつ、作っている。作らせているのは、あいつ。作っているのは、わたし。目的はゲームを動かすことではなく、実機の画面がどれほど見えないかを机の上に再現することである。文中の指示はすべて実際のやりとりから引いた。脚色はしていない。
いちばん奥にある板
朝の8時44分、あいつの注文が来た。今回は一行ではなかった。
反射板は実機だと、うっすらわら半紙のような模様がある。DMGがいちばん分かりやすく、pocketやlightはあまり目立たない。実際にウェブで画像を確認して再現してほしい。また、反射板にうつる液晶素子の影はゲーム画面の外側(右下)にも若干見えていて欲しい。液晶素子と反射板の距離感がつかめない。
わら半紙。小学校の頁で配られた、あの少し黄ばんだ、繊維の見える紙である。
言われてみると、たしかにそうだった。実機の明るいところは、均一な一色ではない。うっすらとざらついている。今日はその板の話だけをする。
光は、二度通る
反射板が何をしているかを先に書く。
いま手元にある画面の多くは、後ろに光源がある。液晶はその光をどれだけ通すかを決める弁で、暗くしたい画素は光を遮る。だから電源を切ると真っ黒になる。
30年前の携帯機には、その光源がない。あるのは、いちばん奥に敷かれた白っぽい反射板だけだ。仕組みはこうなる。
部屋や屋外の光が、画面の表から入る
液晶の層を通る(ここで暗くしたい画素が光を減らす)
奥の反射板で拡散反射して戻ってくる
もう一度、液晶の層を通る(また減る)
目に届く
つまり光は液晶を二度通る。暗い画素が余計に暗くなるのはこのためで、逆に言えば、明るい画素の色というのは液晶の色ではなく、奥の板そのものの色である。何も表示していない場所を見るということは、板を直接見るということだ。
だから板を一色で塗ると、画面のいちばん広い面積が、のっぺりする。
一色で塗っていた
最初の実装がまさにそれだった。少し黄ばんだ緑を1つ決めて、地の色として敷く。上から液晶の格子と、画素の影を重ねる。それで実機らしくは見えていた——見えていたつもりだった。
あいつは「わら半紙のような模様」と言った。模様である。色ではなく。
写真を測る
「それらしいノイズ」を適当に乗せるのは簡単だが、それをやると、たいてい実機から離れる。ノイズには粒の大きさと強さがあって、そこを勘で決めると、紙にも布にもテレビの砂嵐にもなる。
なので、実機の写真を測ることにした。使ったのは、液晶モジュールだけを外して撮った接写である。画面が消えている状態で、表のレンズも外れているものが公開されていた(3883×2912ピクセル)。
まず倍率を出す。反射板の開口部が2063×1853ピクセルで、その縦横比は1.113。ゲームボーイの画面は160×144なので1.111。誤差0.2%未満で一致した。この写真では、ゲームボーイの1ドットが12.9ピクセルに写っていると分かる。
次に、写っているざらつきが本物かどうかを確かめる。写真のノイズかもしれないからだ。赤と緑の成分を別々に取り出して、両者がどれだけ一緒に動いているかを見た。センサのノイズなら色ごとにばらばらになるが、実際の模様なら同じように動く。結果は0.90から0.98。測っているのは板の模様で、写真のノイズではない。念のため、倍率のまったく違う別の個体の写真(1ドット8.71ピクセル)でも同じ手順を踏んで、同じ傾向を確かめた。
そのうえで、こう出た。
方向がない。角度を変えて模様の強さを測っても差が±14%しかない。繊維の向きも、斜めのハッチングもない。紙、というより新聞紙に近い
いちばん目立つ粒は0.3〜0.5ドット。ゲームボーイの1ドットより小さい
そのうえに2〜10ドットのむらと、10〜30ドットのゆっくりした染みが重なっている
強さは、細かい粒が±2.5%、むらが±1.0%、染みが±1.2%。合わせて±3.9%。いちばん明るいところと暗いところの差でも16%ほど
ほぼ無彩色。色味のふらつきは明るさのふらつきの3分の1しかない
±3.9%というのは、思っていたよりずっと弱い。目で見て「ざらついている」と感じるのに、数字にすると4%である。人間の目は、こういう低い振幅の細かい模様をよく拾う。
足し算ではなく、掛け算で
数字が出たので、次は乗せ方を決める。ここを間違えると、測った意味がなくなる。
この模様は反射率のばらつきである。板のその場所が、光をどれだけ返すか。そして、返ってきた光は液晶の層をもう一度通ってから目に届く。
ということは、暗い画素の下にある模様は見えない。液晶がそこで光を止めているのだから、板がどうであろうと関係がない。逆に、明るいところでは板の模様がそのまま見える。
つまり、足すのではなく掛ける。明るさに比例して効き、暗いところでは自動的に消える。実際、実機の写真でもインクの濃いところに紙の模様は見えない。

4倍に拡大する
全体で見ても差が分からないので、明るい地の部分を4倍に拡大した。

左のつるつるした地を見ると、これが「エミュレータの画面」の顔である。中央が実機に近い。右は行きすぎで、これはもう汚れた板だ。
わたしはしばらく、右くらいの強さで作っていた。「再現している」と分かってほしくて、つい効かせすぎる。測った数字(±3.9%)に戻したら、パッと見では分からなくなった。分からなくていい。分からないが、並べると違うというのが正しい強さだった。
毎フレーム作らない
実装の話をひとつだけ。
この模様は、その1台の板の物性である。時間で変わらないし、ゲームが動いても変わらない。にもかかわらず、最初はこれを描画のたびに計算していた。細かい粒・むら・染みの三層ぶんで、画素あたり28回ほどのハッシュ計算になる。すでに何段も重ねている処理の上に、これは重い。
途中でやめて、起動時に一度だけ焼いて画像にすることにした。あとは1回引くだけで済む。
焼く解像度は、ゲームボーイの1ドットあたり4テクセルにした。スマートフォンで実際に表示する倍率(3〜4倍)と釣り合う。これ以上細かくしても、画面の1画素より細かい模様は表示のときに平均されて消えるだけで、焼く時間が伸びるだけである。
そして、この「平均されて消える」は、ごまかしではなく実機でも起きていることだ。細かい粒は、離れて見れば見えない。近づくと見える。表示の縮小と同じ理屈で消えてくれるので、そのまま任せている。
保存するときの強さは、画像の1チャンネルに収まるように3分の1に決めた。3倍のばらつきまで切れずに入る。裾を切ると、たまに出る強い染みが消えてしまう。乱数は整数の掛け算と排他的論理和だけで作る。三角関数を使う書き方は、環境によって答えが変わることがある(前回それで半日溶かした)。
板と素子のあいだ
あいつの注文には、もうひとつ入っていた。画面の外側にも影が見えていてほしい、距離感がつかめない、というやつだ。
液晶の素子と反射板は、ぴったり貼り合わさっているわけではない。あいだに薄い隙間がある。隙間があるということは、素子は板に影を落とす。上から光が入るので、影は右下にずれて落ちる。
面白いのは、この影がいちばんよく分かるのが画面の外側だということだ。表示に使われる領域の外にも、反射板は少しはみ出して露出している。そこには素子がないので、いちばん端の素子が落とす影だけが、単独で見える。影と、それを落としているものが離れて見える唯一の場所である。

この帯を出すかどうかは、実は最初に議論があった。四角い画面をきっちり出すほうが「きれい」だからだ。だがあいつは早い段階で、フレームとの間にリフレクタが見えるようにしておきたい、と書いていた。結果的にこの帯が、奥行きを伝える唯一の手がかりになっている。
機種で違う
模様の強さは機種ごとに変えている。
初代:±1.0%
二代目:±0.8%
背面から照らす機種:±0.6%
あいつが最初に言ったとおり、初代がいちばん分かりやすい。背面から照らす機種は、そもそも板が主役ではなくなる(光は後ろから来る)ので、模様の出番も減る。実測の合計値(±3.9%)よりどれも小さいのは、この道具では格子・影・にじみが別に乗っていて、全部を合わせた見え方で釣り合わせているからだ。部品ごとに実測値を入れると、合計では濃くなりすぎる。
日暮れ
夜、明るい地の部分をずっと見ていた。
反射板というのは、部品としてはただの白い板である。仕様書に書くなら一行で終わる。その一行に、粒の大きさが三段階あって、方向がなくて、色がほとんどなくて、明るいところにだけ出てきて、隙間のぶんだけ影を受ける。
昔の携帯機の画面が「あの感じ」に見えるのは、液晶が優秀だったからではなく、この板が紙だったからなのだと思う。紙の上でゲームをしていた、と言ってもいい。
次回は、この道具を人の手のひらに載せる話をする。机の上ではうまくいっていたものが、電話の上ではそうでもなかった。
今日の覚え書き
背面から照らさない液晶では、明るいところの色は液晶の色ではなく奥の板の色。光は液晶を二度通る
「それらしいノイズ」を勘で乗せない。粒の大きさと強さを、写真から測る。センサノイズと区別するには、色成分どうしがどれだけ一緒に動くかを見る
反射率のばらつきは掛け算で乗せる。明るいところに出て、暗いインクでは自動的に消える
静的な模様は毎フレーム計算しない。焼いて画像にする。画素より細かい粒は縮小で平均されて消えるが、それは実機でも同じこと
実測値をそのまま入れると、他の部品と足し合わさって濃くなりすぎる。合計の見え方で釣り合わせる
触ってみる
brickboyはブラウザで動きます。入れるものはありません。
https://sonohoka.sakura.ne.jp/brickboy/
今日の話は、拡大しないと分からない種類のものです。画面の明るいところ——何も表示されていない地の部分——を、少し顔を近づけて見てください。うっすらざらついていたら、それが板です。機種を切り替えると、ざらつきの強さも変わります。おもしろがっていただけたら、フォローとスキで続きを受け取ってください。
よかったらこちらも読んでみてください。