รูปแบบการบีบอัดพื้นผิวเป้าหมายใน Android App Bundle

พื้นผิวคือรูปภาพที่ใช้กับพื้นผิวของโมเดล 3 มิติได้ นอกจากนี้ ตัวแสดงผล 2 มิติยังใช้พื้นผิวเพื่อวาดองค์ประกอบต่างๆ เช่น สไปรต์หรือพื้นหลังด้วย หน้านี้อธิบายรูปแบบการบีบอัดพื้นผิวยอดนิยมที่ใช้ในเกมและวิธีกำหนดเป้าหมายใน Android App Bundle อ่านเกี่ยวกับ Android App Bundle และการนำส่งเนื้อหา Play ก่อนเริ่มอ่านคู่มือนี้

ฉากหลัง

โดยทั่วไป GPU จะรองรับชุดรูปแบบการบีบอัดพื้นผิว รูปแบบการบีบอัดพื้นผิว (หรือ TCF) คือรูปแบบไฟล์ที่ได้รับการเพิ่มประสิทธิภาพสำหรับ GPU GPU จะโหลดและแสดงผลพื้นผิวได้เร็วขึ้นและใช้หน่วยความจำน้อยกว่าการใช้อาร์เรย์ของค่า RGBA ในหน่วยความจำ การรองรับนี้จะดำเนินการในระดับฮาร์ดแวร์ โดยผู้ผลิต GPU จะฝังคอมโพเนนต์ลงในชิปการ์ดกราฟิกที่อ่าน ขยาย และแสดงผลรูปแบบที่รองรับ

รูปแบบการบีบอัดพื้นผิวที่พบบ่อยในฮาร์ดแวร์อุปกรณ์เคลื่อนที่สมัยใหม่มีดังนี้

  • ASTC: รูปแบบล่าสุดที่ออกแบบมาเพื่อใช้แทนรูปแบบก่อนหน้า มีความยืดหยุ่นมากกว่ารูปแบบก่อนหน้าเนื่องจากรองรับขนาดบล็อกที่หลากหลาย การใช้รูปแบบนี้เป็นวิธีที่ดีในการเพิ่มประสิทธิภาพขนาดของเกม
  • ETC2: รองรับโดยอุปกรณ์ทั้งหมดที่รองรับ OpenGL ES 3.0 ขึ้นไป ซึ่งรวมถึงอุปกรณ์เคลื่อนที่ Android ที่ใช้งานอยู่เกือบทั้งหมด

อุปกรณ์ Android รองรับรูปแบบเหล่านี้ในเปอร์เซ็นต์โดยประมาณต่อไปนี้

รูปแบบการบีบอัดพื้นผิว เปอร์เซ็นต์ของอุปกรณ์ Google Play ที่มีการสนับสนุน
ASTC มากกว่า 80%
ETC2 มากกว่า 95%

GPU ของคอมพิวเตอร์เดสก์ท็อปที่ใช้ Google Play Games บน PC ยังรองรับรูปแบบต่อไปนี้ด้วย

  • DDS หรือ S3TC: บางครั้งเรียกว่า BCn, DXTC หรือ DXTn

รูปแบบการบีบอัดพื้นผิวที่เก่ากว่าและไม่แนะนำให้ใช้อีกต่อไป ได้แก่

  • ETC1: รองรับในอุปกรณ์ส่วนใหญ่ รูปแบบนี้ไม่รองรับความโปร่งใส แต่เกมสามารถใช้ไฟล์พื้นผิวที่ 2 สำหรับคอมโพเนนต์อัลฟ่าได้
  • PVRTC: เป็นที่นิยมในเกม iOS และยังรองรับในอุปกรณ์ Android บางรุ่นด้วย

การรองรับ ETC1 เป็นข้อกำหนดสำหรับเกมที่รองรับอุปกรณ์เดิมที่เก่ามากหรืออุปกรณ์ Android TV บางรุ่นที่ไม่รองรับ OpenGL ES 3.0 ขึ้นไปเท่านั้น

รูปแบบเริ่มต้น

เนื่องจากมีรูปแบบที่ใช้ได้มากมาย (ซึ่งมีการรองรับอุปกรณ์ในระดับที่แตกต่างกัน) คุณจึงอาจไม่ทราบว่าควรใช้รูปแบบใดเมื่อสร้างพื้นผิวเกม เพื่อเป็นการป้องกัน รูปแบบ App Bundle จะช่วยให้คุณเลือกรูปแบบการบีบอัดพื้นผิวเริ่มต้นสำหรับ Asset Pack แต่ละรายการได้ หากอุปกรณ์ไม่รองรับรูปแบบอื่นๆ ที่ระบุ ระบบจะติดตั้งชิ้นงานที่ใช้รูปแบบเริ่มต้นนี้

ETC2 เป็นตัวเลือกที่ดีสำหรับรูปแบบเริ่มต้น เว้นแต่คุณจะกำหนดเป้าหมายเป็นฮาร์ดแวร์อุปกรณ์ที่เก่ามาก ใช้รูปแบบ ETC2 ที่รองรับใน OpenGL ES 3.0 รูปแบบเหล่านี้ยังมีให้บริการใน Vulkan Graphics API ด้วย

รูปแบบ ASTC กำหนดขนาดบล็อกการบีบอัดที่หลากหลาย ซึ่งช่วยให้คุณเลือกแลกคุณภาพรูปภาพที่ลดลงกับการบีบอัดที่มากขึ้นได้ คุณอาจเลือกขนาดบล็อกที่เล็กลงหรือใหญ่ขึ้นสำหรับพื้นผิวหนึ่งๆ เพื่อรักษาคุณภาพของภาพที่ยอมรับได้ ทั้งนี้ขึ้นอยู่กับลักษณะของวัสดุอาร์ตเวิร์กต้นฉบับ

หากเกมของคุณรองรับ Google Play Games บน PC และใช้ Vulkan คุณควรใส่พื้นผิว S3TC ด้วย GPU บนเดสก์ท็อปทั้งหมดรองรับรูปแบบ S3TC

สร้าง App Bundle

Google Play ใช้ Android App Bundle เพื่อสร้างและแสดง APK ที่เพิ่มประสิทธิภาพสำหรับการกำหนดค่าอุปกรณ์ของผู้ใช้แต่ละราย เพื่อให้ผู้ใช้ดาวน์โหลดเฉพาะโค้ดและทรัพยากรที่จำเป็นต่อการเรียกใช้เกมของคุณ APK ที่เพิ่มประสิทธิภาพเหล่านี้ประกอบด้วยชุดเนื้อหาพื้นผิวชุดเดียว ซึ่งจัดรูปแบบด้วยรูปแบบการบีบอัดที่เหมาะสมที่สุดสำหรับอุปกรณ์

หากเกมไม่ได้อยู่ใน Unity ให้ใช้ Gradle เพื่อสร้าง App Bundle ผู้ใช้ขั้นสูงอาจต้องการใช้ bundletool

หากเกมของคุณอยู่ใน Unity การรองรับ App Bundle ที่มี การนำส่งเนื้อหา Play จะพร้อมใช้งานใน Unity 2021.3 ขึ้นไป ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ Unity คุณสามารถใช้ปลั๊กอิน Unity เพื่อสร้าง App Bundle ด้วย Unity เวอร์ชันที่ต่ำกว่าได้

ใช้ Gradle

  1. อัปเดตเวอร์ชันของปลั๊กอิน Android Gradle ในไฟล์ build.gradle ของโปรเจ็กต์เป็น 4.1 ขึ้นไป (เช่น com.android.tools.build:gradle:4.1.0)

  2. กำหนดชุดประเภทอุปกรณ์ที่คุณต้องการกำหนดเป้าหมายสำหรับเกมและรูปแบบการบีบอัดพื้นผิวที่อุปกรณ์รองรับ (ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบได้ที่พื้นหลัง)

  3. สร้างชิ้นงานเวอร์ชันต่างๆ สำหรับรูปแบบการบีบอัดพื้นผิวแต่ละรูปแบบจากขั้นตอนก่อนหน้า ซึ่งอาจรวมถึงการสร้างสไปรท์ชีตโดยใช้ซอฟต์แวร์อย่าง TexturePacker หรือการเรียกใช้สคริปต์ที่แปลงเนื้อหาดิบเป็นเนื้อหาที่มีรูปแบบเฉพาะ (เช่น astc-encoder)

  4. สร้างAsset Pack (ดูสร้างสำหรับ C++ หรือ Java) ซึ่งมีเนื้อหาเกมและใช้โดยการนำส่งเนื้อหา Play เช่น คุณอาจสร้าง Asset Pack 1 รายการต่อระดับ หรือ Asset Pack สำหรับส่วนต่างๆ ของเกม

  5. ภายใน Asset Pack ให้เพิ่มไดเรกทอรีสำหรับรูปแบบการบีบอัดพื้นผิวแต่ละรูปแบบที่คุณต้องการรองรับ เพิ่มคำต่อท้ายที่รองรับลงในชื่อไดเรกทอรีพื้นผิวที่สอดคล้องกับรูปแบบการบีบอัดพื้นผิวที่ใช้สำหรับไฟล์ที่มีอยู่

    สร้างไดเรกทอรีที่ไม่มีคำต่อท้ายในชื่อ (เช่น common/src/main/assets/textures/) ในไดเรกทอรีนี้ ให้วางรูปแบบเริ่มต้นของชิ้นงานพื้นผิว อุปกรณ์ส่วนใหญ่ควรรองรับรูปแบบเริ่มต้นนี้ (เช่น ETC1 หรือ ETC2) หากอุปกรณ์ไม่รองรับรูปแบบอื่นๆ ที่ระบุ (เช่น PVRTC และ ASTC ในตารางด้านล่าง) Google Play Store จะติดตั้งไดเรกทอรีนี้แทน

    ไดเรกทอรีเก่า ไดเรกทอรีหลังจาก
    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/...
  6. อัปเดตไฟล์ build.gradle ของแอปเพื่อเปิดใช้การแยก Asset Pack ตามพื้นผิว

    // In the app build.gradle file:
    android {
        ...
        bundle {
            texture {
                enableSplit true
            }
        }
    }
    
  7. ใน Android Studio ให้เลือกสร้าง > สร้าง Bundle/APK ที่รับรองแล้ว หรือเปิดงาน Gradle จากบรรทัดคำสั่งเพื่อสร้าง Bundle

ใช้ปลั๊กอิน Unity ของ Google Play

ดาวน์โหลดปลั๊กอิน (หรือแพ็กเกจ) Unity สำหรับการนำส่งเนื้อหา Play เพื่อสร้าง App Bundle ที่มี Asset Pack ที่กำหนดเป้าหมายตามพื้นผิว

เตรียมชิ้นงาน

หากต้องการเตรียมชิ้นงานพื้นผิวสำหรับการสร้าง App Bundle ให้ทำดังนี้

  1. รวมฉากและเนื้อหาไว้ใน AssetBundles ของ Unity หลายรายการ

  2. กำหนดชุดประเภทอุปกรณ์ที่คุณต้องการกำหนดเป้าหมายสำหรับเกมและรูปแบบการบีบอัดพื้นผิวที่อุปกรณ์รองรับ (ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบได้ที่พื้นหลัง)

  3. แก้ไขสคริปต์บิลด์ของเกมเพื่อสร้าง AssetBundle หลายครั้ง โดยสร้าง 1 ครั้งสำหรับรูปแบบพื้นผิวแต่ละรูปแบบที่ต้องการรองรับ ดูสคริปต์ตัวอย่างต่อไปนี้

    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 Store จะติดตั้งไดเรกทอรีนี้แทน

    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. คลิกเพิ่มโฟลเดอร์เพื่อเพิ่มโฟลเดอร์ที่มี Asset Bundle เริ่มต้น ระบบจะติดตั้งแพ็กเกจเหล่านี้ในอุปกรณ์ที่ไม่รองรับรูปแบบอื่นๆ ที่คุณกำหนด

    อย่าลืมตั้งค่าโหมดการนำส่งสำหรับ AssetBundle

    รูปแบบเริ่มต้นของการนำส่ง Unity AssetBundle

  7. คลิกเพิ่มโฟลเดอร์เพื่อเพิ่มโฟลเดอร์ที่มี AssetBundle ที่สร้างขึ้นสำหรับรูปแบบอื่น (เช่น ASTC) ทำซ้ำตามที่จำเป็น

    ตรวจสอบว่าได้ตั้งค่าโหมดการนำส่งสำหรับ AssetBundle แต่ละรายการแล้ว

    รูปแบบ ASTC ของการนำส่ง AssetBundle ของ Unity

สร้าง

เลือก Google > Build Android App Bundle เพื่อเปิด Unity Build ของเกม นอกจากนี้ยังรวม AssetBundle ไว้ใน Asset Pack หลายรายการ โดยจะแปลงชื่อ AssetBundle แต่ละรายการเป็น Asset Pack รายการเดียว

(ขั้นสูง) ใช้ bundletool

ดูข้อมูลเพิ่มเติมเกี่ยวกับ bundletool ได้ที่สร้าง App Bundle โดยใช้ bundletool

วิธีสร้าง App Bundle มีดังนี้

  1. ดาวน์โหลด bundletool จากที่เก็บ GitHub

  2. กำหนดชุดประเภทอุปกรณ์ที่คุณต้องการกำหนดเป้าหมายสำหรับเกมและรูปแบบการบีบอัดพื้นผิวที่อุปกรณ์รองรับ (ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบได้ที่พื้นหลัง)

  3. สร้างชิ้นงานเวอร์ชันต่างๆ สำหรับรูปแบบการบีบอัดพื้นผิวแต่ละรูปแบบจากขั้นตอนก่อนหน้า ซึ่งอาจรวมถึงการสร้างสไปรท์ชีตโดยใช้ซอฟต์แวร์อย่าง TexturePacker หรือการเรียกใช้สคริปต์ที่แปลงเนื้อหาดิบเป็นเนื้อหาที่มีรูปแบบเฉพาะ (เช่น astc-encoder)

  4. สร้างAsset Pack (ดูสร้างสำหรับ C++ หรือ Java) ซึ่งมีเนื้อหาเกมและใช้โดยการนำส่งเนื้อหา Play เช่น คุณอาจสร้าง Asset Pack 1 รายการต่อระดับ หรือ Asset Pack สำหรับส่วนต่างๆ ของเกม

  5. ใน Asset Pack ต่างๆ ให้เพิ่มคำต่อท้ายที่รองรับลงในชื่อไดเรกทอรีพื้นผิวที่สอดคล้องกับรูปแบบการบีบอัดพื้นผิวที่ใช้สำหรับไฟล์ที่มีอยู่

    สร้างไดเรกทอรีที่ไม่มีคำต่อท้ายในชื่อ (เช่น common/src/main/assets/textures/) ในไดเรกทอรีนี้ ให้วางรูปแบบเริ่มต้นของชิ้นงานพื้นผิว อุปกรณ์ส่วนใหญ่ควรรองรับรูปแบบเริ่มต้นนี้ (เช่น ETC1 หรือ ETC2) หากอุปกรณ์ไม่รองรับรูปแบบอื่นๆ ที่ระบุ (เช่น PVRTC และ ASTC ในตารางด้านล่าง) Google Play Store จะติดตั้งไดเรกทอรีนี้แทน

    ไดเรกทอรีเก่า ไดเรกทอรีหลังจาก
    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/...
  6. เพิ่มมิติข้อมูล TCF ลงในไฟล์ข้อมูลเมตา App Bundle (BundleConfig.json) โดยใช้ TEXTURE_COMPRESSION_FORMAT สำหรับช่อง value ดังนี้

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

    ตั้งค่า suffixStripping.enabled เป็น true เพื่อนำคำต่อท้าย (เช่น #tcf_astc) ออกจากชื่อไดเรกทอรีเมื่อสร้าง Asset Pack ซึ่งจะช่วยให้เกมอ่านไฟล์จากชื่อไดเรกทอรีที่รู้จักกันดี (เช่น level1/assets/textures) ได้ เกมเอนจินบางรายการสามารถตรวจจับรูปแบบของไฟล์ได้ ดังนั้นเกมจึงไม่จำเป็นต้องสนใจรูปแบบของเนื้อหาพื้นผิวที่ติดตั้งมาด้วย

    suffixStripping.defaultSuffix ระบุคำต่อท้ายไดเรกทอรีเริ่มต้นเมื่อ bundletool สร้าง APK แบบสแตนด์อโลนสำหรับอุปกรณ์ที่ใช้ Android 5.0 (API ระดับ 21) และต่ำกว่า ในตารางตัวอย่างก่อนหน้านี้ ระบบจะติดตั้งชิ้นงานพื้นผิวเวอร์ชันเริ่มต้นในอุปกรณ์เหล่านี้ ซึ่งเป็นลักษณะการทำงานที่ต้องการในกรณีส่วนใหญ่

  7. สร้าง App Bundle โดยทำดังนี้

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

ยืนยันเนื้อหาของ App Bundle

หากยังไม่ได้ดาวน์โหลด ให้ดาวน์โหลด bundletool จากที่เก็บ GitHub

ยืนยันเนื้อหาของ App Bundle เอาต์พุตโดยการสร้าง APK จาก App Bundle ดังกล่าวและตรวจสอบ 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 เพียงรายการเดียว

ทดสอบ App Bundle

เชื่อมต่ออุปกรณ์และติดตั้ง Asset Pack ที่เกี่ยวข้อง ดังนี้

bundletool install-apks --apks=APKS.apks

คำสั่งนี้จะติดตั้งเฉพาะ Asset Pack ที่ตรงกับข้อกำหนดของอุปกรณ์เท่านั้น ข้อกำหนดเหล่านี้รวมถึง ABI, ความหนาแน่นของหน้าจอ, ภาษา และรูปแบบการบีบอัดพื้นผิวที่เกี่ยวข้องมากที่สุด การดำเนินการนี้จะจำลองสิ่งที่ Google Play Store ทำกับเกมที่เผยแพร่ของคุณ

หากต้องการยืนยันว่าติดตั้ง Asset Pack ที่ถูกต้องแล้ว ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้

  • ใช้คำสั่ง 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 และยืนยันว่าได้ติดตั้ง Asset Pack ที่เหมาะสมแล้ว ชื่อ Asset Pack จะต่อท้ายด้วยชื่อรูปแบบพื้นผิว (เช่น level1-astc.apk)

  • เพิ่มคำสั่งบันทึกในเกมที่แสดงผลรูปแบบพื้นผิวเมื่อโหลดพื้นผิว

  • สร้างชุดพื้นผิวทดสอบ (เช่น แทนที่พื้นผิวด้วยสีสว่างสีเดียวสำหรับรูปแบบที่กำหนด) เรียกใช้เกมและยืนยันว่ามีเกมอยู่

หากแอปมี Asset Pack on-demand หรือ fast-follow ให้ใช้โซลูชันการทดสอบในเครื่องสำหรับการนำส่งเนื้อหา

คำต่อท้ายที่รองรับสำหรับชื่อไดเรกทอรีพื้นผิว

Google Play เข้าใจคำต่อท้ายต่อไปนี้ที่ใช้ในชื่อไดเรกทอรีพื้นผิว

  • #tcf_astc สำหรับ Adaptive Scalable Texture Compression (ASTC)
  • #tcf_atc สำหรับการบีบอัดพื้นผิว ATI (ATC)
  • #tcf_dxt1 สำหรับการบีบอัดพื้นผิว S3 DXT1 (DXT1)
  • #tcf_latc สำหรับการบีบอัดพื้นผิว Luminance-Alpha (LATC)
  • #tcf_paletted สำหรับการบีบอัดพื้นผิวแบบจานสีทั่วไป
  • #tcf_pvrtc สำหรับการบีบอัดพื้นผิว PowerVR (PVRTC)
  • #tcf_etc1 สำหรับ Ericsson texture compression (ETC1)
  • #tcf_etc2 สำหรับ Ericsson texture compression 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
latc GL_EXT_texture_compression_latc
atc GL_AMD_compressed_ATC_texture
3dc GL_AMD_compressed_3DC_texture
etc2 ไม่เกี่ยวข้อง อุปกรณ์ต้องรองรับ OpenGL ES เวอร์ชัน 3.0 ขึ้นไป
etc1 GL_OES_compressed_ETC1_RGB8_texture
มีจานสี GL_OES_compressed_paletted_texture