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

Sách trắng lag game › L1 Tiến trình game phía client

V-Sync và hàng đợi render V-Sync, render queue

ID nguyên nhân cg-vsync · Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Bên ngoài (Bên ngoài)

Mở thẻ gốc có hình minh họa và thí nghiệm →

GPU xếp vài khung hình đã vẽ vào hàng đợi rồi mới đẩy ra theo chu kỳ của màn hình, và trong lúc đó thao tác bị trễ.

Vì sao Driver đồ họa xếp trước 1–3 khung hình vào hàng đợi → Dẫn đến Thao tác mất thêm chừng ấy thời gian mới hiện lên màn hình → Trên màn hình Ping thấp nhưng điều khiển thấy nặng và ì

Triệu chứng
Trễ thao tác, Giật khựng
Yếu tố
Độ trễ
Ai gặp phải
Chỉ mình tôi
Khi nào
Luôn luôn
Phụ trách
Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Bên ngoài (Bên ngoài)
Việc cần làm (Đội phát triển game)
Hỗ trợ chế độ độ trễ thấp, giảm hàng đợi khung hình, cung cấp tùy chọn giới hạn FPS thấp hơn tần số quét một chút, trên điện thoại thì bật tính năng frame pacing.
Việc cần làm (Bên ngoài)
Hướng dẫn người chơi dùng màn hình tần số quét biến thiên (VRR) kèm giới hạn FPS thấp hơn tần số quét một chút, và bật chế độ độ trễ thấp của driver đồ họa.
Con số tham khảo
Ở 60 Hz, mỗi khung hình là 16,7 ms. Nếu CPU chạy nhanh hơn GPU hoặc chu kỳ màn hình khiến hàng đợi ba khung hình (mặc định của DirectX 11) đầy, độ trễ tăng thêm 50 ms. Với V-Sync bộ đệm đôi, khung hình mất 17 ms phải chờ tới lần làm mới màn hình kế tiếp (33,3 ms), và trong lúc đó khung hình trước được hiển thị thêm một lần.
Trên đồ thị
Luôn cao ngay từ đầu · Độ trễ từ thao tác đến màn hình
Chỗ cần xem
So sánh MsClickToPhotonLatency, MsAllInputToPhotonLatency (từ lúc nhập bằng chuột, bàn phím đến lúc đẩy ra màn hình) và DisplayLatency của PresentMon khi lần lượt đổi V-Sync, chế độ độ trễ thấp, giới hạn FPS. MsPCLatency (từ lúc PC nhận input đến lúc gửi ra màn hình) chỉ được ghi khi game phát sự kiện PC Latency
Đúng nếu
khi bật V-Sync hoặc không giới hạn FPS, độ trễ này tăng thêm một, hai khung hình (vài chục ms), và giảm khi dùng chế độ độ trễ thấp hoặc giới hạn FPS thấp hơn tần số quét một chút. Ping không đổi
Loại trừ nếu
độ trễ bên trong PC thấp mà điều khiển vẫn trễ → “Độ trễ của màn hình, thiết bị nhập và tạo khung hình”; ping cao → phía mạng
Cách kiểm tra
Kiểm tra ở môi trường phía người chơi
Tìm hiểu thêm
V-Sync (đồng bộ dọc) là thiết lập chỉ đẩy khung hình mới ra đúng lúc màn hình đổi hình. Hiện tượng xé hình biến mất, nhưng thao tác bị trễ đúng bằng thời gian chờ thời điểm đó, và khi FPS tụt dưới 60 thì game nhảy qua lại giữa 60 và 30, gây giật khựng. Màn hình tần số quét biến thiên đổi hình theo lúc khung hình sẵn sàng, nên giảm được thời gian chờ này. Trên điện thoại cũng xảy ra chuyện tương tự. Game 30 FPS mà không đẩy khung hình ra đều đặn trên màn hình 60 Hz thì dù trung bình vẫn là 30 FPS, mỗi khung hình lại hiển thị lúc dài lúc ngắn như 49 ms, 16 ms, 33 ms và gây giật khựng (ví dụ trong tài liệu phát triển Android). Có thể giảm hiện tượng này bằng thư viện frame pacing của Android (làm đều khoảng cách xuất khung hình) hoặc tùy chọn tương tự của engine.

Nguồn

  1. IDXGIDevice1::SetMaximumFrameLatency Microsoft
    Số khung hình driver được xếp vào hàng đợi mặc định là 3 (1–16)
  2. Reduce latency with DXGI 1.3 swap chains Microsoft
    Present bị chặn cho tới khi hàng đợi trống, nên từ lúc vẽ xong đến lúc hiển thị phải chờ thêm gần một khung hình; giảm được bằng waitable swap chain
  3. Frame Pacing library Android (Google)
    Trên màn hình 60 Hz, không có khung hình mới thì khung hình trước được hiển thị lại; ví dụ game 30 FPS có frame time lúc dài lúc ngắn như 49 ms, 16 ms, 33 ms
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsPCLatency (từ lúc PC nhận input đến lúc gửi ra màn hình), MsClickToPhotonLatency (từ cú click chuột đến màn hình), MsAllInputToPhotonLatency (từ input bàn phím, chuột đến màn hình), DisplayLatency (từ lúc nộp khung hình đến lúc đẩy ra màn hình)
  5. PresentMon Console Application (README-ConsoleApplication.md) Intel
    MsPCLatency chỉ được ghi khi ứng dụng phát sự kiện PC Latency (--track_pc_latency); MsAllInputToPhotonLatency tính theo input bàn phím, chuột

Nguyên nhân nên xem cùng

Cùng tầng: L1 Tiến trình game phía client

Nguyên nhân ở tầng khác gây cùng triệu chứng (Trễ thao tác)

Xem thẻ gốc có hình minh họa và thí nghiệm