アンチエイリアシングのベストプラクティス

Qt Quick 3Dには、3Dモデルのレンダリング中にエイリアシング(エッジのギザギザ)と戦うための複数の方法があります。それぞれの手法には、利点と限界があります。複数のテクニックを組み合わせることもできますが、その場合、パフォーマンス上の追加コストが発生します。

一般的なエイリアシング

エイリアシングは、画面上のピクセルで表現できる以上の情報がオリジナルに存在する場合に発生します。アンチエイリアシング技術は3つのカテゴリに分類されます:

  • 1つのピクセルの追加情報を見つけ、それらをすべて同時に表現する技術。
  • 画像エフェクトは、見た目が悪い部分を見つけ、その問題を絨毯の下で一掃しようとするものです。
  • 制限を回避しようとするアーティストによる技術。

アンチエイリアスはグラフィックをレンダリングする際に便利なツールですが、賢く使わないとアプリケーションのパフォーマンスに影響を与える可能性があります。以下のセクションでは、いくつかの異なるアンチエイリアス技法について説明します。どのテクニックがあなたの問題に最も適しているかを理解することは、ビジュアル品質と十分なレンダリング速度のバランスをとるのに役立ちます。

ジオメトリのエイリアシング

デフォルトでは、すべてのジオメトリは画面上で1ピクセルずつレンダリングされます。下の画像の左側にあるように、これではエッジが粗くなり、高コントラストの場合、特に白黒の場合に目立ちやすくなります。

ジオメトリのエイリアシングを低減する効果的なテクニック

最も正しい修正は、マルチサンプルアンチエイリアシングを使用することです。テンポラル・アンチエイリアシングや プログレッシブ・アンチエイリアシングを使用することも、正しい方法でこの問題を軽減することができます。

最後に、場合によっては、シルエットの不透明度マップを使って、ジオメトリのエッジを滑らかにすることができます。

テクスチャエイリアシング

テクスチャがサブサンプリングされると、オリジナルよりも少ないピクセルが表示され、どのピクセルが選択されるかに基づいて望ましくないアーチファクトが生じます。この影響は、モデルが動いているときに、異なるピクセルが異なるタイミングで選択されるため、悪化します。下の画像では、E3とF3の間の線がどのように欠けているか、G3とH3の間に強く存在し、次の5列で消えていることに注目してください。

テクスチャのエイリアシングを減らす効果的なテクニック

この問題に対する最も簡単な(そして間違いなく最良の)修正は、画像テクスチャ自体にミップマッピングを使用することです。別の修正方法としては、Temporal AAまたはProgressive AAを使用して、テクスチャからより多くの情報を収集する方法があります。

マルチサンプルアンチエイリアシングを使用しても、この問題は修正されません。

反射エイリアシング

テクスチャエイリアシングと同様に、環境を反射するマテリアルは画像をサブサンプルします。場合によっては、下の画像の左側に見られるように、細かいディテールがスキップされると明らかになります。

反射のエイリアシングを低減する効果的なテクニック

この場合の最も正しい解決策は、Temporal AAまたはProgressive AAを使用して余分な情報を見つけることです。

受け入れられるかもしれない単純な代替ソリューションは、マテリアルの光沢を減らし、より粗くすることです。この場合、環境の低解像度ミップマップが自動的に使用され、シャープなディテールが一緒にブレンドされます。

Qt Quick 3Dのアンチエイリアシング技術

注意: アンチエイリアシングのサンプルと シーンエフェクトのサンプルで、これらの機能を実際に使ってみてください。ただし、最近のウィンドウシステムは、高解像度のスクリーンを接続すると、High DPI スケーリングを行うように設定されていることが多いことに注意してください。これは、スクリーンに表示されるウィンドウのコンテンツが、より高い解像度でレンダリングされ、システム・コンポジターやプラットフォームの他のコンポーネントによって縮小されることを意味します。これは事実上、スーパーサンプル・アンチエイリアシングの一種です。Qt Quick 3Dでアンチエイリアシング技術を有効にすると、ウィンドウシステムの自動スケーリングによってエイリアシングがすでにある程度除去されているため、より小さな、あるいは時には見えにくい改善が見られるかもしれません。しかし、同じアプリケーションを別のシステムにデプロイする場合、そのシステムがそのようなスケーリングがないプラットフォームやスクリーンを使用している可能性があり、エイリアシングやギザギザのエッジがすぐに目につくようになります。開発者は、ターゲット環境における高DPIスケーリングの潜在的な有無について考慮し、これを念頭に置いてアンチエイリアシング設定を試し、調整することをお勧めします。

以下は、いくつかのアンチエイリアス方法を有効にしたSponzaシーンのレンダリング例です。スクリーンショットは、ウィンドウにシステムのスケーリングを適用していない状態(高DPIスケーリングなし)で撮影されているため、さまざまな方法の効果がより顕著になっています。

使用したAA結果
AAなし

スーパーサンプルAA、高(1.5倍)

マルチサンプルAA、高(4倍)

FXAA

テンポラルAA、デフォルト強度(0.3)

マルチサンプルアンチエイリアシング

マルチサンプルAA(MSAA)は、View3D アイテムのカラーバッファ(これがデフォルトです)、またはOffscreen 以外のrenderMode が使用されている場合は、Qt Quick ウィンドウ全体(QQuickWindow,QQuickView,Window,ApplicationWindow )で動作します。

ジオメトリのエッジがスーパーサンプリングされ、より滑らかなシルエットになります。ただし、このテクニックはジオメトリ内部のマテリアルには影響しません。

  • 長所エイリアシングが最も目立ちやすいジオメトリのシルエットで良い結果が得られる。高速アニメーションでも問題なく動作。最近のGPUの多くは、パフォーマンスの問題なしに2倍または4倍のMSAAをサポートしています。
  • 短所:特に古いモバイルや組み込みハードウェアでは、使用コストが高くつくことがある。テクスチャや反射の問題には役立たない。

View3DOffscreen のデフォルトrenderMode を使用している場合、View3D 自体がマルチサンプル・アンチエイリアスを完全に制御します。アプリケーションは、View3D に関連付けられた環境 (SceneEnvironment またはExtendedSceneEnvironment) のantialiasingMode プロパティとantialiasingQuality プロパティを使って、この設定を行うことができます。

次の例では、antialiasingQuality のデフォルトがSceneEnvironment.High であるため、一般的に使用される 4x MSAA を要求しています。

View3D {
    environment: SceneEnvironment {
        antialiasingMode: SceneEnvironment.MSAA
    }
}

MSAA は Qt 自身によって実装されるのではなく、基礎となる 3D API によって実行されます。したがって、性能と品質は、異なるハードウェアとその 3D API の実装によって異なる可能性があります。

テンポラル・アンチエイリアス

テンポラル・アンチエイリアシングは、View3D のカラー・バッファで動作します。 カメラはフレーム間でごくわずかに動かされ、それぞれの新しいフレームの結果が前のフレームとブレンドされます。

  • 長所:カメラが揺れ動くため、他の方法では失われるディテールを見つけることができる。パフォーマンスへの影響が少ない。
  • 短所:動きの速い被写体はワンフレームのゴーストを引き起こす。

Temporal AAはMultisample AAと組み合わせても効果がない。しかし、プログレッシブAAと組み合わせることはできる。

テンポラル・アンチエイリアスを制御するには、環境のtemporalAAEnabledtemporalAAStrength プロパティを使用します。

View3D {
    environment: SceneEnvironment {
        temporalAAEnabled: true
    }
}

プログレッシブ・アンチエイリアス

プログレッシブ アンチエイリアシングは、View3D のカラーバッファで動作します。View3D によってレンダリングされたシーン内のすべてのコンテンツが動きを止めたとき、カメラはフレーム間でごくわずかに揺れ、新しい各フレームの結果が前のフレームとブレンドされます。フレームを積み重ねるほど、結果は見栄えが良くなる。

  • 長所パフォーマンスコストをかけずに、詳細な静止画像を提供する。
  • 短所:視覚的な変化が起きている場合は効果がない。8x PAAはレンダリング終了まで8分の1秒かかる(60fpsの場合)。
View3D {
    environment: SceneEnvironment {
        antialiasingMode: SceneEnvironment.ProgressiveAA
    }
}

antialiasingQuality 、いくつのフレームをブレンドするかをコントロールできる(2、4、8)。

スーパーサンプルアンチエイリアシング

スーパーサンプルAAは、View3D のカラーバッファで動作します。 これは、通常のサイズよりも大きなカラーバッファ(テクスチャ)を作成し、それをダウンサンプリングすることを含みます。これは、リソースの使用量の増加を意味し、大きなサイズでは、スケーリング操作が高価になる可能性があります。

  • 長所アニメーションを制限することなく、フルシーンのアンチエイリアスを提供します。
  • 短所:グラフィックシステムのフィルレートによってシーンがすでに制限されている場合、特に古いモバイルや組み込みハードウェアでは、パフォーマンスが著しく低下する可能性があります。
View3D {
    environment: SceneEnvironment {
        antialiasingMode: SceneEnvironment.SSAA
    }
}

antialiasingQuality 、サイズ倍率(1.2、1.5、2.0)をコントロールできます。

ミップマップ

ミップマップは、テクスチャを事前に計算された低解像度バージョンと一緒に保存します。テクスチャが小さいサイズで表示されるときはいつでも、レンダリングシステムは自動的にこれらの低解像度イメージ(より少ないピクセルに多くの詳細を結合する)を使用します。

  • 長所パフォーマンスへの影響が少ない。テクスチャの画質が大幅に向上。
  • 短所:ミップマップチェーンの生成にコストがかかる可能性がある、または一部の画像コンテナフォーマットでは、画像アセット自体にミップマップ画像を事前に生成する必要がある。ミップマップなしの同じ画像より33%多くグラフィックメモリを使用します。

Qt にTexture のミップマップを生成させ、グラフィックスシェーダでテクスチャサンプリングを行うときにミップマップチェインを使用できるようにするには、mipFiltergenerateMipmaps プロパティを設定します。

Texture {
    source: "image.png"
    mipFilter: Texture.Linear
    generateMipmaps: true
}

スペキュラーアンチエイリアシング

スペキュラライティングの寄与によるアーティファクトは、スペキュラ アンチエイリアシングを有効にすることで低減できます。このようなアーチファクトは通常、明るいドットとして表示され、おそらくちらつきがあるように見えます。

スペキュラAA無効スペキュラAA有効

View3D {
    environment: SceneEnvironment {
        specularAAEnabled: true
    }
}

注意: 非常に滑らかな外観を持つマテリアルは、スペキュラAAを有効にすると、more rough 表面があるかのように外観が変化することがあります。これは基礎となるライティング計算の結果です。

高速近似アンチエイリアス

ExtendedSceneEnvironment は、ポスト処理効果の形でアンチエイリアスの別の方法を提供します。FXAAを有効にするには、 をtrueに設定します。fxaaEnabled

import QtQuick3D.Helpers

View3D {
    environment: ExtendedSceneEnvironment {
        fxaaEnabled: true
    }
}

アーティストによるチート

シルエット不透明度マップ

モデルに一貫したシルエットがある場合、ジオメトリの外縁を透明にする不透明度マップを適用できます。不透明度にグラデーションを使うと、オブジェクトのエッジが滑らかに消えます。ただし、不透明度マップが1ピクセルのスペースで完全に不透明から完全に透明に直接遷移しても、上の例に見られるように、結果はアンチエイリアスのエッジを提供します。これは、不透明度マップを含むイメージマップがバイリニア補間を使うからです。

  • 長所通常のAAよりもソフトなトランジションを表示できる。レイヤーごとではなく、モデルごとに適用できる。
  • 短所:オブジェクトのシルエットが変化する場合は使用できない。透明度を使用する複数のモデルが重なると、フィルレートのパフォーマンスが消費される。

マテリアルやジオメトリの変更

上の反射エイリアシングの画像で示したように、問題の最も簡単な修正は、アートワークを変更することです。モデルの角に気になるスペキュラーグリントがある場合、自問してみてください:マテリアルをもっと柔らかくできないか?ジオメトリを修正して、反射を滑らかにしたり、反射角度を変えたりすることはできますか?環境マップを編集して、シャープなトランジションを減らすことはできますか?

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 Qt Quick 3D Introduction with glTF Assets © 2024 Qt Company Ltd. 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。