Mir 2 عملکرد رندر را با استفاده از Swappy بهبود می بخشد

Mir 2: Return of the King یک بازی موبایل Legend IP با کیفیت بالا است که توسط Actoz Soft مجاز است و توسط HK ZHILI YAOAN LIMITED با استفاده از Unity Engine توسعه یافته است.

این بازی نه تنها احساسات "Mir 2" نماینده MMORPG فانتزی کره ای را کاملاً بازسازی می کند، بلکه بسیاری از محبوب ترین محتویات بازی مانند مجموعه تجهیزات، حمله شنی در مقیاس بزرگ و سایر گیم پلی های اصلی را ارائه می دهد.

این بازی از Android Frame Pacing API ( Swappy ) برای بهبود ثبات نرخ فریم خود، دستیابی به رندرینگ روان و افزایش چشمگیر Android Vitals (متریک جلسه آهسته) خود استفاده کرد.

Slow Session در Android Vitals راه اندازی شد

Slow Session یک معیار حیاتی اندروید در کنسول Google Play است. یک جلسه آهسته بیش از 25 درصد فریم آهسته دارد. یک فریم کند است اگر:

1) در 20 فریم در ثانیه، در 50 میلی ثانیه پس از فریم قبلی ارائه نمی شود. 2) در 30 فریم در ثانیه، در عرض 34 میلی ثانیه پس از فریم قبلی ارائه نمی شود.

به مرور زمان، Play کاربران را از بازی‌هایی که نمی‌توانند 20 فریم در ثانیه روی گوشی‌های خود به دست آورند، دور می‌کند.

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

Swappy چیست

کتابخانه Android Frame Pacing که با نام Swappy نیز شناخته می‌شود ، بخشی از کتابخانه‌های AGDK است. Swappy به بازی‌های OpenGL و Vulkan کمک می‌کند تا رندر نرم و سرعت فریم صحیح را در اندروید انجام دهند.

اگر دستگاه از آن پشتیبانی کند، کتابخانه چندین نرخ به‌روزرسانی را کنترل می‌کند، که به بازی انعطاف‌پذیری بیشتری در ارائه فریم می‌دهد. به عنوان مثال، برای دستگاهی که از نرخ نوسازی 60 هرتز و همچنین 90 هرتز پشتیبانی می کند، بازی ای که نمی تواند 60 فریم در ثانیه تولید کند، می تواند به جای 30 فریم در ثانیه به 45 فریم در ثانیه کاهش یابد تا روان بماند. کتابخانه نرخ فریم مورد انتظار بازی را تشخیص می‌دهد و زمان‌های ارائه فریم را بر اساس آن به صورت خودکار تنظیم می‌کند.

کتابخانه Frame Pacing همچنین عمر باتری را بهبود می‌بخشد زیرا از به‌روزرسانی‌های غیرضروری نمایشگر جلوگیری می‌کند. به عنوان مثال، اگر یک بازی با سرعت 60 فریم در ثانیه رندر می شود اما صفحه نمایش با فرکانس 120 هرتز به روز می شود، صفحه نمایش برای هر فریم دو بار به روز می شود. کتابخانه Frame Pacing با تنظیم نرخ تازه سازی روی مقدار پشتیبانی شده توسط دستگاهی که نزدیکترین به نرخ فریم مورد نظر است، از این امر جلوگیری می کند.

چگونه Mir 2 عملکرد رندرینگ را با Swappy بهبود بخشید

Mir 2 ( 미르2: 왕의 귀환 ) با مشکلی در عملکرد رندر ناپایدار مواجه بود که در آن 40٪ جلسات آهسته در آستانه نرخ فریم 20 FPS بسیار بالاتر از آستانه 20٪ Google Play را تجربه کردند.

شکل 1. متریک جلسه آهسته قبل از ادغام Swappy.

Mir 2 ( 미르2: 왕의 귀환 ) یک بازی گرافیکی با وفاداری بالا است، برخی از دستگاه ها برای حفظ یک FPS پایدار با چالش هایی روبرو هستند. توزیع نرخ فریم آنها نشان می دهد که تعداد زیادی از جلسات با فریم بر ثانیه کمتر از 20 فریم در ثانیه اجرا می شوند.

شکل 2. توزیع FPS بازی قبل از ادغام Swappy.
هر سطل نشان دهنده درصد جلساتی است که 75٪ از فریم های آنها سریعتر از برچسب سطل بوده است.

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

شکل 3. فریم بلند B برای 2 فریم - A و B، ضربان نادرستی می دهد.

کتابخانه Swappy این مشکل را با استفاده از حصارهای همگام سازی ( EGL_KHR_fence_sync و VkFence ) حل می کند تا انتظارها را به برنامه تزریق کند که به خط لوله نمایشگر اجازه می دهد تا به جای ایجاد فشار برگشتی، عقب بیفتد. قاب A هنوز یک فریم اضافی ارائه می دهد، اما فریم B اکنون به درستی ارائه می شود.

شکل 4. فریم های C و D منتظر ارائه هستند.

Mir 2 به راحتی کتابخانه Swappy را با استفاده از ویژگی تعبیه شده در Unity بهینه سازی شده تنظیم کرد. این اقدام به بهبود قابل توجهی برای عملکرد رندر آنها منجر شد، به‌ویژه متریک جلسه آهسته را از 40% به 10% کاهش داد.

شکل 5. بهبود آهسته جلسه پس از ادغام Swappy.

تعداد جلسات آهسته برای Mir2 پس از ادغام Swappy به میزان قابل توجهی کاهش یافته است.

شکل 6. توزیع FPS بازی پس از ادغام Swappy.
هر سطل نشان دهنده درصد جلساتی است که 75٪ از فریم های آنها سریعتر از برچسب سطل بوده است.

با Swappy شروع کنید

نحوه استفاده از Swappy در موتورهای بازی بومی

برای ادغام کتابخانه Android Frame Pacing در بازی خود به راهنماهای زیر مراجعه کنید:

نحوه استفاده از Swappy در موتور بازی سازی Unity

Unity Android Frame Pacing را در موتور خود ادغام کرده است. برای فعال کردن این ویژگی در Unity، چک باکس Optimized Frame Pacing را در قسمت تنظیمات پروژه > پخش کننده > تنظیمات اندروید > وضوح و ارائه علامت بزنید:

شکل 7. Frame Pacing را در Unity Engine فعال کنید.

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

نحوه استفاده از Swappy در موتور بازی سازی Unreal

Unreal 4.25 و بالاتر ، کتابخانه Android Frame Pacing را که بخشی از کیت توسعه بازی اندروید است، یکپارچه می کند. مقاله Mobile Frame Pacing توضیح می‌دهد که چگونه کتابخانه Android Frame Pacing را فعال کنید و چگونه سرعت فریم را از طریق کد C++ کنترل کنید.

برای مطالعه بیشتر، می‌توانید درباره Slow Sessions و Swappy بیاموزید.