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

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

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

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

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.