ユニティ アトラス

Unity Atlas OvO について話す

アトラス 複数のテクスチャを組み合わせて結合テクスチャを作成するリソースです。Unity は、複数の描画呼び出しを発行する代わりに、この単一のテクスチャを呼び出して単一の描画呼び出しを発行できるため、パフォーマンスのオーバーヘッドが少なく、圧縮されたテクスチャに 1 回だけアクセスできるようになります。

具体的には、複数のテクスチャが 1 つのアトラスにマージされている場合、これらのテクスチャの通常の描画に関しては、DrawCall を 1 回呼び出すだけで済むため、レンダリングのバッチ処理が容易になり、レンダリングの消費が削減されます。

Unity には、サードパーティのプラグインを使用せずにアトラスを作成する 2 つの方法があります。

1.Sprite Packer (Unity2020.1 以降のバージョンでは非推奨)

まず、編集 > プロジェクト設定 > エディターでスプライト パッカー列を見つけて、常に有効 (レガシー スプライト パッカー) に設定する必要があります。画像のパッキング タグを設定して、画像をさまざまなアトラスに分類します。次に、ウィンドウ > 2D > に移動し
ここに画像の説明を挿入します
ます
ここに画像の説明を挿入します
。 [スプライト パッカー] をクリックすると、[スプライト パッカー] ウィンドウが開き、[パック] をクリックしてアルバムを作成します。

2.スプライトアトラス

また、スプライト アトラスを作成するには、[編集] > [プロジェクト設定] > [エディタ] で [スプライト パッカー] 列を見つけ、それを [常に有効] に設定する必要があります
ここに画像の説明を挿入します
。アトラスを描画するには、[パッキングするオブジェクト] でテクスチャまたはフォルダーを指定します。
ここに画像の説明を挿入します
新しいバージョンの SpriteAtlas は以下と比較されます。アトラスのサイズ、アトラス内の要素の配置とレイアウトをリアルタイムで表示できるようになったり、LateBinding (つまり、ビルドに含めるチェックを外すなど) などの機能を追加したりするなど、さらなる最適化が行われました。 Prefab と Atlas の間の依存関係を解消します)。

旧バージョンの Sprite Packer と比較して、Sprite Atlas を使用する場合、各アトラスは別個の SpriteAtlas で管理されます。アトラスの形式もこのリソースで定義されます。単一のアトラスをプレビューするには、それを配置する必要はありませんすべてのアトラスは SpritePacker エディタ ウィンドウでプレビューされますが、インスペクター ウィンドウでリアルタイムに視覚的にプレビューすることもできます。Sprite Packer のアルバム管理方法はアルバム数が多いと不便で非常に行き詰まりますが、新バージョンの操作方法は分割統治の概念であり、より便利で高速です。

: Resources フォルダーに配置された画像はアトラスにはパッケージ化されず、パッケージ化されたアトラスは Project/Library/AtlasCache に配置されます。

3. アトラスの組織戦略とリソースの最適化

アトラスを整理するためのポイント

  • アトラスはできる限りコンパクトである必要があり、アトラス自体は大きすぎても小さすぎてもいけません。
  • 同じインターフェイス上の小さなピクチャは、DrawCall を減らし、より多くのアトラスが更新されたときに 1 つのインターフェイスを更新する必要があるという状況を防ぐために、できる限り同じアトラス内に存在する必要があります。
  • 多くのインターフェイスによって参照される画像は、共通の画像コレクションの下で管理するのが最適です。

アトラスのサイズは 2 の n 乗である必要があることに注意してください。これは、OpenGL が画像テクスチャをロードするときに、使用されるメモリが自動的に 2 の n 乗に拡張されるためです。この自動変換プロセスは比較的遅いため、変換速度を向上させるために、リソースは標準イメージに変換されます。

テクスチャの最適化
テクスチャの最適化の目的は、テクスチャが占有するメモリをできるだけ小さくすることです。テクスチャがメモリにロードされた後のサイズの計算式は次のとおりです。

テクスチャ メモリ サイズ (バイト) = テクスチャ幅 x テクスチャ高さ x ピクセル バイト
ピクセル バイト = ピクセル チャネル数 (R/G/B/A) x チャネル サイズ (1 バイト/ニブル)

最適化の方向性:

  • テクスチャ サイズの調整:
    プロジェクトの実際の状況に基づいて、テクスチャ サイズを適切なサイズに縮小します。ここでの適切なサイズとは、画像内のほとんどの場合、レンダリング オブジェクトが到達できない最大サイズを指します。このサイズを 2 の N 乗に保つことが最善です。
  • テクスチャ圧縮方法を調整する:
    携帯電話で実行するときにテクスチャが占有するメモリをできるだけ少なくするには、テクスチャの圧縮形式を設定する必要があります。現在、Unity でサポートされている主な圧縮形式は次のとおりです: ETC/ETC2 Android では PVRTC、iOS では PVRTC、将来的には ASTC が使用される可能性があります。これらの圧縮形式には独自の特徴があります。
    ETC: 透過チャネルはサポートされませんが、すべての Android デバイスでサポートされます。
    ETC2: トランスペアレント チャネルをサポートします。Android デバイスの GPU は、使用する前に OpenGL es 3.0 をサポートしている必要があります。サポートしていないデバイスの場合、非圧縮形式でメモリに保存され、より多くのメモリを占有します。
    PVRTC: すべての Apple デバイスで使用できます。圧縮されたテクスチャの長さと幅は、2 のべき乗に等しい必要があります (POT、2 のべき乗)。
    ASTC:高品質かつ低メモリ使用量で将来的に一般的に使用される可能性のある圧縮形式ですが、現在一部の機種では対応していません。
  • テクスチャの再利用率を向上させる:
    共有ライブラリを作成します。ボタン/プログレスバー/背景/UI共通要素などの共通要素を共有ライブラリに配置します。
    大きな背景画像を 9 マスのグリッド画像に置き換えます。Jiugongge は、ゲーム開発において比較的一般的な UI コンポーネントです。
    テクスチャ要素は、変換を通じて複合テクスチャに結合できます。たとえば、下の図では、4 つの同一のテクスチャ インスタンスを回転/反転することで、対称的な背景イメージを取得できます。

4.アルバムはABとしてパッケージ化されています

なお、UGUI アトラスの場合、新旧を問わず、AssetBundle をビルドする際には、同じアトラスのグラフィック要素はすべて同じ AssetBundle に配置する必要があり、そうでない場合、同じアトラスのグラフィック要素が複数の AssetBundle に分散している場合、その後、各アセットバンドルにはこのアトラスのコピーが含まれます。最終結果として、パッケージの冗長性、メモリ拡張、ロード時間などの問題が発生します。スプライト アトラスを使用する場合、ビルドに含めることをチェックして追加できます。アトラスは AB にもパッケージ化されますこの問題を解決するパッケージ。

参考:

【Unityゲーム開発】SpriteAtlasとAssetBundleの最適な消費プラン
【メモリ最適化】Atlas編成戦略
Unity Atlas Atlasの使い方まとめ
Unity分離マップ アルファチャネル実践

おすすめ

転載: blog.csdn.net/weixin_44276280/article/details/130436213