คู่มือเกมแลค › ปัญหาที่เกิดกับบางคนเท่านั้น
จำกัดการประมวลผลของหน้าต่างเบื้องหลัง Background window throttling
ID สาเหตุ pt-background · ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม) · ร่วมกับ ภายนอก (ภายนอก)
เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →
สำหรับไคลเอนต์ที่เป็นหน้าต่างเบื้องหลัง ตัวเกม เอนจิน และ OS จะลดเฟรมและการประมวลผลลง แพ็กเก็ตที่ได้รับจึงประมวลผลไม่ทันจนกองรอหรือล้น
ทำไม การจำกัดเฟรมของหน้าต่างเบื้องหลังจากออปชันเกมหรือไดรเวอร์การ์ดจอ (เช่น ไดรเวอร์ NVIDIA ตั้งได้ตั้งแต่ 20–200 เฟรมต่อวินาที), โหมดประหยัดพลังงาน, การตั้งค่าหยุดทำงานเบื้องหลังของเอนจิน OS เองก็ให้ CPU/GPU กับหน้าต่างที่อยู่ด้านหน้า (foreground) ก่อน → ผลคือ จำนวนแพ็กเก็ตที่ประมวลผลต่อเฟรมลดลงจนคิวสะสม และถ้า receive buffer ล้นจะถูกทิ้ง → บนหน้าจอ เมื่อดึงหน้าต่างขึ้นมาด้านหน้า ทุกอย่างโผล่มารวดเดียว หรือ NPC บางตัวไม่โผล่เลย
- อาการ
- มองไม่เห็น/ตัวผี, กรอเร็ว, หลุด
- ปัจจัย
- การหยุดชะงัก, แพ็กเก็ตหาย
- ใครเจอ
- ไคลเอนต์เดียวในเครื่องที่เปิดหลายจอ
- เกิดเมื่อไร
- หลังอยู่เฉย ๆ สักพัก, ตลอดเวลา
- ผู้รับผิดชอบ
- ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม) · ร่วมกับ ภายนอก (ภายนอก)
- งานฝั่งทีมพัฒนาเกม
- รับข้อมูลเครือข่ายต่อเนื่องในเธรดที่แยกจากลูปของเกม, รับประกันการประมวลผลขั้นต่ำแม้อยู่เบื้องหลัง, เปิดการตั้งค่าให้เอนจินทำงานเบื้องหลัง (Unity คือ runInBackground)
- งานฝั่งภายนอก
- แนะนำให้ผู้เล่นปิดการจำกัดเฟรมของหน้าต่างเบื้องหลังในไดรเวอร์การ์ดจอ และปิดโหมดประหยัดพลังงานของ PC
- ตัวเลขที่ควรรู้
- ใน Unity ถ้าปิดการตั้งค่า runInBackground ลูปของเกมจะหยุดทันทีที่หน้าต่างเสียโฟกัส ถ้ารับแพ็กเก็ตเฉพาะในลูปนั้น ระหว่างนั้นแพ็กเก็ตจะไม่ถูกประมวลผลเลย
- บนกราฟ
- ขาดช่วงแล้วมารวดเดียว · ช่วงห่างระหว่างเฟรมของไคลเอนต์, จำนวนแพ็กเก็ตที่ประมวลผลต่อเฟรม
- จุดที่ต้องดู
- บน PC เดียวกัน ให้หน้าต่างหนึ่งอยู่ด้านหน้า อีกหน้าต่างอยู่ด้านหลัง แล้วสลับบทบาทเปรียบเทียบ วัดช่วงห่างระหว่างเฟรมของทั้งสองโปรเซสด้วย PresentMon ถ้ามี log ฝั่งเกม ให้ดูสถานะโฟกัสของหน้าต่างและจำนวนแพ็กเก็ตที่ประมวลผลในแต่ละเฟรม
- สัญญาณว่าใช่
- เฉพาะตอนเป็นหน้าต่างเบื้องหลังที่ช่วงห่างระหว่างเฟรมเพิ่มขึ้นมาก (ถ้าเป็นการจำกัดของไดรเวอร์ จะแบนราบที่ช่วงห่างที่ตรงกับจำนวนเฟรมที่ตั้งไว้) หรือการประมวลผลหยุด และเมื่อสลับหน้าต่าง ปัญหาก็ย้ายไปอีกไคลเอนต์
- สัญญาณว่าไม่ใช่
- หน้าต่างที่อยู่ด้านหน้าก็เป็นเหมือนกัน: ไม่ได้เกิดจากการจำกัดของหน้าต่างเบื้องหลัง ถ้าผิดปกติแต่ไคลเอนต์ตัวเดิมเสมอโดยไม่เกี่ยวกับตำแหน่งหน้าต่าง น่าจะเป็นตัวเลือกการแสดงผลหรือเวอร์ชันต่างกัน
- วิธีตรวจ
- ตรวจที่สภาพแวดล้อมฝั่งผู้เล่น
แหล่งอ้างอิง
- Application.runInBackground Unity
ค่าเริ่มต้นของ runInBackground คือ false และเมื่อเป็นเช่นนั้นแอปจะหยุดชั่วคราวเมื่ออยู่เบื้องหลัง - Manage 3D Settings (reference) — NVIDIA Control Panel Help NVIDIA
Background Application Max Frame Rate: จำกัดเฟรมสูงสุดของเกมที่อยู่เบื้องหลังไว้ที่ 20–200 เฟรมต่อวินาที - Priority Boosts Microsoft
Windows เพิ่ม priority ของโปรเซสที่เป็นหน้าต่าง foreground ให้ไม่ต่ำกว่าโปรเซสเบื้องหลัง - PresentMon README Intel
เครื่องมือเก็บเฟรมไทม์ของ CPU, GPU และจอแสดงผลของแอปกราฟิกบน Windows แยกตามแอป
สาเหตุที่ควรดูประกอบ
ชั้นเดียวกัน: ปัญหาที่เกิดกับบางคนเท่านั้น
สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (มองไม่เห็น/ตัวผี)
ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง