アンチエイリアスの適用

アンチエイリアシングを Kanzi アプリケーション全体に適用することも、選択したノードにのみ適用することもできます。

  • アプリケーションの大部分のコンテンツでアンチエイリアシングが必要な場合は、アプリケーション全体に適用してください。アプリケーション全体へのアンチエイリアシングの適用 を参照してください。

  • アプリケーションの一部のパーツでのみアンチエイリアシングが必要な場合は、それらのパーツでのみサンプリングを使用します。

    • マルチサンプリングを使えば必要な処理能力が減りますが、すべてのハードウェアでこれを使用できるわけではありません。マルチサンプリングの使用 を参照してください。

    • スーパーサンプリングはより多くのリソースを必要としますが、より多くのハードウェアで使用できます。スーパーサンプリングの使用 を参照してください。

    • テンポラルアンチエイリアシングは、複数のフレームの情報を使用して、動きのある3Dコンテンツのエイリアシングとちらつきを低減します。テンポラルアンチエイリアシングの使用 を参照してください。

デフォルトで、Windows上の Kanzi Studio Preview と Kanzi Application Player は4サンプルを使用してアンチエイリアスを適用します。どちらも、使用したいアンチエイリアスの量を設定することができます。

Preview と Application Player でアンチエイリアスを設定する を参照してください。

Kanzi アプリケーションの優先マルチサンプリング方法を設定できます。マルチサンプリングメソッドの設定 を参照してください。

アプリケーション全体へのアンチエイリアシングの適用

アプリケーション全体にアンチエイリアスを適用する場合、使用したいアンチエイリアスサーフェスサンプルの数を設定します。この値は、Kanzi アプリケーションを実行したいデバイスに依存するため、そのデバイスのサポートされている値についてのドキュメントを確認してください。アンチエイリアスサーフェスサンプルの数をデバイスがサポートしていない値に設定した場合、Kanzi Engine はその値をデバイスドライバがサポートする最大値にクランプします。

アプリケーション全体にアンチエイリアシングを適用するには:

  • application.cfg の構成ファイルで、SurfaceSamplesAntialiasing パラメータを使用したいアンチエイリアスサーフェスサンプルの数に設定します。アプリケーション構成リファレンス を参照してください。

    たとえばアンチエイリアシングに4つのサンプルを使用するには、application.cfg に追加します。

    SurfaceSamplesAntialiasing = 4
    

または

  • C++アプリケーションの Application::onConfigure 関数で、configuration.defaultSurfaceProperties.antiAliasing パラメータを使用したいアンチエイリアスサーフェスサンプルの数に設定します。

    たとえばアンチエイリアシングに4つのサンプルを使用するには、Application::onConfigure に追加します。

    configuration.defaultSurfaceProperties.antiAliasing = 4;
    

SurfaceSamplesAntialiasing を参照してください。

Preview と Application Player でアンチエイリアスを設定する

デフォルトで、Windows上の Kanzi Studio Preview と Kanzi Application Player は4サンプルを使用してアンチエイリアスを適用します。どちらも、使用したいアンチエイリアスの量を設定することができます。

Kanzi アプリケーションを C++ アプリケーションと共に使用している場合、ターゲットデバイスで Kanzi アプリケーションを実行するのと同じように、Kanzi Studio Preview と Kanzi Application Player でコンテンツを表示するには、application.cfg ファイルでアンチエイリアスを設定できます。アプリケーション全体へのアンチエイリアシングの適用 を参照してください。

C++アプリケーションなしで Kanzi アプリケーションの Kanzi Studio Preview でアンチエイリアスを設定するには、

  1. Kanzi Studio メインメニューで、Project > Properties を選択します。Preview セクションの Properties で、Preview Working Directory プロパティの値を、Preview を構成するために application.cfg を保存したいディレクトリに設定します。

    例えば、Preview Working Directory プロパティを Application Player に設定します。これにより、Windows上で Preview と Kanzi Application Player に同じアンチエイリアス設定を適用できます。<ProjectName>/Application Player ディレクトリがまだ存在しない場合は、File > Export > Export as KZB Player for Windows を選択します。Kanzi Studio から Windows への Kanzi アプリケーションのビルドとデプロイ を参照してください。

    ../../_images/project-properties-myproject.png ../../_images/preview-working-dir-application-player.png
  2. 前のステップで設定したディレクトリで、application.cfg ファイルを作成または開いてください。Preview が使用するアンチエイリアスサンプルの数を SurfaceSamplesAntialiasing パラメータに追加して設定してください。

    たとえば、Preview でアンチエイリアスを無効にするには、application.cfg で次を追加します。

    SurfaceSamplesAntialiasing = 0
    
  3. Kanzi Studio で、Preview を再起動します。

    ../../_images/preview-restart-button-gray.png

マルチサンプリングの使用

選択した部分の Kanzi アプリケーションでエイリアシングを低減するために、マルチサンプリング(MSAA)を使用します。マルチサンプリングを機能させるには、Kanzi アプリケーションを実行したいハードウェアが次のいずれかの要件を満たしている必要があります。

  • Nvidia GPU と OpenGL ES 2.0 を使用する場合は、GL_NV_framebuffer_blit および GL_NV_framebuffer_multisample エクステンションが必要です。

  • Imagination Technologies GPU と OpenGL ES 2.0 を使用する場合は、GL_IMG_multisampled_render_to_texture エクステンションが必要です。

  • その他の OpenGL ES 2.0 ハードウェアでは、GL_EXT_multisampled_render_to_texture エクステンションが必要です。

マルチサンプリングはスーパーサンプリングよりもリソースを必要としません。ポリゴンをラスタライズする際、マルチサンプリングはポリゴンのエッジにあるフラグメントのみに追加のサンプルを生成しますが、スーパーサンプリングはポリゴン内のすべてのフラグメントに追加のサンプルを生成します。

(通常はモバイルプラットフォームで) タイルベースのマルチサンプリングを使用する場合、GPU は一度に 1 つの GPU タイルに対してのみ複数サンプルを生成します。GPU は、そのタイルをテクスチャメモリに書き戻す際にサンプルを暗黙的に解決し、メモリとGPU帯域幅を節約します。

最初の画像では、アンチエイリアスが適用されていません。2番目の画像では、8サンプルのマルチサンプリングが適用されています。

../../_images/anti-aliasing-off.png ../../_images/multisampling-8-samples.png

3Dコンテンツのマルチサンプリング

Kanzi がコンポジションターゲットにレンダリングする3Dコンテンツにマルチサンプルアンチエイリアシングを適用するには、コンテンツをレンダリングするために使用する Composition Target Render Pass で、使用したいアンチエイリアシングサンプルの数に Multisample Level プロパティを設定します。

Kanzi アプリケーションを実行したいデバイスのドキュメントを参照して、サポートされている値を確認してください。アンチエイリアスサンプルの数はデバイスに依存するためです。デバイスがサポートしていない値に Multisample Level プロパティを設定した場合、Kanzi Engine はその値をデバイスドライバがサポートする最大値にクランプします。

例:

  1. Library で、Alt を押しながら右クリック Rendering を選択し、Compose and Blit Pass を選択します。

    Compose and Blit Pass は、特定のマテリアルを使用して、Composition Target Render Pass のレンダーパスまたはテクスチャを画面にブリットすることを可能にするレンダーパス構造を含んでいます。

    Compose and Blit Pass レンダーパスプリセットには、次のレンダーパスが含まれています。

    • Composition Target Render Pass は、自身とその子孫のレンダーパスを1つ以上の合成ターゲットにレンダリングします。

      • Clear Render Pass は、現在のレンダーコンテキストのバッファの一部またはすべてをクリアします。

        デフォルトで、Compose and Blit Pass の Clear Render Pass は、最初のカラーバッファを透明な黒色で、デプスバッファを値1でクリアします。

        例えば、最初のカラーバッファを異なる色でクリアするには、Clear Color 0 プロパティを、Kanzi が Composition Target Render Pass にレンダリングするコンテンツの背景色として使用したい色に設定します。

      • Gather Lights Render Pass は、Compose and Blit Pass を使用するように設定した Viewport 2D ノード内の Light ノードを収集し、それらを子の Draw Objects Render Pass レンダーパスに渡します。

        • Draw Objects Render Pass という名前の Draw Objects は、特定のノードリストをレンダリングするために Camera ノードを設定し、それらのノードをフィルタリングし、フラスタムカリングを制御することができます。Draw Objects Render Pass はデフォルトで、最も近い先祖の Gather Lights Render Pass によって提供されるライトを使用してノードをレンダリングします。デフォルトで、Draw Objects Render Pass はデフォルトの Camera ノードを使用して Viewport 2D ノード内のすべてのノードをレンダリングします。

    • Blit Render Pass は、特定のマテリアルを使用して、1つ以上の単一テクスチャまたはキューブマップテクスチャを画面にブリットします。

      デフォルトで、この Blit Render Pass は Composition Target Render Pass がそのコンテンツをレンダリングする最初のカラーテクスチャを画面に描画します。

      ../../_images/compose-and-blit-pass-create1.png ../../_images/compose-and-blit-pass-library1.png
  2. Node Tree または Prefabs で、エイリアシングを低減したいコンテンツの Viewport 2D ノードを選択します。Properties で、Render Pass Prefab プロパティを Compose and Blit Pass レンダーパスプレハブに設定します。

    Kanzi は、Viewport 2D ノードでシーンをレンダリングし、Compose and Blit Pass レンダーパスプレハブを使用します。

    ../../_images/viewport-2d-in-the-project.png ../../_images/render-pass-prefab-set-to-compose-and-blit-pass.png ../../_images/anti-aliasing-off.png
  3. Library で、Compose and Blit Pass > Composition Target Render Pass を選択します。Properties で、Multisample Level プロパティを追加し、使用したいアンチエイリアスサンプルの数に設定します。

    例えば、Multisample Level を8に設定します。

    Kanzi アプリケーションを実行したいデバイスのドキュメントを参照して、サポートされている値を確認してください。アンチエイリアスサンプルの数はデバイスに依存するためです。デバイスがサポートしていない値に Multisample Level プロパティを設定した場合、Kanzi Engine はその値をデバイスドライバがサポートする最大値にクランプします。

    ../../_images/multisample-level.png

Kanzi は、Viewport 2D ノードのコンテンツにアンチエイリアスを適用します。

../../_images/multisampling-8-samples.png

2Dコンテンツのマルチサンプリング

2Dノードのコンテンツ Kanzi を合成ターゲットにレンダリングする場合、マルチサンプルアンチエイリアシングを適用できます。使用するアンチエイリアシングサンプルの数を設定するには、Render Target > Multisample Level プロパティを使用します。

Kanzi アプリケーションを実行したいデバイスのドキュメントを参照して、サポートされている値を確認してください。アンチエイリアスサンプルの数はデバイスに依存するためです。デバイスがサポートしていない値に Multisample Level プロパティを設定した場合、Kanzi Engine はその値をデバイスドライバがサポートする最大値にクランプします。

例:

  1. Node Tree または Prefabs で、エイリアスを低減したいコンテンツの 2D ノードを選択します。

    例えば、Image ノードを含むレイアウトコントロールノードを作成します。各 Image ノードを数度回転させます。

    ../../_images/node-tree-flow-layout.png ../../_images/preview-flow-layout-no-effect.png
  2. 2Dノードのコンテンツを合成ターゲットにレンダリングするように Kanzi を設定するには、Properties で次のいずれかを行います。

    • Node 2D > Force Composition プロパティを追加して有効にします。

      この方法で、Kanzi にノードをコンポジションターゲットにレンダリングさせます。

      ../../_images/properties-force-composition.png
    • Kanzi がノードをコンポジションターゲットに自動的にレンダリングするようにするプロパティ値を設定します。

      例えば、子ノードを持つ2Dノードの不透明度を調整したり、エフェクトを適用したりする場合、Kanzi はそのノードを一時的な合成ターゲットにレンダリングします。

      ../../_images/properties-opacity.png ../../_images/properties-effect-prefab.png
    ../../_images/preview-no-msaa.png
  3. Properties で、使用したいアンチエイリアスサンプルの数を Render Target > Multisample Level プロパティに追加して設定します。

    Kanzi アプリケーションを実行したいデバイスのドキュメントを参照して、サポートされている値を確認してください。アンチエイリアスサンプルの数はデバイスに依存するためです。デバイスがサポートしていない値に Multisample Level プロパティを設定した場合、Kanzi Engine はその値をデバイスドライバがサポートする最大値にクランプします。

    ../../_images/properties-multisample-level.png ../../_images/preview-4x-msaa.png

スーパーサンプリングの使用

ハードウェアがマルチサンプリングをサポートしていない場合、Kanzi アプリケーションの選択された部分でエイリアシングを低減するためにスーパーサンプリング (SSAA) を使用します。スーパーサンプリングはマルチサンプリングよりも多くのリソースを必要とします。ポリゴンをラスタライズする際、スーパーサンプリングはポリゴン内のすべてのフラグメントに対して追加のサンプルを生成しますが、マルチサンプリングはポリゴンのエッジにあるフラグメントに対してのみ追加のサンプルを生成します。

コンポジションターゲットのスーパーサンプリング

Composition Target Render Pass で3Dコンテンツをレンダリングする際に、コンポジションターゲットテクスチャをスーパーサンプリングすることができます。コンポジションターゲットテクスチャをスーパーサンプリングするには、Composition Target Render Pass が自動的に作成するコンポジションターゲットを使用する必要があります。

コンポジションターゲットをスーパーサンプリングするには:

  1. Library で、Alt を押しながら右クリック Rendering を選択し、Compose and Blit Pass を選択します。

    Compose and Blit Pass は、特定のマテリアルを使用して、Composition Target Render Pass のレンダーパスまたはテクスチャを画面にブリットすることを可能にするレンダーパス構造を含んでいます。

    Compose and Blit Pass レンダーパスプリセットには、次のレンダーパスが含まれています。

    • Composition Target Render Pass は、自身とその子孫のレンダーパスを1つ以上の合成ターゲットにレンダリングします。

      • Clear Render Pass は、現在のレンダーコンテキストのバッファの一部またはすべてをクリアします。

        デフォルトで、Compose and Blit Pass の Clear Render Pass は、最初のカラーバッファを透明な黒色で、デプスバッファを値1でクリアします。

        例えば、最初のカラーバッファを異なる色でクリアするには、Clear Color 0 プロパティを、Kanzi が Composition Target Render Pass にレンダリングするコンテンツの背景色として使用したい色に設定します。

      • Gather Lights Render Pass は、Compose and Blit Pass を使用するように設定した Viewport 2D ノード内の Light ノードを収集し、それらを子の Draw Objects Render Pass レンダーパスに渡します。

        • Draw Objects Render Pass という名前の Draw Objects は、特定のノードリストをレンダリングするために Camera ノードを設定し、それらのノードをフィルタリングし、フラスタムカリングを制御することができます。Draw Objects Render Pass はデフォルトで、最も近い先祖の Gather Lights Render Pass によって提供されるライトを使用してノードをレンダリングします。デフォルトで、Draw Objects Render Pass はデフォルトの Camera ノードを使用して Viewport 2D ノード内のすべてのノードをレンダリングします。

    • Blit Render Pass は、特定のマテリアルを使用して、1つ以上の単一テクスチャまたはキューブマップテクスチャを画面にブリットします。

      デフォルトで、この Blit Render Pass は Composition Target Render Pass がそのコンテンツをレンダリングする最初のカラーテクスチャを画面に描画します。

      ../../_images/compose-and-blit-pass-create1.png ../../_images/compose-and-blit-pass-library1.png
  2. Node Tree で、スーパーサンプリングしたいコンテンツを持つ Viewport 2D ノードを選択し、Properties で Render Pass Prefab プロパティを Compose and Blit Pass レンダーパスプレハブに設定します。

    Kanzi は、Viewport 2D ノードでシーンをレンダリングし、Compose and Blit Pass レンダーパスプレハブを使用します。

    ../../_images/viewport-2d-in-the-project.png ../../_images/render-pass-prefab-set-to-compose-and-blit-pass.png
  3. ノードをスーパーサンプリングするために使用する Composition Target Render Pass で、Resolution Multiplier プロパティを追加し、合成ターゲットテクスチャの解像度を乗算したい値に設定します。

    ../../_images/composition-target-render-pass-with-resolution-multiplier.png

レンダーターゲットテクスチャのスーパーサンプリング

Texture Brush や Image ノードの画像として使用するレンダーターゲットテクスチャをスーパーサンプリングすることができます。

レンダーターゲットテクスチャをスーパーサンプリングするには:

  1. Library Alt を押しながら右クリック Materials and Textures で、Render Target Texture を選択します。レンダーターゲットテクスチャ (Render Target Texture) を使用する を参照してください。

    これは、エイリアシング削減の対象となるノードのコンテンツをレンダリングするテクスチャです。

    ../../_images/create-render-target-texture.png
  2. Library で、先ほど作成した Render Target Texture を選択し、Properties で設定します。

    • レンダーターゲットテクスチャの Height と Width を、エイリアシングを軽減したいコンテンツの最終サイズの2倍にします。

      スケールダウンされる大きなテクスチャを使用する場合は、エイリアシングを発生させる粗いエッジを滑らかにします。

    • Minification Filter から Linear へ

    • Mipmap Mode から Base へ

    • Format から RGBA 8-bit へ

    ../../_images/render-target-texture-properties-supersampling.png
  3. Node Tree でスーパーサンプリングを適用したいノードを選択し、Properties で追加して設定します。

    • Off-Screen Rendering を有効にする

    • 最初のステップで作成したレンダーターゲットテクスチャに Render Target を設定します。

    ../../_images/render-target-properties.png
  4. 最初のステップで作成した Render Target Texture を、前のステップで選択したノードのスーパーサンプリングされた画像を表示したいノードに適用します。

    例:

    1. Node Tree Alt を押しながら右クリック で Empty Node 2D を選択します。

    2. Node Tree で Empty Node 2D ノードを選択し、Properties で Background Brush プロパティを追加し、ドロップダウンメニューで + Texture Brush を選択します。

      ../../_images/select-create-texture-brush.png
    3. Background Brush プロパティの横にある image0 をクリックし、最初のステップで作成した Empty Node 2D に表示したい Render Target Texture に Texture Brush の Brush Texture プロパティを設定します。

      ../../_images/image-property-render-target-texture.png
    4. Node Tree で Empty Node 2D を選択し、Properties で Layout Width と Layout Height プロパティを追加して設定し、Render Target Texture のコンテンツを表示したいサイズにします。

マルチサンプリングメソッドの設定

Kanzi アプリケーションが使用するマルチサンプリング方法を設定できます。利用可能な場合は、レンダーバッファからのブリッティングまたは暗黙のマルチサンプリングを選択できます。

レンダーバッファ Kanzi からブリットする際、最初にマルチサンプルレンダーバッファにレンダリングします。レンダリングが完了すると、Kanzi が結果を通常のテクスチャにブリットすることでサンプルを解決します。レンダーバッファからブリットするには、次のいずれかが必要です。

  • あなたのプラットフォームはOpenGL (ES) 3以上をサポートしています。

  • GL_ARB_framebuffer_object 拡張機能が利用可能です。

  • GL_NV_framebuffer_blit と GL_NV_framebuffer_multisample 拡張機能が利用可能です。

暗黙のマルチサンプリングとは、Kanzi がマルチサンプルデータの明示的な解決を必要とせずに、テクスチャに対してマルチサンプルレンダリングを行うことを意味します。つまり、データをダウンサンプリングしてピクセルごとに単一のサンプルにします。暗黙のマルチサンプリングには、次のいずれかの拡張機能が利用可能である必要があります。

  • GL_EXT_multisampled_render_to_texture

  • GL_IMG_multisampled_render_to_texture

デフォルトで、Kanzi は最適と判断したマルチサンプリング方法を選択します。

  • デスクトッププラットフォームでは、Kanzi はレンダーバッファからブリットします。

  • OpenGL ESを使用するプラットフォームでは、Kanzi は暗黙のマルチサンプリングを使用します。

マルチサンプリング方法を設定するには、次のいずれかを行います:

  • application.cfg の設定ファイルで、MultisamplePreference パラメータを Kanzi が優先するマルチサンプリング方式に設定します: Blit または Implicit。application.cfg を使用する を参照してください。

    例えば、レンダーバッファからのブリッティングを優先するには、application.cfg に追加します。

    MultisamplePreference = Blit
    
  • C++アプリケーションの Application::onConfigure 関数で、configuration.multisamplePreference パラメータを Kanzi が優先するマルチサンプリング方式に設定します: MultisamplePreferenceBlit または MultisamplePreferenceImplicit。

    例えば、レンダーバッファからのブリッティングを優先するには、Application::onConfigure に追加します。

    configuration.multisamplePreference = Renderer::RendererSettings::MultisamplePreferenceBlit;
    

マルチサンプルプリファレンス を参照してください。

テンポラルアンチエイリアシングの使用

テンポラルアンチエイリアシング (TAA) を使用すると、動きのある3Dコンテンツのエイリアシングとちらつきを低減できます。TAAは、現在および過去のフレームの情報とモーションベクトルを使用して、より滑らかなエッジを生成します。

Quality TAA
MSAA×32
MSAA×32
Quality TAA

TAAが適している場合

  • 一般的な車のモデルやショールームのメインカメラなど、メインの3Dパースペクティブシーン。

  • MSAAを使用せず、カラーを通常のテクスチャに書き込むコンポジション。

  • トランスレーション、ローテーション、スケールを含め、全体として動く剛体オブジェクトや車体。

  • 一般的な車の塗装、ガラス、および同様のブレンドなど、オペイクまたは一般的なトランスルーセントのマテリアル。

  • 一部のオブジェクトにモーションベクトルを出力させない場合は、それらのノードで Generate TAA Motion Vectors を無効にし、残りのノードではTAAを有効のままにします。

  • ほとんどのコンテンツでは、Default TAA と Clean Geometry を組み合わせて使用します。静止した細かい継ぎ目やゆっくり回転するシルエットでより高い安定性が必要な場合は、Quality TAA を使用します。パーティクルを使用する場合は、Default TAA と Fine Detail Friendly を組み合わせて使用します。

TAAが適していない場合

  • TAAとMSAAは同時に使用できません。TAAを有効にする前にMSAAを無効にしてください。

  • オーソグラフィックカメラ、シャドウマップ、キューブ/IBL、および同様のパスは、メインビューのTAAを経由しないため、それ自体ではTAAを実行しません。

  • ネストされた内側のコンポジションでは、TAAは再度実行されません。最も外側のコンポジションのみが有効になります。

  • 視覚的な結果が主にスキニングされたキャラクターや強いモーフ変形に依存している場合、動きが正確に計算されません。そのため、ゴーストやちらつきが発生しやすく、TAAの効果は限定的です。

TAAを使用できるが、特別な注意が必要な場合

  • アディティブライトとグローは、背後にあるオブジェクトの速度を上書きしないように、意図的にモーションベクトルから除外されています。

  • 非常に細い継ぎ目、ライトの隙間のエッジ、強いスペキュラーのきらめきに対して、TAAはちらつきを低減することが多いものの、MSAAほどシャープなエッジや完全にちらつきのない結果は得られません。

  • モーションベクトルを収集するオブジェクトと収集しないオブジェクトが同じダイナミックバッチ内に混在すると、バッチ全体の速度データが失われることがあります。これにより、局所的な品質が低下する可能性があります。これらのオブジェクトを同じバッチに混在させないでください。

  • TAAを有効にした後、TAAを無効にして再度有効にした後、または TAA Mode や TAA Profile を切り替えた後は、最初の数フレームで履歴を再構築する必要があるため、一時的に不安定に見えることがあります。

  • 高速で大きな動きや強いパースペクティブのスケール変化の際には、新たに現れたピクセルに履歴がありません。そのため、シルエットに一時的なエイリアシングが発生することがあります。

TAAの使用方法

  1. Composition Target Render Pass を選択します。

    ../../_images/TAA-composition-target-render-pass-with-taa.png
  2. Properties で TAA Mode を設定します。

    • Default TAA は、ほとんどのコンテンツで画質とリソース使用量のバランスを取ります。

    • Performance TAA は、TAAのリソースコストを最小限に抑えます。

    • Quality TAA は、静止した細かい継ぎ目やゆっくり回転するシルエットの安定性を向上させます。

    • No TAA はTAAを無効にします。

  3. TAA Profile を設定します。

    ../../_images/TAA-profile-selection.png
    • パーティクルや細かいスペキュラーハイライトを含むコンテンツには、Fine Detail Friendly を使用します。

    • 外部の背景とコンポジットする場合は、External Background を含むプロファイルを使用します。

    • TAA Debug Visualize MV を使用すると、モーションベクトルを生成するコンテンツを可視化できます。

    ../../_images/TAA-debug-visualize-MV-preview.png
  4. 外部背景を合成するには、Using an external background with TAA の説明に従って TAA Profile と TAA External Background を設定します。

    ../../_images/TAA-external-background.png

TAA モードの選択

有効なすべての TAA モードは、各フレームにサブピクセルジッターを適用し、モーションベクターを使用して前のフレームを現在のフレームに位置合わせします。必要な画質と使用可能なレンダリングリソースに基づいてモードを選択します。

../../_images/TAA_mode-selection.png

TAA モード

使用する場面

主な特徴

No TAA

TAA を使用しない場合。

TAA を無効にします。

Performance TAA

リソース使用量の最小化を優先する場合。

5 サンプルの十字型近傍と半分の解像度のモーションベクターを使用します。静止時の細い継ぎ目の蓄積は行わず、その蓄積に使用する追加バッファも割り当てません。

Default TAA

一般的なコンテンツで画質とリソース使用量のバランスが必要な場合。

静止時の細い継ぎ目を複数フレームにわたって安定させ、半分の解像度のモーションベクターを使用します。動きがある間は、動きのスピードに基づいて現在のフレームと履歴をブレンドし、古いシルエットによる残像を軽減します。

Quality TAA

静止時の細い継ぎ目をよりきれいにし、ゆっくり回転するシルエットをより安定させる必要がある場合。

半精度の履歴、3 × 3 のサンプル近傍、静止時の Catmull-Rom による履歴サンプリング、およびフル解像度のモーションベクターを使用します。ゆっくりとした回転中は、短時間蓄積を継続します。

Default TAA は 5 サンプルの十字型近傍を使用します。シーンが静止している間は、近傍サンプルから現在のフレームのジッターを除去し、細い継ぎ目を数フレームにわたって蓄積します。孤立したハイライトは、この静止時の蓄積から除外されます。回転軸の近くにあり、ほとんどピクセル単位で移動しないハイライトについては、明るい筋が残り続けるのを避けるために現在のフレームを使用します。イメージが動き始めると、Kanzi は静止時の蓄積を停止し、動きのスピードに基づいて現在のフレームと履歴をブレンドします。

デフォルトでは、Default TAA は履歴に 8 ビットカラーを使用します。Composition のカラーターゲットが浮動小数点フォーマットを使用している場合、履歴は現在のイメージに合わせて半精度カラーを使用します。半分の解像度のモーションベクターは、カバレッジによる重み付けでアップスケールされ、カバーされていないピクセルがオブジェクトのシルエットに広がるのを防ぎます。

Performance TAA は、履歴を 5 サンプルの十字型近傍の範囲にクランプし、現在のフレームとブレンドします。静止時の継ぎ目の蓄積、3 × 3 の近傍サンプリング、Catmull-Rom による履歴サンプリング、および回転中の短時間の蓄積は使用しません。このモードは、静止時の継ぎ目の蓄積を行わない場合のアンチエイリアシング品質とリソース使用量を評価するために使用します。

Quality TAA は RGBA16F の履歴を使用するため、非常に暗い継ぎ目が 8 ビットカラーの精度によって失われることがありません。より広い 3 × 3 の近傍は、斜めのエッジ上の細い継ぎ目も含みます。ゆっくりとした回転中は、シルエットを安定させるために短時間蓄積を継続します。より速い回転中は、ゴーストを軽減するために現在のフレームに戻ります。

注釈

Quality TAA は Default TAA よりも多くのメモリ帯域幅とグラフィックスメモリを使用します。2 つの半精度履歴バッファ、より広いサンプル近傍、およびフル解像度のモーションベクターを使用します。

TAA 結果のデプスソースの選択

TAA Result Depth Source を使用して、コンポジションターゲットレンダーパス (Composition Target Render Pass) が Result Depth Texture を通じて提供するデプステクスチャを選択します。被写界深度 (DOF) などのデプスベースのポストプロセスで TAA のジッターによるエッジのちらつきが発生する場合は、そのジッターを含まないデプスを使用できます。

このプロパティは Result Depth Texture にのみ影響します。Result Texture 0 は引き続き TAA のカラー結果を提供します。TAA Profile はデプスソースを選択しません。

TAA Result Depth Source

動作

Composition Target (デフォルト)

Depth Texture Format または Depth Target で設定した、カラーパスのデプスを提供します。このデプスには TAA のサブピクセルジッターが含まれます。デフォルトでは既存の動作が維持され、デプステクスチャは追加されません。

Unjittered From MV

TAA が有効で、有効なデプス設定がある場合に、TAA のジッターを含まないデプスを提供します。このデプスには、対象となるバッチを含め、TAA のモーションベクター生成に参加するオペイクオブジェクトが含まれます。シーン全体のデプスを表すものではありません。

ポストプロセスが Result Depth Texture をサンプリングしない場合、または被写界深度の結果がすでに許容できる場合は、Composition Target のままにします。

TAA のジッターを含まないデプスを使用するには、次の手順を実行します。

  1. メインの 3D ビューに対して TAA を実行し、ポストプロセスにデプスを提供する最も外側のコンポジションターゲットレンダーパスを選択します。

    ネストされた子 Composition で TAA とジッターなしのデプスを再度有効にしないでください。

  2. Properties で、次のいずれかのプロパティを設定します。

    • Depth Texture Format をデプスを含むフォーマットに設定します。

    • Depth Target をディメンジョンが一致するデプステクスチャに設定します。

  3. Composition の MSAA を無効にし、TAA Mode を Performance TAA、Default TAA、または Quality TAA に設定します。

    TAA と MSAA は同時に使用できません。No TAA の場合、または有効なデプス構成がない場合、Unjittered From MV は効果を持ちません。

  4. ポストプロセスパスまたはマテリアルのデプスインプットを、このパスの Result Depth Texture にバインドします。

    Depth Target を直接サンプリングした場合や、別のパスのデプスを使用した場合は、選択したリザルトデプスソースは使用されません。

  5. まず Composition Target で被写界深度の結果を確認します。TAA のジッターによってエッジやフォーカスプレーンがちらつく場合は、Properties の TAA カテゴリで TAA Result Depth Source を Unjittered From MV に設定します。

  6. TAA Profile を TAA Debug Visualize MV に設定すると、どのオブジェクトがモーションベクトルを生成しているかを確認できます。

    モーションベクトルを生成しないオブジェクトは、ジッターなしのデプスに含まれません。確認後は、シーンで使用しているプロファイルに戻してください。

注釈

プロパティ識別子は CompositionTargetRenderPass.TAADepthSource です。Composition Target の値は 1、Unjittered From MV の値は 2 です。

デプスのカバー範囲とモーションベクトル

ジッターなしのデプスには、モーションベクトルの生成に参加するオペイク (Opaque) オブジェクトのみが含まれます。モーションベクトルの生成に参加するだけでは、トランスルーセント (Translucent) なコンテンツはこのデプスに含まれません。ガラス、トランスルーセント (Translucent) なサーフェス、パーティクル、アディティブ (Additive) エフェクト、および 3D または バッチ描画パス以外のオブジェクトは、通常、この結果に正しいデプスを提供しません。

ジッターなしのデプスに含める必要があるオブジェクトでは、Generate TAA Motion Vectors を有効のままにします (デフォルト)。モーションベクトルの生成には、Opaque や Alpha over などのサポートされたブレンドモード (Blend Mode) も必要です。アディティブ (Additive) ブレンドは対象外です。モーションベクトルの要件を満たさないオブジェクトがバッチに含まれている場合、そのバッチ全体がジッターなしのデプスに含まれないことがあります。

オブジェクトがカラーでは表示されていても、ジッターなしのデプスには含まれていない場合があります。被写界深度では、そのオブジェクトが背後のオブジェクトを遮蔽していないように見えたり、ファープレーンにあるかのようにぼかされたりすることがあります。これらのオブジェクトを被写界深度に反映させる必要がある場合は、Composition Target を使用してカラーパスのデプスを保持するか、それらのオブジェクトについてジッターなしのデプスに依存しないようにしてください。

たとえば、シースルービューで車体の Generate TAA Motion Vectors を無効にすると、その車体はジッターなしのデプスに含まれなくなります。シースルービューの間は、Composition Target を使用するか、ジッターなしのデプスに依存する被写界深度エフェクトを無効にしてください。モーションベクトルの生成を元に戻した後は、再び Unjittered From MV を使用できます。

結果の確認

プロパティを変更しても目に見える効果がない場合、または被写界深度のエッジが依然としてジッターする場合は、次の点を確認してください。

  • ポストプロセスにデプスを供給しているコンポジションターゲットレンダーパス (Composition Target Render Pass) を変更していること。

  • ポストプロセスのインプットが、そのパスの Result Depth Texture をサンプリングしていること。

  • TAA Mode が有効で、MSAA が無効であること。

  • Depth Texture Format または Depth Target が有効なデプス構成を提供していること。

シーンを切り替えると、被写界深度で一時的に誤ったぼかし範囲や前景の遮蔽が表示されることがあります。カメラの動きが少なく、構造が似ているシーン間のトランジションでは、結果が 1 フレームの間、以前のデプスを保持することがあります。

デプスソースのオプションを切り替えると、TAA の履歴とデプスが再調整される間、被写界深度やアンチエイリアシングが一時的に不安定になることもあります。新しい設定を評価する前に、1~2 フレーム待ってください。

パフォーマンスに関する考慮事項

カメラまたはオブジェクトが動いている場合、Unjittered From MV は、モーションベクトルの生成に参加するオペイク (Opaque) オブジェクトのデプス描画を追加します。シーンが静止していてデプスが安定している場合は、以前のデプスを再利用してコストを削減できます。

TAA モーションベクトル生成の制御

Generate TAA Motion Vectors プロパティを使用して、ノードが TAA 用のモーションベクトルを生成するかどうかを制御します。

ノードのモーションベクトル生成を制御するには:

  1. Node Tree で、ノードを選択します。

  2. Properties で、アドプロパティ (Add Properties) ウィンドウを開きます。

  3. アドプロパティ (Add Properties) ウィンドウの Node で、Generate TAA Motion Vectors プロパティを追加します。

  4. Generate TAA Motion Vectors を設定します。

    • ノードの TAA モーションベクトルを生成するには、プロパティを有効にします。

    • ノードが TAA モーションベクトルを生成しないようにするには、プロパティを無効にします。

    ../../_images/TAA-add-property-TAA-debug-visualize-MV.png ../../_images/TAA-generate-taa-motion-vectors.png

注釈

Generate TAA Motion Vectors は子ノードに継承されません。子ノードのモーションベクトル生成を制御するには、そのノードにプロパティを追加して設定します。

TAA で外部背景を使用する

3D シーンにトランスパレント (Transparent) な領域があり、最終的な背景がアプリケーションまたは別の 2D レイヤーから提供される場合は、TAA で外部背景を使用します。

外部背景がない場合、TAA は 3D シーンの背後にあるトランスパレント (Transparent) なピクセルやその他の無効なピクセルに対してコンポジション結果を蓄積します。これにより、3D オブジェクトのエッジが不安定になることがあります。外部背景を指定すると、TAA は Resolve ステージでその背景を使用するため、最終イメージに表示されるのと同じ背景に対してアンチエイリアシングが計算されます。

3D シーンがすでにオペイク (Opaque) な背景をレンダリングしている場合、通常この機能は必要ありません。解決された出力のアルファ値は 1 で、Viewport2D の領域全体を覆います。

外部背景の使用

TAA で外部背景を使用するには:

  1. コンポジションターゲットレンダーパス (Composition Target Render Pass) で、TAA Profile を次のいずれかの値に設定します。

    • External Background

    • External Background + Fine Detail Friendly

    シーンにパーティクル、細かいハイライト、または同様のディテールが含まれる場合は、External Background + Fine Detail Friendly を使用します。

  2. TAA External Background で、アプリケーションまたは 2D レイヤーが表示する背景を含むテクスチャを設定します。

    同じリソース、またはそれに一致するコンテンツを使用してください。テクスチャの解像度とクロップ領域も、最終イメージに表示される背景と一致している必要があります。

    注釈

    Kanzi は、Android Surface やその他のシステムレイヤーから背景を自動的に読み取りません。一致するテクスチャの提供はアプリケーションの責任です。

  3. アプリケーションのレイアウトと Composition のビューポートが揃っていることを確認してください。

    TAA は、外部背景テクスチャを現在の Composition のビューポートに自動的にマッピングします。通常、ビューポートを個別に設定する必要はありません。

    3D ビューポートと 2D 背景で位置、サイズ、またはクロップ領域が異なる場合、背景が 3D シーンのエッジとずれることがあります。

注釈

TAA と MSAA は同時に使用できません。外部背景で TAA を使用する前に、Composition の MSAA を無効にしてください。

考慮事項

  • 静的な外部背景を使用することをお勧めします。背景の連続的なアニメーションや頻繁な変更は、エッジの安定性を低下させる可能性があります。

  • TAA External Background を変更した場合、背景ハンドルを変更した場合、または外部背景用の TAA プロファイルに切り替えたりそこから切り替えたりした場合、TAA は履歴をクリアして再構築します。最初の数フレームは一時的に不安定になることがあります。

  • TAA Profile を外部背景用のプロファイルに設定しない場合、または TAA External Background を割り当てない場合、Kanzi は TAA Resolve 時に外部背景を使用しません。

TAA パフォーマンスの例

Android 12 (SM8475 / Adreno 730) を搭載したデバイスでのテストで、30 FPS の固定フレームレートかつ Idle を無効にした状態で TAA のパフォーマンスへの影響を測定しました。このテストでは、同じシーンをアンチエイリアスなし、MSAA 4x、TAA で比較しています。

アンチエイリアス

アプリケーション CPU

GPU Busy

グラフィックスメモリ

AA なし

23.3%

60.4%

1087 MB

MSAA 4x

24.7%

70.5%

1088 MB

TAA

26.6%

65.8%

1185 MB

MSAA 4x およびアンチエイリアスなしと比較した TAA のパフォーマンス

アンチエイリアスなしと比較して、TAA ではアプリケーションの CPU 使用率が 3.3 ポイント、GPU Busy が 5.4 ポイント、グラフィックスメモリが 98 MB 増加しました。

MSAA 4x と比較して、TAA ではアプリケーションの CPU 使用率が 1.9 ポイント、グラフィックスメモリが 97 MB 増加した一方、GPU Busy は 4.7 ポイント低くなりました。このテストでは、MSAA 4x のグラフィックスメモリ使用量はアンチエイリアスなしよりも 1 MB 多いだけでした。

このテストにおける TAA の主な追加コストは、アプリケーションの CPU 使用率とグラフィックスメモリでした。GPU Busy は他の構成とほぼ同じ範囲にとどまり、アンチエイリアスなしと MSAA 4x の間の値でした。

結果は、シーンの複雑さ、TAA の設定、およびターゲットデバイスによって異なります。最適なアンチエイリアス方式と TAA モードを判断するには、ターゲットハードウェア上でコンテンツをプロファイリングしてください。

関連項目

アプリケーション構成リファレンス

レンダーターゲットテクスチャ (Render Target Texture) を使用する

コンポジションターゲットへのコンテンツのレンダリング

2Dノードのエフェクト

レンダリングのベストプラクティス