পণ্যের খবর

ইউনিটি ব্যবহার করে অ্যান্ড্রয়েড এক্সআর-এর পারফরম্যান্স অপ্টিমাইজ করা

৬ মিনিটের পাঠ
Luke Hopkins
ডেভেলপার সম্পর্ক প্রকৌশলী, অ্যান্ড্রয়েড

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

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

নন-এক্সআর ডিভাইসে গেম এবং অ্যাপের দুর্বল পারফরম্যান্স ব্যবহারকারীর জন্য হতাশাজনক হলেও, এক্সআর-এর জগতে পারফরম্যান্স কেবল ঐচ্ছিক নয়, বরং এটি আপনার অ্যাপের সাফল্যের জন্য অপরিহার্য। এক্সআর-এ যদি আপনি আপনার ফ্রেম রেটের লক্ষ্যমাত্রা পূরণ করতে না পারেন, তবে তা মোশন সিকনেসের মতো আরও গুরুতর সমস্যা সৃষ্টি করতে পারে।

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

আমাদের লক্ষ্য হলো:

  • সর্বনিম্ন: ৭২ এফপিএস (আমাদের খেলার মান নির্দেশিকার অংশ)
  • ঐচ্ছিক: প্রতি ফ্রেমে ১১ মিলিসেকেন্ড বাজেট সহ ৯০ এফপিএস

কেন এত উচ্চ ফ্রেম-রেট বজায় রাখা গুরুত্বপূর্ণ, সে সম্পর্কে আরও তথ্যের জন্য আমাদের পারফরম্যান্স নির্দেশিকা দেখুন।

XR-এর নির্দিষ্ট পারফরম্যান্স বৈশিষ্ট্য

আমরা XR-এর দুটি নির্দিষ্ট পারফরম্যান্স বৈশিষ্ট্য, যথা: ফোবিয়েটেড রেন্ডারিং এবং ভলকান সাবস্যাম্পলিং নিয়ে আলোচনা দিয়ে শুরু করব।

ফোবিয়েটেড রেন্ডারিং

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

দ্বিতীয়টি হলো আই-ট্র্যাকিং মোড , যা বিশেষভাবে আপনার দেখার জায়গাটিকে সম্পূর্ণ বিস্তারিতভাবে প্রদর্শন করে এবং আপনার পারিপার্শ্বিক অঞ্চলের ছবির মান কমিয়ে দেয়। এটি মূলত মানুষের দৃষ্টিশক্তির অনুকরণ করে — যেখানে আমরা কেবল সেই নির্দিষ্ট জায়গারই সূক্ষ্ম বিবরণ দেখতে পাই, যেটির ওপর আমরা মনোযোগ দিই।

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

ধরুন আপনি জটিল ত্রিমাত্রিক শিল্পকর্ম দিয়ে একটি জাদুঘরের অভিজ্ঞতা তৈরি করছেন। ফোবিয়েটেড রেন্ডারিং ছাড়া, 'ফিল্ড অফ ভিউ'-এর মধ্যে থাকা সবকিছু রেন্ডার করতে গিয়ে ৯০fps বজায় রাখা আপনার জন্য কঠিন হবে। ফোবিয়েটেড রেন্ডারিং ব্যবহার করে, ব্যবহারকারী যেদিকে দেখছেন সেদিকের হাই-পলি ডিটেইলগুলো আপনি রাখতে পারবেন, কিন্তু পেছনের পরিবেশটি কিছুটা নিম্নমানের কোয়ালিটিতে রেন্ডার হবে। আপনার ব্যবহারকারীরা এই পার্থক্য বুঝতে পারবেন না, কিন্তু আপনার দৃশ্যে আরও ডিটেইল যোগ করার জন্য যথেষ্ট সুযোগ থাকবে।

ভুলকান সাবস্যাম্পলিং

ভুলকান সাবস্যাম্পলিং হলো ফোবিয়েটেড রেন্ডারিংয়ের সেরা বন্ধু। ফোবিয়েটেড রেন্ডারিং যেখানে বিভিন্ন কোয়ালিটি লেভেলে কী রেন্ডার করা হবে তা নির্ধারণ করে, সেখানে ভুলকান সাবস্যাম্পলিং ফ্র্যাগমেন্ট ডেনসিটি ম্যাপ ব্যবহার করে সেই বিভিন্ন কোয়ালিটি লেভেলগুলোকে কীভাবে দক্ষতার সাথে রেন্ডার করা যায় তা পরিচালনা করে

ফোবিয়েটেড রেন্ডারিং-এর সাথে মিলিত হলে, ভলকান সাবস্যাম্পলিং আপনাকে অতিরিক্ত ০.৫ মিলিসেকেন্ড পারফরম্যান্স দেয়। এটি আপনার পার্শ্বীয় দৃষ্টিতে থাকা অমসৃণ প্রান্তগুলিকে মসৃণ করতেও সাহায্য করে, ফলে সামগ্রিক ছবিটি আরও পরিচ্ছন্ন দেখায়।

উদাহরণস্বরূপ, একটি ফ্লাইট সিমুলেটর গেমে যেখানে ব্যবহারকারীরা ইন্সট্রুমেন্ট এবং কন্ট্রোলের উপর মনোযোগ দেয়, সেখানে ফোবিয়েটেড রেন্ডারিংয়ের সাথে ভলকান সাবস্যাম্পলিংয়ের সমন্বয়ের ফলে বিস্তারিত কন্ট্রোলগুলো স্পষ্টভাবে রেন্ডার হয়, কিন্তু ককপিটের পার্শ্ববর্তী কাঠামো কম রিসোর্স ব্যবহার করে। এই অতিরিক্ত ০.৫ মিলিসেকেন্ড খুব বেশি মনে না হলেও, একটি অতিরিক্ত ইন্টারেক্টিভ উপাদানের জন্য জায়গা তৈরি হওয়া এবং গুরুত্বপূর্ণ মুহূর্তে ফ্রেম ড্রপ হওয়ার মধ্যে এটাই পার্থক্য গড়ে দেয়।

জটিল দৃশ্যের জন্য জিপিইউ বৈশিষ্ট্য

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

জিপিইউ রেসিডেন্ট ড্রয়ার

জিপিইউ রেসিডেন্ট ড্রয়ার ড্র কল কমাতে এবং সিপিইউ প্রসেসিং সময় বাঁচাতে স্বয়ংক্রিয়ভাবে জিপিইউ ইনস্ট্যান্সিং ব্যবহার করে। তাই, সিপিইউ প্রতিটি অবজেক্ট সম্পর্কে জিপিইউ-কে আলাদাভাবে জানানোর পরিবর্তে, জিপিইউ একই ধরনের অবজেক্টগুলোকে একসাথে ব্যাচ করে।

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

একই বেস মেশ ব্যবহার করে ২০০টি গাছসহ একটি বনের দৃশ্যের কথা ভাবুন। জিপিইউ রেসিডেন্ট ড্রয়ার ছাড়া, ২০০টি ড্র কল জিপিইউ-এর শক্তি শুষে নেয়, ফলে সিপিইউ মুক্ত থাকে। যখন আপনি এই ফিচারটি চালু করবেন, জিপিইউ বুদ্ধিমত্তার সাথে সেই গাছগুলোর ইনস্ট্যান্স তৈরি করবে, যা ড্র কলের সংখ্যা কমিয়ে মাত্র ৫-১০টিতে নামিয়ে আনবে। এর ফলে জিপিইউ-এর বিপুল পরিমাণ শক্তি সাশ্রয় হবে, যা আপনি গেমপ্লে লজিক বা ফিজিক্স ক্যালকুলেশনের মতো কাজে লাগাতে পারবেন।

জিপিইউ অক্লুশন কালিং

GPU Occlusion Culling লুকানো বস্তু শনাক্ত করতে এবং সেগুলোর রেন্ডারিং এড়িয়ে যেতে CPU- এর পরিবর্তে GPU ব্যবহার করে। এটি স্বয়ংক্রিয়ভাবে অন্যান্য বস্তুর আড়ালে থাকা (লুকানো) জিনিস শনাক্ত করে, ফলে ব্যবহারকারী যা দেখতে পায় না, সেগুলোর জন্য আপনার GPU নষ্ট হয় না।

এই বৈশিষ্ট্যটি একাধিক কক্ষবিশিষ্ট অভ্যন্তরীণ স্থান, ঘন পরিবেশ, বা স্থাপত্যের এমন দৃশ্যে বিশেষভাবে কার্যকর, যেখানে দেয়াল, মেঝে এবং বিভিন্ন বস্তু স্বাভাবিকভাবেই দৃষ্টিপথকে বাধা দেয়।

উদাহরণস্বরূপ, ধরা যাক আপনি একটি একাধিক কক্ষবিশিষ্ট বাড়ির অভিজ্ঞতা তৈরি করছেন। ব্যবহারকারী যখন বসার ঘরে থাকেন, তখন দেয়ালের আড়ালে সম্পূর্ণভাবে লুকানো অত্যন্ত বিস্তারিত রান্নাঘরটি রেন্ডার করে কেন জিপিইউ সাইকেল নষ্ট করবেন? জিপিইউ অক্লুশন কালিং স্বয়ংক্রিয়ভাবে সেই লুকানো বস্তুগুলো রেন্ডার করা এড়িয়ে যায়, ফলে যা দৃশ্যমান তার জন্য আপনি আরও বেশি পারফরম্যান্স বাজেট পান।

আপনার কর্মক্ষমতা নিরীক্ষণ করা

শুধু এই বৈশিষ্ট্যগুলো ব্যবহার করাই যথেষ্ট নয়। আপনাকে আপনার অপটিমাইজেশনগুলো পরিমাপও করতে হবে, যাতে আপনি সেগুলোর প্রভাব সংখ্যায় প্রকাশ করতে পারেন এবং আপনার পরিবর্তনগুলো আসলেই কাজ করছে কিনা তা যাচাই করতে পারেন।

পারফরম্যান্স মেট্রিক্স এপিআই

পারফরম্যান্স মেট্রিক্স এপিআই আপনার অ্যাপের মেমরি ব্যবহার, সিপিইউ পারফরম্যান্স এবং জিপিইউ পারফরম্যান্সের রিয়েল-টাইম মনিটরিং প্রদান করে। এটি আপনাকে কম্পোজিটর এবং রানটাইম লেয়ার থেকে বিস্তারিত ডেটা দেয়, ফলে আপনার অ্যাপ্লিকেশনে ঠিক কী ঘটছে তা আপনি দেখতে পারেন।

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

ফোবিয়েটেড রেন্ডারিং চালু করার আগে, আপনার জিপিইউ ফ্রেম টাইম ১৩ মিলিসেকেন্ড হতে পারে, যা আপনার ১১ মিলিসেকেন্ডের বাজেটকে ছাড়িয়ে যায়। ফোবিয়েটেড রেন্ডারিং চালু করুন, আবার পরিমাপ করুন, এবং আশা করা যায় আপনি দেখবেন এটি কমে ৯ মিলিসেকেন্ডে নেমে এসেছে। এর ফলে আপনি ৪ মিলিসেকেন্ডের একটি অতিরিক্ত সময় পাচ্ছেন, যা দিয়ে আপনি আপনার দৃশ্যে আরও বিস্তারিত বিবরণ যোগ করতে, অন্য ক্ষেত্রে ভিজ্যুয়াল কোয়ালিটি উন্নত করতে, অথবা আরও বিস্তৃত পরিসরের কন্টেন্টে মসৃণ পারফরম্যান্স নিশ্চিত করতে পারবেন।

এই মেট্রিকগুলো ছাড়া আপনি অন্ধভাবে অপ্টিমাইজ করছেন। পারফরম্যান্স মেট্রিক্স এপিআই আপনাকে সত্যিটা বলে দেয় যে আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে আসলে কী সাহায্য করছে।

ফ্রেম ডিবাগার

ফ্রেম ডিবাগার হলো ইউনিটির একটি বিল্ট-ইন টুল, যা আপনার সিনটি ফ্রেম বাই ফ্রেম ঠিক কীভাবে রেন্ডার হচ্ছে তা বুঝতে সাহায্য করে। এটি আপনাকে ড্র কলগুলোর ক্রম দেখায় এবং আপনার অপটিমাইজেশনগুলো সঠিকভাবে কাজ করছে কিনা তা যাচাই করার জন্য আপনাকে সেগুলোর মধ্য দিয়ে ধাপে ধাপে যেতে দেয়।

এসআরপি ব্যাচার (SRP Batcher) কাজ করছে কিনা তা নিশ্চিত করতে চান? ফ্রেম ডিবাগারে (Frame Debugger) 'RenderLoopNewBatcher' এন্ট্রিগুলো খুঁজুন। জিপিইউ রেসিডেন্ট ড্রয়ার (GPU Resident Drawer) সঠিকভাবে ব্যাচিং করছে কিনা তা পরীক্ষা করতে চান? 'Hybrid Batch Group' এন্ট্রিগুলো খুঁজুন। এই দৃশ্যমান নিশ্চিতকরণগুলো আপনাকে বুঝতে সাহায্য করে যে আপনার অপটিমাইজেশন সেটিংস আসলেই কার্যকর হচ্ছে কিনা।

আপনার সিন-এর প্রথম ৫০টি ড্র কল ধাপে ধাপে পরীক্ষা করুন। যদি দেখেন যে একই ধরনের অবজেক্টগুলো একসাথে না এঁকে আলাদা আলাদাভাবে আঁকা হচ্ছে, তাহলে বুঝতে হবে আপনার ইনস্ট্যান্সিং বা ব্যাচিং সঠিকভাবে কাজ করছে না। ফ্রেম ডিবাগার এই সমস্যাগুলো সাথে সাথে দেখিয়ে দেয়, ফলে আপনি সেগুলোর সমাধান করতে পারেন।

অতিরিক্ত অপ্টিমাইজেশন

উপরে আলোচিত অপ্টিমাইজেশনগুলো ছাড়াও, আমাদের সম্পূর্ণ পারফরম্যান্স গাইডে আরও কয়েকটি অতিরিক্ত অপ্টিমাইজেশনের কথা বলা হয়েছে। নিচে তার একটি সংক্ষিপ্ত বিবরণ দেওয়া হলো:

  • URP সেটিংস: মোবাইল XR-এর জন্য HDR এবং পোস্ট প্রসেসিং নিষ্ক্রিয় করুন। মোবাইল হার্ডওয়্যারে পারফরম্যান্সের তুলনায় এই ফিচারগুলোর ভিজ্যুয়াল প্রভাব নগণ্য, তাই আপনি প্রায় অদৃশ্য ভিজ্যুয়াল পার্থক্যের সাথে পরিমাপযোগ্য পারফরম্যান্স বৃদ্ধি পাবেন।
  • SRP ব্যাচার: যেসব সিনে একই শেডার ভ্যারিয়েন্ট ব্যবহার করে একাধিক ম্যাটেরিয়াল থাকে, সেগুলোর জন্য সিপিইউ ওভারহেড কমায়। ড্র কলগুলোর মধ্যে রেন্ডার-স্টেট পরিবর্তন কমিয়ে আনার মাধ্যমে, আপনি রেন্ডারিং-এ ব্যয়িত সিপিইউ সময় উল্লেখযোগ্যভাবে কমাতে পারেন।
  • ডিসপ্লে রিফ্রেশ রেট: দৃশ্যের জটিলতার উপর ভিত্তি করে ৭২fps এবং ৯০fps-এর মধ্যে গতিশীলভাবে সমন্বয় করুন। জটিল দৃশ্য চলাকালীন স্থিতিশীলতা বজায় রাখতে ফ্রেম রেট কমিয়ে দিন, এবং সহজ মুহূর্তগুলিতে অত্যন্ত মসৃণ ইন্টারঅ্যাকশনের জন্য এটি বাড়িয়ে দিন।
  • ডেপথ/ওপেক টেক্সচার: শেডার এফেক্টের জন্য বিশেষভাবে প্রয়োজন না হলে এগুলো নিষ্ক্রিয় রাখুন। এগুলো অপ্রয়োজনীয় GPU কপি করার প্রক্রিয়া শুরু করে, যা বেশিরভাগ অ্যাপ্লিকেশনের জন্য কোনো সুবিধা না দিয়েই পারফরম্যান্স নষ্ট করে।
  • ইউআরপি রেন্ডার স্কেল: এই সেটিংটি আপনাকে পারফরম্যান্সের সুবিধার জন্য কম রেজোলিউশনে রেন্ডার করতে অথবা উন্নত ভিজ্যুয়াল কোয়ালিটির জন্য রেন্ডারিং আপস্কেল করতে দেয়।

এই এবং আরও অপ্টিমাইজেশনের ধাপে ধাপে নির্দেশাবলীর জন্য, Android XR-এর জন্য আমাদের সম্পূর্ণ Unity পারফরম্যান্স গাইডটি দেখুন।

উপসংহার

আপনার XR অ্যাপের পারফরম্যান্স শুধু একটি প্রযুক্তিগত বিষয় নয়। এটি একটি আরামদায়ক ও আকর্ষণীয় অভিজ্ঞতা এবং এমন একটি অভিজ্ঞতার মধ্যে পার্থক্য গড়ে দেয় যা ব্যবহারকারীদের অসুস্থ বা অস্বস্তিকর বোধ করায়। আমরা যে অপটিমাইজেশনগুলো নিয়ে আলোচনা করেছি, সেগুলোই হলো নতুনতম XR ডিভাইসগুলোতে সেই গুরুত্বপূর্ণ ফ্রেমরেটের লক্ষ্যমাত্রা অর্জনের জন্য আপনার টুলকিট।

এই হলো আপনার কর্মপরিকল্পনা:

  1. ফোবিয়েটেড রেন্ডারিং এবং ভলকান সাবস্যাম্পলিং দিয়ে শুরু করুন। এই এক্সআর-নির্দিষ্ট বৈশিষ্ট্যগুলো তাৎক্ষণিক এবং লক্ষণীয়ভাবে জিপিইউ সাশ্রয় করে।
  2. আপনার সিনগুলিতে পুনরাবৃত্ত জ্যামিতি বা অভ্যন্তরীণ স্থান থাকলে GPU Resident Drawer এবং Occlusion Culling যোগ করুন।
  3. আপনার পরিবর্তনগুলি আসলেই কার্যকর হচ্ছে কিনা তা নিশ্চিত করতে পারফরম্যান্স মেট্রিক্স এপিআই (Performance Metrics API) দিয়ে সবকিছু নিরীক্ষণ করুন।
  4. অতিরিক্ত পারফরম্যান্সের সুযোগের জন্য আরও URP অপ্টিমাইজেশন অন্বেষণ করুন।

ক্রমাগত পরিমাপ করা এবং পুনরাবৃত্তি করা অত্যাবশ্যক। প্রতিটি অপ্টিমাইজেশন প্রতিটি প্রকল্পের জন্য সমানভাবে উপকারী হবে না, তাই আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে কোনটি আসলে সহায়ক, সে সম্পর্কে একটি স্পষ্ট ধারণা পেতে পারফরম্যান্স মেট্রিক্স এপিআই (Performance Metrics API) ব্যবহার করুন।

এরপর কী: আপনার দক্ষতা প্রসারিত করা

আরও গভীরে যেতে প্রস্তুত? এই রিসোর্সগুলো দেখুন:

  • অ্যান্ড্রয়েড এক্সআর-এর জন্য ইউনিটি পারফরম্যান্স গাইড - এখানে আলোচিত সকল ফিচারের সম্পূর্ণ ধাপে ধাপে বাস্তবায়ন নির্দেশাবলী।
  • ইউনিটি এবং অ্যান্ড্রয়েড এক্সআর দিয়ে শুরু করা - আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করুন এবং বিল্ড করা শুরু করুন
  • অ্যান্ড্রয়েড এক্সআর ডেভেলপার ডকুমেন্টেশন - অ্যান্ড্রয়েড এক্সআর-এর সকল ফিচারের জন্য বিস্তারিত নির্দেশিকা
    লিখেছেন:

    পড়তে থাকুন