ブラウン管の「にじみ」を再現する——アナログTV信号チェーンを持つエミュレータの作り方
Famemu というレトロゲームエミュレータを開発している Albert です。この記事では、Famemu が「カセットの中身」だけでなく「テレビまでの信号」まで再現する理由と、その仕組みを解説します。
はじめに:エミュレータが忘れてきたもの
いまのエミュレータは、カセットの中身——CPUやPPUの動き——を驚くほど正確に再現します。でも、ぼくらが子ども時代に見ていたのは「カセットの中身」ではありません。
ゲーム機が生んだ映像は、ケーブルを通り、テレビの中でアナログ信号に変換され、ブラウン管の上で光に変わる——その旅を経て、はじめて目に届きました。色のにじみ、やわらかな輪郭、独特の質感。あれは全部、信号の旅の産物です。
Famemu は、その旅そのものをエミュレーションします。
信号チェーンの全体像
[Ember] → フレーム生成
↓
[信号処理] → アナログ信号として符号化 → 復号
↓
[Macアプリ] → 旅を終えたフレームを表示
ポイントは、フレームに「ブラウン管風フィルター」をかけるのではない、ということです。そうではなく、実際に信号の符号化・復号のプロセスを経由させるんです。にじみは描画するのではなく、仕組みから生まれます。
なぜ「にじみ」が生まれるのか:コンポジット信号のおさらい
アナログTV(コンポジット信号)では、映像は1本のケーブルにまとめられます:
- 輝度信号 (Y):明るさ。広い帯域が割り当てられる
- 色信号 (C):色相・彩度。カラーサブキャリアに乗せられ、帯域が狭い
帯域が狭い = 高い周波数成分(= 細かい模様・シャープな色の境界)が伝わらない。これがカラーブリード(色のにじみ)の正体です。
ドット絵の職人は、このにじみを前提に絵を描いていました。隣り合うドットの色が混ざって完成する——つまり、にじみ込みで完成するデザインだったんです。シャープなドットのまま表示するのは、ある意味で「間違った」表示なんです。
Famemu のアプローチ
Famemu の信号処理は、おおまかにこう動きます:
- Ember が生成したデジタルフレームを受け取る
- それをアナログTV信号として符号化する
- 符号化した信号を復号して、表示用のフレームに戻す
色のにじみや輪郭の柔らかさは、この符号化・復号の過程で自然に生まれます。後から「それっぽい」効果を足しているわけではありません。
調整にはカラーバーのテストパターンを使っています。下は実際のデコード結果です——色の境界が柔らかくにじみ、アナログ信号らしい質感になっているのが分かると思います。
なぜフィルターではなく「信号」なのか
正直に言うと、見た目だけならポストプロセスのフィルターでも似た絵は作れます。でも2つ、信号チェーンを選ぶ理由があります:
- ゲームごとの調整が要らない。 フィルターは「それっぽさ」の調整だが、信号チェーンは物理の再現なので、どんなゲームにも同じ法則が適用される。
- ドット絵の意図が蘇る。 にじみ前提で描かれた絵は、信号を通したとき初めて「正しい」見た目になる。これは再現ではなく、復元です。
おわりに
Famemu は Mac ネイティブのエミュレータです。iPhone / iPad / Mac 向けに App Store で公開中です(2026年10月9日リリース)。エンジンは Ember 16 と Lantern の2つで、Lantern 用の小さな言語 Wick の解説書も公開しています。
- プロジェクト: https://famemu.aulenor.com/
- Wick の本: https://wickbook.aulenor.com/
信号処理の詳しい実装や Wick 言語の設計についても、そのうち書きます。質問・ツッコミはコメントでどうぞ。
