Texturen sind Bilder, die auf die Oberfläche eines 3D-Modells angewendet werden können. Strukturen werden auch von 2D-Renderern verwendet, um Elemente wie Sprites oder Hintergründe zu zeichnen. Auf dieser Seite werden gängige Texturkomprimierungsformate beschrieben, die in Spielen verwendet werden, sie in Android App Bundles ausrichten. Gelesen Android App Bundles und Play Asset Delivery, bevor du dies startest .
Hintergrund
GPUs unterstützen in der Regel eine Reihe von Texturkomprimierungsformaten. A Das Texturkomprimierungsformat (TCF) ist ein Dateiformat, das für GPUs optimiert ist. Die GPU lädt und rendert eine Textur schneller und mit weniger Arbeitsspeicher, als wenn sie im Speicher ein Array von RGBA-Werten. Diese Unterstützung erfolgt am Hardwareebene: Der GPU-Hersteller bettet Komponenten in die Grafikkarten ein. Chip, der die unterstützten Formate liest, dekomprimiert und rendert.
Die folgenden Formate sind gängige Texturkomprimierungsformate auf moderner mobiler Hardware:
- ASTC: Kürzliches Format, das frühere Formate ersetzt. Flexibler als vorherigen Formaten, da sie verschiedene Blockgrößen unterstützen. Verwendung dieses Formats ist eine gute Möglichkeit, die Größe deines Spiels zu optimieren.
- ETC2: Wird von allen Geräten unterstützt, die OpenGL ES 3.0 und höher unterstützen. Dazu gehören fast alle aktiven Android-Mobilgeräte.
Diese Formate werden von den folgenden ungefähren Prozentsätzen für Android unterstützt Geräte:
Texturkomprimierungsformat | Prozentsatz der Google Play-Geräte mit Support |
---|---|
ASTC | > 80% |
ETC2 | > 95% |
GPUs von Desktop-Computern, auf denen Google Play Spiele für PC ausgeführt wird, unterstützen ebenfalls dieses Format:
- DDS oder S3TC: Manchmal auch BCn, DXTC oder DXTn genannt.
Zu den älteren, nicht mehr empfohlenen Formaten zur Texturkomprimierung gehören:
- ETC1: Wird auf den meisten Geräten unterstützt. Dieses Format wird nicht von Transparenz unterstützt. Spiele können für die Alpha-Komponente jedoch eine zweite Texturdatei verwenden.
- PVRTC: Beliebt bei iOS-Spielen, wird auch auf einigen Android-Geräten unterstützt.
Unterstützung von ETC1 ist nur für Spiele erforderlich, die ältere Versionen unterstützen. Geräte oder ausgewählte Android TV-Geräte, die OpenGL ES 3.0 nicht unterstützen, und höher liegen.
Ein Standardformat
Bei so vielen verfügbaren Formaten (mit unterschiedlicher Geräteunterstützung) wissen möglicherweise nicht, welche Formate sie bei der Erstellung der Texturen für Ihr Spiel verwenden sollen. Als können Sie mit dem App Bundle-Format eine standardmäßige Texturkomprimierung auswählen, Format für jedes Asset-Pack an. Wenn ein Gerät die anderen angegebenen werden Assets mit diesem Standardformat installiert.
Sofern Sie nicht auf sehr alte Gerätehardware abzielen, ist ETC2 eine gute Wahl. für ein Standardformat. Sie sollten ETC2-Formate verwenden, die garantiert unter OpenGL ES 3.0 unterstützt. Diese Formate sind auch in der Vulkan Graphics API verfügbar.
Empfohlene Formate
Das ASTC-Format definiert eine Vielzahl von Komprimierungsblockgrößen, selektiv reduzierte Bildqualität gegen bessere Komprimierung eintauschen. Je nach Art des Quell-Art-Materials können Sie für eine bestimmte Textur Wählen Sie einen kleineren oder größeren Block aus, um eine akzeptable visuelle Qualität beizubehalten.
Wenn dein Spiel Google Play Spiele für PC unterstützt und Vulkan verwendet, hast du folgende Möglichkeiten: sollten S3TC-Texturen enthalten. Die S3TC-Formate werden von allen Desktop-GPUs.
App Bundle erstellen
Google Play verwendet Android App Bundles, um optimierte APKs für die Gerätekonfiguration jedes Nutzers, sodass die Nutzer nur den Code und die Ressourcen herunterladen die sie für Ihr Spiel benötigen. Diese optimierten APKs enthalten einen einzelnen Satz Texturen. -Assets, die mit dem für das Gerät optimalen Komprimierungsformat formatiert sind.
Wenn Sie für Ihr Spiel nicht Unity verwenden, verwenden Sie Gradle, um ein App Bundle zu erstellen.
Fortgeschrittene Nutzer können bundletool
verwenden.
Wenn du für dein Spiel Unity nutzt: Unterstützung von App Bundles mit Play Asset Delivery ist ab Unity 2021.3 verfügbar. Weitere Informationen finden Sie in der Unity-Dokumentation Sie können ein Unity-Plug-in verwenden, um ein App Bundle mit niedrigeren Versionen von Unity.
Gradle verwenden
Aktualisieren Sie die Version des Android-Gradle-Plug-ins in der
build.gradle
-Datei auf Version 4.1 oder höher aktualisieren (z. B.com.android.tools.build:gradle:4.1.0
).Legen Sie die Gerätetypen fest, auf die Sie Ihr Spiel ausrichten möchten, und unterstützte Texturkomprimierungsformate (weitere Informationen (siehe Hintergrund).
Erstellen Sie Versionen Ihrer Assets für jedes Texturkomprimierungsformat aus dem vorherigen Schritt. Dies könnte das Generieren von Sprite Sheets mithilfe von Software beinhalten „Mag ich“-Bewertung TexturePacker oder Ausführung eines Skripts, das Rohassets in Assets mit einem bestimmten Format umwandelt (z. B. astc-encoder).
Erstellen Sie Asset-Packs (siehe Build for C++ or Java), die deine Spiel-Assets enthalten und von Play Asset Delivery verwendet werden. Für können Sie z. B. ein Asset-Pack pro Level oder verschiedene Bereiche Ihres Spiels.
Fügen Sie den Asset-Packs Verzeichnisse für jedes Texturkomprimierungsformat hinzu die Sie unterstützen möchten. Fügen Sie unterstützte Suffixe hinzu: die Namen der Texturverzeichnisse, die der Texturkomprimierung entsprechen -Format, das für die enthaltenen Dateien verwendet wird.
Erstellen Sie ein Verzeichnis ohne Suffix im Namen (z. B.
common/src/main/assets/textures/
. Platzieren Sie in diesem Verzeichnis Format Ihrer Textur-Assets. Dieses Standardformat sollte von auf den meisten Geräten (z. B. ETC1 oder ETC2). Wenn ein Gerät den Parameter anderen angegebenen Formaten (z. B. PVRTC und ASTC in der Tabelle unten) wird dieses Verzeichnis stattdessen vom Google Play Store installiert.Verzeichnis vor dem Verzeichnis nach dem common
Asset-Pack:
Common/build.gradle
Common/src/main/assets/textures/...common
Asset-Pack:
Common/build.gradle
Common/src/main/assets/textures/...
common/src/main/assets/textures#tcf_astc/...
Common/src/main/assets/textures#tcf_pvrtc/...level1
Asset-Pack:
level1/build.gradle
level1/src/main/assets/textures/...level1
Asset-Pack:
level1/build.gradle
level1/src/main/assets/textures/...
level1/src/main/assets/textures#tcf_astc/...
level1/src/main/assets/textures#tcf_pvrtc/...level2
Asset-Pack:
level2/build.gradle
level2/src/main/assets/textures/...level2
Asset-Pack:
level2/build.gradle
level2/src/main/assets/textures/...
level2/src/main/assets/textures#tcf_astc/...
level2/src/main/assets/textures#tcf_pvrtc/...Aktualisiere die
build.gradle
-Datei deiner App, um die Aufteilung deiner Asset-Packs pro Texturen.// In the app build.gradle file: android { ... bundle { texture { enableSplit true } } }
Wählen Sie in Android Studio Build > Signiertes Bundle / APK generieren oder starte die Gradle-Task über die Befehlszeile das Bundle erstellen.
Google Play Unity-Plug-in verwenden
Unity-Plug-in (oder -Paket) für Play Asset Delivery herunterladen um ein App-Bundle mit texturbezogenen Asset-Packs zu erstellen.
Assets vorbereiten
So bereiten Sie Ihre Textur-Assets für die Erstellung eines App-Bundles vor:
Szene und Assets in mehreren Einheiten zusammenfassen Asset-Bundles:
Legen Sie die Gerätetypen fest, auf die Sie Ihr Spiel ausrichten möchten, und unterstützte Texturkomprimierungsformate (weitere Informationen (siehe Hintergrund).
Das Build-Skript deines Spiels ändern, um mehrere AssetBundles zu generieren einmal für jedes Texturformat, das unterstützt werden soll. Weitere Informationen finden Sie in der folgendes Beispielskript:
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. } }
Stellen Sie sicher, dass jedes Textur-Asset in einem Verzeichnis mit der korrekten Suffix im Namen enthalten (z. B.
#tcf_astc
).Prüfen Sie, ob ein Verzeichnis ohne Suffix im Namen ausgegeben wird (z. B.
Assets/AssetBundles/
. Dieses Verzeichnis enthält das Standardformat Ihres Textur-Assets. Dieses Standardformat sollte von den meisten Geräten (für z. B. ETC2). Wenn ein Gerät die anderen angegebenen Formate nicht unterstützt (z. B. ASTC im Code des vorherigen Schritts) enthält, wird der Link Store installiert stattdessen dieses Verzeichnis.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
Wählen Sie Google > Android > Asset Delivery
Klicken Sie auf Ordner hinzufügen, um den Ordner mit dem Standard-Asset hinzuzufügen. Sets. Diese Bundles werden auf Geräten installiert, die die anderen die von Ihnen definierten Formaten.
Für das AssetBundle muss der Übermittlungsmodus festgelegt sein.
Klicken Sie auf Ordner hinzufügen, um einen Ordner hinzuzufügen, der Asset-Bundles enthält, die für ein anderes Format verwenden (z. B. ASTC). Bei Bedarf wiederholen
Für jedes AssetBundle muss der Übermittlungsmodus festgelegt werden.
Eine Community
Wählen Sie Google > Erstelle ein Android App Bundle, um den Unity-Build deiner Spiel. Außerdem werden die Asset-Bundles in mehrere Asset-Packs gebündelt, in denen jedes Der Name des Asset-Bundles wurde in ein einzelnes Asset-Pack umgewandelt.
(Fortgeschritten) Bundletool verwenden
Weitere Informationen zu bundletool
finden Sie unter
Erstelle ein App Bundle mit Bundletool.
So erstellen Sie das App Bundle:
bundletool
herunterladen aus seinem GitHub-Repository.Legen Sie die Gerätetypen fest, auf die Sie Ihr Spiel ausrichten möchten, und unterstützte Texturkomprimierungsformate (weitere Informationen (siehe Hintergrund).
Erstellen Sie Versionen Ihrer Assets für jedes Texturkomprimierungsformat aus dem vorherigen Schritt. Dies könnte das Generieren von Sprite Sheets mithilfe von Software beinhalten „Mag ich“-Bewertung TexturePacker oder Ausführung eines Skripts, das Rohassets in Assets mit einem bestimmten Format umwandelt (Beispiel: astc-encoder).
Erstellen Sie Asset-Packs (siehe Build for C++ or Java), die deine Spiel-Assets enthalten und von Play Asset Delivery verwendet werden. Für können Sie z. B. ein Asset-Pack pro Level oder verschiedene Bereiche Ihres Spiels.
Füge den verschiedenen Asset-Packs unterstützte Suffixe hinzu. den Namen der Texturverzeichnisse, die der Texturkomprimierung entsprechen -Format, das für die enthaltenen Dateien verwendet wird.
Erstellen Sie ein Verzeichnis ohne Suffix im Namen (z. B.
common/src/main/assets/textures/
. Platzieren Sie in diesem Verzeichnis Format Ihrer Textur-Assets. Dieses Standardformat sollte von auf den meisten Geräten (z. B. ETC1 oder ETC2). Wenn ein Gerät den Parameter anderen angegebenen Formaten (z. B. PVRTC und ASTC in der Tabelle unten) wird dieses Verzeichnis stattdessen vom Google Play Store installiert.Verzeichnis vor dem Verzeichnis nach dem common
Asset-Pack:
Common/build.gradle
Common/src/main/assets/textures/...common
Asset-Pack:
Common/build.gradle
Common/src/main/assets/textures/...
common/src/main/assets/textures#tcf_astc/...
Common/src/main/assets/textures#tcf_pvrtc/...level1
Asset-Pack:
level1/build.gradle
level1/src/main/assets/textures/...level1
Asset-Pack:
level1/build.gradle
level1/src/main/assets/textures/...
level1/src/main/assets/textures#tcf_astc/...
level1/src/main/assets/textures#tcf_pvrtc/...level2
Asset-Pack:
level2/build.gradle
level2/src/main/assets/textures/...level2
Asset-Pack:
level2/build.gradle
level2/src/main/assets/textures/...
level2/src/main/assets/textures#tcf_astc/...
level2/src/main/assets/textures#tcf_pvrtc/...Fügen Sie die Dimension „TCF“ dem Metadatendatei des App-Bundles (
BundleConfig.json
)TEXTURE_COMPRESSION_FORMAT
fürvalue
verwenden ein:{ ... "optimizations": { "splitsConfig": { "splitDimension": [ ... { "value": "TEXTURE_COMPRESSION_FORMAT", "negate": false, "suffixStripping": { "enabled": true, "defaultSuffix": "" } }], } } }
Legen Sie
suffixStripping.enabled
auftrue
fest, um das Suffix zu entfernen (z. B.#tcf_astc
) beim Generieren der Asset-Packs aus den Verzeichnisnamen. Dieses ermöglicht es deinem Spiel, Dateien aus einem bekannten Verzeichnisnamen (z. B.level1/assets/textures
. Einige Spiel-Engines erkennen das Format eines Datei, sodass Ihr Spiel unabhängig vom Format der Textur-Assets ist, mit dem sie installiert wurde.suffixStripping.defaultSuffix
gibt das Standardverzeichnis des Verzeichnisses an, wennbundletool
generiert ein eigenständiges APK für Geräte mit Android 5.0 (API) Ebene 21) und niedriger. In der Beispieltabelle oben ist die Standardversion von die Textur-Assets auf diesen Geräten installiert sind. das ist die beabsichtigte in den meisten Fällen.Erstellen Sie das App Bundle:
bundletool build-bundle --config=BUILD_CONFIG.json \ --modules=level1.zip,level2.zip,common.zip,base.zip --output=MY_BUNDLE.aab
Inhalt des App Bundles prüfen
Falls noch nicht geschehen,
bundletool
herunterladen
aus dem GitHub-Repository.
Überprüfe den Inhalt des Ausgabe-App-Bundles, indem du APKs daraus erstellst und bei der Überprüfung:
bundletool build-apks --output=APKS.apks --bundle=MY_BUNDLE.aab
zipinfo APKS.apks
Die Ausgabe sollte in etwa so aussehen:
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
Diese Namen weisen darauf hin, dass das TCF-Targeting richtig angewendet wird. Beim Extrahieren
des Inhalts eines APK mit Level (z. B. asset-slices/level1-astc.apk
)
kann überprüfen, ob nur ein Verzeichnis namens textures
vorhanden ist.
App Bundle testen
Gerät verbinden und die entsprechenden Asset-Packs installieren:
bundletool install-apks --apks=APKS.apks
Mit diesem Befehl werden nur die Asset-Packs installiert, die der Gerätespezifikation entsprechen. Zu diesen Spezifikationen gehören ABI, Bildschirmdichte, Sprache und anwendbares Texturkomprimierungsformat. Dieser Vorgang simuliert, was Google Play Store für Ihr veröffentlichtes Spiel nach.
So überprüfen Sie, ob die richtigen Asset-Packs installiert wurden:
Geben Sie mit dem Befehl
bundletool extract-apks
die für auf Ihrem Gerät in einem Verzeichnis speichern und dann dieses Verzeichnis prüfen.Extrahieren Sie die Spezifikation Ihres Geräts:
bundletool get-device-spec --output=MY_DEVICE_SPEC.json
Führen Sie
bundletool extract-apks
mit dieser Gerätespezifikation aus:bundletool extract-apks --apks=APKS.apks --device-spec=MY_DEVICE_SPEC.json \ --output-dir out
Listen Sie die Dateien im Verzeichnis
out
auf und prüfen Sie, ob die richtigen Asset-Packs vorhanden sind. installiert sind. An die Namen von Asset-Packs wird der Name des Texturformats angehängt (für Beispiel:level1-astc.apk
).
Fügen Sie Ihrem Spiel Log-Anweisungen hinzu, die beim Laden das Texturformat ausgeben Textur.
Generieren Sie einen Testsatz von Texturen. Ersetzen Sie beispielsweise eine Textur durch eine einzelne leuchtende Farbe für ein bestimmtes Format). Starten Sie das Spiel und prüfen Sie, ob es vorhanden ist.
Wenn deine App Asset-Packs on-demand
oder fast-follow
enthält, verwende das
lokale Testlösung für Asset Delivery
Unterstützte Suffixe für Texturverzeichnisnamen
Google Play versteht die folgenden Suffixe, die in Namen von Texturverzeichnissen verwendet werden:
#tcf_astc
für adaptive skalierbare Texturkomprimierung (ASTC)#tcf_atc
für ATI-Texturkomprimierung (ATC)#tcf_dxt1
für S3 DXT1-Texturkomprimierung (DXT1)#tcf_latc
für Luminance Alpha-Texturkomprimierung (LATC)#tcf_paletted
für die allgemeine Komprimierung von Texturen in Farbpaletten#tcf_pvrtc
für PowerVR-Texturkomprimierung (PVRTC)#tcf_etc1
für Ericsson-Texturkomprimierung (ETC1)#tcf_etc2
für Ericsson-Texturkomprimierung 2 (ETC2)#tcf_s3tc
für S3-Texturkomprimierung (S3TC)#tcf_3dc
für ATI-3DC-Texturkomprimierung (3Dc)
Google Play-Bereitstellungsregeln
Google Play prüft die vom Gerät verwendeten OpenGL-Erweiterungsstrings sowie die Vom Gerät unterstützte OpenGL-Version. Google Play nutzt diese Informationen, um das richtige Texturformat zu bestimmen, das vom Android-Gerät App Bundle aus.
Google Play stellt das erste Format in der nachfolgend aufgeführten Reihenfolge bereit. die vom Gerät unterstützt wird.
Wenn keines der Texturformate im App Bundle vom Gerät unterstützt wird, Google Play stellt die Texturformate im Standardformat bereit. (Sofern Sie nicht auf spezifische Gerätehardware ausgerichtet sind, sind ETC1 oder ETC2 ausreichend. Auswahlmöglichkeiten für ein Standardformat.) Informationen zum Verpacken von Assets finden Sie in der Standardformat, siehe Bundletool verwenden oder Google Play Unity-Plug-in verwenden
Falls die Assets nicht in einem Standardformat verpackt wurden, markiert Google Play die App. als für das Gerät nicht verfügbar. In diesem Fall können Nutzer die App nicht herunterladen.
Format (festgelegt in tcf_xxxx )
|
Unterstützt auf Geräten mit OpenGL Erweiterungsstring |
---|---|
Astc | GL_KHR_texture_compression_astc_ldr |
PVR | 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 |
3 D | GL_AMD_compressed_3DC_texture |
usw2 | Nicht zutreffend Das Gerät muss die OpenGL ES-Version 3.0 oder . |
usw.1 | GL_OES_compressed_ETC1_RGB8_texture |
palette | GL_OES_compressed_paletted_texture |