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

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 (আমাদের প্লে কোয়ালিটি নির্দেশিকার অংশ)
  • ঐচ্ছিক: প্রতি ফ্রেমে ১১ মিলি সেকেন্ডের বাজেট সহ ৯০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 ফিচার-এর জন্য বিস্তারিত গাইড
লিখেছেন:
পড়া চালিয়ে যান