OpenGLでアンチエイリアスを実装するにはどうすればよいですか?


28

OpenGLでフルスクリーンアンチエイリアスを実行したいのですが、OpenGL自体が提供するアンチエイリアスを使用したくありません。ゲームを構築していて、その中に良い効果が欲しいからです。

どうすればいいですか?


「GL自体が提供するアンチエイリアシング」とは、「アンチエイリアシング」とラベル付けされた名前の古いラインとポリゴン品質のヒントを指しますか、それともGLX / WGLビジュアルで通常のMSAAを使用することを指しますか?
ラースヴィクルンド

回答:


28

OpenGLには、ネイティブMSAAに代わる方法がいくつかあります。ポストプロセッシングエフェクトを使用する場合の最大の利点は、通常、シェーダーを最終的な未処理のイメージに投げ込むだけで、残りは処理されることです。以下に、見る価値のある3つの方法を示します。

  • 高速近似アンチエイリアシング(Geeks3D) -ほとんどの場合に適しています。適用と理解が非常に簡単です。欠点はシャープで、テクスチャのコントラストの高いノイズは少しぼやけます。1/4ピクセルの急なエッジは、従来のMSAAのように正確に見えます。それより急でないと、少し正確さが失われます。

  • Normal Filtered Anti-Aliasing(GameDev)-これをまだ正確にテストしていませんが、理解するのが最も簡単です。最良の場合は16x MSAAに似ており、最悪の場合は2x MSAAに似ています。エッジと相対角度を表す一時的な法線マップを生成します。法線マップは、輝度差または色差でサンプリングできます。

  • Morphological Anti-Aliasing(Iryoku)-SMAAに改善-サブピクセルMophological AA。4パスではかなり複雑ですが、私が見た中で最高の結果を達成しています。1/100〜1/200ピクセルの急勾配(!)のように、エッジに沿ってグラデーションを作成します。サンプリングは、輝度ベース、色ベース、または深度ベースで行うことができます。テクスチャは非常に鮮明できれいなままです。(例はDX10およびHLSLベースであり、GLSLに正確に移植するには時間がかかります)

これらの手法はスーパーサンプルやマルチサンプルを行わないため、1ピクセル未満の太さで表示されるラインはギャップを伴って表示され、正しくアンチエイリアスされません。これは、非MSAAアプローチを使用する場合の欠点です。最大解像度のラスターイメージのみを使用しているため、これらの空のギャップから追加情報を作成することはできません。

これらの手法はすべて、隣接する輝度(輝度)または彩度(色)の値のサンプリングに依存していることに注意してください。輝度とオプションのガンマ補正を計算するには、AAシェーダーに関する追加の指示が必要ですが、それは非常に簡単です。これをオフロードするには、レタッチされていない画像を提供する以前のシェーダーで輝度を計算し、輝度をアルファチャンネルに保存します。次に、AAシェーダーで、アルファを単純にサンプリングします。


7

アンチエイリアスを行う方法はたくさんあります。1つは、マルチサンプルアンチエイリアシング(MSAA)を使用することです。MSAAでは、バックバッファーに複数のサブピクセルサンプルが実際に格納されます。三角形、線などをレンダリングすると、システムは各ピクセルのサンプルの正しいセットを自動的に入力します。次に、レンダリングの最後に、すべてのサブピクセルサンプルを平均してピクセルごとに1つのサンプルを取得することにより、イメージが「解決」されます。

もう1つの方法は、後処理のアンチエイリアスを使用することです。この場合、通常のようにシーンをレンダリングし、最終結果でターゲットを絞ったぼかしを実行して、エイリアスされたエッジを非表示にします。これにはさまざまな手法がありますが、現時点で最も優れた/最も人気のあるものの1つはFXAA(Fast ApproXimate Anti-Aliasing)と呼ばれます。

通常、MSAAは後処理AAよりも見栄えの良い結果になりますが、レンダリング操作ごとに約2倍のメモリ帯域幅が必要になるため、遅くなる可能性があります。MSAAは、セットアップの詳細に応じて、後処理AAよりも多くのビデオメモリを必要とする場合もあります。

WebでのMSAAまたはFXAAの実装に関する特定の情報を見つけることができます。これらの用語のいずれかをGoogleで検索してください。


2

独自のGLSLシェーダーをコーディングしてもよいですか?その場合は、このチュートリアルを確認しください。


さて私は、同様にイムは、あなたがシェーダのために他のいくつかのリンクを提供well.Couldなど他の効果のためのシェーダを使用しているので、それはシェーダを使用してくださいしたいと思います
noddyで
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.