Pixomatic Rendering Technology

Pixomatic レンダリング技術

Pixomatic は、Michael Abrash 氏と Mike Sartain 氏によって記述された x86 PC 用の高度なソフトウェア ラスタライザです。Pixomatic は 2005 年の終わりに Intel Corporation によって買収されましたが、現在も RAD がライセンスに関する業務、サポート、アップデートを担当しています。Pixomatic には、Pixomatic 2 と Pixomatic 3 という 2 つのバージョンのライセンスが用意されています。

Pixomatic 3 の機能 - ソフトウェア DX9

Pixomatic 3 は、簡単にインストールできる DX9 クラスのソフトウェア ラスタライザで、32 ビットおよび 64 ビットの両方のどちらもバージョンでも、Shader Model 2.0 および 3.0 におけるピクセルおよび頂点のシェーディングの全面的なサポートから、異方性テクスチャ フィルタリング、ステンシル バッファ、ピクセル単位ミップマップまで、あらゆる付加的な機能を備えています。Pixo 3 への移植は簡単で、通常は、LOD を低くしてテクスチャを小さくするなどの簡単な最適化を行って、ソフトウェアのレンダリングのパフォーマンスを高めるだけです。Pixomatic 3 の処理は、Microsoft のリファレンス ラスタライザと比べて数百倍の速さで実行されます。

Pixomatic 3 が DX9 クラスのビデオ カードと異なる唯一の点は速度であり、DX9 は完全にサポートされています。

Pixomatic 2 の機能 - ソフトウェア DX7

Pixomatic 2 は、機能面ではハイエンドな DX7 クラスのグラフィック アクセラレータに匹敵します。Pixomatic 2 を使用すると、MMX がサポートされている x86 互換の Windows または Linux マシン上で、高品質のレンダリングを実行できます。2 つのテクスチャを使用できるマルチテクスチャ、グロー、スペキュラ、フォグ、アルファ テスト、アルファ ブレンディング、16 および 24 ビット z、バイリニア フィルタリング、テクスチャ変形、投影テクスチャなどの処理を実行できます。また、プリミティブの開始/終了またはインデックス付きストリーム、インデックスなしストリームから描画された三角形リスト、三角形ストリップ、三角形ファン、四角形リスト、ポリゴン、ポイントスプライト、ラインリスト、およびラインストリップの変換、クリッピング、および投影を実行できます。さらに、Pixomatic 2 では、パースペクティブを補正してラスタライズを実行することができます。このとき、三角形単位のミップマッピング、サブピクセルとサブテクセルの精度の調整、および 32 ビットの色深度の調整を同時に実行できます。クリア、フィル、コピー、拡大、アンチエイリアシング、およびディザリングも可能です。Pixomatic 2 は、最新のコンソールや 3D カードほど速くはありませんが、PIII/733 MHz の場合は 28 fps、P4/2.2 GHz の場合は 67 fps、P4/3.3 GHz の場合は 108 fps で Quake II という十分な速度を持っています。

Pixomatic 2 では、キューブ マップ、プログラム可能なピクセル シェーダ、ピクセルごとのミップマッピング、またはトライリニアのフィルタはサポートされていません。これらの機能は効率的にソフトウェアに実装できないためです。また、Pixomatic では、ライティングおよびプログラム可能な頂点シェーダのための API も提供されていません。これらの処理は Pixomatic よりもゲームで行うほうが効率的であり、柔軟性も高いためです。Pixomatic 2 では頂点単位のユーザー コールバックを実行できるため、どちらの機能もゲームで簡単に実装できます。

Pixomatic の機能ページで、Pixomatic の全機能を確認できます。ただし、Pixomatic で実行可能な処理と実行できない処理の概要は、以上で十分と考えられます。

ソフトウェアによるレンダリング

3D ハードウェアが珍しいものではなくなった現在、Pixomatic はどのような価値を提供するのでしょうか。Pixomatic は、主に次の 2 つの点でその真価を発揮します。1 つは、3D を使用する必要がある、または使用する可能性があるゲームに、信頼性が高く一貫性のある技術を提供するという点です。複雑なピクセル シェーダ、大量の三角形、高いフィル レートは必要ありません。また、PC ハードウェアに関する手間や費用も不要です。大きな利点はないように見えますが、時間と費用の節約、リソースの解放、および潜在市場規模が増加することによる利点は十分大きなものです。この点については、「Pixomatic を使用する理由」で詳しく説明しています。2 つ目は、ゲームを最高の品質にするためにはハードウェアが必要な状況で、市場を広げ、テクニカル サポートにかかる費用と返品を減らすために、ハードウェア アクセラレーションに関係なく、すべてのマシンで実行しようとする場合に、代替レンダラとして機能するという点です。

次に、Pixomatic の動作と、その設計内容の理由について詳しく説明します。

Pixomatic では、ゲームを簡単に記述できるようにする必要があること、そしてゲームを簡単に移植できるようにする必要があることは初めからわかっていました。このため、Pixomatic の機能セットは、同じパフォーマンスを提供するハードウェアの機能セットに近いものになっています。効率を高めるために、Pixomatic ではカスタム API が使用されています。このカスタム API は、業界標準の API から簡単に移植できるように設計されています。Pixomatic には、ソフトウェア ラスタライザで想定されるような特異性はなく、ゲームの設計時に特別な要件も存在しません。ソフトウェア ラスタライザがこれまでに利用していたワールド情報、BSP ツリー、スパン リスト、エッジ リストなど、数多くの特殊な工夫もありません。Pixomatic は、従来の 3D パイプラインの単純な実装です。複数の形式のポリゴンが一方から入力され、z およびステンシル テスト後に、ラスタライズされピクセルがシェードされた結果がもう一方の端から出力されて、フレーム バッファに書き込まれます。ほとんどの場合、すべてのラスタライズ機能はどのような組み合わせでも動作します。ただし、ステンシル バッファに書き込まれる場合は、フレーム バッファまたは z バッファは描画されません。OpenGL または DX に詳しいユーザーならば、すぐに Pixomatic の使用法を習得できます。

私たちに課せられた 2 番目の要求として、ソフトウェアによるラスタライズというパフォーマンス上の制限がある中で、簡単な操作でできるだけ高品質の結果を生成する必要がありました。そのため、パイプラインを通して、各色要素に最小で 8 ビットのコア機能セットを実装し、サブピクセルのラスタライズと同種のクリッピングを実行して、パースペクティブ補正とサブテクセル精度のテクスチャ マッピングを行いました。次に、高速に実行できるあらゆるレンダリング機能を追加しました。たとえば、同じ色深度と精度、dot3 のピクセルごとのライティング、アンチエイリアシング、ステンシル シャドウ、24 ビットの z (任意)、バイリニア フィルタリング、ライトマップと連動する高速な 2 つのフィルタなどです。

もちろん、最終的な目的はパフォーマンスを高めることでした。高品質の出力を生成するソフトウェア ラスタライザを記述することはそれほど困難ではありません。最も困難な部分は、高速なラスタライザを記述することです。Pixomatic においては、パフォーマンスを高めることが最大の挑戦であることが最初からわかっていました。このため、レンダリングの質を低下させることがない範囲で、考えられるすべての最適化手法を使用して、PIII クラスおよび P4 クラスのマシンで最大限のパフォーマンスを提供する Pixomatic 2 をゼロの状態から設計しました。Pixomatic 3 で最も重視されたのは DX9 互換のレンダラを作成することでしたが、パフォーマンスも同様に重要でした。Pixomatic 3 でキーとなるパフォーマンス上の新しい要素は、最大 16 コアまでの並行処理をサポートすることです。

Pixomatic 2 のパフォーマンス

Pixomatic 2 のパフォーマンスと品質において最も重要な部分は、welder と呼ばれています。これは、ラスタライゼーションの状態が変更されるたびにピクセル パイプラインをオンザフライでコンパイルし、手動で調整されたアセンブリ言語と同等のコードを生成するソフトウェアです。コンパイル時には、手動で最適化されたコード フラグメントが適切に接合、調整されるため、実質的には手動で調整されたアセンブリ コードであると言えます。接合されたピクセル パイプラインでは、8 つの MMX レジスタと 8 つの汎用レジスタがすべて使用され、動的な変数はほぼ常にレジスタ内に保持されます。グロー、スペキュラ、および両方のテクスチャをバイリニア フィルタと共に使用すると、save/restore が発生することがあります。MMX をうまく使用すると、テクセルのルックアップ自体は 5 つの命令で実行できます。z、ステンシル、およびアルファ テストが有効な場合でも、それには関係なく、ピクセルごとに 1 回のブランチ (ループのブランチ) が実行されます。パイプラインは、z またはステンシルの失敗があると早期終了されます。

ピクセル パイプラインを制御する三角形のパイプラインのレベルを 1 つ上に移動すると、各三角形に描画されるスパンのリストが生成されます。各スパンの長さは 16 ピクセルを超えることはなく、各端で、浮動小数点でパースペクティブ補正されたテクスチャの計算が行われます。ピクセル パイプラインは順番に各スパンを描画して、両端間でリニアに補間し、各ピクセルにパースペクティブな分離を行ったときと同様の結果を生成します。こうすることにより、パフォーマンスが向上します。スパンの生成時には、SSE または 3DNow が自動的に使用されます (いずれかが存在する場合)。SSE バージョンは、手動で調整されたアセンブリ言語で全体が記述されます。このとき、7 つの汎用レジスタ、8 つの MMX レジスタ、および 6 つの XMM レジスタが同時に使用されます。命令の先読みが実行可能である場合には、メモリの待ち時間を短縮するために Z が先に読み込まれます。

つまり、ラスタライゼーション パイプラインは、MMX 機能、およびオプションで SSE または 3DNow を含む X86 プロセッサで記述する際のパフォーマンスを高めるだけでなく、32 ビットのパースペクティブ補正された、サブピクセルおよびサブテクセル精度のレンダリングの質を高めることを目的として設計されています。

同様に、ジオメトリ パイプラインもパフォーマンスを高めるために構築されています。インターフェイス タイプ、プリミティブのタイプ、およびストリーム構成をできるだけ効率的に多くの組み合わせで処理するために、C、手動で調整されたアセンブリ コード、およびオンザフライでコンパイルされたコードの組み合わせが使用されます。また、調整されたコードをさまざまな構成で再使用できるように、カスタム プリプロセッサを開発しました。ここでも、可能な場合は SSE と 3DNow が使用されます。

MMX に最適化されたさまざまなクリアとフィルが提供され、それと共に 32 ビット、24 ビット、16 ビットをターゲットとする BLT、16 ビットの場合のディザリングが用意されています。これもさまざまな場所で使用されるアセンブリ コードであり、必要に応じてオンザフライでコンパイルされます。可能な場合には、クリア、フィル、および BLT を高速化するために先読みが実行されます。

最後に、Pixomatic には、バッファ管理と画面更新のための関数が用意されています。必要に応じて、フロント バッファを更新するための最速の方法として、GDI BLT と MMX で最適化された独自の BLT から自動的に選択することができます。

Pixomatic 3 のパフォーマンス

Pixomatic 3 は、DX9 との完全な互換性を実現することにより、Pixomatic 2 と比較して処理が約 4 倍遅くなっています。ただし、Pixo 3 は、複数の CPU に対応できるように設計されています。ほぼリニアにスケーリングできるため、マルチコア CPU が搭載されたマシンを最大限に活用できます。

Pixomatic 3 で最も重要な部分は、Intel に合わせて最適化された SSE シェーダ コンパイラです。これは、一部の Intel ハードウェア GPU で頂点シェードを実行するコンパイラと同じです。このコンパイラがさらに最適化され、ピクセル シェーディング機能が追加されています。多少遅くなるだけで、DX9 ゲームをそのまま実行できます。

ドライバのパフォーマンスの結果

結果は満足できるものでした。汎用 3D API を使用して、現在の x86 CPU におけるパフォーマンスを最大限に高めることができました。Pixomatic のパフォーマンスは Quake にとって十分であるだけでなく、最近のベストセラー ゲームにも対応できるレベルです。

つまり、Pixomatic では、CPU への実装に適している標準の 3D コア機能が、簡単に使用できる API と共に実装されます。これにより、レンダリングの質や使いやすさを犠牲にすることなく、最高のパフォーマンスを得ることができます。CPU のパフォーマンスの限界を十分に考慮してあり、適切に実行できない機能は含まれていません。効率性、正確性、および信頼性を実現しています。

Pixomatic のデモをダウンロードしたり、開発履歴を確認することができます。Pixomatic SDK の試用をご希望の場合は、電話 (03-6750-8879) または電子メールでお問い合わせください。