اخبار محصول

بهینه‌سازی عملکرد برای Android XR با Unity

‫۶ دقیقه خواندن
مشاهده نمایه Luke Hopkins
Luke Hopkins مهندس روابط توسعه‌دهندگان، Android

‫Samsung Galaxy XR اینجاست، با بهره‌گیری از Android XR! این پست وبلاگ بخشی از هفته ویژه Android XR است که در آن منابعی شامل پست‌های وبلاگ، ویدیوها، کد نمونه، و موارد دیگر را ارائه می‌دهیم که همگی برای کمک به شما در یادگیری، ساخت، و آماده‌سازی برنامه‌هایتان برای Android XR طراحی شده‌اند.  

این هفته، Samsung دستگاه Galaxy XR را که با همکاری Google و Qualcomm ساخته شده است راه‌اندازی کرد. این زمان برای توسعه‌دهندگان هیجان‌انگیز است و ما می‌خواهیم به شما کمک کنیم بهترین عملکرد ممکن را از برنامه واقعیت گسترده خود دریافت کنید.

درحالی‌که عملکرد ضعیف در بازی‌ها و برنامه‌ها در دستگاه‌های غیر XR می‌تواند برای کاربر ناامیدکننده باشد، در دنیای XR عملکرد فقط اختیاری نیست، بلکه برای موفقیت برنامه شما اساسی است. اگر در XR به نرخ فریم هدف خود نرسید، می‌تواند مشکلات بسیار جدی‌تری مانند بیماری حرکت ایجاد کند. 

در این راهنما، شما را با بهینه‌سازی‌های عملکرد ضروری که برای توسعه Android XR باید بدانید آشنا می‌کنیم. یاد خواهید گرفت که کدام ویژگی‌ها بیشترین افزایش عملکرد را ارائه می‌دهند، چه زمانی از آن‌ها استفاده کنید، و چگونه با هم کار می‌کنند تا به شما کمک کنند به اهداف نرخ فریم خود برسید.

هدف ما این است: 

  • حداقل: ۷۲ فریم در ثانیه (بخشی از دستورالعمل‌های کیفیت پخش ما)
  • اختیاری: ۹۰ فریم در ثانیه با بودجه ۱۱ میلی‌ثانیه در هر فریم

برای اطلاعات بیشتر درباره اینکه چرا حفظ چنین نرخ فریم بالایی مهم است، رهنمودهای عملکرد ما را بررسی کنید.   

ویژگی‌های عملکرد مختص واقعیت گسترده

ما با پوشش دو ویژگی عملکردی خاص XR شروع خواهیم کرد: «پردازش کانونی» و «نمونه‌برداری فرعی Vulkan». 

پرداز زدن متمرکز

پردازش کانونی بهینه‌سازی‌ای است که دو حالت دارد. اولین حالت، حالت ایستا است که مرکز صفحه را با وضوح بالاتر رندر می‌کند و هرچه بیشتر به اطراف نگاه کنید، وضوح به‌تدریج کاهش می‌یابد.

دومی حالت ردیابی چشم است که به‌طور خاص ناحیه‌ای را که به آن نگاه می‌کنید با جزئیات کامل ارائه می‌کند، درحالی‌که کیفیت نمایش در پیرامون را کاهش می‌دهد. این فناوری اساساً نحوه عملکرد دید انسان را تقلید می‌کند — جایی که ما فقط جزئیات دقیق را در ناحیه خاصی که روی آن تمرکز کرده‌ایم می‌بینیم.

پردازش کانونی بار کاری GPU را بدون فدا کردن کیفیت تصویر درک‌شده برای کاربر به‌طور قابل‌توجهی کاهش می‌دهد. زیبایی رندرینگ کانونی در این است که کاربران متوجه کاهش کیفیت در دید محیطی خود نخواهند شد، اما GPU شما قطعاً متوجه بهبود عملکرد خواهد شد.

تصور کنید که درحال ساختن تجربه موزه‌ای با دست‌ساخته‌های سه‌بعدی پیچیده هستید. بدون رندرینگ کانونی، برای حفظ ۹۰ فریم در ثانیه و رندر کردن همه چیز در «میدان دید» به مشکل برمی‌خورید. با رندرینگ کانونی، می‌توانید جزئیات چندضلعی بالا را در جایی که کاربر نگاه می‌کند حفظ کنید، اما محیط پس‌زمینه با کیفیت پایین‌تری رندر می‌شود. کاربران شما متوجه تفاوت نخواهند شد، اما شما فضای کافی برای افزودن جزئیات بیشتر به صحنه خود خواهید داشت.

نمونه‌برداری فرعی Vulkan

«نمونه‌برداری فرعی Vulkan» بهترین دوست «پردازش کانونی» است. درحالی‌که «پردازش کانونی» تصمیم می‌گیرد چه چیزی را در سطوح کیفیت مختلف پردازش کند، Vulkan Subsampling بااستفاده از «نقشه‌های تراکم قطعه» نحوه پردازش کارآمد سطوح کیفیت مختلف را مدیریت می‌کند.

وقتی با «پردازش foveated» ترکیب شود، «نمونه‌برداری فرعی Vulkan» به شما ۰٫۵ میلی‌ثانیه عملکرد اضافی می‌دهد. این کار همچنین به صاف کردن لبه‌های دندانه‌دار در دید محیطی شما کمک می‌کند و باعث می‌شود تصویر کلی تمیزتر به‌نظر برسد.

برای مثال، در بازی شبیه‌ساز پرواز که کاربران روی ابزارها و کنترل‌ها تمرکز می‌کنند، ترکیب کردن پرداز زدن با وضوح متغیر با «نمونه‌برداری فرعی Vulkan» به این معنی است که کنترل‌های دقیق به‌صورت واضح پرداز می‌شوند، اما ساختار جانبی کابین خلبان از منابع کمتری استفاده می‌کند. این ۰٫۵ میلی‌ثانیه اضافی زیاد به‌نظر نمی‌رسد، اما تفاوت بین داشتن فضای کافی برای یک عنصر تعاملی اضافی یا افت فریم در لحظات شدید است.

ویژگی‌های GPU برای صحنه‌های پیچیده

علاوه‌بر «پردازش کانونی» و «نمونه‌برداری فرعی Vulkan»، برخی‌از ویژگی‌های GPU وجود دارد که ازطریق نمونه‌سازی هوشمند و حذف، فشار غیرضروری را کاهش می‌دهد. این روش به‌ویژه برای صحنه‌های پیچیده با هندسه تکراری یا انسداد قابل‌توجه مؤثر است.

کشو مقیم GPU

کشوی مقیم GPU به‌طور خودکار از نمونه‌سازی GPU برای کاهش فراخوانی‌های رسم و آزاد کردن زمان پردازش CPU استفاده می‌کند. بنابراین، به‌جای اینکه CPU درباره هر شیء به‌صورت جداگانه به GPU بگوید، GPU اشیاء مشابه را دسته‌بندی می‌کند.

این ویژگی برای صحنه‌های بزرگ با مش‌های تکراری، مانند درختان در جنگل، مبلمان در ساختمان اداری، یا وسایل پراکنده در محیط، بسیار مؤثر است.

تصویر صحنه‌ای از جنگل با ۲۰۰ درخت را بااستفاده از مش پایه یکسان تصور کنید. بدون «کشوی مقیم GPU»، شما ۲۰۰ فراخوان طراحی دارید که GPU را مصرف می‌کنند و درنتیجه CPU را آزاد می‌کنند. وقتی این ویژگی را فعال می‌کنید، GPU به‌طور هوشمندانه آن درخت‌ها را نمونه‌سازی می‌کند که باید آن را به ۵ تا ۱۰ فراخوانی ترسیم کاهش دهد. این یک صرفه‌جویی عظیم در GPU است که می‌توانید آن را در منطق گیم‌پلی یا محاسبات فیزیک سرمایه‌گذاری کنید.

حذف انسداد GPU

حذف انسدادی GPU از GPU به‌جای CPU برای شناسایی و رد کردن پرداز کردن اشیای پنهان استفاده می‌کند. این ویژگی به‌طور خودکار تشخیص می‌دهد که چه چیزی پشت اشیای دیگر مسدود (پنهان) شده است، بنابراین GPU خود را برای چیزهایی که کاربر نمی‌تواند ببیند هدر نمی‌دهید.

این ویژگی به‌ویژه در فضاهای داخلی با اتاق‌های متعدد، محیط‌های متراکم، یا صحنه‌های معماری که دیوارها، کف‌ها، و اشیا به‌طور طبیعی دید را مسدود می‌کنند، قدرتمند است.

به‌عنوان مثال، فرض کنید درحال ساختن تجربه خانه چنداتاقه هستید. وقتی کاربر در اتاق نشیمن است، چرا باید از چرخه‌های GPU برای پرداز کردن آشپزخانه کاملاً مفصلی که کاملاً پشت دیوار پنهان است استفاده کرد؟ «حذف انسدادی GPU» به‌طور خودکار از پرداز کردن آن اشیای پنهان صرف‌نظر می‌کند و بودجه عملکرد بیشتری برای آنچه واقعاً قابل‌مشاهده است دراختیارتان قرار می‌دهد.

پایش عملکرد شما

استفاده از این ویژگی‌ها کافی نیست. همچنین باید بهینه‌سازی‌هایتان را اندازه‌گیری کنید تا بتوانید تأثیر آن‌ها را کمّی‌سازی کنید و تأیید کنید که تغییراتتان واقعاً کار می‌کنند.

میانای برنامه‌سازی کاربردی سنجه‌های عملکرد

‫Performance Metrics API نظارت هم‌زمان بر استفاده از حافظه، عملکرد واحد پردازش مرکزی، و عملکرد واحد پردازش گرافیکی برنامه‌هایتان را فراهم می‌کند. این ابزار داده‌های جامعی از لایه‌های آهنگ‌ساز و زمان اجرا به شما ارائه می‌دهد، بنابراین می‌توانید دقیقاً ببینید چه اتفاقی در برنامه‌تان می‌افتد.

قبل‌از ایجاد تغییرات، خط مبنایی ایجاد کنید، بهینه‌سازی را اعمال کنید، تأثیر را اندازه‌گیری کنید، و تکرار کنید. این رویکرد داده‌محور به این معنی است که می‌دانید واقعاً عملکرد را بهبود می‌بخشید و حدس نمی‌زنید.

قبل‌از فعال کردن پرداز زدن با کیفیت متغیر، زمان قاب GPU شما ممکن است ۱۳ میلی‌ثانیه باشد که بیشتر از بودجه ۱۱ میلی‌ثانیه‌ای شما است. «پردازش کانونی» را فعال کنید، دوباره اندازه‌گیری کنید، و امیدواریم ببینید که به ۹ میلی‌ثانیه کاهش می‌یابد. این یعنی ۴ میلی‌ثانیه فضای سر دارید که می‌توانید از آن برای افزودن جزئیات بیشتر به صحنه، بهبود کیفیت بصری در جاهای دیگر، یا به‌سادگی اطمینان از عملکرد روان‌تر در طیف وسیع‌تری از محتوا استفاده کنید.

بدون این سنجه‌ها، بهینه‌سازی را کورکورانه انجام می‌دهید. ‫Performance Metrics API حقیقت را درباره آنچه واقعاً به مورد استفاده خاص شما کمک می‌کند به شما می‌گوید.

اشکال‌زدای قاب

عیب‌یاب قاب ابزار داخلی Unity برای درک دقیق نحوه رندر شدن صحنه شما، قاب‌به‌قاب است. این ویژگی توالی فراخوانی‌های طراحی را نشان می‌دهد و به شما امکان می‌دهد آن‌ها را گام‌به‌گام بررسی کنید تا مطمئن شوید بهینه‌سازی‌هایتان به‌درستی کار می‌کنند.

می‌خواهید تأیید کنید که «دسته‌بندی SRP» کار می‌کند؟ ورودی‌های «RenderLoopNewBatcher» را در «عیب‌یاب قاب» پیدا کنید. بررسی می‌کنید که آیا «کشوی مقیم GPU» به‌درستی دسته‌بندی می‌کند؟ به‌دنبال ورودی‌های «گروه دسته‌ای ترکیبی» بگردید. این تأییدیه‌های تصویری به شما کمک می‌کند بفهمید آیا تنظیمات بهینه‌سازی شما واقعاً تأثیرگذار است یا نه.

از ۵۰ فراخوانی طراحی اول صحنه‌تان عبور کنید. اگر می‌بینید که اشیای مشابه به‌جای اینکه دسته‌ای طراحی شوند، به‌صورت جداگانه طراحی می‌شوند، این نشان می‌دهد که نمونه‌سازی یا دسته‌بندی شما به‌درستی کار نمی‌کند. «عیب‌یاب قاب» این مشکلات را بلافاصله قابل‌مشاهده می‌کند تا بتوانید به آن‌ها رسیدگی کنید.

بهینه‌سازی‌های اضافی

علاوه‌بر بهینه‌سازی‌هایی که در بالا پوشش دادیم، راهنمای کامل عملکرد ما چند بهینه‌سازی اضافی دیگر را نیز پوشش می‌دهد. در اینجا خلاصه‌ای سریع ارائه شده است:

  • تنظیمات URP: HDR و «پس‌پردازش» را برای «واقعیت گسترده» تلفن همراه غیرفعال کنید. این ویژگی‌ها در مقایسه با هزینه عملکردشان در سخت‌افزار تلفن همراه، تأثیر دیداری حداقلی دارند، بنابراین با تفاوت‌های دیداری به‌سختی قابل‌تشخیص، بهبود عملکرد قابل‌اندازه‌گیری خواهید داشت.
  • دسته‌بندی‌کننده SRP: سربار CPU را برای صحنه‌هایی که از گونه سایه‌زن یکسانی استفاده می‌کنند کاهش می‌دهد. با به‌حداقل رساندن تغییرات وضعیت پردازشی بین فراخوانی‌های رسم، می‌توانید زمان CPU صرف‌شده برای پردازش را به‌میزان قابل‌توجهی کاهش دهید.
  • نرخ بازآوری نمایشگر: به‌صورت پویا بین ۷۲ فریم در ثانیه و ۹۰ فریم در ثانیه براساس پیچیدگی صحنه تنظیم می‌شود. نرخ فریم را در سکانس‌های پیچیده کاهش می‌دهد تا پایداری حفظ شود، سپس در لحظات ساده‌تر آن را افزایش می‌دهد تا تعامل فوق‌العاده روان باشد.
  • بافت‌های عمق/مات: این موارد را غیرفعال کنید، مگر اینکه به‌طور خاص برای جلوه‌های سایه‌زن موردنیاز باشند. این عملیات باعث عملیات کپی غیرضروری واحد پردازش گرافیکی می‌شود که عملکرد را بدون ارائه مزیت برای اکثر برنامه‌ها هدر می‌دهد.
  • مقیاس رندر URP: این تنظیم به شما امکان می‌دهد رندر را با وضوح کاهش‌یافته برای بهره‌مندی از عملکرد بهتر انجام دهید یا رندر را برای بهبود کیفیت دیداری ارتقا دهید.

برای دریافت دستورالعمل‌های گام‌به‌گام درباره این بهینه‌سازی‌ها و بهینه‌سازی‌های بیشتر، «راهنمای کامل عملکرد Unity برای Android XR» را بررسی کنید.

نتیجه‌گیری

عملکرد برنامه XR شما فقط یک چارگوش انتخاب فنی نیست. این تفاوت بین یک تجربه راحت و جذاب و تجربه‌ای است که باعث می‌شود کاربران احساس بیماری یا ناراحتی کنند. بهینه‌سازی‌هایی که پوشش داده‌ایم جعبه ابزار شما برای رسیدن به نرخ‌های فریم حیاتی در جدیدترین دستگاه‌های XR است.

این هم نقشه راه شما:

  1. با «پردازش کانونی» و «نمونه‌برداری فرعی Vulkan» شروع کنید. این ویژگی‌های مختص XR صرفه‌جویی فوری و قابل‌توجهی در GPU ارائه می‌دهند.
  2. اگر صحنه‌های پیچیده‌ای با هندسه تکراری یا فضاهای داخلی دارید، «کشوی مقیم GPU» و «حذف انسداد» را اضافه کنید.
  3. بااستفاده از «میانای برنامه‌سازی کاربردی معیارهای عملکرد»، همه چیز را پایش کنید تا مطمئن شوید تغییراتتان واقعاً کمک می‌کند
  4. برای فضای سر اضافی عملکرد، بهینه‌سازی‌های URP اضافی را کاوش کنید

اندازه‌گیری مداوم و تکرار ضروری است. همه بهینه‌سازی‌ها به یک اندازه برای همه پروژه‌ها مفید نیستند، بنابراین از «میانای برنامه‌سازی کاربردی سنجه‌های عملکرد» استفاده کنید تا ایده روشنی درباره آنچه واقعاً به مورد استفاده خاص شما کمک می‌کند به‌دست آورید.

مرحله بعدی: گسترش مهارت‌ها

آماده‌اید عمیق‌تر شوید؟ این منابع را بررسی کنید:

  • راهنمای عملکرد Unity برای Android XR - دستورالعمل‌های گام‌به‌گام کامل برای پیاده‌سازی همه ویژگی‌های پوشش‌داده‌شده در اینجا.
  • شروع به کار با Unity و Android XR - محیط توسعه خود را راه‌اندازی کنید و ساختن را شروع کنید.
  • «مستندات توسعه‌دهندگان Android XR» - راهنمای جامع برای همه ویژگی‌های Android XR
نوشته:
ادامه خواندن