マルチサンプルアンチエイリアシング(MSAA )は、空間アンチエイリアシングの一種であり、コンピュータグラフィックスでギザギザを除去するために使用される技術です。
これはスーパーサンプリングの最適化であり、必要な部分だけをより多くサンプリングします。ギザギザは小さな領域でのみ目立つため、その領域を素早く特定し、その領域のみにアンチエイリアシング処理を施します。
この用語は一般的に、スーパーサンプリングの特殊なケースを指します。フルシーンアンチエイリアシング(FSAA)の初期実装は、シーンを高解像度でレンダリングし、その後ダウンサンプリングして低解像度で出力するという概念的な仕組みでした。最新のGPUのほとんどはこの形式のアンチエイリアシングに対応していますが、テクスチャ、帯域幅、フィルレートなどのリソースを大量に消費します。(プログラムがTCL処理やCPU処理に大きく依存している場合は、パフォーマンスへの影響を最小限に抑えつつスーパーサンプリングを使用できます。)
OpenGL GL_ARB_multisample 仕様[ 1 ]によると、 「マルチサンプリング」とは、スーパーサンプリングの特定の最適化を指します。この仕様では、レンダラーがフラグメントプログラムをピクセルごとに一度評価し、深度値とステンシル値のみを「真に」スーパーサンプリングするように規定されています。(これはスーパーサンプリングとは異なりますが、OpenGL 1.5 仕様[ 2 ]では、完全なスーパーサンプリングの実装も含むように定義が更新されました。)
グラフィックス関連の文献では一般的に、「マルチサンプリング」とは、最終画像の一部の要素が完全にスーパーサンプリングされない、スーパーサンプリングの特殊なケースを指します。以下のリストは、特にARB_multisampleの定義に基づいています。
スーパーサンプリングアンチエイリアシングでは、各ピクセル内で複数の位置がサンプリングされ、それぞれのサンプル[ 3 ]が完全にレンダリングされて他のサンプルと組み合わされ、最終的に表示されるピクセルが生成されます。これは、各サンプル位置ごとにレンダリングプロセス全体を繰り返す必要があるため、計算コストが高くなります。また、エイリアシングは通常、画像の端など一部の部分でのみ目立ちますが、スーパーサンプリングはすべてのピクセルに対して実行されるため、非効率的です。
マルチサンプルアンチエイリアシングでは、ピクセル内のマルチサンプル位置のいずれかがレンダリング対象の三角形で覆われている場合、その三角形に対してシェーディング計算を実行する必要があります。ただし、この計算は、覆われているサンプル位置の数に関係なく、ピクセル全体に対して一度だけ実行すればよく、シェーディング計算の結果は、関連するすべてのマルチサンプル位置に単純に適用されます。
ピクセル内のマルチサンプル位置すべてを1つの三角形がカバーする場合、シェーディング計算は1回のみ実行され、これらのピクセルはアンチエイリアス処理されていない画像と比べてわずかにコストが高くなるだけで、結果は変わりません。これは、エイリアシングが問題にならない三角形の中央部分に当てはまります。(エッジ検出では、サンプルが複数の三角形、または複数の深度の三角形を含むピクセルにMSAA計算を明示的に制限することで、これをさらに削減できます。)マルチサンプル位置のそれぞれが異なる三角形でカバーされる極端なケースでは、位置ごとに異なるシェーディング計算が実行され、その結果が結合されて最終的なピクセルが生成されます。結果と計算コストは、同等のスーパーサンプリング画像と同じです。
シェーディング計算は、特定のピクセルに対して実行しなければならない唯一の操作ではありません。マルチサンプリングの実装では、可視性などの他の操作をさまざまなサンプリングレベルでサンプリングする場合があります。
アルファテストは、古いビデオゲームでよく使われる手法で、フレームバッファへの書き込みを拒否することで半透明オブジェクトをレンダリングします。[ 4 ] 半透明フラグメント(ピクセル)のアルファ値が指定されたしきい値を下回ると、破棄されます。これはピクセルごとに実行されるため、これらのピクセルではマルチサンプリングのメリットが得られません(ピクセル内のすべてのマルチサンプルはアルファテストに基づいて破棄されます)。結果として得られる画像には、透明なオブジェクトのエッジやテクスチャ内のエッジにエイリアシングが含まれる可能性がありますが、アンチエイリアシングがない場合と比べて画質が悪くなることはありません。[ 5 ] アルファテストテクスチャを使用してモデル化された半透明オブジェクトも、アルファテストのためにエイリアシングが発生します。この影響は、透明なテクスチャを使用してオブジェクトを複数回レンダリングすることで最小限に抑えることができますが、多くの透明なオブジェクトを含むシーンではパフォーマンスが大幅に低下します。[ 6 ]
マルチサンプリングでは、ポリゴン内部のフラグメントをピクセルごとに一度しか計算しないため、フラグメントシェーダーの出力に高周波成分が含まれるレンダリングされたポリゴン内部では、エイリアシングなどのアーティファクトが依然として表示されます。
SSAA(スーパーサンプリング)ほどパフォーマンス負荷は高くないものの、特定のシナリオ(複雑なフラグメントが多いシーン)では、MSAAはFXAA、SMAA、MLAAなどのポストプロセスアンチエイリアシング技術よりも、特定のフレームに対して数倍負荷が高くなる可能性があります。このカテゴリの初期の技術はパフォーマンスへの影響が低い傾向がありますが、精度の問題を抱えています。[ 7 ]以前にレンダリングされたフレームからのデータを組み合わせることでエイリアシングを低減するテンポラルアンチエイリアシング(TAA)などの最近のポストプロセスベースのアンチエイリアシング技術では、ポストプロセスAAがMSAAよりも汎用性が高く、コストも高くなるため、この傾向は逆転しています。MSAAはフレーム全体を単独でアンチエイリアシングすることはできません。
ポイントサンプリングマスクでは、各マルチサンプルのカバレッジビットは、そのマルチサンプルがレンダリングされたプリミティブの内部にある場合にのみ設定されます。サンプルはレンダリングされたプリミティブの外部から取得されることはないため、ポイントサンプリングを使用して生成された画像は幾何学的に正確になりますが、ピクセルのカバレッジマスクで設定されるビットの割合が、実際に問題のフラグメントによって覆われているピクセルの割合と一致しない場合があるため、フィルタリング品質が低くなる可能性があります。
領域サンプリングマスクを使用することで、フィルタリング品質を向上させることができます。この方法では、ピクセルのカバレッジマスクで設定されるビット数は、フラグメントの実際の領域カバレッジに比例する必要があります。これにより、レンダリングされたプリミティブ内に実際には存在しないマルチサンプルに対してもカバレッジビットが設定されることがあり、エイリアシングなどのアーティファクトが発生する可能性があります。
ピクセル全体に均等に配置されたマルチサンプル位置によって構成される規則的なグリッドサンプリングパターンは、実装が容易で、属性評価(サブピクセルマスクの設定、色と深度のサンプリングなど)を簡素化します。ただし、サンプル数が多いため、計算コストが高くなります。画面に揃ったエッジではエッジ最適化が不十分ですが、マルチサンプル数が多い場合は画質が良好です。
疎な規則グリッドサンプルパターンは、規則グリッドサンプルパターンから選択されたサンプルのサブセットです。規則グリッドと同様に、規則的な間隔のため属性評価が簡素化されます。サンプル数が少ないため、計算コストが低くなります。エッジ最適化は画面に揃ったエッジに適しており、マルチサンプルの数が中程度であれば画像品質も良好です。
確率的サンプルパターンとは、ピクセル全体に複数のサンプルをランダムに分布させたものです。サンプルの間隔が不規則なため、属性評価が複雑になります。この方法は、サンプル数が少ないため(通常のグリッドパターンと比較して)、コスト効率に優れています。この方法ではエッジ最適化が可能ですが、画面に揃ったエッジには最適とは言えません。適度なサンプル数であれば、画像品質は良好です。
スーパーサンプリングと比較して、マルチサンプルアンチエイリアシングは、より高いパフォーマンスで同等の品質を提供したり、同じパフォーマンスでより良い品質を提供したりできます。回転グリッドサブピクセルマスクを使用することで、さらに改善された結果が得られます。Zとカラー圧縮が利用可能な場合、マルチサンプリングに必要な追加の帯域幅は十分に低くなっています。[ 8 ]
最新のGPUのほとんどは、2倍、4倍、8倍のMSAAサンプリングをサポートしています。値が大きいほど画質は向上しますが、処理速度は低下します。