Mir 2 ปรับปรุงประสิทธิภาพการแสดงผลโดยใช้ Swappy

Mir 2: Return of the King เป็นเกมมือถือคุณภาพสูงที่มี IP ของ Legend ซึ่งได้รับอนุญาตจาก Actoz Soft และพัฒนาโดย HK ZHILI YAOAN LIMITED โดยใช้ Unity Engine

เกมนี้ไม่เพียงแต่จะสร้างความรู้สึกของ "Mir 2" ซึ่งเป็นตัวแทนของ MMORPG แฟนตาซีเกาหลีขึ้นมาใหม่ได้อย่างสมบูรณ์แบบเท่านั้น แต่ยังนำเสนอเนื้อหาเกมยอดนิยมมากมาย เช่น การเก็บรวบรวมอุปกรณ์ การโจมตีด้วยทรายขนาดใหญ่ และเกมเพลย์หลักอื่นๆ

เกมดังกล่าวใช้ Android Frame Pacing API (Swappy) เพื่อปรับปรุงความเสถียรของอัตราเฟรม การแสดงผลที่ราบรื่น และเพิ่ม Android Vitals (เมตริกเซสชันที่ช้า) อย่างมาก

เปิดตัวเซสชันที่ช้าใน Android Vitals

เซสชันที่ช้าคือเมตริก Android Vitals ใน Google Play Console เซสชันที่ช้ามีเฟรมที่ช้ามากกว่า 25% เฟรมจะช้าในกรณีต่อไปนี้

1) ที่ 20 fps เฟรมไม่แสดงภายใน 50 มิลลิวินาทีหลังจากเฟรมก่อนหน้า 2) ที่ 30 fps เฟรมไม่แสดงภายใน 34 มิลลิวินาทีหลังจากเฟรมก่อนหน้า

Play จะเริ่มพาผู้ใช้ออกจากเกมที่มีอัตราเฟรม 20 FPS ในโทรศัพท์ให้ทันเวลา

มีหลายสาเหตุที่เฟรมอาจแสดงหรือแสดงผลบนหน้าจอนานกว่าเป้าหมายของนักพัฒนาแอป เกมอาจใช้ CPU หรือ GPU มากเกินไป ร้อนเกินไปซึ่งจะเปิดใช้งานสถานะการระบายความร้อนที่จำกัด หรือเฟรมเรตของเกมไม่ตรงกับอัตราการรีเฟรชของจอแสดงผลของอุปกรณ์

Swappy คืออะไร

ไลบรารีการกำหนดเฟรมของ Android หรือที่เรียกว่า Swappy เป็นส่วนหนึ่งของไลบรารี AGDK Swappy ช่วยให้เกม OpenGL และ Vulkan แสดงผลได้อย่างราบรื่นและกำหนดอัตราการแสดงเฟรมได้อย่างถูกต้องบน Android

ไลบรารีจะจัดการอัตราการรีเฟรชหลายรายการหากอุปกรณ์รองรับ ซึ่งจะช่วยให้เกมมีความยืดหยุ่นมากขึ้นในการแสดงเฟรม เช่น สำหรับอุปกรณ์ที่รองรับอัตราการรีเฟรช 60 Hz และ 90 Hz เกมที่ไม่สามารถแสดงผล 60 เฟรมต่อวินาทีจะลดเป็น 45 FPS แทน 30 FPS เพื่อให้ราบรื่น ไลบรารีจะตรวจหาอัตราเฟรมที่คาดไว้ของเกมและปรับเวลาแสดงเฟรมโดยอัตโนมัติ

คลังการจัดการเฟรมยังช่วยยืดอายุการใช้งานแบตเตอรี่ด้วยเนื่องจากจะหลีกเลี่ยงการอัปเดตการแสดงผลที่ไม่จำเป็น เช่น หากเกมแสดงผลที่ 60 FPS แต่จอแสดงผลอัปเดตที่ 120 Hz หน้าจอจะอัปเดต 2 ครั้งสำหรับทุกเฟรม ไลบรารีการกำหนดอัตราการแสดงเฟรมจะหลีกเลี่ยงปัญหานี้โดยการตั้งค่าอัตราการรีเฟรชเป็นค่าที่อุปกรณ์รองรับซึ่งใกล้เคียงกับอัตราเฟรมเป้าหมายมากที่สุด

วิธีที่ Mir 2 ปรับปรุงประสิทธิภาพการแสดงผลด้วย Swappy

Mir 2 (미르2: 왕의 귀환) พบปัญหาด้านประสิทธิภาพการแสดงผลที่ไม่เสถียร โดยมีเซสชันที่ทำงานช้า 40% ที่เกณฑ์อัตราเฟรม 20 FPS ซึ่งสูงกว่าเกณฑ์ 20% ของ Google Play มาก

รูปที่ 1 เมตริกเซสชันที่ช้าก่อนผสานรวม Swappy

Mir 2 (미르2: 왕의 귀환) เป็นเกมที่มีกราฟิกคุณภาพสูง อุปกรณ์บางรุ่นจึงอาจพบปัญหาในการคง FPS ให้เสถียร การแจกแจงอัตราเฟรมแสดงให้เห็นว่าเซสชันจำนวนมากทำงานที่ FPS ต่ำกว่า 20 FPS

รูปที่ 2 การแจกแจง FPS ของเกมก่อนผสานรวม Swappy
แต่ละกลุ่มแสดงเปอร์เซ็นต์ของเซสชันที่เฟรม 75% เร็วกว่าป้ายกำกับกลุ่ม

เมื่อปริมาณงานของการแสดงผลใช้เวลานานกว่าปริมาณงานของแอปพลิเคชัน ระบบจะเพิ่มเฟรมเพิ่มเติมลงในคิว ซึ่งจะส่งผลให้เกิดความกระตุกอีกครั้ง และอาจทำให้เกิดความล่าช้าของเฟรมเพิ่มขึ้นเนื่องจากการเพิ่มข้อมูลลงในบัฟเฟอร์

รูปที่ 3 เฟรมยาว B กำหนดอัตราการแสดงเฟรม A และ B ไม่ถูกต้อง

ไลบรารี Swappy แก้ปัญหานี้โดยใช้ Sync Fence (EGL_KHR_fence_sync และ VkFence) เพื่อแทรกการรอลงในแอปพลิเคชัน ซึ่งจะช่วยให้ไปป์ไลน์การแสดงผลทำงานทันแทนที่จะปล่อยให้มีแรงดันย้อนกลับเพิ่มขึ้น เฟรม ก. ยังคงแสดงเฟรมเพิ่ม แต่เฟรม ข. แสดงอย่างถูกต้องแล้ว

รูปที่ 4 เฟรม C และ D รอแสดง

Mir 2 ผสานรวมไลบรารี Swappy ได้อย่างง่ายดายโดยใช้ประโยชน์จากฟีเจอร์การกำหนดเฟรมแบบเพิ่มประสิทธิภาพในตัวของ Unity การดำเนินการนี้ส่งผลให้ประสิทธิภาพการแสดงผลดีขึ้นอย่างมาก โดยเฉพาะการลดเมตริกเซสชันที่ช้าจาก 40% เหลือ 10%

รูปที่ 5 การปรับปรุงเซสชันที่ช้าลงหลังจากผสานรวม Swappy

จํานวนเซสชันที่ช้าของ Mir2 ลดลงอย่างมากหลังจากผสานรวม Swappy

รูปที่ 6 การแจกแจง FPS ของเกมหลังจากผสานรวม Swappy
แต่ละกลุ่มแสดงเปอร์เซ็นต์ของเซสชันที่เฟรม 75% เร็วกว่าป้ายกำกับกลุ่ม

เริ่มต้นใช้งาน Swappy

วิธีใช้ Swappy ในเครื่องมือสร้างเกมแบบเนทีฟ

ดูคู่มือต่อไปนี้เพื่อผสานรวมไลบรารีการกำหนดเฟรมของ Android ลงในเกม

วิธีใช้ Swappy ในเครื่องมือสร้างเกม Unity

Unity ได้ผสานรวมการกำหนดเฟรมของ Android ไว้ในเอนจิ้นแล้ว หากต้องการเปิดใช้ฟีเจอร์นี้ใน Unity ให้เลือกช่องทำเครื่องหมายการกำหนดเฟรมแบบเพิ่มประสิทธิภาพในส่วนการตั้งค่าโปรเจ็กต์ > โปรแกรมเล่น > การตั้งค่าสำหรับ Android > ความละเอียดและการแสดงผล

รูปที่ 7 เปิดใช้การกำหนดเฟรมใน Unity Engine

หรือจะเปิดใช้ตัวเลือกอัตราเฟรมแบบเพิ่มประสิทธิภาพในโค้ดตรรกะแบบเป็นโปรแกรมเพื่อให้ Unity กระจายเฟรมอย่างสม่ำเสมอเพื่อให้อัตราเฟรมมีความผันผวนน้อยลง ซึ่งจะทำให้เกมเพลย์ราบรื่นขึ้น

วิธีใช้ Swappy ใน Unreal Game Engine

Unreal 4.25 ขึ้นไปผสานรวม Android Frame Pacing Library ซึ่งเป็นส่วนหนึ่งของ Android Game Development Kit บทความการกำหนดเฟรมอัตราเฟรมของอุปกรณ์เคลื่อนที่อธิบายวิธีเปิดใช้ไลบรารีการกำหนดเฟรมอัตราเฟรมของ Android และวิธีควบคุมการกำหนดเฟรมอัตราเฟรมจากโค้ด C++

หากต้องการอ่านเพิ่มเติม โปรดดูข้อมูลเกี่ยวกับเซสชันที่ช้าและการแลกเปลี่ยน