অ্যান্ড্রয়েড অ্যাপ বান্ডেলে টার্গেট টেক্সচার কম্প্রেশন ফরম্যাট

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

পটভূমি

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

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

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

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

টেক্সচার কম্প্রেশন বিন্যাস সমর্থন সহ Google Play ডিভাইসের শতাংশ
ASTC >80%
ETC2 >95%

পিসির জন্য গুগল প্লে গেমস চালানো ডেস্কটপ কম্পিউটার জিপিইউগুলিও এই ফর্ম্যাটটিকে সমর্থন করে:

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

পুরানো, আর প্রস্তাবিত টেক্সচার কম্প্রেশন ফর্ম্যাটগুলির মধ্যে রয়েছে:

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

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

একটি ডিফল্ট বিন্যাস

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

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

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

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

একটি অ্যাপ বান্ডিল তৈরি করুন

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

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

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

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

  1. আপনার প্রোজেক্টের build.gradle ফাইলে Android Gradle প্লাগইনের সংস্করণটি 4.1 বা উচ্চতর সংস্করণে আপডেট করুন (উদাহরণস্বরূপ, com.android.tools.build:gradle:4.1.0 )।

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

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

  4. সম্পদ প্যাক তৈরি করুন ( C++ বা Java এর জন্য বিল্ড দেখুন), যাতে আপনার গেমের সম্পদ থাকে এবং প্লে অ্যাসেট ডেলিভারি ব্যবহার করে। উদাহরণস্বরূপ, আপনি আপনার গেমের বিভিন্ন অংশের জন্য প্রতি স্তরে একটি সম্পদ প্যাক বা সম্পদ প্যাক তৈরি করতে পারেন।

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

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

    আগে ডিরেক্টরি পরে ডিরেক্টরি
    common সম্পদ প্যাক :
    common/build.gradle
    সাধারণ/src/প্রধান/সম্পদ/টেক্সচার/...
    common সম্পদ প্যাক :
    common/build.gradle
    সাধারণ/src/প্রধান/সম্পদ/টেক্সচার/...
    common/src/main/assets/textures#tcf_astc/...
    common/src/main/assets/textures#tcf_pvrtc/...
    level1 সম্পদ প্যাক :
    level1/build.gradle
    স্তর1/src/প্রধান/সম্পদ/টেক্সচার/...
    level1 সম্পদ প্যাক :
    level1/build.gradle
    স্তর1/src/প্রধান/সম্পদ/টেক্সচার/...
    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. অ্যান্ড্রয়েড স্টুডিওতে, Build > Generate Signed Bundle / APK নির্বাচন করুন, অথবা আপনার বান্ডেল তৈরি করতে কমান্ড লাইন থেকে Gradle টাস্কটি চালু করুন।

গুগল প্লে ইউনিটি প্লাগইন ব্যবহার করুন

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

সম্পদ প্রস্তুত করুন

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

  1. একাধিক ইউনিটি অ্যাসেটবান্ডেলে আপনার দৃশ্য এবং সম্পদ প্যাকেজ করুন।

  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 > Asset Delivery নির্বাচন করুন।

  6. আপনার ডিফল্ট সম্পদ বান্ডিল ধারণকারী ফোল্ডার যোগ করতে ফোল্ডার যোগ করুন ক্লিক করুন. এই বান্ডেলগুলি এমন ডিভাইসগুলিতে ইনস্টল করা আছে যা আপনার সংজ্ঞায়িত অন্যান্য ফর্ম্যাটগুলিকে সমর্থন করে না৷

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

    ইউনিটি অ্যাসেটবান্ডেল ডেলিভারি ডিফল্ট ফর্ম্যাট

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

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

    ইউনিটি অ্যাসেটবান্ডেল ডেলিভারি ASTC ফর্ম্যাট

নির্মাণ করুন

আপনার গেমের ইউনিটি বিল্ড চালু করতে Google > Android অ্যাপ বান্ডেল তৈরি করুন নির্বাচন করুন। এটি অ্যাসেটবান্ডেলগুলিকে একাধিক অ্যাসেট প্যাকেও প্যাকেজ করে যেখানে প্রতিটি অ্যাসেটবান্ডেল নাম একটি একক অ্যাসেট প্যাকে রূপান্তরিত হয়৷

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

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

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

  1. এর GitHub সংগ্রহস্থল থেকে bundletool ডাউনলোড করুন।

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

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

  4. সম্পদ প্যাক তৈরি করুন ( C++ বা Java এর জন্য বিল্ড দেখুন), যাতে আপনার গেমের সম্পদ থাকে এবং প্লে অ্যাসেট ডেলিভারি ব্যবহার করে। উদাহরণস্বরূপ, আপনি আপনার গেমের বিভিন্ন অংশের জন্য প্রতি স্তরে একটি সম্পদ প্যাক বা সম্পদ প্যাক তৈরি করতে পারেন।

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

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

    আগে ডিরেক্টরি পরে ডিরেক্টরি
    common সম্পদ প্যাক :
    common/build.gradle
    সাধারণ/src/প্রধান/সম্পদ/টেক্সচার/...
    common সম্পদ প্যাক :
    common/build.gradle
    সাধারণ/src/প্রধান/সম্পদ/টেক্সচার/...
    common/src/main/assets/textures#tcf_astc/...
    common/src/main/assets/textures#tcf_pvrtc/...
    level1 সম্পদ প্যাক :
    level1/build.gradle
    স্তর1/src/প্রধান/সম্পদ/টেক্সচার/...
    level1 সম্পদ প্যাক :
    level1/build.gradle
    স্তর1/src/প্রধান/সম্পদ/টেক্সচার/...
    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 )। 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 লেভেল 21) এবং তার নিচের ডিভাইসগুলির জন্য একটি স্বতন্ত্র 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 দ্বারা যা করা হয় তা অনুকরণ করে৷

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

  • একটি ডিরেক্টরিতে আপনার ডিভাইসের জন্য ইনস্টল করা apks আউটপুট করতে 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 টেক্সচার ডিরেক্টরির নামগুলিতে ব্যবহৃত নিম্নলিখিত প্রত্যয়গুলি বোঝে:

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

গুগল প্লে পরিবেশনের নিয়ম

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

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

অ্যাপ বান্ডেলের কোনো টেক্সচার ফর্ম্যাট ডিভাইস দ্বারা সমর্থিত না হলে, Google Play ডিফল্ট ফর্ম্যাটে প্যাকেজ করা টেক্সচার ফর্ম্যাটগুলি সরবরাহ করে৷ (যদি না আপনি নির্দিষ্ট ডিভাইস হার্ডওয়্যারকে টার্গেট করছেন, ETC1 বা ETC2 একটি ডিফল্ট ফর্ম্যাটের জন্য ভাল পছন্দ।) ডিফল্ট ফর্ম্যাটে কীভাবে সম্পদ প্যাকেজ করবেন সে সম্পর্কে তথ্যের জন্য, বান্ডলেটুল ব্যবহার করুন বা Google Play ইউনিটি প্লাগইন ব্যবহার করুন দেখুন।

যদি সম্পদগুলি একটি ডিফল্ট বিন্যাসে প্যাকেজ করা না থাকে, 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