Overdraw phát sinh ở đâu sau khi nhiều primitive phủ cùng vùng?
Overdraw có thể xuất hiện khi nhiều bề mặt tạo công việc fragment chồng lên cùng vùng màn hình, nhưng nhìn thấy nhiều primitive trong cảnh chưa đủ để kết luận một mức chi phí cố định. Cần xem chúng có thực sự phủ cùng pixel, trạng thái độ sâu và phần công việc phía sau, rồi đo trên đúng cảnh, API và cấu hình. Rasterizer stage của Direct3D giúp giải thích đường đi khái quát; nó không đại diện cho mọi engine hay mọi GPU.
Điểm chính
- Overdraw liên quan đến công việc tạo ra từ các bề mặt chồng phủ, không chỉ số lượng đối tượng nhìn thấy.
- Phân biệt primitive, fragment và pixel để tránh gộp các giai đoạn khác nhau.
- Depth, clipping, viewport và trạng thái rasterizer ảnh hưởng cách hình học đi tiếp trong pipeline.
- Dùng profiler và phép thử có kiểm soát; không suy hiệu năng từ một ảnh hoặc một bộ đếm riêng lẻ.
- Tài liệu Rasterizer stage mô tả khái niệm Direct3D, không phải mô hình đầy đủ cho mọi API.
Tách hình học khỏi công việc fragment
Primitive là đơn vị hình học như tam giác được đưa vào pipeline; rasterization biến phần hình học phù hợp thành các vị trí mẫu hoặc fragment có thể được xử lý tiếp. Khi các bề mặt nằm phía trước và phía sau cùng chiếu lên một khu vực màn hình, phần chồng phủ có thể tạo thêm công việc. Đó là trực giác hữu ích về overdraw, nhưng cần tránh hiểu nó như một bộ đếm đơn giản rằng cứ thêm một đối tượng là mọi pixel tốn thêm đúng một lần. Kích thước chiếu, góc nhìn, vùng bị che và trạng thái pipeline đều làm thay đổi lượng công việc thực tế.
Một bề mặt lớn ở gần máy quay có thể phủ nhiều vùng, trong khi nhiều chi tiết nhỏ có thể phủ ít pixel. Bề mặt bị loại trước một giai đoạn, vùng nằm ngoài phạm vi cần vẽ hoặc các thao tác độ sâu cũng ảnh hưởng phần công việc tiếp diễn. Vì vậy, số lượng triangle trong cảnh không tự cho biết overdraw, còn một khung hình có nhiều lớp trong suốt có thể tạo đặc điểm khác với hình học đục. Hãy xác định loại đối tượng, vật liệu, độ trong suốt và vùng nhìn trước khi diễn giải kết quả.
Rasterizer stage làm gì trong phạm vi Direct3D?
Tài liệu Microsoft mô tả Rasterizer stage của Direct3D và các trạng thái liên quan như clipping, culling, viewport, scissor và fill mode. Những khái niệm này giúp hiểu hình học được đưa vào vùng raster hóa thế nào; chúng không đồng nghĩa mỗi trạng thái đều trực tiếp là một phép đo overdraw. [1] Chẳng hạn, viewport ánh xạ tọa độ sang vùng đích, còn scissor giới hạn vùng pixel được xét. Culling có thể loại primitive theo trạng thái và hướng, trong khi kiểm tra độ sâu có vai trò khác trong việc quyết định phần nào được giữ lại.
Điều này cũng cho thấy vì sao cần đặt câu hỏi đúng. Nếu mục tiêu là giảm công việc fragment, hãy xem đoạn nào trong pipeline đang tốn thời gian và loại nội dung nào đóng góp. Thay đổi culling có thể giảm lượng hình học được xử lý ở những trường hợp thích hợp, nhưng không thể mặc định rằng mọi cảnh đều bị nghẽn ở rasterizer. Một bottleneck có thể nằm ở CPU, vertex processing, shader, băng thông bộ nhớ, đồng bộ hoặc công việc khác. Tên gọi “overdraw” không xác định nguyên nhân duy nhất.
Đo đúng cảnh và tránh kết luận tuyệt đối
Để so sánh, giữ nguyên độ phân giải, camera, nội dung, thiết lập vật liệu, phiên bản build và cấu hình thiết bị. Thay một biến mỗi lần, ghi lại cách lấy mẫu và quan sát nhiều lượt thay vì dựa vào một frame bất thường. Nếu profiler cung cấp chế độ xem overdraw hoặc thống kê fragment, tìm hiểu chính xác đại lượng được tính, phạm vi API và giới hạn của công cụ. Một hình tô màu có thể làm nổi vùng chồng phủ về mặt trực quan, nhưng màu đó không tự chuyển thành mili giây hay phần trăm hiệu năng.
Khi nghi ngờ một nhóm vật thể gây chi phí, thử tắt hoặc thay đổi nhóm đó trong bản thử nghiệm, rồi so sánh cùng cảnh và cùng thiết lập. Nếu kết quả thời gian render thay đổi, đó là bằng chứng cho môi trường cụ thể, không đảm bảo mức cải thiện tương tự ở mọi GPU hoặc game. Tránh đưa ra một “ngưỡng overdraw an toàn” chung nếu công cụ và nội dung không xác định ngưỡng ấy. Có thể theo dõi lịch thi đấu bóng đá tại Xem nhanh lịch thi đấu bóng đá tại KLIVE, nhưng liên kết này chỉ dẫn tới nội dung thể thao, không phải nguồn đo đồ họa.
Từ quan sát đến quyết định tối ưu
Một quy trình hữu ích bắt đầu bằng việc xác nhận vấn đề có thể lặp lại. Ghi cảnh, góc camera, cấu hình, phiên bản, công cụ và điều kiện đo; sau đó dùng profiler để xem thời gian ở đâu và chọn giả thuyết có thể kiểm chứng. Nếu vùng chồng phủ lớn, có thể kiểm tra thứ tự vẽ, vật liệu trong suốt, mức chi tiết hoặc cách bố trí hình học, nhưng phải cân nhắc ảnh hưởng thị giác và đặc tính engine. Không xóa lớp chỉ vì chúng chồng nhau trên ảnh; một lớp có thể cần thiết cho kết quả cuối.
Nếu thay đổi không cải thiện chỉ số liên quan, quay lại trạng thái ban đầu và thử giả thuyết khác. Tách số liệu GPU khỏi cảm nhận tổng thể: một pass ngắn hơn không nhất thiết làm khung hình hoàn chỉnh nhanh hơn nếu khâu khác đang giới hạn. Cũng không nên so trực tiếp hai công cụ hoặc hai API như thể chúng đếm cùng đơn vị. Ghi rõ điều gì đã đo, điều gì chỉ suy luận và phạm vi áp dụng giúp kết luận có thể tái lập thay vì biến một tối ưu cục bộ thành lời khuyên phổ quát.
Nguồn tham khảo
Câu hỏi thường gặp
Nhiều triangle hơn có luôn đồng nghĩa overdraw cao hơn không?
Không. Overdraw phụ thuộc diện tích chiếu, vùng chồng phủ, trạng thái pipeline và loại nội dung; số triangle riêng lẻ không đủ để xác định.
Overdraw có đồng nghĩa pixel shader chạy nhiều lần cho mọi lớp không?
Không thể kết luận như vậy trong mọi trường hợp. Culling, clipping, depth và các tối ưu theo API hoặc phần cứng ảnh hưởng công việc thực tế.
Rasterizer stage của Direct3D có đại diện mọi đồ họa game không?
Không. Đây là tài liệu theo API Direct3D; các engine và API khác có thể tổ chức chi tiết khác.
Stop guessing. Start measuring.
Every tune developed and validated on our in-house Dynapack — gains you can verify on the screen and feel on the road.