特集 2021年2月9日

ファミコンみたいにバグらせたい

バグったファミコン感を写真で表現できないか試行錯誤してみた

ファミコンを遊んだことがある方なら、おそらく何度も経験したことがあるだろう。カートリッジの接触が悪かったり、うっかり本体を蹴とばしてしまったとき、画面が乱れてめちゃくちゃになるあの現象を。

どこか芸術的とも言える独特のバグり方は、30年以上経ったいまでも、心の中に強く残り続けている。あれを現代に復活させてみたい。

1983年徳島県生まれ。大阪在住。散歩が趣味の組込エンジニア。エアコンの配管や室外機のある風景など、普段着の街を見るのが好き。日常的すぎて誰も気にしないようなモノに気付いていきたい。(動画インタビュー)

前の記事:君は逆ポーランド電卓を知っているか? ~そして自作へ

> 個人サイト NEKOPLA Tumblr

ファミコンのバグった画面とは

ここでいうファミコンは、ゲーム機全般を指して何でもかんでも「ファミコン」と呼称するオカン的なワードではなくて、1983年に任天堂が発売したファミリーコンピュータのことである。

私はファミコンと同じ年に生まれ、リアルタイムにファミコンで遊んでいた世代。小学生の頃は、友だちの家に入り浸って「桃鉄」や「くにおくん」の対戦に明け暮れていた。当時の光景はいまでもたまに思い出す。純粋に毎日が楽しかった頃の記憶のひとつである。

そんなファミコンだけれど、うっかりしているとすぐに画面がバグっていた(厳密には「バグ」ではないと思うが、一般的にバグと呼ばれている現象なので、以降もそう呼称する)。カートリッジが上手く刺さってないときをはじめとして、トイレに立つとき本体を蹴飛ばしてしまったり、熱狂してコントローラーを引っ張ってしまったり……そんなときに容赦なくバグっていた記憶がある。「ブーーー」という悲しい音が響き渡るなか、誰が見ても「バグった」としか言いようのない、ぐちゃぐちゃの画面がテレビに映し出されていた。

001.jpg
「ファミコン バグ」で画像検索すると、なんとなく様子が分かる。そうそう、こういう狂った画面である(なかには現代美術家の作品も)

検索ワードのサジェストに「掃除機」が出てくるのも面白い。そうだった、ゲームをしているときに親が掃除機をファミコンにぶつけてバグるのだ。そういう悲しい事故が全国の家庭で頻発していた。

そんなバグ自体は遠い昔の出来事だけれど、狂った画面はいま見ても面白い。現代の日常に、あのぐちゃぐちゃな感じを取り込んでみたい。うまいこと写真を加工すれば、あの雰囲気が再現できるかもしれない。試行錯誤してみよう。

002.jpg
先に言ってしまうと、最後にはこんな写真ができあがる。バグってるねえ!

ブロック状にバグる

当時はただ「バグった」としか認識していなかったこの現象だけれど、いまなら何となくバグの原因が理解できる。ただ、バグる仕組みを解説した文献なんてないので、私の推測が混じっている。もし間違ってたらやさしく教えて下さい。

まず重要なのは、ブロック状にバグることが多い点だろう。

003.png
ファミコンでは、こういう8x8ピクセル単位のブロックがカートリッジ内のROMに記憶されている(実際には色情報は含まれないのだが、説明を簡単にするため色を付けて表現)
004.png
そしてそのブロックを、タイル状に敷き詰めることで背景が作られている

カートリッジの端子は、画像が入ったROMのアドレスバス(どの画像を読み出すか指定する信号線)とデータバス(画像データが送信される信号線)につながっている。そこが接触不良を起こすことにより、例えばアドレスの特定のビットが0に固定されるなどして、意図しないアドレスから画像データが読み込まれる。その結果、本来配置されるべきブロックとは違うブロックが画面に表示される。そんな感じだろうと予想した。

なのでファミコン画面は、無秩序ではなく、8x8のブロック単位でバグることになる。

005.png
例えば山の一部を読み込もうとして、間違って海のブロックを読み込んでしまった場合のイメージ
006.png
厳密にいえば、色も変わる可能性が高い。この辺のロジックはややこしいので省略します

どうバグるかは、考え出すと深みにはまってくる。たとえばアドレスの下位ビットや、データバスが接触不良を起こしたら、画像はもっと乱れるはずである。ただどう乱れるかはケースバイケースなので、一番考えやすい「誤ブロック配置」をバグの基本形として考えていきたい。

写真をバグらせる

007.jpg
ここからは、デイリーライターの集合写真をバグらせていこう

顔が写っている写真の方が、バグらせたときに面白いんじゃないかという予想である。ただ私は人物写真をまったく撮らないので、デイリーライターの方々の集合写真を題材に使わせていただくことに。まずは、ブロック単位でのバグりを再現してみよう。

008.jpg
画面を小ブロックに区切り、そのうえで全ブロックをランダムにシャッフルさせてみた

バグった。たしかにバグったのだが、なんだか「ヒントでピント」のテクニカル問題みたいになってしまった。ファミコンぽくないのは、あまりに無秩序すぎるせいだろう。

009.jpg
ある程度は元の画像が残っていた方が良さそうだ。今度は画面内の1/3のブロックだけをシャッフルさせてみた

お、なんだか時空の歪みみたいな画像ができあがったぞ。このあと世界が再構築され、並行世界のデイリーポータルZが始まりそうな勢いである。とはいえ、見た目はグッと良くなった気がする。もう少し調整を入れて……

010.jpg
画面の2/3のブロックをシャッフルさせるので落ち着いた。バグった中でも原形をとどめているハトマスクの圧が強い

繰り返しパターンの発生

バグったファミコン画面を見ていると、同じブロックが連続的に出現しているのが特徴的だ。まずは何も考えずに繰り返しパターンを作ってみよう。

011.jpg
ランダムに選んだブロックを、縦一列にダダダと並べる。繰り返すことで模様が生まれ、無機質だったバグ写真に彩りが生まれた

ブラウザがおかしくなったとき、画面スクロールに合わせて写真の下端が引き延ばされビローンとなることがある(そういえば最近は見ない気がする)。あれに着想を得て、特定のブロックをビローンと伸ばしてみた。

こういうバグありそう! と浮かれ気分になったものの、ファミコンで果たしてこうなるのかは不明である。もう少しファミコンの特性を踏まえた繰り返しパターンを考えてみよう。

004.png
この画面を表示させたかったのに、
012.png
意図しないブロックが読み込まれるとこうなりそうだ。たとえば草原部分がバグると、もともと草原だった箇所すべてに間違ったブロックが敷き詰められるだろう

ファミコンでは少ないブロックを繰り返し使うことで、ひとつの大きい画面を作り出している。接触不良が起こると、同じブロックを使っているすべての箇所に影響がでるはずである。それが原因で繰り返しのパターンが生まれていると考えた。

さて写真の場合は全く同じブロックなんて存在しないけれど、ある程度似ているブロックはあるだろう。

013.jpg
たとえば赤枠のブロックに注目すると、
014.jpg
青枠の部分が、なんとなく似ているブロックである。テンプレートマッチングという手法を使うと簡単に求めることができる

この青枠はすべて同じブロックだと仮定して、そこへ特定のブロックを一気に貼り付けてみる。

015.jpg
おー、バグってるねえ

広範囲に同じブロックが敷き詰められることによって、狂った感じが強調された。いい感じだ。しかしバグった画像を見過ぎたせいか、ここに来てだんだんとゲシュタルト崩壊が始まってきた。崩壊した画像が崩壊するので、一周回って何だか普通の画像に思えてくるのだ。そんなことってあるのか。新たな気付きを得てしまった。

ところでこの手法を使う場合には、最初に赤枠をどれにするかが重要である。例えば人の顔が写ったブロックを選択してしまうと、似ている箇所が他にないので、結果的に繰り返しパターンが生まれない。できるだけどこにでもありそうな、平坦な(柄のない)ブロックを選ぶ必要がある。

また逆に、貼り付けられるブロックは、ごちゃごちゃしている(柄がある)方がそれっぽくなる。どのブロックを選択するかは、離散コサイン変換(DCT)という計算をした結果を使って、いい感じにアレコレして選択するようにした。詳しくは省略する。

002.jpg
最後に味付けとして、ブロックの色味が変わるのも再現してみた。よりサイバーみが増したぞ

これにて、写真をバグらせるアルゴリズムの完成である。プログラムを使って一瞬でバグらせることができるようになった。次はそれを使って、いろんな写真をバグらせていこう。

バグ写真の世界

いろんな写真で試していると、バグ映えする写真と、そうでない写真があることが分かってきた。

016.jpg
こんな風に、もとからゴチャゴチャしている写真に適用すると
017.jpg
カオスさが限界を超え、わけが分からない感じになってしまった。失敗
018.jpg
じゃあスッキリした風景写真がいいのかと言うと
019.jpg
これも何だか味気ない。同じような色味のブロックばかりになってしまい、つまらない印象だ
020.jpg
良かったのは、こんな風に「平坦な部分」(空)と「ごちゃごちゃした部分」(建造物)がほどよく混じっている写真
021.jpg
あー、良い……。空の部分が謎のパターンで埋め尽くされ、ほどよく狂気をおびた世界が表現できた
022.jpg
こんな清々しい写真も
023.jpg
バグるとこうなる。夢のなかにでもいるようだ。雲の不規則な形が繰り返しパターンになっており、不穏さが増している
024.jpg
似ているブロックが少ないと判定された写真の場合には、
025.jpg
雰囲気を重視して縦一列に貼り付ける手法を適用。これはこれで良い
026.jpg
ここまでくると、スカッとした気持ちよさを感じてしまう
027.jpg
新しい形態の「ここはどこでしょう?」のクイズになりそうな気配もあるが、
028.jpg
あまり見ていると脳に負担がかかる気がするので、
029.jpg
そろそろこの辺で、
030.jpg
やめときましょうか

あの頃のファミコンを再現してみる

最後に、当時を思い起こさせるデバイスを作ってみた。

031.jpg
加速度センサ(赤い基板)をラズパイに接続
032.gif
軽く衝撃を与えると、画面がバグる(バグった写真に切り替える)ようにした
033.jpg
これに「ファミコンの概念」のようなものを被せると
034.jpg
はい完成。これは「衝撃を与えると画面がバグるデバイス」である
035.gif
うっかりつまずくと画面がバグって「あ゛ーーーー!」 当時の記憶が……よみがえる……

実際にファミコン(当時の実機)で遊んでいたのは、いまから30年前のはずだ。他のことはあんまり覚えていないのに、このバグり方だけは今も脳裏に焼き付いている。それだけファミコンに熱中していたのだろうし、そのぶんゲームが途中でバグって止まるという体験が強烈だったのだろう。

いま見ても、バグ画面は悪夢のようなビジュアルである。ここまで見てきたように、ファミコンの仕組み上たまたまこんなバグり方になっただけで、誰かが意図して生み出したものではないところが興味深い。それなのに無意識下の意思というか、なるべくしてああなったような運命すらも感じてしまう。

いまのゲーム機は接触不良なんてほとんどないし、あったとしてもゲームが起動しないだけだろう。ゲーム機に衝撃を与えると画面がバグる機能の実装が待たれる。隠し機能として、どうでしょうかメーカーさん。


動画をバグらせてみた

ファミコンでは、画面がバグった状態でもゲームを進められる場合がある。プログラムは正常に読み込めるが、画像だけ読み込み異常になる微妙なカセットの挿し方をすることで実現できるとされている。

それに倣って、動画を毎フレーム バグらせてみた。どうなるだろうか。

036.gif

……なんだかよく分からないものができてしまった。いや、でもファミコンのバグった画面自体よく分からないものなので、これで合ってるとも言えるのか? うーむ。

今回の画像生成に使ったプログラム(Python)をこちらに置いておくので、使い方が分かる方は試してみて下さい。改良も歓迎です。
https://github.com/nekopla/fc_bug

▽デイリーポータルZトップへ

デイリーポータルZのTwitterをフォローすると、あなたのタイムラインに「役には立たないけどなんかいい情報」がとどきます!

→→→  ←←←

デイリーポータルZを

 

▲デイリーポータルZトップへ バックナンバーいちらんへ
↓↓↓ここからまたトップページです↓↓↓

 

今日のみどころ