Android App Bundle-এ টার্গেট টেক্সচার কম্প্রেশন ফর্ম্যাট

টেক্সচার হল এমন ছবি যা 3D মডেলের সারফেসে প্রয়োগ করা যেতে পারে। এছাড়াও, স্প্রাইট বা ব্যাকগ্রাউন্ডের মতো এলিমেন্ট আঁকার জন্য 2D রেন্ডারার টেক্সচার ব্যবহার করে। এই পৃষ্ঠায় গেমে ব্যবহৃত জনপ্রিয় টেক্সচার কম্প্রেশন ফর্ম্যাট এবং Android অ্যাপ বান্ডেলে কীভাবে সেগুলিকে টার্গেট করতে হয় তা বর্ণনা করা হয়েছে। এই নির্দেশিকা শুরু করার আগে Android অ্যাপ বান্ডেল সম্পর্কে এবং Play Asset Delivery সম্পর্কে পড়ুন।

ব্যাকগ্রাউন্ড

GPU সাধারণত টেক্সচার কম্প্রেশন ফর্ম্যাটের একটি সেটকে সাপোর্ট করে। টেক্সচার কম্প্রেশন ফর্ম্যাট (বা TCF) হল এমন একটি ফাইল ফর্ম্যাট যা GPU-এর জন্য অপ্টিমাইজ করা হয়। GPU মেমরিতে RGBA ভ্যালুর অ্যারে ব্যবহার করার তুলনায়, আরও দ্রুত এবং কম মেমরি ব্যবহার করে টেক্সচার লোড ও রেন্ডার করে। এই সহায়তা হার্ডওয়্যার লেভেলে করা হয়: GPU প্রস্তুতকারক গ্রাফিক কার্ড চিপে কম্পোনেন্ট এম্বেড করে যা কাজ করে এমন ফর্ম্যাট রিড, ডিকম্প্রেস ও রেন্ডার করে।

আধুনিক মোবাইল হার্ডওয়্যারে সাধারণ টেক্সচার কম্প্রেশন ফর্ম্যাটগুলি নিচে দেওয়া হল:

  • ASTC: পূর্ববর্তী ফর্ম্যাটের স্থান অধিকার করার জন্য ডিজাইন করা সাম্প্রতিক ফর্ম্যাট। বিভিন্ন ব্লক সাইজ কাজ করে বলে আগের ফর্ম্যাটের চেয়ে বেশি নমনীয়। এই ফর্ম্যাট ব্যবহার করা আপনার গেমের সাইজ অপ্টিমাইজ করার একটি ভালো উপায়।
  • ETC2: OpenGL ES 3.0 এবং তার পরবর্তী যেকোনও ভার্সন কাজ করে এমন সব ডিভাইসে কাজ করে। এর মধ্যে প্রায় সব অ্যাক্টিভ Android মোবাইল ডিভাইস অন্তর্ভুক্ত।

এইসব ফর্ম্যাট Android ডিভাইসের আনুমানিক নিম্নলিখিত শতাংশে কাজ করে:

টেক্সচার কম্প্রেশন ফর্ম্যাট সহায়তা সহ Google Play ডিভাইসের শতকরা হার
ASTC >৮০%
ETC2 >৯৫%

পিসি (PC)-র জন্য Google Play Games চালানো ডেস্কটপ কম্পিউটার GPU-ও এই ফর্ম্যাটকে সাপোর্ট করে:

  • DDS বা S3TC: কখনও কখনও BCn, DXTC বা DXTn বলা হয়।

পুরনো, আর সাজেস্ট করা হয় না এমন টেক্সচার কম্প্রেশন ফর্ম্যাটের মধ্যে রয়েছে:

  • ETC1: বেশিরভাগ ডিভাইসে কাজ করে। এই ফর্ম্যাটে ট্রান্সপারেন্সি সাপোর্ট নেই, তবে গেম আলফা কম্পোনেন্টের জন্য দ্বিতীয় টেক্সচার ফাইল ব্যবহার করতে পারে।
  • PVRTC: iOS গেমে জনপ্রিয় এবং কিছু Android ডিভাইসেও কাজ করে।

ETC1 সাপোর্ট শুধুমাত্র সেইসব গেমের জন্য প্রয়োজন হয় যেগুলি খুব পুরনো লিগ্যাসি ডিভাইস বা এমন কিছু Android TV ডিভাইসে কাজ করে যেগুলিতে OpenGL ES 3.0 এবং তার পরবর্তী ভার্সন কাজ করে না।

একটি ডিফল্ট ফর্ম্যাট

এতগুলি উপলভ্য ফর্ম্যাটের (ডিভাইস সাপোর্টের বিভিন্ন লেভেল সহ) মধ্যে, আপনার গেম টেক্সচার তৈরি করার সময় কোন ফর্ম্যাটগুলি ব্যবহার করতে হবে তা আপনি নাও জানতে পারেন। নিরাপত্তা হিসেবে, অ্যাপ বান্ডেল ফর্ম্যাট আপনাকে প্রতিটি অ্যাসেট প্যাকের জন্য ডিফল্ট টেক্সচার কম্প্রেশন ফর্ম্যাট বেছে নিতে দেয়। কোনও ডিভাইসে অন্য নির্দিষ্ট করা ফর্ম্যাট কাজ না করলে, এই ডিফল্ট ফর্ম্যাট ব্যবহার করা অ্যাসেট ইনস্টল করা হয়।

আপনি খুব পুরনো ডিভাইসের হার্ডওয়্যার টার্গেট না করলে, ডিফল্ট ফর্ম্যাটের জন্য ETC2 একটি ভালো বিকল্প। ETC2 ফর্ম্যাট ব্যবহার করুন যা OpenGL ES 3.0-এ কাজ করে। এই ফর্ম্যাটগুলি Vulkan গ্রাফিক্স API-তেও উপলভ্য।

ASTC ফর্ম্যাট বিভিন্ন ধরনের কম্প্রেশন ব্লক সাইজ নির্ধারণ করে, যা আপনাকে বেশি কম্প্রেশনের জন্য ছবির কোয়ালিটি কমানোর সুবিধা দেয়। সোর্স আর্ট মেটেরিয়ালের প্রকৃতির উপর নির্ভর করে, প্রদত্ত টেক্সচারের জন্য আপনি গ্রহণযোগ্য ভিজ্যুয়াল কোয়ালিটি বজায় রাখতে ছোট বা বড় ব্লক সাইজ বেছে নিতে পারেন।

আপনার গেম পিসি (PC)-র জন্য Google Play Games-এ কাজ করলে এবং Vulkan ব্যবহার করলে, আপনাকে S3TC টেক্সচার অন্তর্ভুক্ত করতে হবে। S3TC ফর্ম্যাট সব ডেস্কটপ GPU-তে কাজ করে।

অ্যাপ বান্ডেল তৈরি করা

Google Play, Android অ্যাপ বান্ডেল ব্যবহার করে প্রতিটি ব্যবহারকারীর ডিভাইস কনফিগারেশনের জন্য অপ্টিমাইজ করা APK তৈরি করে ও পরিষেবা দেয়, যাতে ব্যবহারকারীরা আপনার গেম চালানোর জন্য শুধুমাত্র প্রয়োজনীয় কোড এবং রিসোর্স ডাউনলোড করেন। এই অপ্টিমাইজ করা APK-তে টেক্সচার অ্যাসেটের একটি সেট থাকে, যা ডিভাইসের জন্য উপযুক্ত কম্প্রেশন ফর্ম্যাটে ফর্ম্যাট করা হয়।

আপনার গেম Unity-তে না থাকলে, অ্যাপ বান্ডেল তৈরি করতে Gradle ব্যবহার করুন। উন্নত ব্যবহারকারীরা ব্যবহার করতে bundletool চাইতে পারেন।

আপনার গেম Unity-তে থাকলে, Unity 2021.3 এবং তার পরবর্তী ভার্সনে Play Asset Delivery-এর সাথে অ্যাপ বান্ডেলের জন্য সহায়তা উপলভ্য। আরও তথ্যের জন্য, Unity ডকুমেন্টেশন দেখুন। আপনি Unity-র পুরনো ভার্সন ব্যবহার করে অ্যাপ বান্ডেল তৈরি করতে Unity প্লাগ-ইন ব্যবহার করতে পারবেন।

Gradle ব্যবহার করুন

  1. আপনার প্রোজেক্টের build.gradle ফাইলে Android Gradle প্লাগ-ইনের ভার্সন আপডেট করে 4.1 বা তার বেশি করুন (যেমন, com.android.tools.build:gradle:4.1.0)।

  2. আপনার গেমের জন্য কোন ধরনের ডিভাইস টার্গেট করতে চান এবং সেগুলি কোন টেক্সচার কম্প্রেশন ফর্ম্যাট সাপোর্ট করে তা নির্ধারণ করুন (ফর্ম্যাট সম্পর্কে আরও তথ্যের জন্য, ব্যাকগ্রাউন্ড দেখুন)।

  3. আগের ধাপ থেকে প্রতিটি টেক্সচার কম্প্রেশন ফর্ম্যাটের জন্য আপনার অ্যাসেটের ভার্সন তৈরি করুন। এর মধ্যে TexturePacker-এর মতো সফ্টওয়্যার ব্যবহার করে স্প্রাইট শিট তৈরি করা বা এমন একটি স্ক্রিপ্ট চালানো যা কাঁচা অ্যাসেটকে নির্দিষ্ট ফর্ম্যাটে রূপান্তর করে (যেমন, astc-encoder) অন্তর্ভুক্ত থাকতে পারে।

  4. অ্যাসেট প্যাক তৈরি করুন ( C++ বা Java-এর জন্য তৈরি করুন দেখুন), যেখানে আপনার গেম অ্যাসেট থাকে এবং Play Asset Delivery-এর মাধ্যমে ব্যবহার করা হয়। যেমন, আপনি প্রতিটি লেভেলের জন্য একটি অ্যাসেট প্যাক বা আপনার গেমের বিভিন্ন অংশের জন্য অ্যাসেট প্যাক তৈরি করতে পারেন।

  5. আপনার অ্যাসেট প্যাকের মধ্যে, আপনি যে টেক্সচার কম্প্রেশন ফর্ম্যাট সাপোর্ট করতে চান তার জন্য ডিরেক্টরি যোগ করুন। টেক্সচার ডিরেক্টরির নামে সমর্থিত সাফিক্স যোগ করুন যা অন্তর্ভুক্ত ফাইলের জন্য ব্যবহৃত টেক্সচার কম্প্রেশন ফর্ম্যাটের সাথে সম্পর্কিত।

    নামের শেষে কোনও সাফিক্স নেই এমন একটি ডিরেক্টরি তৈরি করুন (যেমন, common/src/main/assets/textures/)। এই ডিরেক্টরিতে, আপনার টেক্সচার অ্যাসেটের ডিফল্ট ফর্ম্যাট রাখুন। এই ডিফল্ট ফর্ম্যাট বেশিরভাগ ডিভাইসে কাজ করা উচিত (যেমন, ETC1 বা ETC2)। কোনও ডিভাইস যদি অন্যান্য নির্দিষ্ট করা ফর্ম্যাট (যেমন, নিচের সারণীতে PVRTC এবং ASTC) সাপোর্ট না করে, তাহলে Google Play Store এর পরিবর্তে এই ডিরেক্টরি ইনস্টল করে।

    আগের ডিরেক্টরি এর পরে ডিরেক্টরি
    common অ্যাসেট প্যাক:
    common/build.gradle
    common/src/main/assets/textures/...
    common অ্যাসেট প্যাক:
    common/build.gradle
    common/src/main/assets/textures/...
    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-তে, বিল্ড > সাইন করা বান্ডেল / APK তৈরি করুন বিকল্প বেছে নিন অথবা আপনার বান্ডেল তৈরি করতে কমান্ড লাইন থেকে Gradle টাস্ক লঞ্চ করুন।

Google Play Unity প্লাগ-ইন ব্যবহার করা

টেক্সচার-টার্গেট করা অ্যাসেট প্যাক সহ অ্যাপ বান্ডেল তৈরি করতে Play Asset Delivery-এর জন্য Unity প্লাগ-ইন (বা প্যাকেজ) পান।

অ্যাসেট প্রস্তুত করুন

অ্যাপ বান্ডেল তৈরি করার জন্য আপনার টেক্সচার অ্যাসেট প্রস্তুত করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. আপনার দৃশ্য ও অ্যাসেট একাধিক Unity AssetBundles-এ প্যাকেজ করুন।

  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 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 > অ্যাসেট ডেলিভারি বিকল্প বেছে নিন।

  6. আপনার ডিফল্ট অ্যাসেট বান্ডেল আছে এমন ফোল্ডার যোগ করতে ফোল্ডার যোগ করুন বিকল্পে ক্লিক করুন। আপনার উল্লেখ করা অন্যান্য ফর্ম্যাট কাজ করে না এমন ডিভাইসে এইসব বান্ডেল ইনস্টল করা হয়।

    AssetBundle-এর জন্য ডেলিভারি মোড সেট করতে ভুলবেন না।

    Unity AssetBundle ডেলিভারির ডিফল্ট ফর্ম্যাট

  7. অন্য ফর্ম্যাটের (যেমন, ASTC) জন্য তৈরি করা AssetBundles সহ ফোল্ডার যোগ করতে, ফোল্ডার যোগ করুন বিকল্পে ক্লিক করুন। প্রয়োজন অনুযায়ী রিপিট করুন।

    প্রতিটি AssetBundle-এর জন্য ডেলিভারি মোড সেট করতে ভুলবেন না।

    Unity AssetBundle ডেলিভারি ASTC ফর্ম্যাট

বিল্ড

আপনার গেমের Unity বিল্ড লঞ্চ করতে Google > Android অ্যাপ বান্ডেল তৈরি করুন বিকল্প বেছে নিন। এছাড়াও, এটি AssetBundles-কে একাধিক অ্যাসেট প্যাকে প্যাক করে যেখানে প্রতিটি AssetBundle-এর নাম একটি অ্যাসেট প্যাকে কনভার্ট করা হয়।

(উন্নত) bundletool ব্যবহার করুন

bundletool সম্পর্কে আরও তথ্যের জন্য, bundletool ব্যবহার করে অ্যাপ বান্ডেল তৈরি করুন দেখুন।

অ্যাপ বান্ডেল তৈরি করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. GitHub রিপোজিটরি থেকে bundletool ডাউনলোড করুন।

  2. আপনার গেমের জন্য কোন ধরনের ডিভাইস টার্গেট করতে চান এবং সেগুলি কোন টেক্সচার কম্প্রেশন ফর্ম্যাট সাপোর্ট করে তা নির্ধারণ করুন (ফর্ম্যাট সম্পর্কে আরও তথ্যের জন্য, ব্যাকগ্রাউন্ড দেখুন)।

  3. আগের ধাপ থেকে প্রতিটি টেক্সচার কম্প্রেশন ফর্ম্যাটের জন্য আপনার অ্যাসেটের ভার্সন তৈরি করুন। এর মধ্যে TexturePacker-এর মতো সফ্টওয়্যার ব্যবহার করে স্প্রাইট শিট তৈরি করা বা এমন একটি স্ক্রিপ্ট চালানো যা কাঁচা অ্যাসেটকে নির্দিষ্ট ফর্ম্যাটে রূপান্তর করে (যেমন, astc-encoder) অন্তর্ভুক্ত থাকতে পারে।

  4. অ্যাসেট প্যাক তৈরি করুন ( C++ বা Java-এর জন্য তৈরি করুন দেখুন), যেখানে আপনার গেম অ্যাসেট থাকে এবং Play Asset Delivery-এর মাধ্যমে ব্যবহার করা হয়। যেমন, আপনি প্রতিটি লেভেলের জন্য একটি অ্যাসেট প্যাক বা আপনার গেমের বিভিন্ন অংশের জন্য অ্যাসেট প্যাক তৈরি করতে পারেন।

  5. আপনার বিভিন্ন অ্যাসেট প্যাকে, টেক্সচার ডিরেক্টরির নামে সমর্থিত প্রত্যয় যোগ করুন যা অন্তর্ভুক্ত ফাইলের জন্য ব্যবহৃত টেক্সচার কম্প্রেশন ফর্ম্যাটের সাথে সম্পর্কিত।

    নামের শেষে কোনও সাফিক্স নেই এমন একটি ডিরেক্টরি তৈরি করুন (যেমন, common/src/main/assets/textures/)। এই ডিরেক্টরিতে, আপনার টেক্সচার অ্যাসেটের ডিফল্ট ফর্ম্যাট রাখুন। এই ডিফল্ট ফর্ম্যাট বেশিরভাগ ডিভাইসে কাজ করা উচিত (যেমন, ETC1 বা ETC2)। কোনও ডিভাইস যদি অন্যান্য নির্দিষ্ট করা ফর্ম্যাট (যেমন, নিচের সারণীতে PVRTC এবং ASTC) সাপোর্ট না করে, তাহলে Google Play Store এর পরিবর্তে এই ডিরেক্টরি ইনস্টল করে।

    আগের ডিরেক্টরি এর পরে ডিরেক্টরি
    common অ্যাসেট প্যাক:
    common/build.gradle
    common/src/main/assets/textures/...
    common অ্যাসেট প্যাক:
    common/build.gradle
    common/src/main/assets/textures/...
    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. অ্যাপ বান্ডেল মেটাডেটা ফাইলে (BundleConfig.json) TCF ডাইমেনশন যোগ করুন। value ফিল্ডের জন্য TEXTURE_COMPRESSION_FORMAT ব্যবহার করুন:

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

    অ্যাসেট প্যাক তৈরি করার সময় ডিরেক্টরির নাম থেকে সাফিক্স (যেমন, #tcf_astc) সরাতে suffixStripping.enabled-কে true-এ সেট করুন। এটি আপনার গেমকে একটি সুপরিচিত ডিরেক্টরি নাম (যেমন level1/assets/textures) থেকে ফাইল পড়তে দেয়। কিছু গেম ইঞ্জিন একটি ফাইলের ফর্ম্যাট শনাক্ত করতে পারে, তাই আপনার গেমটি যে টেক্সচার অ্যাসেটের ফর্ম্যাটের সাথে ইনস্টল করা হয়েছে সেটি সম্পর্কে উদাসীন হতে পারে।

    suffixStripping.defaultSuffix ডিফল্ট ডিরেক্টরি সাফিক্স নির্দিষ্ট করে যখন bundletool Android 5.0 (API লেভেল ২১) এবং তার আগের যেকোনও ভার্সনে চলা ডিভাইসের জন্য স্ট্যান্ডঅ্যালোন APK তৈরি করে। আগের উদাহরণ সারণীতে, টেক্সচার অ্যাসেটের ডিফল্ট ভার্সন এইসব ডিভাইসে ইনস্টল করা আছে; বেশিরভাগ ক্ষেত্রে এটিই প্রত্যাশিত আচরণ।

  7. অ্যাপ বান্ডেল তৈরি করুন:

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

অ্যাপ বান্ডেলের কন্টেন্ট যাচাই করুন

আপনি আগে থেকে না করে থাকলে, GitHub রিপোজিটরি থেকে bundletool ডাউনলোড করুন।

আউটপুট অ্যাপ বান্ডেল থেকে 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 যা করে তা সিমুলেট করে।

সঠিক অ্যাসেট প্যাক ইনস্টল করা হয়েছে কিনা তা যাচাই করতে, নিম্নলিখিত যেকোনও একটি কাজ করুন:

  • আপনার ডিভাইসের জন্য ইনস্টল করা apk-এর আউটপুট একটি ডিরেক্টরিতে পেতে bundletool extract-apks কমান্ড ব্যবহার করুন এবং তারপরে এই ডিরেক্টরি পরীক্ষা করুন।

    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 টেক্সচার ডিরেক্টরির নামে ব্যবহৃত নিম্নলিখিত প্রত্যয়গুলি বুঝতে পারে:

  • অ্যাডাপ্টিভ স্কেলেবল টেক্সচার কম্প্রেশনের (ASTC) জন্য #tcf_astc
  • ATI টেক্সচার কম্প্রেশনের (ATC) জন্য #tcf_atc
  • S3 DXT1 টেক্সচার কম্প্রেশনের (DXT1) জন্য #tcf_dxt1
  • লুমিন্যান্স-আলফা টেক্সচার কম্প্রেশনের (LATC) জন্য #tcf_latc
  • জেনেরিক প্যালেট করা টেক্সচার কম্প্রেশনের জন্য #tcf_paletted
  • PowerVR টেক্সচার কম্প্রেশনের (PVRTC) জন্য #tcf_pvrtc
  • Ericsson টেক্সচার কম্প্রেশনের (ETC1) জন্য #tcf_etc1
  • Ericsson texture compression 2 (ETC2)-এর জন্য #tcf_etc2
  • S3 টেক্সচার কম্প্রেশনের (S3TC) জন্য #tcf_s3tc
  • ATI 3Dc টেক্সচার কম্প্রেশনের (3Dc) জন্য #tcf_3dc

Google Play-এর পরিষেবা সংক্রান্ত নিয়ম

Google Play ডিভাইসের দ্বারা ব্যবহৃত OpenGL এক্সটেনশন স্ট্রিং এবং ডিভাইসের দ্বারা সমর্থিত OpenGL ভার্সন পরীক্ষা করে। Android App Bundle থেকে ডিভাইসে ডেলিভার করার জন্য সঠিক টেক্সচার ফর্ম্যাট নির্ধারণ করতে Google Play এই তথ্য ব্যবহার করে।

Google Play প্রথম ফর্ম্যাট ডেলিভার করে, যা নিম্নলিখিত টেবিলে তালিকাভুক্ত ক্রমে ডিভাইস দ্বারা সমর্থিত।

অ্যাপ বান্ডেলে থাকা টেক্সচার ফর্ম্যাটের কোনওটিই ডিভাইসে কাজ না করলে, 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