属性の衝突
属性の衝突 ( 色の衝突またはにじみ とも呼ばれます )は、一部のカラー8ビットホームコンピューター、特にSinclair ZX Spectrumのグラフィック回路の制限によって引き起こされる表示アーチファクトです。 8×8ピクセルのタイル。この効果は、MSXソフトウェアおよびいくつかのCommodore 64タイトルでも顕著でした。この制限が明らかにならないようにするための回避策は、Spectrumプログラマー文化の要素と考えられてきました。
この問題は、Color ComputerおよびDragonの「セミグラフィックモード」(グラフィック機能を備えたテキストモード)でも発生しますが、これらのコンピューターには属性のないグラフィックがあり、解像度も向上しています。当時のいくつかのビデオゲームコンソールには、このような制限を引き起こすようなビデオモードがありましたが、通常、タイルごとに2色以上を許可していました。NES(Famicom)は、「セミグラフィック」で、 16「ブロック」(4つの8×8タイルのグループ)が、画面ごとに16。 Super NESでは、タイルごとに16色、画面ごとに256色が許可されていました(他の改良点もあります)。これにより、(デバイスをプログラムする必要がある人を除いて)アーティファクトに気づきにくくなりました。
原因
ZX Spectrumの属性の衝突は、フレームバッファーのメモリ使用を最小限に抑え、グラフィックスではなくテキスト表示を最適化するように設計された、その特異なディスプレイメモリレイアウトが原因で発生しました。メモリを節約するためにカラーパレットを制限するのではなく、Sinclairのデザインはメモリの別の領域にピクセルビットマップとカラー情報を保存しました。ビットマップは個々のピクセルの状態(オンまたはオフ)を指定しましたが、色情報(または「属性」)はテキスト文字マトリックス(24行32列)に対応し、8x8ピクセル文字セルごとに1バイトでした。このバイトは、色値を定義するために使用されたBASIC命令の後に、 INK (前景色)およびPAPER (背景色)として知られる2つの3ビット値をエンコードしました。他の2つのバイナリ値が属性に含まれていました。 2つの色の2つの輝度レベルの1つを示すBRIGHTビット、および設定すると、2つの色を定期的に交換するFLASHビット。このスキームは15の異なる色を提供しました。2つの輝度レベルでの赤、緑、青の8つの組み合わせです(両方の輝度で同じように見えた黒を除く)。したがって、各8x8ピクセルブロックには、使用可能な15色のうち2色のみを含めることができます。両方の色は、パレットのBRIGHT半分または非BRIGHT半分でなければなりません。 8x8ピクセル領域に3番目の色を追加しようとすると、ZX Spectrumによって3つの色が2つに減ります。
ZX Spectrumはピクセル情報に6144バイトを使用し、1バイトは8ピクセルの行を表し、768バイトは色属性に使用されたため、グラフィックディスプレイ全体で合計6912バイト、コンピューターの場合は比較的小さい「カラー」機能を備えたSpectrumの時代。このグラフィックアーキテクチャは、その後のモデルに128 KiBのRAMが含まれていたにもかかわらず、SinclairとAmstradによる後のSpectrumの再設計、Amstradの最終モデルであるZX Spectrum +3まで保持され、この方法でメモリを節約する必要性を減らしました。下位互換性の損失を防ぐために、アーキテクチャは保持されました。
属性は、Commodore 64、MSX、NESなど、他のさまざまなコンピューターやコンソールで使用されていましたが、属性ブロックのサイズとブロックごとの色数は異なりました。ただし、ハードウェアスプライトとスクロールを使用すると、属性の衝突を回避できます。
Thomson MO5およびTO7マイコン、Oric 1、MSX 1アーキテクチャ、およびTexas Instruments TMS9918ビデオディスプレイコントローラーに基づく他のシステムは、非常に類似した制約を表示します。水平方向に8ピクセルの各グループでは、16色のうち2色しか使用できません。 。同様の効果を与えますが、Spectrumよりもそれほど深刻ではありません。 MSX 1には、Sinclair Spectrumの場合のように、8x8ピクセル領域全体で使用できる単一のカラー属性バイトが1つだけではなく、8×1ピクセル領域ごとに1つの属性バイトが8つありました。したがって、スペクトルは8x8ピクセルの正方形の領域の1つの色のペアに制限されていましたが、MSX 1は8つの隣接するピクセルの「ライン」の1つの色のペアにのみ制限されていました。さらに、MSX1は、属性の衝突の問題にバインドされていないスプライトを使用できます(ただし、MSX 1スプライトには、モノクロなどの独自の制限がありました)。
実際には、この技術的な利点は、MSX 1システムがより良い画像を生成するのに役立ちませんでした。 MSX 1の問題は、SpectrumゲームをMSX 1に変換した多くのヨーロッパのソフトウェア会社が、MSX 1がSpectrumに対して行ったすべての改善を無視したため、結果のMSX 1バージョンに元のSpectrumゲームと同じ量の属性衝突があったことでした。 (Jack the Nipper II:In Coconut Capersはその一例です。)変換を容易にするために、ソフトウェア開発者は、Spectrumの単一の属性バイト値をMSX 1の8つの対応する属性バイトすべてに単にコピーしました。ソフトウェア会社もMSX 1のスプライト機能を無視しました。ビデオ表示機能が他の点では非常に類似していたため(256×192解像度、16色)、両方のシステムが同じゲームに対して実質的に同一のディスプレイを作成しました。対照的に、日本のMSX 1ゲームはMSX 1のすべての機能を使用していましたが、多くの場合、見栄えの良いゲームになりました。
効果
属性の衝突を避けるために、静的なグラフィック表示は注意して構築する必要がありました。色を適用できるのは8×8ピクセルブロックのみであるため、詳細なカラーグラフィックスは不可能でした。慎重な設計により、色の変化をディスプレイ(通常はテレビ)のリフレッシュレートに同期させることができるなど、印象的な結果を得ることができます。
ただし、アニメーション表示はより困難でした。これは、ビデオゲームを主に使用するマシンでは明らかな欠点でした。ディスプレイの移動部分がそれに触れたために8×8ブロック内の1つのピクセルだけが色変更された場合、ブロック全体の色が変わります。したがって、詳細な移動グラフィックスは、急速に変化する色の大きないフリンジを引き起こし、それらに追従します。
回避策
初期のソフトウェアは単に問題を無視していました。その後、標準的な回避策は、画面の端の周りの装飾的な境界線(スコア表示などを含む)、または何らかの形式の計装など、静的な表示要素に色を使用することでした。アニメーショングラフィックス。また、画面の更新が少なくて済むため、グラフィックスが高速になりました。小さい領域に加えて、ピクセル情報のみを変更し、色の領域はそのままにしておきます。
FTLのLight Forceなどの一部の最近のSpectrumソフトウェアは、基本的にオンスクリーン要素とその動きのパスの両方を8×8色解像度の境界に制限することにより、非常に慎重なグラフィックデザインを使用してフルカラーの移動グラフィックを実現しました。したがって、移動する要素は比較的大きく、かなりブロック状または正方形であり、その動きは制約されていましたが、これは視覚的には明白ではなく、フルカラーグラフィックスの移動の光景はSpectrum所有者にとって非常に印象的でした。
主流の開発者は、属性衝突の問題に対する適切なオールラウンドな修正を見つけることができませんでした。代わりに、高速で鮮明なグラフィックが必要な場合はモノクログラフィックメソッドを使用し、状況が許す場合はフルカラーグラフィックを使用することを好みました。
ディスプレイの描画時に特定の時間にRAMの属性領域を変更するタイミングに注意を払うことにより、ディスプレイハードウェアにディスプレイの1行を描画させ、次の行が描画される前に属性RAMを変更することができました。個々の行ごとに異なる属性の効果。これらの変更はソフトウェアで行う必要があり、プログラムに時間がかかりました。つまり、この手法は通常、特殊効果に限定されていました。このテクニックはデモシーンでも非常に人気がありました。
問題と解決策
1987年以前のほとんどのゲームは属性の衝突を無視していました。 Knight TymeやThree Weeks in Paradiseなどのいくつかのゲームでは、プレイヤーは2つの属性衝突モードを選択できました:メインキャラクター属性を無視し、キャラクターを背景にブレンドし、その逆に、背景画像よりもキャラクターの配色を優先します。
別の回避策は、1984年にKnight Loreの Spectrumバージョンで行われたように、グラフィックスを2色(別名モノクロ)で単純にレンダリングすることでした。
多くのゲームでは、フルカラーの背景と「文字のスクロール」(環境が一度に8ピクセルずつスクロールされる)が使用されましたが、 Double Dragonのように効果的に透明なモノクロスプライトは、色への依存。多くのゲームでは、ピクセルごとのスムーズなスクロールでこの方法を使用しましたが、1つの文字ブロックの要素が次の要素に「渡される」ため、属性の衝突がはっきりと見えました。
フルカラーグラフィックスの使用の顕著な(そしてあまり成功していない)例は、 Altered Beastの Spectrum変換でした。このゲームには、属性の衝突がかなりあります。
プログラマーのドン・プリーストリーは、キャラクターのブロック全体に過度に四角く見えないように注意深く設計された大きな漫画のようなスプライトを使用することにより、彼のゲームのいくつかに独特のスタイルを開発しました。この手法の欠点は、ゲームプレイをグラフィックスを中心に設計する必要があるため、他のプラットフォームからの移植には役に立たないことでした。この手法を使用したゲームには、 Popeye 、 The Trap Door 、 Through the Trapdoor 、およびFlunkyが含まれます。同様の手法を使用した他の開発者には、 Dark Scepterを使用するMike Singletonと、 Dan Dare:Pilot of the Futureを含むGang of Fiveが含まれます。
1994年、プログラマーであるIgor Maznitsaは、ZX-Spectrum-128に基づいたマルチCPUコンセプトプラットフォーム「ZX-Poly」を開発しました。このプラットフォームにより、属性の衝突を回避し、実行可能コードを変更せずに多くの古いゲームを着色することさえできます。