คู่มือเกมแลค › การออกแบบการซิงก์
lockstep ต้องรอผู้เล่นที่ช้าที่สุด Lockstep waits for the slowest peer
ID สาเหตุ sy-lockstep · ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)
เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →
ในโครงสร้างที่ทุกคนคำนวณเทิร์นเดียวกันไปพร้อมกัน ถ้าอินพุตของคนหนึ่งช้า ทุกคนต้องรอ
ทำไม แต่ละเทิร์นต้องได้อินพุตของผู้เล่นครบทุกคนจึงจะคำนวณได้ → ผลคือ อินพุตของคนหนึ่งมาถึงช้าเพราะจิตเตอร์หรือแพ็กเก็ตหาย → บนหน้าจอ ทุกคนหยุดแวบพร้อมกัน ถ้าหนักจะขึ้นหน้าต่าง “กำลังรอผู้เล่น”
อาการ ค้าง , กระตุก , อินพุตดีเลย์
ปัจจัย จิตเตอร์, แพ็กเก็ตหาย, การหยุดชะงัก
ใครเจอ บางจุด/บางแชนแนล
เกิดเมื่อไร สุ่มเป็นครั้งคราว
ผู้รับผิดชอบ ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม เซิร์ฟเวอร์: ปรับ input delay ตามปิงอัตโนมัติ, ตัดเฉพาะคนที่ช้าออกชั่วคราวให้คนที่เหลือเล่นต่อโดยไม่ต้องรอ ไคลเอนต์: ใช้ input delay ตามที่กำหนด, ถ้าเป็น P2P ที่ไม่มีเซิร์ฟเวอร์ตัวกลาง ให้ไคลเอนต์ที่เป็นโฮสต์รับหน้าที่ปรับ input delay และจัดการคนที่ช้าด้วย
ตัวเลขที่ควรรู้ ถ้าตั้ง input delay สั้นกว่า “เวลาที่อินพุตไปถึงอีกฝ่าย + จิตเตอร์” จะหยุดชะงักบ่อยขึ้น เวลาที่ไปถึงคือครึ่งหนึ่งของปิงถ้ารับส่งกันโดยตรง และประมาณครึ่งหนึ่งของผลรวมปิงของทั้งสองคนถ้าผ่านเซิร์ฟเวอร์ตัวกลาง
บนกราฟ พุ่งแบบสุ่มเป็นครั้งคราว · เวลารอแต่ละเทิร์น, ดีเลย์การมาถึงของอินพุตแยกตามผู้เล่น
จุดที่ต้องดู บันทึกเวลาที่อินพุตของผู้เล่นแต่ละคนมาถึงและเวลาที่เทิร์นหยุดรอ ในทุกเทิร์น แล้วดูว่าเทิร์นที่หยุดนั้นรออินพุตของใคร ถ้ามีเซิร์ฟเวอร์ตัวกลาง ดูจากช่วงห่างการมาถึงของแพ็กเก็ตอินพุตแยกตามผู้เล่นใน packet capture ฝั่งเซิร์ฟเวอร์ได้ด้วย สัญญาณว่าใช่ ทุกเทิร์นที่หยุด อินพุตของคนคนเดียวกันมาถึงช้ากว่า input delay และช่วงนั้นจิตเตอร์หรือแพ็กเก็ตหายของคนนั้นพุ่ง สัญญาณว่าไม่ใช่ อินพุตมาครบตรงเวลาแต่ยังหยุด: น่าจะเป็นเวลาคำนวณของ PC ที่ช้าที่สุดหรือปัญหาการประมวลผลบนเซิร์ฟเวอร์ ถ้าไม่หยุดแต่ผลบนสองจอต่างกัน คือผลการคำนวณไม่ตรงกัน (desync) ให้ดู “การคำนวณเส้นทางไม่ตรงกันในการซิงก์คำสั่ง” วิธีตรวจ ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม
แหล่งอ้างอิง Deterministic Lockstep Gaffer On Games ต้องได้อินพุตของเฟรม n ครบจึงจะคำนวณได้ ถ้าช้าก็ต้องรอ ถ้าบัฟเฟอร์ playout delay ที่ดูดซับจิตเตอร์เล็กไป จะหยุดแวบ 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer นัดให้คำสั่งทำงานในอีกสองเทิร์นข้างหน้า และปรับความยาวเทิร์นตามคอมพิวเตอร์ที่ช้าที่สุดและปิง (Speed Control) A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM ตั้ง input delay (incoming delay) เท่ากับดีเลย์ “A→เซิร์ฟเวอร์ + เซิร์ฟเวอร์→B” เพื่อให้ทุกคนใช้อินพุตในจังหวะเดียวกัน
สาเหตุที่ควรดูประกอบ
ชั้นเดียวกัน: การออกแบบการซิงก์
สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (ค้าง)
ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง