DirectX ゲームでの 2D グラフィックスの使用

ここでは 2D ビットマップ グラフィックスおよび効果の用途と、これらを実際のゲームで使用する方法について説明します。

2D グラフィックスは、2D のプリミティブやビットマップを扱う 3D グラフィックスのサブセットです。より一般的に言えば、2D グラフィックスの場合、ゲーム プレイは通常、x-y 平面上に制限されるため、3D ゲームで使うような Z 座標は使用しません。2D グラフィックスでは、3D グラフィックスの手法を使用して、ビジュアル コンポーネントを作成する場合があります。2D グラフィックスは通常、3D グラフィックスよりも開発が容易です。ゲーミングの作業に初めて携わる場合、まず 2D のゲームから始めることをお勧めします。また 2D グラフィックスの開発は、DirectX を理解するうえで効果的な第一歩となります。

DirectX で使用する 2D ゲーミングのグラフィックスは、Direct2D または Direct3D、あるいはその組み合わせを使用して開発できます。Sprite クラスなど 2D ゲーム開発で使用できる有用なクラスの多くが Direct3D にもあります。Direct2D は、主にプリミティブ (たとえば、円、線、平面上の多角形図形など) の描画時にサポートが必要となるユーザー インターフェイスやアプリを対象とした API のセットです。以上を前提として、Direct2D により、ゲーム グラフィックスの作成をはじめ、特にゲームのオーバーレイ、インターフェイス、およびヘッドアップ ディスプレイ (HUD) の作成、または多様な 2D ゲーム (シンプルなものから比較的複雑なものまで) の作成にあたって利用できる強力で効率のよいクラスとメソッドのセットが提供されます。ただし、2D ゲームの作成に向けた最も効果的なアプローチは、両方のライブラリにある要素を利用することです。ここでは、こうしたアプローチによって 2D グラフィックスの開発について説明します。

概要

近年の 3D グラフィックスやこれに対応するハードウェアが登場する前は、2D のゲームが主流でした。ここで使用するグラフィックスの手法の多くがメモリ ブロックをあちこちに動かすものでした。通常は、一連のカラー データを、画面のピクセルに 1:1 の形式で変換、または変形していました。

DirectX では、2D グラフィックスは 3D パイプラインの一部として提供されます。現在では、はるかに多様なスクリーン解像度やグラフィックス ハードウェアが利用できるため、2D グラフィックス エンジンでは画質を大きく損なうことなく、こうした機能をサポートできなければなりません。

以下に、2D グラフィックスを開発するにあたって理解しておくべき基本的な概念をいくつか示します。

  • ピクセル座標とラスター座標ピクセルとは、ラスター ディスプレイ上の 1 個の点のことです。ピクセルには固有の座標ペア (x, y) が与えられ、これによりディスプレイ上の位置を表します (「ピクセル」という用語は、ディスプレイを構成する物理的な画素を表す場合と、実際にディスプレイに送信する前に、画素の色とアルファ値を格納する際に用いるアドレス可能なメモリ要素を表す場合があります)。ラスターは、API によりピクセル要素を含む長方形グリッドとして扱われます。通常、ディスプレイ上の物理的なピクセル グリッドとは 1:1 で対応します。ラスター座標系は、グリッドの左上端のピクセル (0, 0) から開始します。
  • ビットマップ グラフィックス (ラスター グラフィックスとも呼ばれます) は、ピクセル値を含む長方形グリッドとして表されます。スプライト (ラスターからは独立して管理する計算済みのピクセル配列) は、一般にゲーム中のアクティブ キャラクターや背景独立型のアニメーション オブジェクトなどに使用するビットマップ グラフィックの 1 種です。スプライトのアニメーションに使用する各種フレームは、「シート」または「バッチ」と呼ばれるビットマップのコレクションとして表現されます。背景は、スクリーン ラスターと同じ、またはそれ以上の解像度を持つ大型のビットマップ オブジェクトです。ゲームのプレイ画面のバックグラウンドとして使用することがあります。
  • ベクター グラフィックスは、点、線、円、2D オブジェクトを定義する多角形など幾何学的プリミティブを使用した画像です。ベクター グラフィックスは、ピクセル配列としてではなく、2D 図形中で定義する数学方程式として表します。必ずしも、ディスプレイのピクセル グリッドとは 1:1 で対応しないため、レンダリングに使用した座標系から、ディスプレイのラスター座標系への変換が必要になります。
  • 移動とは、点や頂点を取って位置を計算し、同じ座標系上で別の位置に移すことです。
  • スケーリングとは、指定した倍率によってオブジェクトを拡大または縮小することです。ベクター イメージの場合は、コンポーネントの頂点を使用して拡大または縮小を行います。ビットマップの場合は、ピクセル要素で拡大または縮小します。ビットマップ イメージの場合、画像を縮小すると、ピクセル データが失われることがあります。画像を接近的にスケーリングする場合は、個々のピクセルを拡大します。後者の場合、バイリニア フィルターのようなピクセル色補間操作によって拡大したピクセル間に生じる不自然な色の境界をスムーズにします。
  • 回転は、指定した軸 (複数の軸も可能) を中心にオブジェクトを回転させることです。ベクター イメージの場合は、回転マトリックスに対してジオメトリの頂点を乗算することにより、回転させた頂点を求めます。ビットマップ イメージの場合は、使用するアルゴリズムごとに、生成される画質の程度が変動します。スケーリングと移動の場合と同様、回転操作に特化した API があります。
  • 変換とは、ある座標系にある点や頂点を取って位置を計算し、別の座標系上で対応する点と頂点に置き換えることです。変換には移動、スケーリング、回転のほか、別の座標計算操作も含まれます。
  • クリップとは、ディスプレイの表示可能領域にない、または表示優先順位の高いオブジェクトの下に隠れたビットマップまたは形状の一部を除去することです。
  • フレーム バッファーは、メモリ (またはグラフィックス ハードウェア自体のメモリの場合もあります) 内の領域のことで、スクリーンに描画する最終的なラスター マップが格納されます。スワップ チェーンとは、一連のバッファーのことで、この中のバック バッファーに描画を行います。画像の準備ができた段階でフロント バッファーと「反転」して表示します。

設計時の考慮事項

2D グラフィックスの開発は、Direct3D による開発を目指す手始めの作業として効果的です。これにより、オーディオ、コントロール、ゲームのしくみなど、ゲーム開発に伴う重要な側面も時間をかけて習得できるようになります。

描画は必ずバック バッファーに行います。フレーム バッファーに直接描画すると、描画操作が完了していなくても、ディスプレイ信号を受け取った時点 (通常 1/60 秒) で画像が表示されることになります。

グラフィックス エンジンは、1024 × 600 から 1920 × 1080 (またはそれ以上) の高解像度をサポートするように設計します。 ユーザーからは LCD モニター ネイティブの解像度 (特に 2D グラフィックスの場合) のサポートが求められています。

優れたアートワークは、ビジュアルの世界では貴重なアセットとなります。ビットマップ グラフィックスでは、最先端のシェーダー モデル機能を駆使した 3D の写真のようにリアルなビジュアルの迫力に欠けるものの、高解像度のアートワークが説得力のあるスタイルや個性を伝えられる場合があります。しかもパフォーマンス上の犠牲が最小限に抑えられます。

辞書/リファレンス

 

 

表示:
© 2015 Microsoft