คู่มือเกมแลค › L1 โปรเซสเกมฝั่งไคลเอนต์
ภาระการเรนเดอร์ตัวละครจำนวนมาก Render/animation cost of crowds
ID สาเหตุ cg-crowd · ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)
เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →
เมื่อคนหลายร้อยคนเข้ามาอยู่ในจอเดียว เช่น ศึกชิงปราสาทหรือเวิลด์บอส ลำพังต้นทุนการวาดภาพก็รับไม่ไหวแล้ว
ทำไม คนหลายร้อยคนและเอฟเฟกต์ซ้อนกันอยู่ในจอเดียว → ผลคือ ต้นทุนของแอนิเมชัน, เงา, ป้ายชื่อ และเอฟเฟกต์ เพิ่มขึ้นตามจำนวนคน → บนหน้าจอ FPS ตกจาก 60 → 15 ทุกการเคลื่อนไหวกระตุก และอินพุตก็ช้าตาม
- อาการ
- กระตุก, อินพุตดีเลย์
- ปัจจัย
- การหยุดชะงัก
- ใครเจอ
- บางจุด/บางแชนแนล, เราคนเดียว
- เกิดเมื่อไร
- ตอนคนแห่มารวมกัน
- ผู้รับผิดชอบ
- ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)
- งานฝั่งทีมพัฒนาเกม
- ลดรายละเอียดตามระยะ (LOD), จำกัดจำนวนคนที่แสดง, เพิ่มตัวเลือกลดเอฟเฟกต์, ลดความถี่การอัปเดตแอนิเมชัน
- ตัวเลขที่ควรรู้
- ต่อให้ใช้แค่ 0.02–0.1 ms ต่อตัวละคร 1 ตัว ถ้ามี 300 ตัวก็เป็น 6–30 ms งบเวลาต่อเฟรมที่ 60 FPS คือ 16.7 ms แค่ส่วนนี้ก็กินไปเกิน 1/3 แล้ว และถ้ามากก็เกินงบ
- บนกราฟ
- สูงตามจำนวนคนและโหลด · เฟรมไทม์, จำนวนตัวละครบนจอ
- จุดที่ต้องดู
- เทียบเฟรมไทม์และ CPUBusy/GPUBusy จาก PresentMon ก่อนและหลังศึกชิงปราสาทหรือเวิลด์บอส ใน development build ใช้ stat Unit ของ Unreal (เวลาของเธรดเกม, เธรดเรนเดอร์ และ GPU)
- สัญญาณว่าใช่
- ยิ่งคนบนจอเพิ่ม เฟรมไทม์ยิ่งสูงตาม และดีขึ้นทันทีเมื่อเปิดตัวเลือกจำกัดจำนวนคนที่แสดงหรือลดเอฟเฟกต์
- สัญญาณว่าไม่ใช่
- พุ่งโดยไม่เกี่ยวกับจำนวนคน: น่าจะเป็น “เฟรมไทม์พุ่ง” หรือ “GC ฝั่งไคลเอนต์” ถ้า FPS ปกติแต่มีแค่การเคลื่อนไหวของคนอื่นที่ช้า น่าจะเป็น “คอขวดการประมวลผลแพ็กเก็ตบนเมนเธรด”
- วิธีตรวจ
- ตรวจที่สภาพแวดล้อมฝั่งผู้เล่น
แหล่งอ้างอิง
- Introduction to level of detail Unity
ถ้าไม่มี LOD วัตถุที่เห็นเล็ก ๆ บนจอก็ยังถูกวาดด้วยความซับซ้อนเท่าเดิม LOD ช่วยลดภาระการวาด - Animation Budget Allocator in Unreal Engine Epic Games
ลดการอัปเดตแอนิเมชัน (tick) ของ skeletal mesh แบบไดนามิก เพื่อคุมเวลาที่ใช้กับแอนิเมชันให้อยู่ในงบ - PresentMon Capture Application (README-CaptureApplication.md) Intel
ใช้ FrameTime, CPUBusy และ GPUBusy แยกว่าฝั่ง CPU หรือ GPU ที่ทำให้เฟรมช้า - Stat Commands in Unreal Engine Epic Games
stat Unit: เฟรมไทม์รวม และเวลาของเธรดเกม, เธรดเรนเดอร์ และ GPU
สาเหตุที่ควรดูประกอบ
ชั้นเดียวกัน: L1 โปรเซสเกมฝั่งไคลเอนต์
สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (กระตุก)
ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง