科学・技術
NESのコンポジット映像:なぜあんなにぐにゃぐにゃしているのか?
Composite Video on the NES: Why's it so wobbly? (nicole.express)
要約
NESのコンポジット映像がなぜ「ぐにゃぐにゃ」して見えるのかを技術的に解説した記事です。干渉やカラーバースト周波数の整数倍化といった仮説を検証し、最終的にNESのPPUがRGB中間段階を持たず、内部で直接色情報を処理する設計が、コンポジット出力時の独特な映像の揺らぎ(アーティファクト)の原因であることを突き止めています。
全文翻訳
任天堂ファミリーコンピュータ。8ビットビデオゲームシステムのプラトニック・イデアと言えるでしょうか?まあ、それだけ普及していて成功しているからですが、実際には拡張性や設計において少々異端な部分もあります。しかし、それだけではありません。映像が少し…ぐにゃぐにゃしています。少なくともコンポジット映像では。今回は、コンポジット映像の細かい部分について少し掘り下げて学んでいきましょう。
今はそれほど強力ではないのですか?ビデオタグのサポートがないとか?それで『マイティ・ボン・ジャック』のタイトル画面の映像が見られないのですか?ああ、残念です。『マイティ・ボン・ジャック』は、任天堂ファミリーコンピュータのためにピラミッドで行われる、最も象徴的な爆弾収集プラットフォーマーです。ここのタイトル画面は、多くのタイトル画面と同様に、完全に静止しています。しかし、私が使っているのはコンポジット改造されたシステムで、PPUから直接ビデオ信号を増幅したものです。そして、映像はぐにゃぐにゃしています。そして、あなたは「ちょっと待って、ニコル、これはコンポジット映像だよ。君はそれについて記事を全部書いたじゃないか!」と言いたくなるかもしれません。コンポジット映像は、基本的にビデオ信号圧縮の一形態であるため、他の信号よりも劣っています。それは真実ですが、コンポジットフレームがフレームごとに異なる理由はありませんよね?
これは私の美しいApple ][で『上海』を動かしているところです(最近の記事で言及しました)。ビデオタグのサポートがないとか?それで『上海』のタイトル画面の映像が見られないのですか?ああ、残念です。それは信じられないほど静止しています!
説明の試み1:干渉
干渉は、実際には予想されるほど大きな問題ではありません。おそらくあなたが考えていることですが、干渉は一般的にランダムなパターンとして現れるもので、NESのスクリーンショットで見られるような周期的なノイズではありません。実際、Appleのビデオは、はるかに長いケーブルを使用して、机の上に広げられた複数の電子機器が稼働している場所でキャプチャされたもので、画像の白い部分にいくらかノイズが見られます。しかし、それはノイズであり、入力信号とは相関がありません。
これは『マイティ・ボン・ジャック』の上の文字「B」を、生のキャプチャから切り取ったものです。白い部分と空の青い部分が接する「B」の左側に見られる、繰り返されるギザギザしたパターンに注目してください。もしこれが外部からの単なる信号干渉であれば、画像にこれほど密接に従う理由はないはずです。
説明の試み2:カラーバースト
カラーバースト周波数約3.57MHzをNTSCのラインレート15.734kHzで割ると、ほぼ正確に227.5になります。これは偶然ではありません。RCAは意図的にカラーキャリアをラインレートの半整数倍に設定しました。なぜなら、ある走査線が次の走査線と似ている場合、それはラインレートに似た周波数の信号になるからです。一方、テレビ信号が半整数倍の成分を持つことは非常に稀です。そのため、カラー信号をフィルタリングしやすくなります。これは2021年の記事で少し触れました。
ここで何か気づくかもしれません。カラーバーストは、連続する3.57MHz信号の一部であると予想されます。この信号はライン周波数にきれいに収まりません。その結果、カラーバーストはすべての走査線で同じであってはなりません。これが揺らぎの原因でしょうか?
一方、Appleでは、Wozは、ピクセル配置が毎行ごとに異なる場合、HIRESモードを使用するのは非常に難しいと述べていました。1つの走査線でバイトごとに異なるだけでも十分難しいのです。そこで、この稀なケースでは、彼は配慮し、クロックサイクルを拡張するための追加ハードウェアを含めました。Appleでは、ラインレートが変更され、228色のサイクルになります。つまり、RCAの最適化を破り、輝度信号が色信号と容易に干渉できるようにしています。結局のところ、それがアーティファクトカラーです。だからAppleは悪い例でした。
1走査線あたり228色のサイクルを持つ別のコンソールは、私の日本のセガ・マスターシステムですが、他の点ではより準拠した信号と見なされています。黒い背景のない静止タイトル画面を持つマスターシステムのゲームを見つけるのは、実際には驚くほど困難でした。私は『エース・オブ・エース』を選びました。
ビデオタグのサポートがないとか?それで『エース・オブ・エース』のタイトル画面の映像が見られないのですか?ああ、残念です。
走査線アーティファクトの変動が見られるのはスクロール時です。上の『アレックスキッドのミラクルワールド』のショットの地面を見てください。地面、特に地面のアーティファクトを見てください。アーティファクトの位置はフレームごとに変化します。あるいは、より正確には、地面が動く間は一定に保たれ、きらめくような効果を生み出します。
実際に1走査線あたり227.5色のサイクルを持つシステムはどのようなものでしょうか?それはPCエンジンです!(あるいは、この場合はスーパーグラフィックスですが、それは関係ないはずです)
ビデオタグのサポートがないとか?それで『ワンダーモモ』のタイトル画面の映像が見られないのですか?ああ、残念です。
少しズームインすると、これがさらに明白になるかもしれません。これは『スペース・アヴァ201』のタイトル画面からのスクリーンショットです。なぜかノイズが多いスーパーグラフィックスモードですが、今日は無視しましょう。これは非常にズームインされています。特に青い背景と黄色い文字が接する部分を見てください。ビデオキャプチャのマクロブロックで少し見にくいですが、ピクセルごとにわずかにずれています。これは、色の解像度がピクセルの解像度よりも低いからです。しかし、上の「B」と比較してください。NESは2ラインのパターンではなく、3ラインのパターンを持っています。興味深いですね。
説明の試み3:NESは違う
セガ・マスターシステムはネイティブなRGBマシンです。そのVDPにはコンポジット出力がなく、RGB画像のみを出力し、外部チップがそれをコンポジットビデオにエンコードします。私のフランス製マスターシステム2にはそのエンコーダーすらなく、結果としてRGBしか出力できません。1980年代後半以降のビデオゲームコンソールでは、これが標準と言えるかもしれません。上記のマスターシステムのスクリーンショットのレインボーバンディングは、ソニーCXA1145ビデオエンコーダーからのもので、異なるエンコーダーを使用すると異なる可能性があります。
ファミリーコンピュータは1980年代初頭の産物です。独立したビデオエンコーダーを持たず、実際にはRGBで動作することはありません。PPUはコンポジットビデオ信号を出力するだけでなく、そのドメイン内で動作し、あるいは色情報が全くエンコードされていないデジタルビデオデータで動作します。RGB中間段階がないことが、ファミリーコンピュータからRGBを取得することを少し複雑にしています。
これは何を意味するのでしょうか?NESのパレットを見てみましょう(お願いします!)。これはFirebrandXの「Digital Prime」です。しかし、なぜパレットに誰かのクレジットが必要なのでしょうか?これはRGB PNG画像であり、NESはRGBについて何も知りません。ご覧のように、4つの異なる明るさ(最後の列は少し奇妙です)と、12の異なる色相があります。最初の列には色相がなく、それは単なる生の明るさです。NESは、パレットインデックスからこれらの色相と明るさに直接変換します。Sビデオ中間段階すら持たず、ましてやRGBは持っていません。Atari 2600も非常に似た方法で動作しますが、Sビデオ中間段階を持ち、さらに16色の色相を持っています。では、なぜNESは12色なのでしょうか?
NESは21.47727MHzのクリスタルオシレーターを持っており、これはカラーバースト周波数3.579545MHzのちょうど6倍です。PPUは、このクロックの立ち上がりエッジと立ち下がりエッジの両方を使用してカラー信号を生成するトリックを行うことができます。そのため、カラーバースト周波数の12倍のベースレートにアクセスでき、そこから12の可能なフェーズが自然に出てきます。そして、NESがそのタイミングをどこから得ているのかが見えてきます。
NTSCファミコンは21.47727MHzのオシレーターしか持っていません。他のすべてのクロックはそこから派生しています。それを12で割ると、6502 2A03の美しい1.7897725MHzのクロックスピードが得られます。PPU内では、マスターオシレーターを4で割って5.3693175MHzのドットクロックを得て、各走査線は341ドット(水平ブランキング期間を含む)で、ラインレートは15.7458kHzになります。まあ、実用上は十分な精度です。そして、ここでトリックが見えてきます。6で割った値と…