Mir 2 cải thiện hiệu suất kết xuất bằng cách sử dụng Swappy

Mir 2: Return of the King là một trò chơi di động chất lượng cao thuộc IP Legend, được Actoz Soft cấp phép và do HK ZHILI YAOAN LIMITED phát triển bằng công cụ Unity.

Trò chơi này không chỉ tái hiện hoàn hảo cảm giác của "Mir 2", một trò chơi MMORPG tưởng tượng tiêu biểu của Hàn Quốc, mà còn cung cấp nhiều nội dung trò chơi phổ biến nhất, chẳng hạn như thu thập thiết bị, tấn công bằng cát trên quy mô lớn và các lối chơi cốt lõi khác.

Trò chơi này đã sử dụng API Android Frame Pacing (Swappy) để cải thiện độ ổn định của tốc độ khung hình, đạt được khả năng kết xuất mượt mà và tăng đáng kể Android Vitals (chỉ số Phiên bị chậm).

Ra mắt tính năng Phiên bị chậm trên Android Vitals

Phiên bị chậm là một chỉ số Android vitals trong Google Play Console. Phiên bị chậm có hơn 25% số khung hình bị chậm. Khung hình bị chậm khi:

1) Ở tốc độ 20 khung hình/giây, khung hình không xuất hiện trong vòng 50 mili giây sau khung hình trước. 2) Ở tốc độ 30 khung hình/giây, khung hình này không xuất hiện trong vòng 34 mili giây sau khung hình trước.

Trong lúc đó, Play sẽ bắt đầu chuyển hướng người dùng khỏi những trò chơi không thể đạt được 20 khung hình/giây trên điện thoại của họ.

Có nhiều lý do khiến một khung hình có thể hiển thị hoặc kết xuất lâu hơn trên màn hình so với mục tiêu của nhà phát triển. Trò chơi có thể bị ràng buộc bởi CPU hoặc GPU, bị quá nhiệt khiến kích hoạt trạng thái nhiệt bị điều tiết hoặc có sự không khớp giữa tốc độ khung hình của trò chơi và tốc độ làm mới màn hình của thiết bị.

Swappy là gì

Thư viện Android Frame Pacing (còn gọi là Swappy) là một phần của thư viện AGDK. Swappy giúp các trò chơi OpenGL và Vulkan đạt được khả năng kết xuất hình ảnh mượt mà và tốc độ khung hình chính xác trên Android.

Thư viện này xử lý nhiều tốc độ làm mới (nếu được thiết bị hỗ trợ), giúp bạn linh hoạt hơn trong việc trình chiếu khung hình. Ví dụ: đối với một thiết bị có hỗ trợ tốc độ làm mới 60 Hz cũng như 90 Hz, một trò chơi không thể tạo ra 60 FPS có thể giảm xuống còn 45 FPS thay vì 30 FPS để duy trì độ mượt. Thư viện phát hiện tốc độ khung hình dự kiến của trò chơi và tự động điều chỉnh thời gian hiện khung hình cho phù hợp.

Thư viện Frame Pacing cũng cải thiện thời lượng pin do tránh được việc các bản cập nhật hiển thị một cách không cần thiết. Ví dụ: nếu một trò chơi đang kết xuất ở tốc độ 60 khung hình/giây nhưng màn hình đang cập nhật ở tốc độ 120 Hz, thì màn hình sẽ được cập nhật 2 lần cho mỗi khung hình. Thư viện Frame Pacing ngăn điều này xảy ra bằng cách đặt tốc độ làm mới thành giá trị được thiết bị hỗ trợ và sát nhất với tốc độ khung hình mục tiêu.

Cách Mir 2 cải thiện hiệu suất kết xuất bằng Swappy

Mir 2 (미르2: 왕의 귀환) đang gặp vấn đề về hiệu suất kết xuất không ổn định, trong đó 40% phiên bị chậm ở ngưỡng tốc độ khung hình là 20 FPS, cao hơn nhiều so với ngưỡng 20% của Google Play.

Hình 1. Chỉ số phiên bị chậm trước khi tích hợp Swappy.

Mir 2 (미르2: 왕의 귀환) là một trò chơi đồ hoạ có độ chân thực cao, một số thiết bị đang gặp khó khăn trong việc duy trì FPS ổn định. Biểu đồ phân phối tốc độ khung hình của họ cho thấy nhiều phiên đang chạy ở tốc độ khung hình thấp hơn 20 khung hình/giây.

Hình 2. Phân phối FPS của trò chơi trước khi tích hợp Swappy.
Mỗi nhóm thể hiện tỷ lệ phần trăm số phiên mà 75% số khung hình nhanh hơn nhãn nhóm.

Khi khối lượng công việc hiển thị mất nhiều thời gian hơn khối lượng công việc của ứng dụng, các khung hình bổ sung sẽ được thêm vào hàng đợi. Điều này một lần nữa, dẫn đến tình trạng giật hình và cũng có thể dẫn đến thời gian chờ của khung hình lâu hơn do bộ nhớ đệm.

Hình 3. Khung hình dài B đưa ra tốc độ không chính xác cho 2 khung hình: A và B.

Thư viện Swappy giải quyết vấn đề này bằng cách sử dụng hàng rào đồng bộ hoá (EGL_KHR_fence_syncVkFence) để chèn các lệnh chờ vào ứng dụng nhằm cho phép quy trình hiển thị bắt kịp, thay vì để cho áp lực ngược tăng lên. Khung hình A vẫn trình chiếu một khung khác, nhưng khung hình B hiện đã trình chiếu chính xác.

Hình 4. Khung hình C và D đang chờ hiển thị.

Mir 2 dễ dàng tích hợp thư viện Swappy bằng cách tận dụng tính năng Tốc độ khung hình được tối ưu hoá tích hợp sẵn của Unity. Hành động này đã giúp cải thiện đáng kể hiệu suất kết xuất, cụ thể là giảm chỉ số Phiên bị chậm từ 40% xuống 10%.

Hình 5. Cải thiện Phiên hoạt động chậm sau khi tích hợp Swappy.

Số lượng phiên bị chậm đã giảm đáng kể đối với Mir2 sau khi tích hợp Swappy.

Hình 6. Phân phối FPS của trò chơi sau khi tích hợp Swappy.
Mỗi nhóm thể hiện tỷ lệ phần trăm số phiên mà 75% số khung hình nhanh hơn nhãn nhóm.

Bắt đầu sử dụng Swappy

Cách sử dụng Swappy trong công cụ phát triển trò chơi gốc

Hãy xem các hướng dẫn sau để tích hợp thư viện Android Frame Pacing vào trò chơi:

Cách sử dụng Swappy trong công cụ phát triển trò chơi Unity

Unity đã tích hợp Android Frame Pacing vào công cụ của họ. Để bật tính năng này trong Unity, hãy chọn hộp đánh dấu Optimized Frame Pacing (Tốc độ khung hình tối ưu) trong phần Project Settings > Player > Settings for Android > Resolution and Presentation (Cài đặt dự án > Trình phát > Cài đặt cho Android > Độ phân giải và bản trình bày):

Hình 7. Bật tính năng Tốc độ khung hình trong Công cụ Unity.

Ngoài ra, bạn có thể bật tuỳ chọn Tốc độ khung hình tối ưu theo phương thức lập trình trong mã logic để cho phép Unity phân phối đều các khung hình nhằm giảm sự biến động về tốc độ khung hình, tạo ra trải nghiệm chơi mượt mà hơn.

Cách sử dụng Swappy trong công cụ phát triển trò chơi Unreal

Unreal phiên bản 4.25 trở lên có tích hợp Thư viện tốc độ khung hình Android. Đây là một phần của Android Game Development Kit. Bài viết Tốc độ khung hình trên thiết bị di động giải thích cách bật Thư viện tốc độ khung hình trên Android và cách kiểm soát tốc độ khung hình qua mã C++.

Để đọc thêm, bạn có thể tìm hiểu về Phiên hoạt động chậmSwappy.