한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

คู่มือเกมแลค › การออกแบบการซิงก์

การตัดสินผลที่ไม่มี lag compensation Server-now hit validation

ID สาเหตุ sy-no-lagcomp · ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)

เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →

ถ้าเซิร์ฟเวอร์ตัดสินการโดนโดยดูแค่ “ตำแหน่งบนเซิร์ฟเวอร์ ณ ตอนนี้” ผลการตัดสินจะไม่ตรงกับที่เราเห็นบนจอ

ทำไม คู่ต่อสู้บนจอเราอยู่ในตำแหน่งย้อนหลังไปประมาณ 0.2 วินาที (เมื่อปิง 150 ms และ interpolation 100 ms) → ผลคือ เซิร์ฟเวอร์ตัดสินจากตำแหน่งปัจจุบัน ตรงที่เราเล็งไว้จึงไม่มีเป้าแล้ว → บนหน้าจอ ยิงโดนแน่ ๆ แต่พลาด ต้องยิงดักหน้าเป้าที่กำลังเคลื่อนที่

อาการ
กดไม่ติด/โรลแบ็ค
ปัจจัย
ความหน่วง
ใครเจอ
เราคนเดียว
เกิดเมื่อไร
ตอนทำแอ็กชันบางอย่าง
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
เซิร์ฟเวอร์: ย้อนเวลาไปยังจังหวะที่ผู้โจมตีเห็นแล้วจึงตัดสิน (lag compensation) หรือเปลี่ยนเป็นระบบล็อกเป้า ไคลเอนต์: ตอนโจมตีให้ส่งจังหวะที่ตัวเองเห็นอยู่ (เวลาเซิร์ฟเวอร์ที่กำลัง interpolate) ไปด้วย
บนกราฟ
สูงเฉพาะบางกลุ่ม · อัตราการโจมตีโดนเป้าที่เคลื่อนที่ (แยกตามช่วงปิง)
จุดที่ต้องดู
บันทึกเวลาโจมตี, ตำแหน่งเป้าบนจอผู้โจมตี (ค่าที่ไคลเอนต์ส่งมา), ตำแหน่งเป้าบนเซิร์ฟเวอร์ที่ใช้ตัดสิน และ RTT ของผู้โจมตีลงใน log การตัดสินของเซิร์ฟเวอร์ ใน dev build ถ้าวาดตำแหน่งที่เซิร์ฟเวอร์ใช้ตัดสินซ้อนบนจอไคลเอนต์จะเห็นทันที
สัญญาณว่าใช่
ในการตัดสินที่พลาด ระยะห่างระหว่างสองตำแหน่งประมาณความเร็วเป้า × (RTT ของผู้โจมตี + เวลา interpolation) และยิ่งปิงสูง อัตราโดนลดลงเฉพาะกับเป้าที่เคลื่อนที่
สัญญาณว่าไม่ใช่
เป้าที่ยืนนิ่งก็พลาด: น่าจะเป็นปัญหา hitbox หรือการตรวจการชน ถ้าย้อนเวลาแล้วยังคลาด ให้ดูว่าไคลเอนต์แจ้งเวลา interpolation ให้เซิร์ฟเวอร์ผิดหรือไม่
วิธีตรวจ
ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม

แหล่งอ้างอิง

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    ถ้าไม่มี lag compensation ต้องยิงดักหน้าเท่ากับดีเลย์, lag compensation คือการที่เซิร์ฟเวอร์ย้อนเวลากลับเท่ากับดีเลย์และเวลา interpolation แล้วจึงตัดสิน
  2. Peeking into VALORANT's Netcode Riot Games
    เซิร์ฟเวอร์ย้อนกลับไปยังสถานะเกมที่ผู้เล่นเห็นตอนยิงแล้วตัดสินการโดน, ไคลเอนต์ส่งเวลาของ simulation ที่ตัวเองเห็นไปด้วย
  3. Source SDK 2013: player_lagcompensation.cpp Valve
    เวลาที่เอนจิน Source ย้อนกลับ = ดีเลย์ของเครือข่าย + เวลา interpolation

สาเหตุที่ควรดูประกอบ

ชั้นเดียวกัน: การออกแบบการซิงก์

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (กดไม่ติด/โรลแบ็ค)

ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง