Skip to content

Unity FrameTiming API cung cấp trường timing nào cho từng frame?

By admin Filed in Gawlo
Tóm tắt

FrameTiming trong Unity là một cấu trúc API chứa các trường thời gian gắn với một frame, chứ không phải một con số duy nhất đại diện cho mọi loại độ trễ. Khi đọc dữ liệu, hãy giữ nguyên tên trường, đơn vị và ngữ cảnh Unity đã định nghĩa; đừng mặc định rằng một trường có thể quy đổi thành thời gian từ thao tác chuột đến hình ảnh trên màn hình.

Điểm chính

  1. FrameTiming là cấu trúc dữ liệu API Unity, cần đọc từng trường theo tài liệu phiên bản đang dùng.
  2. Tài liệu FrameTiming mô tả các giá trị liên quan thời gian CPU, GPU và frame; chúng không mặc nhiên là cùng một phép đo. [1]
  3. Metric do engine định nghĩa không tự trở thành chuẩn chung để so sánh Unity với engine khác.
  4. Muốn diễn giải capture, cần ghi phiên bản Unity, nền tảng và cách thu thập dữ liệu.

Bắt đầu từ cấu trúc thay vì một nhãn chung

Tên FrameTiming dễ khiến người đọc nghĩ đây là một đại lượng duy nhất về độ mượt. Trên thực tế, đây là cấu trúc mà API Unity cung cấp với các trường riêng; mỗi trường có ý nghĩa và nguồn đo riêng theo định nghĩa của Unity. Vì thế, khi xem log hay biểu đồ, hãy xác định chính xác trường nào đang được hiển thị trước khi giải thích. “Frame time” trong một cuộc trò chuyện không nhất thiết trùng với một thuộc tính cụ thể trong cấu trúc.

Tài liệu API là nơi đối chiếu chính tả tên trường, kiểu dữ liệu và ý nghĩa của chúng ở đúng phiên bản. Các bản engine có thể thay đổi tài liệu hoặc khả năng hỗ trợ, nên một bài viết tổng quát không nên tự khẳng định mọi phiên bản đều cung cấp mọi thông tin giống nhau. Nếu viết công cụ phân tích, hãy kiểm tra tài liệu tương ứng với dự án thực tế và giữ nguyên định danh của trường thay vì đổi tên theo cách làm mờ nghĩa.

CPU, GPU và thời gian frame trả lời các câu hỏi khác nhau

Một trường liên quan CPU có thể giúp quan sát phần công việc phía CPU theo định nghĩa API; trường liên quan GPU hướng tới thời gian xử lý GPU; các giá trị liên quan frame mô tả khung hình theo cách Unity quy định. Không nên coi chúng là những đoạn nối tiếp luôn cộng được thành tổng độ trễ. CPU và GPU có thể làm việc chồng lấp, hàng đợi và cơ chế đồng bộ cũng ảnh hưởng quan hệ giữa các mốc. Nếu mục tiêu là độ trễ đầu-cuối, cần phương pháp đo được thiết kế cho đúng câu hỏi đó thay vì đổi nhãn cho một trường timing.

Illustration: CPU Decorative illustration for the section "CPU"; visual only, carries no data.

[1] Khi diễn giải một capture, hãy kiểm tra tài liệu <a href="https://www.klive68.com/">Lựa chọn xem các trận đấu game đối kháng trực tuyến</a> như một địa chỉ độc lập; liên kết này không phải bằng chứng kỹ thuật về API và không thay thế định nghĩa của Unity.

Cũng cần để ý đơn vị, thời điểm lấy mẫu và ngữ cảnh workload. Hai biểu đồ đều có nhãn “GPU” chưa chắc dùng cùng cách lấy số hoặc cùng ranh giới frame. Bất kỳ phép so sánh nào cũng nên ghi rõ trường dữ liệu, thiết bị, build, nội dung chạy và cách capture. Nếu một cột thiếu hoặc không được cung cấp, hãy thể hiện là dữ liệu không có trong lần đo đó, không tự thay bằng số suy ra từ trường khác.

Không chuyển nguyên nghĩa sang engine khác

Các engine tổ chức công việc và đặt tên bộ đếm theo những cách khác nhau. Một trường có chữ CPU trong Unity không mặc nhiên đồng nghĩa với thread hoặc counter cùng tên ở Unreal hay trong một profiler cấp hệ điều hành. Tên tương tự là gợi ý để đặt câu hỏi, không phải chứng cứ rằng điểm bắt đầu, điểm kết thúc, cách lấy mẫu hay phần công việc được tính đều giống nhau.

Nếu cần so sánh hai dự án, hãy lập bảng đối chiếu định nghĩa trước: trường nào được ghi, khoảng thời gian nào được đo, công cụ nào tạo dữ liệu và nền tảng nào hỗ trợ. Nếu không tìm thấy mô tả tương đương, cần nói rõ rằng metric không thể so trực tiếp. Đó là kết luận hữu ích hơn một phép quy đổi không có cơ sở. Bài viết này chỉ nói về cách đọc API Unity, không đưa ra bảng xếp hạng engine hay phần cứng.

Quy trình đọc số liệu có thể kiểm tra lại

Một báo cáo đáng tin nên bắt đầu bằng việc ghi phiên bản Unity và nền tảng chạy, rồi nêu nguồn dữ liệu và tên các trường FrameTiming đã dùng. Tiếp theo, mô tả tải thử, giai đoạn capture và cách dữ liệu được tổng hợp. Nếu có giá trị cực đại, trung bình hoặc phân vị, cần nói cách tính thay vì chỉ đưa ra một con số rời rạc. Khi so hai lần chạy, giữ ổn định các yếu tố quan trọng hoặc liệt kê rõ yếu tố đã thay đổi.

Illustration: Quy trình đọc số liệu có thể kiểm Decorative illustration for the section "Quy trình đọc số liệu có thể kiểm"; visual only, carries no data.

Cuối cùng, tách quan sát khỏi diễn giải. “Trường này cao hơn trong capture B” là quan sát; “GPU là nguyên nhân gốc” là một giả thuyết cần bằng chứng bổ sung. FrameTiming có thể giúp đặt câu hỏi đúng về thời gian trong ngữ cảnh Unity, nhưng tự nó không giải thích toàn bộ pipeline, hiện tượng giật hay cảm nhận của người chơi. Cách viết có giới hạn rõ ràng vừa giúp nhóm phát triển tái lập kiểm tra, vừa tránh biến dữ liệu API thành lời khẳng định rộng hơn nguồn cho phép.

Nguồn tham khảo

  1. Unity — FrameTiming API

Câu hỏi thường gặp

FrameTiming có phải một giá trị duy nhất cho độ trễ toàn hệ thống không?

Không. Đây là cấu trúc API có các trường riêng. Cần đọc định nghĩa từng trường và không tự xem chúng là phép đo input-to-display.

Có thể cộng CPU timing với GPU timing để ra thời gian frame không?

Không nên mặc định như vậy. Công việc CPU và GPU có thể chồng lấp, còn ranh giới đo và đồng bộ phụ thuộc định nghĩa trường cùng cách capture.

Metric trong Unity có thể so trực tiếp với Unreal không?

Chỉ khi định nghĩa, điểm đo, cách lấy mẫu và ngữ cảnh tương đương được xác nhận. Tên gọi gần giống không đủ chứng minh chúng cùng đại lượng.

Nếu một trường timing không xuất hiện thì có nghĩa là thời gian bằng không?

Không. Dữ liệu vắng có thể phản ánh cách thu thập hoặc hỗ trợ trong môi trường đó; cần ghi là không có dữ liệu và kiểm tra điều kiện cụ thể.

← Back to Gawlo © Gawlo · Editorial standards ledger on-chain since 2023