প্রোডাক্ট সংক্রান্ত খবর

Unity-এর মাধ্যমে Android XR-এর জন্য পারফর্ম্যান্স অপ্টিমাইজ করা

৬ মিনিট লাগবে
Luke Hopkins-এর প্রোফাইল দেখুন
Luke Hopkins ডেভেলপার রিলেশনস ইঞ্জিনিয়ার, Android

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

এই সপ্তাহে, Samsung, Galaxy XR লঞ্চ করেছে, যা Google ও Qualcomm-এর সাথে কোলাবরেশনের মাধ্যমে তৈরি করা হয়েছে। ডেভেলপারদের জন্য এটি একটি উত্তেজনাপূর্ণ সময় এবং আমরা আপনাকে XR অ্যাপ থেকে সেরা পারফর্ম্যান্স পেতে সাহায্য করতে চাই।

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

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

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

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

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

XR-নির্দিষ্ট পারফর্ম্যান্স ফিচার

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

ফোভেটেড রেন্ডারিং

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

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

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

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

Vulkan সাবস্যাম্পলিং

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

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

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

জটিল দৃশ্যের জন্য GPU ফিচার

Foveated Rendering এবং Vulkan Subsampling ছাড়াও, কিছু GPU ফিচার আছে যা স্মার্ট ইনস্ট্যান্সিং এবং কুলিংয়ের মাধ্যমে অপ্রয়োজনীয় চাপ কমায়। এগুলি বিশেষ করে বারবার জ্যামিতি বা উল্লেখযোগ্য অক্লুশন সহ জটিল দৃশ্যের জন্য কার্যকর।

GPU রেসিডেন্ট ড্রয়ার

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

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

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

GPU অক্লুশন কুলিং

GPU অক্লুশন কুলিং CPU-এর পরিবর্তে GPU ব্যবহার করে লুকানো অবজেক্ট শনাক্ত করে এবং রেন্ডার করা এড়িয়ে যায়। অন্যান্য অবজেক্টের পিছনে কী ঢাকা (লুকানো) আছে তা এটি অটোমেটিক শনাক্ত করে, তাই ব্যবহারকারী দেখতে পাচ্ছেন না এমন জিনিসে আপনার GPU নষ্ট হচ্ছে না।

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

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

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

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

পারফর্ম্যান্স মেট্রিক্স API

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

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

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

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

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

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

SRP ব্যাচার কাজ করছে কিনা তা কনফার্ম করতে চান? ফ্রেম ডিবাগারে 'RenderLoopNewBatcher' এন্ট্রি খুঁজুন। GPU রেসিডেন্ট ড্রয়ার সঠিকভাবে ব্যাচিং করছে কিনা তা চেক করা হচ্ছে? 'হাইব্রিড ব্যাচ গ্রুপ' এন্ট্রি খুঁজুন। এই ভিজ্যুয়াল কনফার্মেশন আপনাকে বুঝতে সাহায্য করে যে আপনার অপ্টিমাইজেশন সেটিংস আসলে কার্যকর হচ্ছে কিনা।

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

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

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

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

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

সিদ্ধান্ত

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

আপনার রোডম্যাপ এখানে দেওয়া হল:

  1. Foveated Rendering ও Vulkan Subsampling দিয়ে শুরু করুন। এই XR-নির্দিষ্ট ফিচারগুলি অবিলম্বে এবং লক্ষণীয় GPU সাশ্রয় করে।
  2. আপনার যদি বারবার জিওমেট্রি বা ইন্টেরিয়র স্পেস সহ জটিল দৃশ্য থাকে, তাহলে GPU রেসিডেন্ট ড্রয়ার এবং অক্লুশন কুলিং যোগ করুন।
  3. আপনার করা পরিবর্তনগুলি সত্যিই সাহায্য করছে কিনা তা নিশ্চিত করতে পারফর্ম্যান্স মেট্রিক্স API-এর মাধ্যমে সবকিছু মনিটর করুন
  4. অতিরিক্ত পারফর্ম্যান্স হেডরুমের জন্য অতিরিক্ত URP অপ্টিমাইজেশন এক্সপ্লোর করুন

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

এরপরে কী: আপনার দক্ষতা বাড়ানো

আরও গভীরে যেতে চান? এই সব রিসোর্স চেক করে দেখুন:

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