فرمت‌های فشرده‌سازی بافت را در Android App Bundles هدف قرار دهید

بافت ها تصاویری هستند که می توانند روی سطح یک مدل سه بعدی اعمال شوند. تکسچرها نیز توسط رندرهای دو بعدی برای ترسیم عناصری مانند اسپرایت یا پس‌زمینه استفاده می‌شوند. این صفحه فرمت‌های فشرده‌سازی بافت رایج مورد استفاده در بازی‌ها و نحوه هدف‌گیری آن‌ها در بسته‌های برنامه Android را شرح می‌دهد. قبل از شروع این راهنما ، درباره Android App Bundles و Play Asset Delivery بخوانید.

پس زمینه

GPU ها معمولا از مجموعه ای از فرمت های فشرده سازی بافت پشتیبانی می کنند. فرمت فشرده سازی بافت (یا TCF) فرمت فایلی است که برای GPU ها بهینه شده است. GPU نسبت به زمانی که از آرایه ای از مقادیر RGBA در حافظه استفاده می کرد، یک بافت را سریعتر و با حافظه کمتر بارگیری و ارائه می کند. این پشتیبانی در سطح سخت افزار انجام می شود: سازنده GPU اجزایی را در تراشه کارت گرافیک جاسازی می کند که فرمت های پشتیبانی شده را می خوانند، از حالت فشرده خارج می کنند و رندر می کنند.

فرمت‌های رایج فشرده‌سازی بافت در سخت‌افزار مدرن موبایل به شرح زیر است:

  • ASTC: فرمت اخیر طراحی شده برای جایگزینی فرمت های قبلی. به دلیل پشتیبانی از اندازه های مختلف بلوک، نسبت به فرمت های قبلی انعطاف پذیرتر است. استفاده از این فرمت راه خوبی برای بهینه سازی حجم بازی شماست.
  • ETC2: توسط تمام دستگاه هایی که از OpenGL ES 3.0 و بالاتر پشتیبانی می کنند پشتیبانی می شود. این تقریباً همه دستگاه‌های تلفن همراه Android فعال را شامل می‌شود.

این قالب‌ها توسط درصدهای تقریبی زیر از دستگاه‌های Android پشتیبانی می‌شوند:

فرمت فشرده سازی بافت درصد دستگاه‌های Google Play با پشتیبانی
ASTC >80%
ETC2 >95%

پردازنده‌های گرافیکی رایانه رومیزی که بازی‌های Google Play را برای رایانه شخصی اجرا می‌کنند نیز از این فرمت پشتیبانی می‌کنند:

  • DDS یا S3TC: گاهی اوقات BCn، DXTC یا DXT n نامیده می شود.

فرمت‌های فشرده‌سازی بافت قدیمی‌تر که دیگر توصیه نمی‌شود عبارتند از:

  • ETC1: در اکثر دستگاه ها پشتیبانی می شود. این فرمت از شفافیت پشتیبانی نمی‌کند، اما بازی‌ها می‌توانند از فایل بافت دوم برای مولفه آلفا استفاده کنند.
  • PVRTC: در بازی های iOS محبوب است و در برخی از دستگاه های اندروید نیز پشتیبانی می شود.

پشتیبانی ETC1 فقط برای بازی‌هایی است که از دستگاه‌های قدیمی بسیار قدیمی پشتیبانی می‌کنند یا دستگاه‌های Android TV انتخابی که OpenGL ES 3.0 و بالاتر را پشتیبانی نمی‌کنند، الزامی است.

یک قالب پیش فرض

با بسیاری از فرمت‌های موجود (با سطوح مختلف پشتیبانی از دستگاه)، ممکن است ندانید که از کدام فرمت‌ها هنگام ساخت بافت بازی خود استفاده کنید. به عنوان محافظ، فرمت بسته نرم افزاری به شما امکان می دهد یک قالب فشرده سازی بافت پیش فرض را برای هر بسته دارایی انتخاب کنید. اگر دستگاهی دیگر قالب‌های مشخص‌شده را پشتیبانی نمی‌کند، دارایی‌هایی با استفاده از این قالب پیش‌فرض نصب می‌شوند.

مگر اینکه سخت افزار دستگاه بسیار قدیمی را هدف قرار دهید، ETC2 انتخاب خوبی برای فرمت پیش فرض است. شما باید از فرمت های ETC2 استفاده کنید که تضمین شده در OpenGL ES 3.0 پشتیبانی می شوند. این فرمت ها در Vulkan graphics API نیز موجود هستند.

فرمت ASTC انواع اندازه‌های بلوک فشرده‌سازی را تعریف می‌کند، که به شما امکان می‌دهد به طور انتخابی کیفیت تصویر کاهش‌یافته را برای فشرده‌سازی بیشتر معامله کنید. بسته به ماهیت ماده هنری منبع، برای یک بافت معین ممکن است اندازه بلوک کوچکتر یا بزرگتر را برای حفظ کیفیت بصری قابل قبول انتخاب کنید.

اگر بازی شما از بازی‌های Google Play برای رایانه شخصی پشتیبانی می‌کند و از Vulkan استفاده می‌کند، باید بافت‌های S3TC را اضافه کنید. فرمت های S3TC توسط تمام GPU های دسکتاپ پشتیبانی می شوند.

یک بسته نرم افزاری بسازید

Google Play از Android App Bundles برای تولید و ارائه فایل‌های APK بهینه‌سازی شده برای پیکربندی دستگاه هر کاربر استفاده می‌کند، بنابراین کاربران فقط کد و منابعی را که برای اجرای بازی شما نیاز دارند دانلود می‌کنند. این فایل‌های APK بهینه‌سازی‌شده شامل مجموعه‌ای از دارایی‌های بافت هستند که با فرمت فشرده‌سازی بهینه برای دستگاه قالب‌بندی شده‌اند.

اگر بازی شما در یونیتی نیست، از Gradle برای ساخت یک بسته نرم افزاری استفاده کنید . کاربران پیشرفته ممکن است بخواهند از bundletool استفاده کنند .

اگر بازی شما در Unity است، پشتیبانی از بسته‌های برنامه با Play Asset Delivery در Unity 2021.3 و بالاتر در دسترس است. برای اطلاعات بیشتر، به مستندات Unity مراجعه کنید. می توانید از افزونه یونیتی برای ساخت یک بسته نرم افزاری با نسخه های پایین تر Unity استفاده کنید .

از Gradle استفاده کنید

  1. نسخه پلاگین Android Gradle را در فایل build.gradle پروژه خود به نسخه 4.1 یا بالاتر به روز کنید (به عنوان مثال com.android.tools.build:gradle:4.1.0 ).

  2. مجموعه ای از انواع دستگاه هایی را که می خواهید برای بازی خود هدف قرار دهید و فرمت های فشرده سازی بافت که آنها پشتیبانی می کنند را تعیین کنید (برای اطلاعات بیشتر در مورد فرمت ها، به پس زمینه مراجعه کنید).

  3. نسخه هایی از دارایی های خود را برای هر قالب فشرده سازی بافت از مرحله قبل بسازید. این می‌تواند شامل تولید برگه‌های sprite با استفاده از نرم‌افزاری مانند TexturePacker یا اجرای اسکریپتی باشد که دارایی‌های خام را به دارایی‌هایی با قالب خاصی تبدیل می‌کند (مثلاً astc-encoder ).

  4. بسته‌های دارایی ایجاد کنید (به Build for C++ یا Java مراجعه کنید)، که حاوی دارایی‌های بازی شما هستند و توسط Play Asset Delivery استفاده می‌شوند. به عنوان مثال، شما می توانید یک بسته دارایی در هر سطح یا بسته های دارایی برای بخش های مختلف بازی خود ایجاد کنید.

  5. در بسته‌های دارایی خود، دایرکتوری‌هایی را برای هر قالب فشرده‌سازی بافتی که می‌خواهید پشتیبانی کنید، اضافه کنید. پسوندهای پشتیبانی شده را به نام دایرکتوری بافت اضافه کنید که با فرمت فشرده سازی بافت مورد استفاده برای فایل های موجود مطابقت دارد.

    یک دایرکتوری بدون پسوند در نام آن ایجاد کنید (به عنوان مثال، common/src/main/assets/textures/ ). در این فهرست، قالب پیش فرض دارایی های بافت خود را قرار دهید. این فرمت پیش فرض باید توسط اکثر دستگاه ها (به عنوان مثال ETC1 یا ETC2) پشتیبانی شود. اگر دستگاهی از سایر قالب‌های مشخص‌شده (به عنوان مثال PVRTC و ASTC در جدول زیر) پشتیبانی نمی‌کند، فروشگاه Google Play به جای آن این فهرست را نصب می‌کند.

    دایرکتوری قبل دایرکتوری بعد
    بسته دارایی common :
    مشترک/build.gradle
    مشترک / src / اصلی / دارایی / بافت / ...
    بسته دارایی common :
    مشترک/build.gradle
    مشترک / src / اصلی / دارایی / بافت / ...
    common/src/main/assets/textures#tcf_astc/...
    common/src/main/assets/textures#tcf_pvrtc/...
    بسته دارایی level1 :
    level1/build.gradle
    level1/src/main/assets/textures/...
    بسته دارایی level1 :
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1/src/main/assets/textures#tcf_astc/...
    level1/src/main/assets/textures#tcf_pvrtc/...
    بسته دارایی level2 :
    level2/build.gradle
    level2/src/main/assets/textures/...
    بسته دارایی level2 :
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2/src/main/assets/textures#tcf_astc/...
    level2/src/main/assets/textures#tcf_pvrtc/...
  6. فایل build.gradle برنامه خود را به‌روزرسانی کنید تا تقسیم بسته‌های دارایی‌تان در هر بافت فعال شود .

    // In the app build.gradle file:
    android {
        ...
        bundle {
            texture {
                enableSplit true
            }
        }
    }
    
  7. در Android Studio، Build > Generate Signed Bundle / APK را انتخاب کنید یا وظیفه Gradle را از خط فرمان اجرا کنید تا بسته نرم افزاری شما تولید شود.

از افزونه Google Play Unity استفاده کنید

افزونه (یا بسته) Unity را برای Play Asset Delivery دریافت کنید تا یک بسته برنامه با بسته‌های دارایی هدفمند بافت ایجاد کنید.

دارایی ها را آماده کنید

برای آماده سازی دارایی های بافت خود برای ساختن یک بسته نرم افزاری، موارد زیر را انجام دهید:

  1. صحنه و دارایی های خود را در چندین Unity AssetBundle بسته بندی کنید.

  2. مجموعه ای از انواع دستگاه هایی را که می خواهید برای بازی خود هدف قرار دهید و فرمت های فشرده سازی بافت که آنها پشتیبانی می کنند را تعیین کنید (برای اطلاعات بیشتر در مورد فرمت ها، به پس زمینه مراجعه کنید).

  3. اسکریپت ساخت بازی خود را تغییر دهید تا AssetBundles چندین بار تولید شود، یک بار برای هر قالب بافتی که می خواهید پشتیبانی کنید. نمونه اسکریپت زیر را ببینید:

    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. بررسی کنید که هر دارایی بافت در یک دایرکتوری با پسوند صحیح در نام خود (مثلا #tcf_astc ) خروجی باشد.

    بررسی کنید که دایرکتوری بدون پسوند در نام آن خروجی باشد (مثلا Assets/AssetBundles/ ). این فهرست شامل فرمت پیش‌فرض دارایی‌های بافت شماست. این فرمت پیش فرض باید توسط اکثر دستگاه ها (به عنوان مثال ETC2) پشتیبانی شود. اگر دستگاهی از فرمت‌های مشخص‌شده دیگر (مثلاً ASTC در کد مرحله قبل) پشتیبانی نمی‌کند، در عوض فروشگاه Google Play این فهرست را نصب می‌کند.

    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 > Assets Delivery را انتخاب کنید.

  6. روی Add Folder کلیک کنید تا پوشه حاوی بسته‌های دارایی پیش‌فرض شما اضافه شود. این بسته‌ها روی دستگاه‌هایی نصب می‌شوند که از فرمت‌های دیگری که شما تعریف کرده‌اید پشتیبانی نمی‌کنند.

    مطمئن شوید که حالت تحویل را برای AssetBundle تنظیم کنید.

    قالب پیش‌فرض Unity AssetBundle Delivery

  7. روی Add Folder کلیک کنید تا پوشه ای حاوی AssetBundles که برای فرمت دیگری ساخته شده است (به عنوان مثال ASTC) اضافه شود. در صورت نیاز تکرار کنید.

    مطمئن شوید که حالت تحویل را برای هر AssetBundle تنظیم کنید.

    قالب Unity AssetBundle Delivery ASTC

ساخت

Google > Build Android App Bundle را انتخاب کنید تا بیلد Unity بازی خود راه اندازی شود. همچنین AssetBundles را در بسته‌های دارایی متعددی که هر نام AssetBundle به یک بسته دارایی تبدیل می‌شود، بسته‌بندی می‌کند.

(پیشرفته) از bundletool استفاده کنید

برای اطلاعات بیشتر در مورد bundletool ، به ساخت بسته نرم افزاری با استفاده از bundletool مراجعه کنید.

برای ایجاد بسته نرم افزاری، موارد زیر را انجام دهید:

  1. bundletool از مخزن GitHub آن دانلود کنید.

  2. مجموعه ای از انواع دستگاه هایی را که می خواهید برای بازی خود هدف قرار دهید و فرمت های فشرده سازی بافت که آنها پشتیبانی می کنند را تعیین کنید (برای اطلاعات بیشتر در مورد فرمت ها، به پس زمینه مراجعه کنید).

  3. نسخه هایی از دارایی های خود را برای هر قالب فشرده سازی بافت از مرحله قبل بسازید. این می‌تواند شامل تولید برگه‌های sprite با استفاده از نرم‌افزاری مانند TexturePacker یا اجرای اسکریپتی باشد که دارایی‌های خام را به دارایی‌هایی با قالب خاصی تبدیل می‌کند (مثلاً astc-encoder ).

  4. بسته‌های دارایی ایجاد کنید (به Build for C++ یا Java مراجعه کنید)، که حاوی دارایی‌های بازی شما هستند و توسط Play Asset Delivery استفاده می‌شوند. به عنوان مثال، شما می توانید یک بسته دارایی در هر سطح یا بسته های دارایی برای بخش های مختلف بازی خود ایجاد کنید.

  5. در بسته‌های دارایی مختلف خود، پسوندهای پشتیبانی شده را به نام دایرکتوری بافت اضافه کنید که مطابق با فرمت فشرده‌سازی بافت مورد استفاده برای فایل‌های موجود است.

    یک دایرکتوری بدون پسوند در نام آن ایجاد کنید (به عنوان مثال، common/src/main/assets/textures/ ). در این فهرست، قالب پیش فرض دارایی های بافت خود را قرار دهید. این فرمت پیش فرض باید توسط اکثر دستگاه ها (به عنوان مثال ETC1 یا ETC2) پشتیبانی شود. اگر دستگاهی از سایر قالب‌های مشخص‌شده (به عنوان مثال PVRTC و ASTC در جدول زیر) پشتیبانی نمی‌کند، فروشگاه Google Play به جای آن این فهرست را نصب می‌کند.

    دایرکتوری قبل دایرکتوری بعد
    بسته دارایی common :
    مشترک/build.gradle
    مشترک / src / اصلی / دارایی / بافت / ...
    بسته دارایی common :
    مشترک/build.gradle
    مشترک / src / اصلی / دارایی / بافت / ...
    common/src/main/assets/textures#tcf_astc/...
    common/src/main/assets/textures#tcf_pvrtc/...
    بسته دارایی level1 :
    level1/build.gradle
    level1/src/main/assets/textures/...
    بسته دارایی level1 :
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1/src/main/assets/textures#tcf_astc/...
    level1/src/main/assets/textures#tcf_pvrtc/...
    بسته دارایی level2 :
    level2/build.gradle
    level2/src/main/assets/textures/...
    بسته دارایی level2 :
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2/src/main/assets/textures#tcf_astc/...
    level2/src/main/assets/textures#tcf_pvrtc/...
  6. بعد TCF را به فایل فراداده دسته برنامه اضافه کنید ( BundleConfig.json ). از TEXTURE_COMPRESSION_FORMAT برای فیلد value استفاده کنید:

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

    برای حذف پسوند (مثلا #tcf_astc ) از نام دایرکتوری هنگام تولید بسته‌های دارایی، suffixStripping.enabled را روی true تنظیم کنید. این به بازی شما امکان می‌دهد فایل‌ها را از یک نام دایرکتوری معروف (مانند level1/assets/textures ) بخواند. برخی از موتورهای بازی می توانند فرمت یک فایل را تشخیص دهند، بنابراین بازی شما می تواند نسبت به قالب دارایی های بافتی که با آن نصب شده است بی تفاوت باشد.

    suffixStripping.defaultSuffix پسوند فهرست پیش‌فرض را زمانی که bundletool یک APK مستقل برای دستگاه‌های دارای Android نسخه 5.0 (سطح API 21) و پایین‌تر تولید می‌کند، مشخص می‌کند. در جدول مثال قبلی، نسخه پیش‌فرض دارایی‌های بافت روی این دستگاه‌ها نصب شده است. این رفتار مورد نظر در بیشتر موارد است.

  7. ساخت بسته نرم افزاری:

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

محتویات بسته برنامه را تأیید کنید

اگر قبلا این کار را نکرده اید، bundletool از مخزن GitHub دانلود کنید .

محتویات بسته برنامه خروجی را با ساختن فایل‌های APK از آن و بازرسی آن‌ها تأیید کنید:

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

خروجی باید مشابه موارد زیر باشد:

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

این نام ها نشان می دهد که هدف گذاری TCF به درستی اعمال می شود. اگر محتویات یک APK سطح (مثلا asset-slices/level1-astc.apk ) را استخراج کنید، می توانید تأیید کنید که فقط یک فهرست به نام textures وجود دارد.

بسته نرم افزاری را تست کنید

یک دستگاه را وصل کنید و بسته‌های دارایی قابل اجرا را نصب کنید:

bundletool install-apks --apks=APKS.apks

این دستور فقط بسته‌های دارایی را نصب می‌کند که با مشخصات دستگاه مطابقت دارند. این مشخصات شامل ABI، تراکم صفحه، زبان و کاربردی ترین فرمت فشرده سازی بافت است. این عملیات کاری را که Google Play Store برای بازی منتشر شده شما انجام می دهد شبیه سازی می کند.

برای تأیید اینکه بسته‌های دارایی صحیح نصب شده‌اند، یکی از موارد زیر را انجام دهید:

  • از دستور bundletool extract-apks برای خروجی apk های نصب شده برای دستگاه خود در یک فهرست استفاده کنید و سپس این دایرکتوری را بررسی کنید.

    1. مشخصات دستگاه خود را استخراج کنید:

      bundletool get-device-spec --output=MY_DEVICE_SPEC.json
      
    2. اجرای bundletool extract-apks با این مشخصات دستگاه:

      bundletool extract-apks --apks=APKS.apks --device-spec=MY_DEVICE_SPEC.json \
          --output-dir out
      
    3. فایل‌ها را در فهرست out فهرست کنید و بررسی کنید که بسته‌های دارایی مناسب نصب شده‌اند. نام بسته دارایی با نام قالب بافت (به عنوان مثال، level1-astc.apk ) پسوند می شود.

  • عبارات گزارش را در بازی خود اضافه کنید که در هنگام بارگذاری یک بافت، فرمت بافت را خروجی می دهد.

  • یک مجموعه آزمایشی از بافت‌ها ایجاد کنید (به عنوان مثال، یک بافت را با یک رنگ روشن برای یک قالب مشخص جایگزین کنید). بازی را اجرا کنید و بررسی کنید که وجود دارد.

اگر برنامه شما حاوی بسته‌های دارایی on-demand یا fast-follow ، از راه‌حل آزمایش محلی برای تحویل دارایی استفاده کنید.

پسوندهای پشتیبانی شده برای نام دایرکتوری بافت

Google Play پسوندهای زیر را که در نام دایرکتوری بافت استفاده می شود، درک می کند:

  • #tcf_astc برای فشرده سازی بافت مقیاس پذیر تطبیقی ​​(ASTC)
  • #tcf_atc برای فشرده سازی بافت ATI (ATC)
  • #tcf_dxt1 برای فشرده‌سازی بافت S3 DXT1 (DXT1)
  • #tcf_latc برای فشرده سازی بافت درخشندگی-آلفا (LATC)
  • #tcf_paletted برای فشرده سازی بافت پالت شده عمومی
  • #tcf_pvrtc برای فشرده سازی بافت PowerVR (PVRTC)
  • #tcf_etc1 برای فشرده سازی بافت اریکسون (ETC1)
  • #tcf_etc2 برای فشرده سازی بافت اریکسون 2 (ETC2)
  • #tcf_s3tc برای فشرده سازی بافت S3 (S3TC)
  • #tcf_3dc برای فشرده سازی بافت ATI 3Dc (3Dc)

قوانین سرویس Google Play

Google Play رشته های برنامه افزودنی OpenGL مورد استفاده دستگاه و نسخه OpenGL پشتیبانی شده توسط دستگاه را بررسی می کند. Google Play از این اطلاعات برای تعیین فرمت بافت مناسب برای ارائه به دستگاه از Android App Bundle استفاده می کند.

Google Play اولین قالب را به ترتیب فهرست شده در جدول زیر ارائه می دهد که توسط دستگاه پشتیبانی می شود.

اگر هیچ یک از قالب‌های بافت در App Bundle توسط دستگاه پشتیبانی نمی‌شود، Google Play قالب‌های بافت را در قالب پیش‌فرض بسته‌بندی می‌کند. (مگر اینکه سخت افزار دستگاه خاصی را هدف قرار دهید، ETC1 یا ETC2 انتخاب های خوبی برای قالب پیش فرض هستند.) برای اطلاعات در مورد نحوه بسته بندی دارایی ها در قالب پیش فرض، به استفاده از bundletool یا استفاده از افزونه Google Play Unity مراجعه کنید.

اگر دارایی‌ها در قالب پیش‌فرض بسته‌بندی نشده باشند، Google Play برنامه را به‌عنوان غیرقابل دسترس برای دستگاه علامت‌گذاری می‌کند. در این حالت، کاربران نمی توانند برنامه را دانلود کنند.

قالب (طراحی شده در tcf_xxxx ) در دستگاه های دارای رشته پسوند 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
لاتک GL_EXT_texture_compression_latc
atc GL_AMD_compressed_ATC_texture
3dc GL_AMD_compressed_3DC_texture
و غیره 2 قابل اجرا نیست. دستگاه باید از OpenGL ES نسخه 3.0 یا بالاتر پشتیبانی کند.
غیره 1 GL_OES_compressed_ETC1_RGB8_texture
پالت شده GL_OES_compressed_paletted_texture