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

คู่มือเกมแลค › ปัญหาที่เกิดกับบางคนเท่านั้น

สแนปช็อตตั้งต้น (baseline) หาย Lost baseline for delta compression

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

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

ในแบบที่เซิร์ฟเวอร์ส่ง “เฉพาะส่วนที่ต่างจากครั้งก่อน” ถ้าข้อมูลเต็ม (baseline) ที่ส่งครั้งแรกหายไป ก็จะใช้ส่วนเปลี่ยนแปลงที่ตามมาไม่ได้

ทำไม แพ็กเก็ตข้อมูลเต็ม (baseline) ของเอนทิตีหาย หรือถูกทิ้งก่อนประมวลผล → ผลคือ ไคลเอนต์ไม่มีเป้าหมายให้ใช้ส่วนเปลี่ยนแปลงที่ตามมา จึงไม่สนใจ → บนหน้าจอ มองไม่เห็นเอนทิตีนั้น หรือผ่านไปนานแล้วจู่ ๆ ก็โผล่ขึ้นมา

อาการ
มองไม่เห็น/ตัวผี, วาร์ป
ปัจจัย
แพ็กเก็ตหาย
ใครเจอ
ไคลเอนต์เดียวในเครื่องที่เปิดหลายจอ, เราคนเดียว
เกิดเมื่อไร
สุ่มเป็นครั้งคราว
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
เซิร์ฟเวอร์: ต้องส่ง baseline ซ้ำจนกว่าจะได้รับ ACK (สัญญาณยืนยันการรับ), สร้างส่วนเปลี่ยนแปลงเทียบกับ baseline ที่ไคลเอนต์ยืนยันว่าได้รับแล้วเท่านั้น ไคลเอนต์: ส่ง ACK ของ baseline หลังนำไปใช้จริงแล้ว, ถ้าได้รับส่วนเปลี่ยนแปลงของเอนทิตีที่ไม่รู้จัก ให้ขอจากเซิร์ฟเวอร์ใหม่
บนกราฟ
พุ่งแบบสุ่มเป็นครั้งคราว · จำนวนครั้งที่ได้รับส่วนเปลี่ยนแปลงของเอนทิตีที่ไม่รู้จัก
จุดที่ต้องดู
เทียบจำนวนครั้งและ entity ID ที่ไคลเอนต์ทิ้งส่วนเปลี่ยนแปลงเพราะไม่มี baseline กับเวลาที่เซิร์ฟเวอร์ส่ง baseline ของเอนทิตีนั้นและเวลาที่ได้รับ ACK จำลองอาการในสภาพแวดล้อม dev โดยใส่แพ็กเก็ตหาย (loss ของ tc netem, อัตราแพ็กเก็ตหายใน network emulation ของ Unreal)
สัญญาณว่าใช่
สำหรับเอนทิตีที่มองไม่เห็น เซิร์ฟเวอร์ส่ง baseline แล้วแต่ไม่ได้รับ ACK ก็ยังส่งแต่ส่วนเปลี่ยนแปลงต่อไป และไคลเอนต์ทิ้งส่วนเปลี่ยนแปลงนั้น
สัญญาณว่าไม่ใช่
baseline ได้รับ ACK และนำไปใช้บนไคลเอนต์แล้วแต่ยังมองไม่เห็น: น่าจะเป็น “ข้อความแจ้งการออกไปหาย (ตัวผี)” หรือ “สับสนจากการนำ entity ID กลับมาใช้ซ้ำ”
วิธีตรวจ
ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม

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

  1. Snapshot Compression Gaffer On Games
    ส่วนเปลี่ยนแปลงต้องสร้างเทียบกับ baseline ที่อีกฝ่ายยืนยัน (ack) ว่าได้รับแล้วเท่านั้น และสถานะเริ่มต้นส่งแยกต่างหาก
  2. Quake III Arena source: code/server/sv_snapshot.c id Software
    ทำ delta compression โดยใช้สแนปช็อตที่ไคลเอนต์ยืนยันแล้วเป็น baseline ถ้า baseline เก่าเกินไปจะส่งสแนปช็อตเต็ม
  3. tc-netem(8) — Linux manual page iproute2
    เครื่องมือทดสอบที่ใส่ดีเลย์/จิตเตอร์ (delay TIME JITTER) และการหาย (loss random PERCENT) ให้แพ็กเก็ตขาออก เพื่อจำลองเครือข่ายจริง
  4. Using Network Emulation in Unreal Engine Epic Games
    ทดสอบโดยใส่ดีเลย์ต่ำสุด/สูงสุดและอัตราแพ็กเก็ตหายให้เซิร์ฟเวอร์และไคลเอนต์, ในคอนโซลตั้งค่าแบบ NetEmulation.PktLag

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

ชั้นเดียวกัน: ปัญหาที่เกิดกับบางคนเท่านั้น

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

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