このページでは

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

Qt Quick 3Dでは、3Dモデルのレンダリング時にエイリアシング(ギザギザしたエッジ)に対処する複数の方法があります。各手法には、それぞれ独自の利点と制限があります。複数の手法を組み合わせることも可能ですが、その場合は追加のパフォーマンスコストが発生します。

エイリアシングの概要

エイリアシングは、元のデータに含まれる情報量が、画面上のピクセルで表現できる情報量を超える場合に発生します。アンチエイリアシングの手法は、大きく分けて以下の3つのカテゴリーに分類されます:

  • 1つのピクセルについて追加情報を抽出し、それらをすべて同時に表現する手法。
  • 見た目が悪い箇所を特定し、問題を目立たなくしようとする画像処理効果。
  • 制限を回避しようと試みる、アーティストが用いる手法。

アンチエイリアシングはグラフィックスをレンダリングする上で有用なツールですが、賢く使用しなければアプリケーションのパフォーマンスに影響を与える可能性があります。以下のセクションでは、選択可能ないくつかの異なるアンチエイリアシング手法について説明します。どの手法が抱えている問題に最も適しているかを理解することで、視覚的な品質と十分なレンダリング速度のバランスをとることができます。

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

デフォルトでは、すべてのジオメトリは画面上のピクセル単位で1つずつレンダリングされます。下の画像の左側に見られるように、これによりギザギザしたエッジが残り、コントラストの高い場面ではそれが目立ちやすくなります。ここでは白黒のコントラストが特に際立っています。

回転させた正方形、円、およびテキストに対する5つのアンチエイリアシング手法の比較

ジオメトリのエイリアシングを低減するための効果的な手法

この問題に対する最も適切な解決策は、マルチサンプルアンチエイリアシングを使用することです。これにより、必要な場合にのみジオメトリの詳細情報をより多く取得できます。また、テンポラルアンチエイリアシングや プログレッシブアンチエイリアシングを使用することも、この問題を適切に軽減することができます。

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

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

テクスチャがサブサンプリングされると、元の画像よりも少ないピクセル数が表示され、どのピクセルが選択されるかによって望ましくないアーティファクトが生じます。モデルが動いていると、異なるタイミングで異なるピクセルが選択されるため、この現象はさらに悪化します。 下の画像では、E3とF3の間の線が欠けており、G3とH3の間でははっきりと現れ、その後5列にわたって消え、というように繰り返されていることに注目してください。

遠ざかるグリッドテクスチャにおける4つのアンチエイリアシング手法の比較

テクスチャのエイリアシングを軽減するための効果的な手法

この問題に対する最も単純な(そしておそらく最良の)解決策は、画像テクスチャ自体にミップマッピングを使用することです。その他の解決策としては、テクスチャからより多くの情報を取得するために、テンポラルAAまたは プログレッシブAAを使用することが挙げられます。

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

反射によるエイリアシング

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

反射エイリアシングを低減するための4つの手法の比較

反射におけるエイリアシングを低減するための効果的な手法

この場合、最も適切な解決策は、テンポラルAAや プログレッシブAAを使用して追加の情報を取得することです。

許容できるかもしれない簡単な代替策として、マテリアルの光沢を抑え、より粗くする方法があります。この場合、環境の低解像度のミップマップが自動的に使用され、シャープなディテールが滑らかにブレンドされます。

Qt Quick の3Dにおけるアンチエイリアシング技術

注: これらの機能の一部を実際に試してみたい場合は、「アンチエイリアシングの例」および「シーンエフェクトの例」をご覧ください 。 ただし、最近のウィンドウシステムは、高解像度のディスプレイが接続されている場合、高DPIスケーリングを実行するように設定されていることが多い点に留意してください。これは、画面に表示されるウィンドウの内容が、より高い解像度でレンダリングされ、その後、システムのコンポジターやプラットフォームの他のコンポーネントによって縮小されることを意味します。これは事実上、スーパーサンプリング・アンチエイリアシングの一種です。 そのため、Qt Quick 3Dでアンチエイリアシング技術を有効にしても、ウィンドウシステムの自動スケーリングによってエイリアシングがすでに一定程度除去されているため、改善効果が小さく、場合によっては見分けにくいことがあります。 しかし、同じアプリケーションを別のシステムに展開した場合、そのシステムではそのようなスケーリングが行われないプラットフォームや画面が使用されている可能性があり、その結果、初期状態ではエイリアシングやギザギザしたエッジがより目立つことになります。 開発者は、ターゲット環境において高DPIスケーリングが存在するかどうか、あるいは存在しない可能性を考慮し、それを念頭に置いてアンチエイリアシングの設定を試し、調整することをお勧めします。

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

使用したAA結果
AAなし

アンチエイリアシングが適用されていない建築の風景で、ギザギザしたエッジが見られる

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

1.5倍のスーパーサンプルアンチエイリアシングを適用した建築シーン

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

4倍のマルチサンプル・アンチエイリアシングを適用した建築風景

FXAA

高速近似アンチエイリアシングを用いた建築風景

時間的アンチエイリアシング、デフォルト強度 (0.3)

時間的アンチエイリアシングを適用した建築風景

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

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

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

  • 長所:エイリアシングが最も目立ちやすいジオメトリの輪郭において、良好な結果が得られます。高速なアニメーションでも問題なく動作します。最近の多くのGPUは、パフォーマンス上の問題なく2倍または4倍のMSAAに対応しています。
  • デメリット:特に旧式のモバイル端末や組み込みハードウェアでは、処理負荷が高くなる可能性があります。テクスチャや反射に関する問題の解決には役立ちません。

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

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

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

MSAAはQt自体によって実装されているわけではなく、基盤となる3D APIによって実行されます。そのため、パフォーマンスや品質は、ハードウェアやその3D APIの実装によって異なる場合があります。

時間的アンチエイリアシング

時間的アンチエイリアシング(Temporal AA)は、View3D の色バッファに対して処理されます。フレーム間でカメラをごくわずかに揺らし、新しい各フレームの結果を前のフレームとブレンドします。

  • 長所:カメラの微動により、そうでなければ失われてしまう細部を再現できる。パフォーマンスへの影響が小さい。
  • デメリット:高速で移動するオブジェクトの場合、1フレーム分のゴースト現象が発生する。

テンポラルAAは、マルチサンプルAAと組み合わせた場合、効果がありません。ただし、プログレッシブAAとは組み合わせることができます。

時間的アンチエイリアシングを制御するには、環境の「temporalAAEnabled 」および「temporalAAStrength 」プロパティを使用してください。

View3D {
    environment: SceneEnvironment {
        temporalAAEnabled: true
    }
}

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

プログレッシブAAは、View3D の色バッファに対して処理を行います。View3D によってレンダリングされたシーン内のすべてのコンテンツの動きが停止すると、フレーム間でカメラがごくわずかに揺らされ、新しい各フレームの結果が前のフレームとブレンドされます。蓄積されるフレーム数が多いほど、結果の画質は向上します。

  • 長所:パフォーマンスの低下を招くことなく、詳細な静止画を提供します。
  • デメリット:視覚的な変化が発生している場合は効果が得られません。8x PAAのレンダリング完了には(60fpsの場合)1/8秒かかり、これが目立つ可能性があります。
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 用のミップマップを生成させ、グラフィックスシェーダーでのテクスチャサンプリング時にミップマップチェーンの使用を有効にするには、mipFilter およびgenerateMipmaps プロパティを設定します。

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

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

スペキュラー照明によるアーティファクトは、スペキュラーアンチエイリアシングを有効にすることで低減できる場合があります。これらのアーティファクトは通常、明るい点として現れ、場合によってはちらつきを伴うことがあります。

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

アンチエイリアシングを適用していない、鏡面反射のハイライトが表現された建築シーン

アンチエイリアシング処理が施され、滑らかな鏡面反射が表現された建築シーン

View3D {
    environment: SceneEnvironment {
        specularAAEnabled: true
    }
}

注: 非常に滑らかな外観を持つマテリアルは 、スペキュラーAAを有効にすると、あたかも「more rough 」サーフェスを適用したかのように外観が変化する場合があります。これは、基礎となるライティング計算の結果によるものです。

高速近似アンチエイリアシング

ExtendedSceneEnvironment は、ポストプロセスエフェクトという形で、もう1つのアンチエイリアシング手法を提供します。FXAAを有効にするには、「fxaaEnabled 」を「true」に設定してください。

import QtQuick3D.Helpers

View3D {
    environment: ExtendedSceneEnvironment {
        fxaaEnabled: true
    }
}

アーティストが用いる裏技

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

モデルのシルエットが均一な場合は、ジオメトリの外縁を透明にする不透明度マップを適用できます。不透明度にグラデーションを使用すると、オブジェクトの縁が滑らかに消えていきます。 ただし、不透明度マップが1ピクセルの範囲内で完全に不透明から完全に透明へと直接変化する場合でも、上の例に見られるように、結果にはアンチエイリアス処理されたエッジが残ります。これは、不透明度マップを含むイメージマップが双線形補間を使用しているためです。

  • 長所:通常のアンチエイリアシングよりも滑らかな遷移表現が可能。レイヤー単位ではなく、モデル単位で適用できる。
  • デメリット:オブジェクトのシルエットが変化する場合には使用できない。透明度を利用する複数のモデルが重なると、フィルレート(描画速度)のパフォーマンスを消費し、これは多くの場合、貴重なリソースとなる。

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

上記の「反射のエイリアシング」の画像で示したように、問題に対する最も簡単な解決策は、アートワークを変更することである場合があります。モデルの角に気が散るようなスペキュラー光が発生している場合は、次のように自問してみてください。「マテリアルをより滑らかにすることはできないか?」「ジオメトリを修正して、反射角を滑らかにしたり変更したりすることはできないか?」「環境マップを編集して、鋭い境界線を和らげることはできないか?」

© 2026 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.