Android App Bundle'larda doku sıkıştırma biçimlerini hedefleme

Dokular, bir 3D modelin yüzeyine uygulanabilen görüntülerdir. Dokular 2D oluşturucular tarafından imgeler veya arka planlar gibi öğeler çizmek için de kullanılır. Bu sayfada, oyunlarda kullanılan popüler doku sıkıştırma biçimleri ve bunları Android App Bundle'larda hedefleyebilirsiniz. Okunanlar Android App Bundle'lar hakkında ve Bunu başlatmadan önce Play Asset Delivery'yi tıklayın. rehberini inceleyin.

Arka plan

GPU'lar genellikle bir dizi doku sıkıştırma biçimini destekler. CEVAP Doku sıkıştırma biçimi (veya TCF), GPU'lar için optimize edilmiş bir dosya biçimidir. GPU, bir dokuyu daha hızlı yüklenir ve daha az bellekle oluşturur. bellekte bir RGBA değerleri dizisi kullanıyordu. Bu destek hizmeti donanım düzeyi: GPU üreticisi, bileşenleri grafik kartlarına yerleştirir destekleyen ve oluşturan bir kod çipi ile çalışır.

Modern mobil donanımlarda yaygın olarak kullanılan doku sıkıştırma biçimleri şunlardır:

  • ASTC: Önceki biçimlerin yerini alacak şekilde tasarlanan yeni biçim. Şundan daha esnek: kullanarak önceki biçimlerle uyumlu değildir. Bu biçim kullanılıyor oyununuzun boyutunu optimize etmenin iyi bir yoludur.
  • ETC2: OpenGL ES 3.0 ve sonraki sürümleri destekleyen tüm cihazlar tarafından desteklenir. Buna hemen hemen tüm etkin Android mobil cihazlar dahildir.

Bu biçimler, Android'in aşağıdaki yaklaşık yüzdeleri tarafından desteklenmektedir cihazlar:

Doku sıkıştırma biçimi Destek sunan Google Play cihazlarının yüzdesi
ASTC >%80
HGS2 >%95

PC Üzerinde Google Play Games'i çalıştıran masaüstü bilgisayar GPU'ları da şu biçimi destekler:

  • DDS veya S3TC: Bazen BCn, DXTC veya DXTn olarak adlandırılır.

Daha eski ve artık önerilmeyen doku sıkıştırma biçimleri şunlardır:

  • ETC1: Çoğu cihazda desteklenir. Bu biçimde şeffaflık desteği yoktur. Ancak oyunlar alfa bileşeni için ikinci bir doku dosyası kullanabilir.
  • PVRTC: iOS oyunları arasında popülerdir ve bazı Android cihazlarda desteklenir.

ETC1 desteği, yalnızca çok eski sürümleri destekleyen oyunlar için bir gerekliliktir cihazlar veya OpenGL ES 3.0'ı desteklemeyen belirli Android TV cihazları daha yüksek olabilir.

Varsayılan biçim

Kullanılabilir çok sayıda biçim (farklı cihaz desteği düzeyleriyle) sayesinde oyun dokularınızı oluştururken hangi biçimleri kullanacağını bilmeyebilir. Kullanıcı uygulama paketi biçimi, varsayılan doku sıkıştırması seçmenize olanak sağlar biçimini seçin. Cihaz, belirtilen diğer cihazı desteklemiyorsa biçimlerinde, bu varsayılan biçimi kullanan öğeler yüklenir.

Çok eski cihaz donanımını hedeflemiyorsanız ETC2 iyi bir seçimdir seçin. ETC2 biçimlerini kullanmanız garanti edilen biçim OpenGL ES 3.0'da desteklenir. Bu biçimler, Vulkan grafik API'sinde de kullanılabilir.

ASTC biçimi, çeşitli sıkıştırma bloku boyutlarını tanımlamalıdır; daha fazla sıkıştırma için azaltılmış resim kalitesinden seçerek değiştirebilirsiniz. Kaynak sanat malzemesinin niteliğine bağlı olarak, belirli bir doku için Kabul edilebilir görsel kaliteyi korumak için daha küçük veya daha büyük bir blok boyutu seçmek.

Oyununuz PC Üzerinde Google Play Games'i destekliyor ve Vulkan'ı kullanıyorsa S3TC dokularını içermelidir. S3TC biçimleri, tüm masaüstü GPU'ları için geçerlidir.

Uygulama paketi oluşturma

Google Play, şunlar için optimize edilmiş APK'lar oluşturmak ve sunmak için Android App Bundle'ı kullanır: her bir kullanıcının cihaz yapılandırmasına karşılık geliyor. Böylece kullanıcılar yalnızca kodu ve kaynakları en iyi uygulamaları paylaşacağım. Bu optimize edilmiş APK'lar tek bir doku grubu içerir reklam öğeleri, cihaz için optimum sıkıştırma biçimiyle biçimlendirilmiştir.

Oyununuz Unity'de değilse uygulama paketi oluşturmak için Gradle kullanın. İleri düzey kullanıcılar bundletool kullanmak isteyebilir.

Oyununuz Unity'deyse Play Asset Delivery ile uygulama paketleri desteği Unity 2021.3 ve sonraki sürümlerde kullanılabilir. Daha fazla bilgi için Unity belgeleri. Daha düşük alt düzeyli bir uygulama paketi oluşturmak için bir Unity eklentisi kullanabilirsiniz sürümlerinde yer alır.

Gradle kullan

  1. Projenizde Android Gradle eklentisinin sürümünü güncelleyin. build.gradle dosyasını 4.1 veya sonraki bir sürüme yükseltin (örneğin, com.android.tools.build:gradle:4.1.0) tıklayın.

  2. Oyununuz için hedeflemek istediğiniz cihaz türü grubunu belirleyin ve desteklediği doku sıkıştırma biçimlerini (daha fazla bilgi için biçimleri için Arka plan bölümüne bakın).

  3. önceki adım. Bu, yazılım kullanarak model sayfaları oluşturmayı içerebilir beğeni TexturePacker veya ham öğeleri belirli bir biçime sahip olanlara dönüştüren bir komut dosyası çalıştırmak (örneğin, astc-kodlayıcı).

  4. Öğe paketleri oluşturun (bkz. C++ veya Java için oluşturun), Bunlar, oyun öğelerinizi içeren ve Play Asset Delivery tarafından kullanılan bir araçtır. Örneğin, Örneğin, her seviye için bir öğe paketi veya farklı bölümleri vardır.

  5. Öğe paketlerinizin içine her doku sıkıştırma biçimi için dizinler ekleyin bir şablon görevi görür. Desteklenen sonekleri doku sıkıştırmasına karşılık gelen doku dizini adları biçimi olmalıdır.

    Adında sonek olmayan bir dizin oluşturun (örneğin, common/src/main/assets/textures/) bilgileri gösterilir. Bu dizinde, varsayılan biçimini seçin. Bu varsayılan biçim şu tarayıcı tarafından desteklenmelidir: çoğu cihazda (örneğin, ETC1 veya ETC2). Bir cihaz belirtilen diğer biçimler (örneğin, aşağıdaki tabloda yer alan PVRTC ve ASTC), Google Play Store bunun yerine bu dizini yükler.

    Önceki dizin Sonraki dizin
    common öğe paketi:
    common/build.gradle
    common/src/main/assets/textures/...
    common öğe paketi:
    common/build.gradle
    common/src/main/assets/textures/...
    ortak/src/main/assets/textures#tcf_astc/...
    ortak/src/main/assets/textures#tcf_pvrtc/...
    level1 öğe paketi:
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1 öğe paketi:
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1/src/main/assets/textures#tcf_astc/...
    level1/src/main/assets/textures#tcf_pvrtc/...
    level2 öğe paketi:
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2 öğe paketi:
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2/src/main/assets/textures#tcf_astc/...
    level2/src/main/assets/textures#tcf_pvrtc/...
  6. Öğelerinizin bölünmesini etkinleştirmek için uygulamanızın build.gradle dosyasını güncelleyin öğe paketi sayısı ekleyin.

    // In the app build.gradle file:
    android {
        ...
        bundle {
            texture {
                enableSplit true
            }
        }
    }
    
  7. Android Studio'da Derleme > İmzalanmış Paket / APK oluşturun veya başlatmak için Görev satırından görevi paketinizi oluşturun.

Google Play Unity eklentisini kullanma

Play Asset Delivery için Unity eklentisini (veya paketini) edinin uygulama paketi oluşturmayı öğreneceksiniz.

Öğeleri hazırlama

Doku öğelerinizi uygulama paketi oluştururken hazırlamak için aşağıdakileri yapın:

  1. Sahnenizi ve öğelerinizi birden fazla Unity'de paketleyin AssetBundles olarak değiştirin.

  2. Oyununuz için hedeflemek istediğiniz cihaz türü grubunu belirleyin ve desteklediği doku sıkıştırma biçimlerini (daha fazla bilgi için biçimleri için Arka plan bölümüne bakın).

  3. AssetBundles çoklu oluşturmak için oyununuzun derleme komut dosyasını değiştirin kez, desteklemek istediğiniz her doku biçimi için bir kez. Bkz. aşağıdaki örnek komut dosyasını kullanın:

    using Google.Android.AppBundle.Editor;
    using UnityEditor;
    
    public class MyBundleBuilder
    {
       [MenuItem("Assets/Build AssetBundles TCF variants")]
       public static void BuildAssetBundles()
       {
           // Describe the AssetBundles to be built:
           var assetBundlesToBuild = new []
           {
               new AssetBundleBuild
               {
                   assetBundleName = "level1-textures",
                   assetNames = new[] {"level1/character-textures", "level1/background-textures"}
               },
               new AssetBundleBuild
               {
                   assetBundleName = "level2-textures",
                   assetNames = new[] {"level2/character-textures", "level2/background-textures"}
               }
           };
    
           // Describe where to output the asset bundles and in which formats:
           var outputPath = "Assets/AssetBundles";
           var defaultTextureFormat = MobileTextureSubtarget.ETC2;
           var additionalTextureFormats = new[] { MobileTextureSubtarget.ASTC, MobileTextureSubtarget.PVRTC }
           var allowClearDirectory = true;
    
           // Generate asset bundles:
           AssetBundleBuilder.BuildAssetBundles(
               outputPath,
               assetBundlesToBuild,
               BuildAssetBundleOptions.UncompressedAssetBundle,
               defaultTextureFormat,
               additionalTextureFormats,
               allowClearDirectory);
    
           // While in this example we're using the UI to configure the
           // AssetBundles, you can use the value returned by BuildAssetBundles
           // to configure the asset packs, if you want to build the bundle
           // entirely using the scripting API.
       }
    }
    
  4. Her doku öğesinin çıkışının doğru son eki (örneğin, #tcf_astc).

    Adında sonek olmayan bir dizinin çıkış sağladığını doğrulayın (örneğin, Assets/AssetBundles/) bilgileri gösterilir. Bu dizinde doku öğeleri olabilir. Bu varsayılan biçim çoğu cihaz tarafından desteklenmelidir ( ör. ETC2). Cihaz belirtilen diğer biçimleri desteklemiyorsa (örneğin, önceki adımdaki koddaki ASTC), ardından Google Play Mağaza, bunun yerine bu dizini yükler.

    Assets/AssetBundles.meta
    Assets/AssetBundles/AssetBundles
    Assets/AssetBundles/AssetBundles.manifest
    Assets/AssetBundles/AssetBundles.manifest.meta
    Assets/AssetBundles/AssetBundles.meta
    Assets/AssetBundles/samplescene
    Assets/AssetBundles/samplescene.manifest
    Assets/AssetBundles/samplescene.manifest.meta
    Assets/AssetBundles/samplescene.meta
    Assets/AssetBundles/texturesbundle
    Assets/AssetBundles/texturesbundle.manifest
    Assets/AssetBundles/texturesbundle.manifest.meta
    Assets/AssetBundles/texturesbundle.meta
    Assets/AssetBundles#tcf_astc.meta
    Assets/AssetBundles#tcf_astc/AssetBundles
    Assets/AssetBundles#tcf_astc/AssetBundles.manifest
    Assets/AssetBundles#tcf_astc/AssetBundles.manifest.meta
    Assets/AssetBundles#tcf_astc/AssetBundles.meta
    Assets/AssetBundles#tcf_astc/samplescene
    Assets/AssetBundles#tcf_astc/samplescene.manifest
    Assets/AssetBundles#tcf_astc/samplescene.manifest.meta
    Assets/AssetBundles#tcf_astc/samplescene.meta
    Assets/AssetBundles#tcf_astc/texturesbundle
    Assets/AssetBundles#tcf_astc/texturesbundle.manifest
    Assets/AssetBundles#tcf_astc/texturesbundle.manifest.meta
    Assets/AssetBundles#tcf_astc/texturesbundle.meta
    
  5. Google > Android > Öğe Yayınlama'yı tıklayın.

  6. Varsayılan öğenizi içeren klasörü eklemek için Klasör Ekle'yi tıklayın paket. Bu paketler, diğer biçimleri de vardır.

    AssetBundle için İletim modunu ayarladığınızdan emin olun.

    Unity AssetBundle Yayını varsayılan biçimi

  7. Şu öğe için oluşturulmuş AssetBundles'ı içeren bir klasör eklemek üzere Klasör Ekle'yi tıklayın: başka bir biçim (örneğin, ASTC). Gerekirse tekrarlayın.

    Her bir AssetBundle için İletim modunu ayarladığınızdan emin olun.

    Unity AssetBundle Dağıtımı ASTC biçimi

Topluluk

Google > Android App Bundle'ı kullanarak bir oyundur. Ayrıca, AssetBundles öğesini her birinin AssetBundle adı, tek bir öğe paketine dönüştürüldü.

(Gelişmiş) Bundletool'u kullan

bundletool hakkında daha fazla bilgi için bkz. Bundletool'u kullanarak uygulama paketi oluşturun.

Uygulama paketi oluşturmak için şunları yapın:

  1. İndir bundletool kendi GitHub deposundan

  2. Oyununuz için hedeflemek istediğiniz cihaz türü grubunu belirleyin ve desteklediği doku sıkıştırma biçimlerini (daha fazla bilgi için biçimleri için Arka plan bölümüne bakın).

  3. önceki adım. Bu, yazılım kullanarak model sayfaları oluşturmayı içerebilir beğeni TexturePacker veya ham öğeleri belirli bir biçime sahip olanlara dönüştüren bir komut dosyası çalıştırmak (örneğin, astc-kodlayıcı).

  4. Öğe paketleri oluşturun (bkz. C++ veya Java için oluşturun), Bunlar, oyun öğelerinizi içeren ve Play Asset Delivery tarafından kullanılan bir araçtır. Örneğin, Örneğin, her seviye için bir öğe paketi veya farklı bölümleri vardır.

  5. Farklı öğe paketlerinize desteklenen son ekleri ekleyin. doku sıkıştırmasına karşılık gelen doku dizini adlarına biçimi olmalıdır.

    Adında sonek olmayan bir dizin oluşturun (örneğin, common/src/main/assets/textures/) bilgileri gösterilir. Bu dizinde, varsayılan biçimini seçin. Bu varsayılan biçim şu tarayıcı tarafından desteklenmelidir: çoğu cihazda (örneğin, ETC1 veya ETC2). Bir cihaz belirtilen diğer biçimler (örneğin, aşağıdaki tabloda yer alan PVRTC ve ASTC), Google Play Store bunun yerine bu dizini yükler.

    Önceki dizin Sonraki dizin
    common öğe paketi:
    common/build.gradle
    common/src/main/assets/textures/...
    common öğe paketi:
    common/build.gradle
    common/src/main/assets/textures/...
    ortak/src/main/assets/textures#tcf_astc/...
    ortak/src/main/assets/textures#tcf_pvrtc/...
    level1 öğe paketi:
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1 öğe paketi:
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1/src/main/assets/textures#tcf_astc/...
    level1/src/main/assets/textures#tcf_pvrtc/...
    level2 öğe paketi:
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2 öğe paketi:
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2/src/main/assets/textures#tcf_astc/...
    level2/src/main/assets/textures#tcf_pvrtc/...
  6. TCF boyutunu uygulama paketi meta veri dosyası (BundleConfig.json). value için TEXTURE_COMPRESSION_FORMAT kullanın alan:

    {
      ...
      "optimizations": {
        "splitsConfig": {
          "splitDimension": [
          ...
          {
             "value": "TEXTURE_COMPRESSION_FORMAT",
             "negate": false,
             "suffixStripping": {
               "enabled": true,
               "defaultSuffix": ""
              }
          }],
        }
      }
    }
    

    Son eki kaldırmak için suffixStripping.enabled değerini true olarak ayarlayın (örneğin, #tcf_astc) kaldırın. Bu oyununuzun iyi bilinen bir dizin adından (örneğin, level1/assets/textures) bilgileri gösterilir. Bazı oyun motorları Dolayısıyla, oyununuz, dışa aktaracağınız doku öğelerinin biçimi konusunda önceden yüklenmiştir.

    suffixStripping.defaultSuffix, aşağıdaki durumlarda varsayılan dizin son ekini belirtir: bundletool, Android 5.0 (API) çalıştıran cihazlar için bağımsız bir APK oluşturur ve daha düşük seviyelerde gösterilir. Önceki örnek tabloda, Doku öğelerinin bu cihazlara yüklendiğini ve amaçlanan bu davranış şeklidir.

  7. Uygulama paketini oluşturun:

    bundletool build-bundle --config=BUILD_CONFIG.json \
      --modules=level1.zip,level2.zip,common.zip,base.zip --output=MY_BUNDLE.aab
    

Uygulama paketinin içeriğini doğrulama

Henüz yapmadıysanız indir bundletool kod deposunu bulun.

Çıkış uygulama paketinin içeriğini, bu paketten APK derleyerek ve inceleyin:

bundletool build-apks --output=APKS.apks --bundle=MY_BUNDLE.aab
zipinfo APKS.apks

Şuna benzer bir çıkış alırsınız:

toc.pb
splits/base-master.apk
splits/base-armeabi_v7a.apk
splits/…
asset-slices/level1-astc.apk
asset-slices/level1-other_tcf.apk
asset-slices/level1-pvrtc.apk

Bu adlar, TCF hedeflemesinin doğru şekilde uygulandığını gösterir. Bir bir seviye APK'sının (örneğin, asset-slices/level1-astc.apk) içeriğini , textures adında yalnızca bir dizinin mevcut olduğunu doğrulayabilir.

Uygulama paketini test etme

Bir cihaz bağlayın ve geçerli öğe paketlerini yükleyin:

bundletool install-apks --apks=APKS.apks

Bu komut yalnızca cihazın teknik özelliklerini karşılayan öğe paketlerini yükler. Bu spesifikasyonlar arasında ABI, ekran yoğunluğu, dil ve geçerli doku sıkıştırma biçimi olabilir. Bu işlem, rastgele bir kontrol Google Play Store'da bulabilirsiniz.

Doğru öğe paketlerinin yüklendiğini doğrulamak için aşağıdakilerden birini yapın:

  • Şunun için yüklenen apk'lerin çıkışını almak için bundletool extract-apks komutunu kullanın: bir dizine ekleyip bu dizini inceleyin.

    1. Cihazınızın teknik özelliklerini çıkarın:

      bundletool get-device-spec --output=MY_DEVICE_SPEC.json
      
    2. bundletool extract-apks uygulamasını şu cihaz spesifikasyonuyla çalıştır:

      bundletool extract-apks --apks=APKS.apks --device-spec=MY_DEVICE_SPEC.json \
          --output-dir out
      
    3. Dosyaları out dizininde listeleyin ve uygun öğe paketlerinin bulunduğunu doğrulayın yüklendi. Öğe paketi adlarının son eki doku biçimi adıyla ( örnek, level1-astc.apk).

  • Oyununuza yükleme sırasında doku biçimini üreten günlük ifadeleri ekleyin doku.

  • Bir doku test kümesi oluşturun (örneğin, bir dokuyu tek parlak bir rengi olmalıdır). Oyunu çalıştırıp doğrulayın. devam eder.

Uygulamanız on-demand veya fast-follow öğe paketi içeriyorsa öğe yayınlama için yerel test çözümü.

Doku dizini adları için desteklenen son ekler

Google Play, doku dizini adlarında kullanılan aşağıdaki sonekleri anlar:

  • Uyarlanabilir Ölçeklenebilir Doku Sıkıştırma (ASTC) için #tcf_astc
  • ATI doku sıkıştırma (ATC) için #tcf_atc
  • S3 DXT1 doku sıkıştırması (DXT1) için #tcf_dxt1
  • Parlaklık-Alfa doku sıkıştırma (LATC) için #tcf_latc
  • Genel paletli doku sıkıştırma için #tcf_paletted
  • PowerVR doku sıkıştırma (PVRTC) için #tcf_pvrtc
  • Ericsson doku sıkıştırması (ETC1) için #tcf_etc1
  • Ericsson doku sıkıştırma 2 (ETC2) için #tcf_etc2
  • S3 doku sıkıştırma için #tcf_s3tc (S3TC)
  • ATI 3Dc doku sıkıştırması (3Dc) için #tcf_3dc

Google Play sunma kuralları

Google Play, cihaz tarafından kullanılan OpenGL uzantı dizelerini ve Cihaz tarafından desteklenen OpenGL sürümü. Google Play bu bilgileri şu amaçlarla kullanır: Android'den cihaza yayınlanacak doğru doku biçimini belirleyin App Bundle'ı seçin.

Google Play ilk biçimi aşağıdaki sırayla sunar: cihazın desteklediği bir tablo veya çizelgedir.

App Bundle'daki doku biçimlerinden hiçbiri cihaz tarafından desteklenmiyorsa Google Play, varsayılan biçimde paketlenmiş doku biçimlerini sunar. (Belirli bir cihaz donanımını hedef almıyorsanız ETC1 veya ETC2 iyidir seçenekleri sunar.) Öğelerin varsayılan biçimi öğrenmek için Paketleme aracını kullanma konusuna bakın veya Google Play Unity eklentisini kullanın.

Öğeler varsayılan bir biçimde paketlenmemişse Google Play, uygulamayı emin olun. Bu durumda kullanıcılar uygulamayı indiremez.

Biçim (tcf_xxxx olarak tanımlanır) OpenGL olan cihazlarda desteklenir uzantı dizesi
astc GL_KHR_texture_compression_astc_ldr
pvrtc GL_IMG_texture_compression_pvrtc
S3tc GL_EXT_texture_compression_s3tc
dxt1 GL_EXT_texture_compression_dxt1
latc GL_EXT_texture_compression_latc
atc GL_AMD_compressed_ATC_texture
3D GL_AMD_compressed_3DC_texture
vs2 Geçerli değil. Cihaz, OpenGL ES sürüm 3.0'ı veya daha sonra.
vs1 GL_OES_compressed_ETC1_RGB8_texture
paletli GL_OES_compressed_paletted_texture