Tekstur adalah gambar yang dapat diterapkan ke platform model 3D. Tekstur juga digunakan oleh perender 2D untuk menggambar elemen seperti sprite atau latar belakang. Halaman ini menjelaskan format kompresi tekstur populer yang digunakan dalam game dan cara menargetkannya di Android App Bundle. Baca Tentang Android App Bundle dan Play Asset Delivery sebelum memulai panduan.
Latar belakang
GPU biasanya mendukung serangkaian format kompresi tekstur. Format kompresi tekstur (atau TCF) adalah format file yang dioptimalkan untuk GPU. GPU memuat dan merender tekstur lebih cepat, dan dengan memori lebih sedikit, dibandingkan jika menggunakan array nilai RGBA dalam memori. Dukungan ini dilakukan pada level hardware: produsen GPU menyematkan komponen ke dalam chip kartu grafik yang membaca, mendekompresi, dan merender format yang didukung.
Berikut adalah format kompresi tekstur umum pada hardware seluler modern:
- ASTC: Format terbaru yang didesain untuk menggantikan format sebelumnya. Lebih fleksibel dibandingkan format sebelumnya karena adanya dukungan untuk berbagai ukuran blok. Penggunaan format ini merupakan cara yang baik untuk mengoptimalkan ukuran game Anda.
- ETC2: Didukung oleh semua perangkat yang mendukung OpenGL ES 3.0 dan yang lebih baru. Dukungan tersebut termasuk hampir semua perangkat seluler Android aktif.
Format ini didukung oleh perkiraan persentase perangkat Android berikut:
Format kompresi tekstur | Persentase perangkat Google Play dengan dukungan |
---|---|
ASTC | >80% |
ETC2 | >95% |
GPU komputer desktop yang menjalankan Google Play Game untuk PC juga mendukung format ini:
- DDS atau S3TC: Terkadang disebut BCn, DxTC, atau DxT n.
Format kompresi tekstur yang lebih lama dan tidak direkomendasikan lagi mencakup:
- ETC1: Didukung di sebagian besar perangkat. Format ini tidak memiliki dukungan transparansi, tetapi game dapat menggunakan file tekstur kedua untuk komponen alfa.
- PVRTC: Populer di game iOS, serta didukung di beberapa perangkat Android.
Dukungan ETC1 hanya merupakan persyaratan untuk game yang mendukung perangkat sangat versi lama atau perangkat Android TV tertentu yang tidak mendukung OpenGL ES 3.0 dan yang lebih baru.
Format default
Dengan begitu banyak format yang tersedia (dengan berbagai tingkat dukungan perangkat), Anda mungkin tidak mengetahui format mana yang digunakan saat membangun tekstur game. Sebagai perlindungan, format app bundle memungkinkan Anda memilih format kompresi tekstur default untuk setiap paket aset. Jika perangkat tidak mendukung format tertentu lainnya, aset yang menggunakan format default ini akan diinstal.
Kecuali jika Anda menargetkan hardware perangkat versi sangat lama, ETC2 adalah pilihan yang tepat untuk format default. Anda harus menggunakan format ETC2 yang dijamin didukung di OpenGL ES 3.0. Format ini juga tersedia di API grafis Vulkan.
Format yang direkomendasikan
Format ASTC menentukan berbagai ukuran blok kompresi, sehingga Anda dapat menukar kualitas gambar yang lebih rendah secara selektif untuk kompresi yang lebih besar. Bergantung pada sifat materi gambar sumber, untuk tekstur tertentu, Anda dapat memilih ukuran blok yang lebih kecil atau lebih besar guna mempertahankan kualitas visual yang dapat diterima.
Jika game Anda mendukung Google Play Game untuk PC dan menggunakan Vulkan, Anda harus menyertakan tekstur S3TC. Format S3TC didukung oleh semua GPU desktop.
Membangun app bundle
Google Play menggunakan Android App Bundle guna membuat dan menayangkan APK yang dioptimalkan untuk setiap konfigurasi perangkat pengguna, sehingga pengguna hanya mendownload kode dan resource yang diperlukan untuk menjalankan game Anda. APK yang dioptimalkan ini mencakup sekumpulan aset tekstur, yang diformat dengan format kompresi optimal untuk perangkat.
Jika game Anda tidak berada di Unity, gunakan Gradle untuk membuat app bundle.
Pengguna lanjutan mungkin ingin menggunakan bundletool
.
Jika game Anda menggunakan Unity, dukungan untuk app bundle dengan Play Asset Delivery tersedia di Unity 2021.3 dan yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Unity. Anda dapat menggunakan plugin Unity untuk membangun app bundle dengan versi Unity yang lebih rendah.
Menggunakan Gradle
Update versi plugin Android Gradle di file
build.gradle
project Anda ke 4.1 atau yang lebih baru (misalnya,com.android.tools.build:gradle:4.1.0
).Tentukan kumpulan jenis perangkat yang ingin Anda targetkan untuk game dan format kompresi tekstur yang didukungnya (untuk mengetahui informasi selengkapnya tentang format, lihat Latar belakang).
Buat versi aset untuk setiap format kompresi tekstur dari langkah sebelumnya. Cara ini termasuk membuat sprite sheet menggunakan software seperti TexturePacker, atau menjalankan skrip yang mengonversi aset raw menjadi aset dengan format tertentu (misalnya, astc-encoder).
Buat paket aset (lihat Membangun aplikasi untuk C++ atau Java), yang berisi aset game Anda dan digunakan oleh Play Asset Delivery. Misalnya, Anda dapat membuat satu paket aset per level atau paket aset untuk bagian game yang berbeda.
Di dalam paket aset, tambahkan direktori untuk setiap format kompresi tekstur yang ingin Anda dukung. Tambahkan akhiran yang didukung ke nama direktori tekstur yang sesuai dengan format kompresi tekstur yang digunakan untuk file yang dimuat tersebut.
Buat direktori tanpa akhiran namanya (misalnya,
common/src/main/assets/textures/
). Dalam direktori ini, tempatkan format default aset tekstur Anda. Format default ini harus didukung oleh sebagian besar perangkat (misalnya, ETC1 atau ETC2). Jika perangkat tidak mendukung format tertentu lainnya (misalnya, PVRTC dan ASTC pada tabel di bawah), Google Play Store akan menginstal direktori ini.Direktori sebelumnya Direktori setelahnya asset pack common
:
common/build.gradle
common/src/main/assets/textures/...asset pack common
:
common/build.gradle
common/src/main/assets/textures/...
common/src/main/assets/textures#tcf_astc/...
common/src/main/assets/textures#tcf_pvrtc/...asset pack level1
:
level1/build.gradle
level1/src/main/assets/textures/...asset pack level1
:
level1/build.gradle
level1/src/main/assets/textures/...
level1/src/main/assets/textures#tcf_astc/...
level1/src/main/assets/textures#tcf_pvrtc/...asset pack level2
:
level2/build.gradle
level2/src/main/assets/textures/...asset pack level2
:
level2/build.gradle
level2/src/main/assets/textures/...
level2/src/main/assets/textures#tcf_astc/...
level2/src/main/assets/textures#tcf_pvrtc/...Update file
build.gradle
aplikasi untuk mengaktifkan pemisahan paket aset per tekstur.// In the app build.gradle file: android { ... bundle { texture { enableSplit true } } }
Di Android Studio, pilih Build > Generate Signed Bundle / APK, atau luncurkan Tugas Gradle dari command line untuk membuat paket.
Menggunakan plugin Unity Google Play
Dapatkan plugin (atau paket) Unity untuk Play Asset Delivery guna membuat app bundle dengan paket aset bertarget tekstur.
Menyiapkan aset
Guna menyiapkan aset tekstur untuk membuat app bundle, lakukan hal berikut:
Gabungkan scene dan aset Anda ke dalam beberapa AssetBundle Unity.
Tentukan kumpulan jenis perangkat yang ingin Anda targetkan untuk game dan format kompresi tekstur yang didukungnya (untuk mengetahui informasi selengkapnya tentang format, lihat Latar belakang).
Ubah skrip build game Anda untuk membuat AssetBundle beberapa kali, sekali untuk masing-masing format tekstur yang ingin Anda dukung. Lihat contoh skrip berikut:
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. } }
Pastikan setiap aset tekstur dihasilkan dalam direktori dengan akhiran nama yang benar (misalnya
#tcf_astc
).Pastikan bahwa direktori tanpa akhiran nama adalah output (misalnya,
Assets/AssetBundles/
). Direktori ini berisi format default aset tekstur Anda. Format default ini harus didukung oleh sebagian besar perangkat (misalnya, ETC2). Jika perangkat tidak mendukung format tertentu lainnya (misalnya, ASTC dalam kode dari langkah sebelumnya), Google Play Store akan menginstal direktori ini.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
Pilih Google > Android > Assets Delivery.
Klik Add Folder untuk menambahkan folder yang berisi asset pack default Anda. Paket ini diinstal di perangkat yang tidak mendukung format lain yang Anda tentukan.
Pastikan Anda menyetel Delivery mode untuk AssetBundle.
Klik Add Folder untuk menambahkan folder berisi AssetBundle yang dibuat untuk format lain (misalnya, ASTC). Ulangi sesuai kebutuhan.
Pastikan Anda menyetel Delivery mode untuk masing-masing AssetBundle.
Build
Pilih Google > Build Android App Bundle untuk meluncurkan build Unity game Anda. Dengan cara ini, AssetBundle juga dikemas menjadi beberapa paket aset tempat setiap nama AssetBundle dikonversi menjadi satu paket aset.
(Lanjutan) Menggunakan bundletool
Untuk informasi selengkapnya tentang bundletool
, lihat Membuat app bundle menggunakan bundletool.
Untuk membuat app bundle, lakukan hal berikut:
Download
bundletool
dari repositori GitHub-nya.Tentukan kumpulan jenis perangkat yang ingin Anda targetkan untuk game dan format kompresi tekstur yang didukungnya (untuk mengetahui informasi selengkapnya tentang format, lihat Latar belakang).
Buat versi aset untuk setiap format kompresi tekstur dari langkah sebelumnya. Cara ini termasuk membuat sprite sheet menggunakan software seperti TexturePacker, atau menjalankan skrip yang mengonversi aset raw menjadi aset dengan format tertentu (misalnya, astc-encoder).
Buat paket aset (lihat Membangun aplikasi untuk C++ atau Java), yang berisi aset game Anda dan digunakan oleh Play Asset Delivery. Misalnya, Anda dapat membuat satu paket aset per level atau paket aset untuk bagian game yang berbeda.
Di paket aset yang berbeda, tambahkan akhiran yang didukung ke nama direktori tekstur yang sesuai dengan format kompresi tekstur yang digunakan untuk file yang dimuat tersebut.
Buat direktori tanpa akhiran namanya (misalnya,
common/src/main/assets/textures/
). Dalam direktori ini, tempatkan format default aset tekstur Anda. Format default ini harus didukung oleh sebagian besar perangkat (misalnya, ETC1 atau ETC2). Jika perangkat tidak mendukung format tertentu lainnya (misalnya, PVRTC dan ASTC pada tabel di bawah), Google Play Store akan menginstal direktori ini.Direktori sebelumnya Direktori setelahnya asset pack common
:
common/build.gradle
common/src/main/assets/textures/...asset pack common
:
common/build.gradle
common/src/main/assets/textures/...
common/src/main/assets/textures#tcf_astc/...
common/src/main/assets/textures#tcf_pvrtc/...asset pack level1
:
level1/build.gradle
level1/src/main/assets/textures/...asset pack level1
:
level1/build.gradle
level1/src/main/assets/textures/...
level1/src/main/assets/textures#tcf_astc/...
level1/src/main/assets/textures#tcf_pvrtc/...asset pack level2
:
level2/build.gradle
level2/src/main/assets/textures/...asset pack level2
:
level2/build.gradle
level2/src/main/assets/textures/...
level2/src/main/assets/textures#tcf_astc/...
level2/src/main/assets/textures#tcf_pvrtc/...Tambahkan dimensi TCF ke file metadata app bundle (
BundleConfig.json
). GunakanTEXTURE_COMPRESSION_FORMAT
untuk bidangvalue
:{ ... "optimizations": { "splitsConfig": { "splitDimension": [ ... { "value": "TEXTURE_COMPRESSION_FORMAT", "negate": false, "suffixStripping": { "enabled": true, "defaultSuffix": "" } }], } } }
Setel
suffixStripping.enabled
ketrue
untuk menghapus akhiran (misalnya,#tcf_astc
) dari nama direktori saat membuat paket aset. Dengan begitu, game Anda dapat membaca file dari nama direktori yang dikenal (sepertilevel1/assets/textures
). Beberapa game engine dapat mendeteksi format file sehingga game Anda dapat kompatibel dengan berbagai format aset tekstur yang diinstal.suffixStripping.defaultSuffix
menentukan akhiran direktori default saatbundletool
membuat APK mandiri untuk perangkat yang menjalankan Android 5.0 (level API 21) dan yang lebih lama. Pada tabel contoh sebelumnya, versi default aset tekstur diinstal di perangkat ini; ini adalah perilaku yang diinginkan dalam sebagian besar kasus.Bangun app bundle:
bundletool build-bundle --config=BUILD_CONFIG.json \ --modules=level1.zip,level2.zip,common.zip,base.zip --output=MY_BUNDLE.aab
Memverifikasi konten app bundle
Jika Anda belum melakukannya,
download bundletool
dari repositori GitHub.
Verifikasi konten app bundle output dengan membuat APK dari output dan memeriksanya:
bundletool build-apks --output=APKS.apks --bundle=MY_BUNDLE.aab
zipinfo APKS.apks
Outputnya akan mirip dengan berikut ini:
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
Nama-nama ini menunjukkan bahwa penargetan TCF diterapkan dengan benar. Jika mengekstrak
konten APK level (misalnya, asset-slices/level1-astc.apk
), Anda
dapat memverifikasi bahwa tersedia hanya satu direktori yang bernama textures
.
Menguji app bundle
Hubungkan perangkat dan instal paket aset yang berlaku:
bundletool install-apks --apks=APKS.apks
Perintah ini hanya menginstal paket aset yang memenuhi spesifikasi perangkat. Spesifikasi ini mencakup ABI, kepadatan layar, bahasa, dan format kompresi tekstur yang paling sering diterapkan. Operasi ini menyimulasikan apa yang dilakukan oleh Google Play Store untuk game yang Anda publikasikan.
Untuk memverifikasi bahwa asset pack yang benar telah diinstal, lakukan salah satu langkah berikut:
Gunakan perintah
bundletool extract-apks
untuk memperoleh output apk yang diinstal untuk perangkat Anda ke dalam direktori, lalu periksa direktori ini.Ekstrak spesifikasi perangkat Anda:
bundletool get-device-spec --output=MY_DEVICE_SPEC.json
Jalankan
bundletool extract-apks
dengan spesifikasi perangkat ini:bundletool extract-apks --apks=APKS.apks --device-spec=MY_DEVICE_SPEC.json \ --output-dir out
Buat daftar file dalam direktori
out
dan pastikan bahwa asset pack yang tepat telah diinstal. Nama asset pack diberi akhiran oleh nama format tekstur (misalnya,level1-astc.apk
).
Tambahkan pernyataan log dalam game yang menampilkan format tekstur saat memuat tekstur.
Buat kumpulan pengujian tekstur (misalnya, ganti tekstur dengan satu warna cerah untuk format tertentu). Jalankan game dan verifikasi bahwa game tersebut tersedia.
Jika aplikasi Anda berisi on-demand
atau paket aset fast-follow
, gunakan solusi pengujian lokal untuk pengiriman aset.
Akhiran yang didukung untuk nama direktori tekstur
Google Play memahami akhiran berikut yang digunakan dalam nama direktori tekstur:
#tcf_astc
untuk Adaptive Scalable Texture Compression (ASTC)#tcf_atc
untuk kompresi tekstur ATI (ATC)#tcf_dxt1
untuk kompresi tekstur S3 DXT1 (DXT1)#tcf_latc
untuk kompresi tekstur Luminance-Alpha (LATC)#tcf_paletted
untuk kompresi tekstur palet umum#tcf_pvrtc
untuk kompresi tekstur PowerVR (PVRTC)#tcf_etc1
untuk kompresi tekstur Ericsson (ETC1)#tcf_etc2
untuk kompresi tekstur Ericsson 2 (ETC2)#tcf_s3tc
untuk kompresi tekstur S3 (S3TC)#tcf_3dc
untuk kompresi tekstur 3Dc ATI (3Dc)
Aturan penayangan Google Play
Google Play memeriksa string ekstensi OpenGL yang digunakan oleh perangkat dan versi OpenGL yang didukung oleh perangkat. Google Play menggunakan informasi ini untuk menentukan format tekstur yang tepat untuk dikirimkan ke perangkat dari Android App Bundle.
Google Play menampilkan format pertama, dalam urutan yang tercantum dalam tabel berikut, yang didukung oleh perangkat.
Jika tidak ada satu pun format tekstur di App Bundle yang didukung oleh perangkat, Google Play mengirimkan format tekstur yang dikemas dalam format default. (Kecuali Anda menargetkan hardware perangkat tertentu, ETC1 atau ETC2 adalah pilihan yang baik untuk format default.) Untuk informasi tentang cara mengemas aset dalam format default, lihat Menggunakan bundletool atau Menggunakan plugin Google Play Unity.
Jika aset belum dikemas dalam format default, Google Play akan menandai aplikasi tersebut sebagai tidak tersedia untuk perangkat tersebut. Dalam hal ini, pengguna tidak dapat mendownload aplikasi.
Format (ditetapkan dalam tcf_xxxx ) |
Didukung pada perangkat dengan string ekstensi OpenGL |
---|---|
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 |
3dc | GL_AMD_compressed_3DC_texture |
etc2 | Tidak berlaku. Perangkat harus mendukung OpenGL ES versi 3.0 atau yang lebih baru. |
etc1 | GL_OES_compressed_ETC1_RGB8_texture |
palet | GL_OES_compressed_paletted_texture |