画像とテクスチャのベストプラクティス

大きなテクスチャと画像をレンダリングする際に必要となるメモリ帯域幅が原因で、アプリケーションの速度が低下することがあります。以下のヒントを参考に、最適な画像とテクスチャを作成して使用することで、アプリケーションのパフォーマンスを改善できます。

  • アプリケーションのパフォーマンスを最適化する最も簡単な方法は、小さなデータサイズを使って画像のディテールの量を削減することです。データサイズの調整 を参照してください。

  • Kanzi は、テクスチャに使用される画像を圧縮するために、Adaptive Scalable Texture Compression (ASTC)、AMD Texture Compression (ATC)、Ericsson Texture Compression (ETC)、PNG 圧縮、および PowerVR Texture Compression (PVRTC) をサポートしています。テクスチャを圧縮する (Compressing textures) を参照してください。

  • ユーザーがマルチコアプロセッサを備えた環境で Kanzi アプリケーションを実行すると、Kanzi は自動的に複数のCPUコアを使用して、kzbファイル内のGPUリソースをRAMにロードします。

    Kanzi は、アプリケーションで使用するコアの数を設定することができます。リソースを並列でロードする を参照してください。

  • 大きなテクスチャからダウンスケールされたサブレベルのセットを作成するためにミップマップを使用します。ミップマップはGPUメモリの使用量を3分の1増加させますが、テクスチャ全体をサンプリングする必要がない場合にパフォーマンスを向上させます。テクスチャ付きノードをスケーリングする際には、パフォーマンスを向上させるためにミップマップを使用してください。

    ミップマップ (Mipmap) の使用 を参照してください。

  • テクスチャフィルタリングを適用して、品質またはパフォーマンスを向上させます。この方法は、アプリケーションの動作を事前に把握している場合に非常に効果的です。テクスチャ (Texture) のフィルタリング を参照してください。

  • タイルアトラスを使用して、実行時にアプリケーションが行わなければならないテクスチャスイッチの数を減らすことで、アプリケーションのフレームレートを向上させます。

    タイルアトラスを使用する を参照してください。

  • OpenGL ES 2 仕様では、サイズが 2 の累乗ではないテクスチャのフィルタリングとミップマップは不要です。Kanzi がテクスチャを正しくレンダリングするために、次の点を確認してください。

    • ターゲットデバイスで GL_OES_texture_npot エクステンションがサポートされている。

    • テクスチャのサイズが 2 の累乗である。

    • テクスチャは Mipmap Mode プロパティが Base に設定され、Wrap Mode プロパティが Clamp に設定されています。

    • Project > Properties で Round up Image Dimensions to Nearest Power of Two プロパティを有効にします。

  • すべてのテクスチャに Mipmap Mode プロパティが少なくとも Nearest に設定されていることを確認してください。非常に小さなテクスチャ(例えば、4x4ピクセル以下)には Mipmap Mode 値 Base を使用してください。

  • 単色のみのテクスチャのサイズを 4 x 4 ピクセル以下にし、Texture Settings プロパティを設定します。

    • Minification Filter から Nearest へ

    • Magnification Filter から Nearest へ

    • Mipmap Mode から Base へ

    ../../_images/flat-color-texture-settings.png
  • Text Block を使用する場合、Kanzi はフォントとフォントサイズの組み合わせごとにグリフキャッシュテクスチャを作成します。グリフキャッシュテクスチャがいっぱいになったとき、または Kanzi アプリケーションのパフォーマンスを最適化するために、グリフキャッシュテクスチャのサイズを調整するために、高さと幅を設定できます。

    グリフキャッシュテクスチャのサイズ を参照してください。

  • Kanzi アプリケーションが無効なICCプロファイルを含むpng画像を使用する場合、Kanzi はアプリケーションの実行時にログに警告を出力します。すべてのpng画像からICCプロファイルを削除するには、Project > Properties で Remove ICC Profile From PNG Images プロパティを有効にします。

    このプロパティを有効にすると、Kanzi は kzb ファイルのエクスポート中にプロジェクト内の png 画像から ICC プロファイルを削除します。

    ../../_images/remove-icc-profile.png
  • glTFアセットのテクスチャやマテリアルで使用されるすべての画像リソースに、Ignore Embedded Color Profile プロパティが有効になっていることを確認してください。

    このプロパティ Kanzi Studio を有効にすると、

    • png、jpg、または exr 画像ファイルから ICC プロファイルを削除します。

    • 画像に対してガンマ補正を行いません。

    Kanzi Studio プロジェクトに glTF または glb アセットをインポートすると、Kanzi Studio はそのアセットで使用される画像リソースの Ignore Embedded Color Profile プロパティを自動的に有効にします。

    ../../_images/ignore-embedded-color-profile-enabled.png
  • ASTC、ETC2、JPEG、PNG、またはPVRTC形式を使用するすべての画像リソースに、sRGB Content プロパティが正しく設定されていることを確認してください。

    • 画像にsRGBカラ情報が含まれている場合、sRGB Content プロパティを有効に設定します。これはデフォルトの設定です。

      sRGBカラー情報を含む画像の sRGB Content プロパティを無効にすると、Kanzi がその画像を使用するテクスチャを予想以上に明るくレンダリングすることがあります。

    • 画像に法線、粗さ、またはオクルージョンマップなどの非カラー情報が含まれている場合は、sRGB Content プロパティを無効に設定してください。

      非色情報を含むテクスチャはリニアフォーマットで保存されます。sRGB Content プロパティを無効にすることで、Kanzi を設定し、カラースペース変換を行わずにイメージデータをシェーダーに直接渡します。

    ../../_images/srgb-content.png
  • 透明性を含むすべての画像リソースに、Linear Premultiply プロパティが正しく設定されていることを確認してください。Kanzi がアルファチャンネルをプリマルチプライ処理する場合は、次のようにします。

    • リニアカラースペースでは、Linear Premultiply プロパティを有効に設定します。

      これはデフォルト値であり、sRGB画像で最もアーティファクトが少なくなります。

    • 画像のカラースペースは通常sRGBで、Linear Premultiply プロパティを無効に設定します。

      これは、レガシーカラーワークフロー用に作成された画像に対してより良い結果をもたらす可能性があります。

    サードパーティツールでの画像の準備 を参照してください。

    ../../_images/linear-premultiply.png

関連項目

データサイズの調整

リソースを並列でロードする

ミップマップ (Mipmap) の使用

タイルアトラスを使用する

テクスチャを圧縮する (Compressing textures)

テクスチャ (Texture) のフィルタリング

カラーワークフロー

サードパーティツールでの画像の準備

アプリケーションのパフォーマンスのトラブルシューティング

テクスチャ (Textures)