Jump to content

Recommended Posts

  • Supporter

ถ้าใครเปิดเล่น Wuthering Waves ช่วงแพตช์ 3.6 แล้วรู้สึกว่าทำไมเพื่อนในคอมมูนิตี้ชอบทักเรื่อง "ดอกจัน" หรือคุยเรื่องเขียนโค้ดใหม่อะไรสักอย่างจนบอร์ดแทบแตก โพสต์นี้เรามาแกะประเด็นนี้แบบละเอียดกัน Kuro Games เล่นท่ายากที่ทีมพัฒนาเกมระดับไลฟ์เซอร์วิสน้อยเจ้าจะกล้าทำ นั่นคือการรื้อระบบสคริปต์เกมเพลย์ส่วนใหญ่แล้วเปลี่ยนภาษาโปรแกรมใหม่ทั้งหมดเพื่อแก้ปัญหากระตุกเรื้อรัง

ที่มาที่ไป: รื้ออะไร และทำไมไม่ใช่การเปลี่ยนเอนจิน

ต้องเคลียร์ความเข้าใจผิดอันดับแรกก่อน หลายคนแชร์กันจนคิดว่า Kuro โละ Unreal Engine 4 ทิ้งแล้วเปลี่ยนไปใช้ยูนิตี้หรือทำเอนจินใหม่ อันนี้ไม่ใช่เลย แกนหลักระดับกราฟิก ฟิสิกส์ และเรนเดอร์ ยังเป็น C++ ของ UE4 เหมือนเดิม 100%

แต่ส่วนที่ถูกรื้อทำใหม่คือ Gameplay Script Layer หรือชั้นตรรกะที่คอยคุมพฤติกรรม AI ของมอนสเตอร์ เควสต์ ระบบอีเวนต์ การโต้ตอบในแผนที่ ซึ่งแต่เดิมตั้งแต่แพตช์ 1.0 ทาง Kuro เลือกใช้เฟรมเวิร์กอย่าง Tencent Puerts เพื่อรันภาษา TypeScript / JavaScript ผ่าน V8 Engine บนตัว UE4 ข้อดีในวันแรกคือหาโปรแกรมเมอร์สายเว็บหรือสาย JS มาเริ่มงานได้ไว อัปเดตโค้ดแก้หน้างานได้เร็ว

ทว่าพอคอนเทนต์ถมเข้ามาเรื่อยๆ จนถึงแพตช์ 3.2 ปริมาณสคริปต์งอกขึ้นมาราวสองเท่า และจุดตายของ JavaScript บน V8 คือกลไกการเก็บขยะหน่วยความจำ (Garbage Collection หรือ GC) ที่มักทำงานแบบตัดหน้า หรือ Stop-the-world คอยสั่งหยุดการทำงานชั่วขณะเพื่อกวาดแรมจังหวะที่เรากำลังวิ่งสำรวจ ยิ่งไปเจอพื้นที่ NPC หนาแน่นอย่างวิทยาลัย Startorch (星炬学院) ซีพียูก็จะสะอึกเป็นช่วงๆ จนเกิดอาการ Micro-stutter ที่ขัดใจผู้เล่นมาตลอด

ทางออกของ Kuro ในแพตช์ 3.6 คือเขียนลอจิกสคริปต์พวกนั้นใหม่ด้วยภาษา C# ซึ่งมีสถาปัตยกรรมหน่วยความจำแบบจัดการรุ่นของอ็อบเจกต์ (Gen0/1/2) ควบคุมรอบการเคลียร์ขยะได้แม่นยำกว่า สามารถนัดแนะให้ระบบไปเก็บขยะหน่วยความจำตอนจังหวะโหลดฉากหรือหน้าจอมืด แทนที่จะมากวาดตัดหน้าระหว่างคอมโบ

สถานะการปล่อยทดสอบ: ใครได้ลองแล้วบ้าง?

แม้ในบันทึกแพตช์ทางการทั้งฝั่ง Global และจีนจะเขียนสั้นๆ สวยหรูว่าปรับเปลี่ยนภาษาโปรแกรมเพื่อประสิทธิภาพในทุกแพลตฟอร์ม แต่ในทางปฏิบัติ นี่คือ Staged Online Test หรือการสุ่มปล่อยทดสอบเป็นกลุ่มๆ แบบจำกัด ยังไม่ได้เปิดใช้งานแบบสมบูรณ์ 100% (ยังไม่ใช่ Full GA)

สเตตัสล่าสุดที่เช็คกันในคอมมูนิตี้ช่วงนี้คือ:

  • Android: ช่วงเปิดแพตช์แรกๆ ลือกันว่าสุ่มลงแค่ประมาณ 1% ตอนนี้เริ่มกระจายวงกว้างขึ้นอย่างเห็นได้ชัดในกลุ่มชิปเซ็ตระดับบน แต่ก็ยังมีเครื่องที่ยังไม่ได้อยู่ดี
  • PC / คอนโซล (PS5 / Xbox Series X|S): ใช้วิธีทยอยเปิดสุ่มเป็นกลุ่มเหมือนกัน ทั้งฝั่งเซิร์ฟจีนและ Global เดินตารางงานพร้อมกัน ไม่มีใครล้าหลังใคร แต่ฝั่งคอนโซลต้องรอระบบเปิดให้อย่างเดียว
  • อุปกรณ์ที่ถูกตัดสิทธิ์ชั่วคราว: ทางการระบุเงื่อนไขไว้ชัดเจนว่า ฝั่ง iOS อุปกรณ์ที่มีแรมเท่ากับหรือน้อยกว่า 4 GB รวมถึงเครื่องที่รันบน iOS 16.0 ถึง 17.2 จะยังไม่เข้าร่วมการทดสอบนี้ ส่วนฝั่ง Android อุปกรณ์ที่มีแรมน้อยกว่าหรือเท่ากับ 6 GB จะถูกกันออกไปก่อน ยังคงรันบนสแต็ก JS/Puerts ตัวเดิม

วิธีดูว่าไอดีเราได้ใช้ C# หรือยัง

วิธีตรวจที่คอมมูนิตี้สรุปตรงกันมีสองจุดหลัก:

  • เช็คนาฬิกาในเกม (วิธีหลัก): ตอนอยู่ในแมป ให้มองที่ตัวเลขแสดงเวลาโปร่งใสตรงมุมซ้ายล่างของ HUD ถ้ามีเครื่องหมายดอกจัน * ขึ้นอยู่ข้างๆ แสดงว่าเครื่องนั้นกำลังรันบิลด์ทดสอบ C# ตัวใหม่
  • เช็คเลขเวอร์ชันหน้าล็อกอิน: บางคนจะเห็นเครื่องหมาย * ห้อยท้ายชื่อเวอร์ชันที่มุมขวาบนของหน้าจอก่อนเข้าเกม

แรงม้าที่ได้กลับมา: ลื่นขึ้นแค่ไหน และแก้อะไรไม่ได้บ้าง

จากผลทดสอบของผู้เล่นที่วัดผ่านโปรแกรมอย่าง FrameView ทั้งใน NGA และ Bahamut รวมถึงสื่อเทคโนโลยีต่างประเทศ ตัวเลขเฉลี่ยออกมาค่อนข้างตรงกัน:

  • เฟรมเรตเฉลี่ยและ 1% Low: บริเวณจุดปราบเซียนอย่างวิทยาลัย Startorch เฟรมเรตดีดขึ้นมาราว 10–20 FPS (บางเครื่องจาก 40 ปลายๆ วิ่งขึ้นไปแตะ 60–70 FPS แบบนิ่งขึ้น) และค่า 1% Low ซึ่งเป็นตัวชี้วัดอาการกระตุกดีขึ้นอย่างเห็นได้ชัด จังหวะเฟรมดรอปลดลงเกือบ 30% ซีพียูทำงานเบาลง
  • จุดที่ C# ช่วยไม่ได้: ต้องเข้าใจว่าการเปลี่ยนภาษาช่วยเรื่อง CPU-bound ที่เกิดจากสคริปต์และรอบการเก็บขยะหน่วยความจำ แต่มันไม่ได้ช่วยฉากที่เป็น GPU-bound เช่น โซน Xuanfang ที่กินแรงการ์ดจอและ VRAM สูงลิ่ว หรือปัญหาการโหลดเท็กซ์เจอร์ไม่ทันเพราะแรมการ์ดจอเต็ม รวมถึงระบบฟิสิกส์ของการขับขี่มอเตอร์ไซค์ที่บางจังหวะยังมีสะดุดอยู่บ้าง อาการพวกนี้ต้องแยกแยะจากการรื้อสคริปต์

ทางเลือกสายซน: บังคับเปิดใช้งานด้วยตัวเอง (PC และ Android)

สำหรับใครที่เช็คแล้วไม่มีดอกจัน แต่ไม่อยากรอระบบสุ่มคิว ฝั่งคอมมูนิตี้สายเทคนิคพบวิธี Force Enable ให้เกมรันตัวแปรสภาพแวดล้อม C# ได้เอง ซึ่งต้องยอมรับความเสี่ยงเรื่องความเสถียรและอาจมีไฟล์ดาวน์โหลดเพิ่มเติมเอาไว้ด้วย

สำหรับชาว PC (Steam / Epic / ตัวรันทางการ)

สามารถใส่ Launch Arguments ในคำสั่งเปิดเกมได้โดยตรง:

  • ใส่พารามิเตอร์: -ForceEnableCSharpEnvironment (สามารถพ่วง -SkipSplash เพื่อข้ามโลโก้ตอนเปิดได้)
  • ถ้าเปิดผ่าน Steam ให้คลิกขวาที่ชื่อเกม > Properties > ช่อง Launch Options แล้วแปะคำสั่งลงไป

สำหรับชาว Android (ไม่ต้อง Root)

ใช้ตัวจัดการไฟล์เข้าไปสร้างไฟล์ข้อความเพื่อสั่งคอมมานด์ไลน์ของเอนจิน:

  • ไปที่โฟลเดอร์: /sdcard/Android/data/com.kurogame.mingchao/files/UE4Game/Client/ (หมายเหตุ: ชื่อโฟลเดอร์แพ็กเกจของ Global อาจแตกต่างกันเล็กน้อย ให้ดูโฟลเดอร์เกมของตัวเอง)
  • สร้างไฟล์ชื่อ: UE4CommandLine.txt
  • ข้างในพิมพ์ข้อความบรรทัดเดียวว่า: ../../../Client/Client.uproject -ForceEnableCSharpEnvironment
  • จากนั้นเซฟแล้วเปิดเกมใหม่ สังเกตดูว่ามีดอกจันขึ้นที่มุมจอหรือยัง

*คำเตือน: คอนโซล PS5 และ Xbox ทำวิธีนี้ไม่ได้ ต้องรอให้ระบบส่งอัปเดตมาตามรอบเท่านั้น

รื้อใหญ่ขนาดนี้ บั๊กตามมาไหม?

แน่นอนว่าการเขียนสคริปต์เกมเพลย์ที่มีอายุหลายปีใหม่แทบทั้งดุ้นเพื่อย้ายจากภาษาหนึ่งไปอีกภาษา ย่อมมีผลข้างเคียงให้เห็น ในฟอรั่มเริ่มมีรายงานบั๊กแปลกๆ ในพื้นที่เก่า การตอบสนองของ NPC หรือเควสต์บางจุดที่แสดงผลเพี้ยน ซึ่งทีมงานก็ต้องไล่เก็บงานกันต่อไป นอกจากนี้วงการ Modder ก็ต้องปรับตัวกันยกใหญ่เพราะโครงสร้างตัวสคริปต์เปลี่ยนไปจากเดิม

โดยสรุปแล้ว ก้าวนี้ของ Kuro ถือเป็นการลงแรงระดับโครงสร้างพื้นฐานที่น่ายกย่อง เพราะยอมเหนื่อยรื้อตรรกะระบบใหม่เพื่อขยายเพดานประสิทธิภาพของเกมในระยะยาว ใครที่มีดอกจันอยู่แล้วก็ถือว่าได้สัมผัสความลื่นไหลล่วงหน้า ส่วนใครที่ยังไม่มีดอกจันและไม่อยากเสี่ยงแก้ไฟล์ ก็รอดูในแพตช์ 3.7 ต่อไปว่าทางค่ายจะพร้อมปลดล็อกสแต็ก C# นี้ให้ทุกคนแบบถาวรหรือไม่

Bangkok · WW · tea at 1am

  • Himari ได้เปลี่ยนชื่อเป็น สรุปมหากาพย์ WuWa 3.6 รื้อสคริปต์ข้ามภาษาไป C# ลื่นขึ้นจริงไหม ใครได้บัตรคิว และวิธีเช็คดอกจัน *
  • Recently Browsing   1 สมาชิก

×
×
  • สร้างใหม่...