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

คู่มือเกมแลค › 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 ปกติแต่มีแค่การเคลื่อนไหวของคนอื่นที่ช้า น่าจะเป็น “คอขวดการประมวลผลแพ็กเก็ตบนเมนเธรด”
วิธีตรวจ
ตรวจที่สภาพแวดล้อมฝั่งผู้เล่น

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

  1. Introduction to level of detail Unity
    ถ้าไม่มี LOD วัตถุที่เห็นเล็ก ๆ บนจอก็ยังถูกวาดด้วยความซับซ้อนเท่าเดิม LOD ช่วยลดภาระการวาด
  2. Animation Budget Allocator in Unreal Engine Epic Games
    ลดการอัปเดตแอนิเมชัน (tick) ของ skeletal mesh แบบไดนามิก เพื่อคุมเวลาที่ใช้กับแอนิเมชันให้อยู่ในงบ
  3. PresentMon Capture Application (README-CaptureApplication.md) Intel
    ใช้ FrameTime, CPUBusy และ GPUBusy แยกว่าฝั่ง CPU หรือ GPU ที่ทำให้เฟรมช้า
  4. Stat Commands in Unreal Engine Epic Games
    stat Unit: เฟรมไทม์รวม และเวลาของเธรดเกม, เธรดเรนเดอร์ และ GPU

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

ชั้นเดียวกัน: L1 โปรเซสเกมฝั่งไคลเอนต์

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (กระตุก)

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