今日は一日仕事があいてしまったので、遊びプログラム。
まだ完成していないし、明日からは普通に仕事に戻るので、完成するかもわからない。
Twitter をエゴサーチしているが、ファミコンの画面についてのページを引用してくださった人がいた。
ファミコンでは 52色表示可能、という、表示できる色の一覧だな。
どうやら、その人は「ファミコンの表示」に興味があり、適当な画像をそれっぽくするフィルタを作っていたらしい。
Twitter のログを追って分かったことには、最初は「適当な54色」に減色してみたものの、どうも「それっぽい」画面にならないので、情報を探して僕のページを見つけたようだった。
どうも、当初は RGB 空間を適当に区切って 54色にしたようだ。
しかし、どこかで「RGB ではなく、NTSC の Y/C 空間で考えないといけないようだ」と、情報を探して僕のページに辿り着く。
そして、そこで
・既定の 52色
・16ドット以内で使えるのは、背景色含めて4色だけ
・その4色の組み合わせは、全画面内で4セットだけ
という厳しい条件を知り、「なんだかわからない」とツイートして終わっている。
さて、僕も以前から、ファミコン風画面フィルタは作ってみたかった。
ちょうどよい機会だから、「厳密にはしない」つもりで作ってみる。
とりあえず、52色減色から。
RGB を HSV に変換してからファミコンパレットに適用してみようと思ったのだけど、難しい。
H 信号を参考にして、「パレットの近いあたり」までは見つけられるとわかったので、その周辺を総当たりで「近い色」を探すようにしてみる。
とりあえず、ファミコン 52色への減色はこれでできた。
ディザをかけたりしないので、最適な画像変換ではないけれど。
つぎに、52色自由に使ってはならない、という制限をかけてみる。
使われる色を集計し、上位 12色しか使ってはならない、としてみたら、まだまだ綺麗な絵が出る。
では、6色まで落としてみよう。
というのも、グラディウス2のデモ画面で、ビッグバイパーの絵が6色で書かれているからだ。
…いい具合に「色合いが不自由」な感じが出て、ファミコンらしくなった。
つづいて、「16ドット以内に4色」という制限を作ってみる。
4色のうち1色は「背景色」なので、一番使われている色を背景色にすることにして、それ以外の色で 16ドット以内で使用頻度を集計する。
これで、上位3色+背景色で描けば、それらしくなる。
…案外、きれいな絵が出てしまう。
いろんな絵で試すと、多少不自然なところも現れるが、この条件だけではまだ「ファミコンらしさ」が出ないようだ。
やっぱり、「全画面で3色セットを4つまで」の制限も入れないといけないだろうか。
ファミコン画面は 256x224 (縦方向は VRAM は 240 ドット分あるが、表示は 224ドット程度とすることが多い)として、16x16 ドットのタイルで区切ると、16x14 タイルになる。
それぞれを、背景色を除いた3色に減色したうえで、同じ色の組み合わせになった数を集計する。
そして、使われた数が「少ない」パレットを、使われた数の「多い」パレットに吸収する。
吸収する際は、3色のうち少なくとも2色が同じパレットに吸収することにした。
この際、使用された数もちゃんと吸収させる。
できる限り吸収を繰り返したうえで、改めて集計された使用数の順に並べ治す。
最終的に、上から4つのパレットを採用する。
そして、このパレットを使って画面を描くと…うん。いい感じに四角く色が化ける。
ファミコン時代にはよくあったよね。無理やり感のある絵。
しかし、四角い不自然さはあっても、まだファミコンにしてはきれいすぎるのだ。
それは、画面全体で、色以外は自由に絵を描けてしまっているから。
ファミコンは、8x8 ドットのキャラクターを並べて絵を作る。
このキャラクターは 256種類しか定義できないのに、画面全体は 896マスある。
だから、自由に絵を描くことはできないのだ。
色だけをファミコン風に変換しても、キャラクターの不自由さで違和感がある。
本当は、「似た部品」を探し出して、無理やり共通化することで不自然さを出していけばよいのだけど、そこまでやるのは結構面倒だ。
そこで、せめて「四角い塗りつぶし」を増やすことにする。
8x8 ドットの範囲内、64ドットのうち、52ドット以上同じ色だった場合には、思い切って 8x8 を塗りつぶしてしまう。
52ドットに根拠はない。色々試して、それくらいがなんとなくいい感じだった、というだけだ。
塗りつぶし部分は、絵としては「使いまわし」になるので、絵が自由に描けない不自由な雰囲気が出る。
とはいっても、これでも絵がある部分が 256マスには収まらないのだけど…
かなり塗りつぶしが多い絵でも、256以上のキャラクタを定義したことになってしまう。
まぁ、遊びプログラムなので、本日はここまで。
あまり満足いく結果が得られていないので、公開するにはまだ早いかな…
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |