Microsoft Flight Simulator 2024 ได้นำเสนอการเปลี่ยนแปลงสถาปัตยกรรมที่สำคัญโดยการเปลี่ยนจาก add-on แบบ DLL ดั้งเดิมไปสู่ WebAssembly (WASM) modules แต่การดำเนินการดังกล่าวกลับได้รับการวิพากษ์วิจารณ์อย่างกว้างขวางจากชุมชนเกมเมอร์เนื่องจากปัญหาการล่มและประสิทธิภาพที่ยังคงมีอยู่
การเปลี่ยนแปลงนี้แสดงถึงความพยายามของ Microsoft ในการปรับปรุงความปลอดภัยและความเข้ากันได้ข้ามแพลตฟอร์มสำหรับ add-on ของบุคคลที่สาม แทนที่จะอนุญาตให้นักพัฒนาแจกจ่ายไฟล์ DLL ที่อาจไม่ปลอดภัย ระบบใหม่จะคอมไพล์โค้ด C++ เป็น WebAssembly modules ที่จะถูกแปลงกลับเป็นโค้ดดั้งเดิมในขณะรันไทม์ วิธีการนี้สร้าง security sandbox ในขณะที่รักษาประสิทธิภาพผ่านการคอมไพล์แบบ ahead-of-time
ประเภทของ WebAssembly Module ใน MSFS 2024:
- Standalone modules: โหลดอัตโนมัติเมื่อแพ็คเกจถูกติดตั้ง
- Gauge modules: ประกอบด้วย callback ของเครื่องมือในห้องนักบิน
- Airport modules: เชื่อมโยงกับฉากภาพ โหลด/ยกเลิกการโหลดพร้อมกับการ spawn/despawn
- System modules: ประกอบด้วย callback ระดับระบบ
ชุมชนรายงานปัญหาความเสถียรอย่างกว้างขวาง
ผู้เล่นและสตรีมเมอร์ได้รายงานการล่มบ่อยครั้งและการลดลงของประสิทธิภาพตั้งแต่เกมเปิดตัว ปัญหาเหล่านี้กลายเป็นเรื่องธรรมดาจนคอมเมนต์เกี่ยวกับการล่มครองดองแชทของการถ่ายทอดสด โดยผู้ใช้หลายคนแสดงความผิดหวังต่อความเสถียรของเกม ผู้เล่นที่มีประสบการณ์บางคนที่มีเวลาเล่นหลายพันชั่วโมงในเวอร์ชันก่อนหน้าอธิบายการดำเนินการปัจจุบันว่าได้รับการตอบรับที่ไม่เป็นบวกจากเกมเมอร์
ปัญหาดูเหมือนจะเกิดจากหลายปัจจัยนอกเหนือจากการดำเนินการ WebAssembly เพียงอย่างเดียว การเปลี่ยนผ่านของเกมไปสู่ DirectX 12 และการปรับปรุงความคมชัดของภาพได้สร้างข้อจำกัด VRAM ที่สำคัญ โดยเฉพาะอย่างยิ่งส่งผลกระทบต่อผู้ใช้ที่มีการ์ดกราฟิกระดับไฮเอนด์ที่เคยเล่นเวอร์ชัน 2020 ได้อย่างราบรื่น
สถาปัตยกรรมทางเทคนิคเผยให้เห็นการดำเนินการที่ซับซ้อน
โซลูชัน WebAssembly ของ Microsoft รวมถึงชุดเครื่องมือ Visual Studio ที่ครอบคลุมซึ่งอนุญาตให้คอมไพล์โปรเจกต์ C++ ที่มีอยู่โดยตรงเป็น WASM modules ระบบรองรับไลบรารี C มาตรฐาน ความสามารถในการดีบัก และรวมถึง GDI+ wrapper ที่อิงตาม NanoVG API เพื่อช่วยให้นักพัฒนา add-on ที่มีอยู่เปลี่ยนผ่านได้ง่ายขึ้น
สถาปัตยกรรมรัน WebAssembly module แต่ละตัวบนเธรดแยกต่างหาก ซึ่งแตกต่างจากเวอร์ชัน 2020 ที่ module ทั้งหมดใช้เธรดหลักร่วมกัน การเปลี่ยนแปลงนี้ควรจะปรับปรุงประสิทธิภาพในทางทฤษฎีโดยอนุญาตให้ module ใช้เฟรมทั้งหมดสำหรับการอัปเดต แต่การดำเนินการในทางปฏิบัติได้เผชิญกับความท้าทายที่สำคัญ
WebAssembly: รูปแบบคำสั่งไบนารีที่อนุญาตให้โค้ดที่เขียนในภาษาเช่น C++ รันในสภาพแวดล้อม sandbox ด้วยประสิทธิภาพใกล้เคียงกับ native
ไฟล์ API หลักสำหรับการพัฒนา WASM:
MSFS.h
และMSFS_Core.h
: ไฟล์พื้นฐานสำหรับโปรเจกต์ gauge ทั้งหมดใน WASMMSFS_GaugeContext.h
: จำเป็นสำหรับ gauge callbacks ใน MSFS 2024MSFS_Render.h
: NanoVG API สำหรับการเรนเดอร์MSFS_Vars.h
: ตัวทดแทนสำหรับ Legacy Gauge API ที่เลิกใช้แล้วLegacy/gauges.h
: ปัจจุบันถือเป็น legacy API ไม่แนะนำสำหรับโปรเจกต์ใหม่
ปัญหากราฟิกและการจัดการหน่วยความจำทำให้ปัญหาซับซ้อนขึ้น
นอกเหนือจากการดำเนินการ WebAssembly แล้ว ผู้ใช้รายงานว่าเอนจินกราฟิกที่อัปเกรดของเกมสร้างแรงกดดันด้านหน่วยความจำอย่างมาก ผู้เล่นที่มีระบบระดับไฮเอนด์รวมถึงการ์ด RTX 3080 Ti ที่มี VRAM 12GB ประสบกับการลดลงของประสิทธิภาพเมื่อเล่นใน VR หรือความละเอียด 4K ระบบการจัดการเทกซ์เจอร์ดูเหมือนจะมีปัญหากับการจัดสรรหน่วยความจำ ทำให้เกิดการลดลงของอัตราเฟรมที่ทำให้การเล่นเกม VR เป็นเรื่องท้าทายโดยเฉพาะ
เมื่อพวกเขาไปที่ MSFS 2024 พวกเขาเขียนใหม่สำหรับ DX12 และขณะที่ทำอย่างนั้นได้อัปเกรดบางสิ่งให้ดูดีขึ้น การจัดการเทกซ์เจอร์ยังคงดูเหมือนจะต้องการการปรับปรุงบางอย่าง
สถานการณ์นี้ทำให้ผู้เล่นหลายคนเลื่อนการเปลี่ยนผ่านจากเวอร์ชัน 2020 โดยรอการอัปเดตในอนาคตเพื่อแก้ไขปัญหาประสิทธิภาพพื้นฐานเหล่านี้
ประโยชน์ด้านความปลอดภัยมาพร้อมกับความซับซ้อนในการพัฒนา
แม้ว่าแนวทาง WebAssembly จะแก้ไขข้อกังวลด้านความปลอดภัยที่ถูกต้องเกี่ยวกับ add-on ของบุคคลที่สาม แต่มันก็นำเสนอความซับซ้อนใหม่สำหรับนักพัฒนา ระบบต้องการการลิงก์ไลบรารีเฉพาะ (MSFS_WasmVersions.a) เพื่อให้แน่ใจว่า module ได้รับการยอมรับว่าเข้ากันได้กับ 2024 และ API เก่าหลายตัวได้ถูกยกเลิกเพื่อสนับสนุน alternative ที่เข้ากันได้กับ threading ใหม่
การดำเนินการยังรวมถึงข้อจำกัดการเข้าถึงไฟล์และระบบการเข้ารหัสสำหรับเนื้อหา marketplace ซึ่งจำกัดวิธีที่นักพัฒนา add-on สามารถเข้าถึงไฟล์กำหนดค่าบางไฟล์ภายในแพ็กเกจของพวกเขา สิ่งนี้สร้างอุปสรรคเพิ่มเติมสำหรับนักพัฒนาที่พยายามพอร์ต add-on ที่มีอยู่ไปยังแพลตฟอร์มใหม่
แม้จะมีความท้าทายในปัจจุบัน แนวทาง WebAssembly แสดงถึงการทดลองที่น่าสนใจในการสร้างสมดุลระหว่างความปลอดภัย ประสิทธิภาพ และความเข้ากันได้ข้ามแพลตฟอร์มสำหรับการปรับแต่งเกม อย่างไรก็ตาม ประสบการณ์ผู้ใช้ในทันทีแสดงให้เห็นว่าการดำเนินการต้องการการปรับแต่งอย่างมากก่อนที่จะสามารถส่งมอบข้อได้เปรียบทางทฤษฎีได้
อ้างอิง: WEBASSEMBLY (WASM)