Định nghĩa kỹ thuật của đợt sprite trên mạng là gì?


17

Nền tảng và ngôn ngữ bất khả xâm phạm, làm thế nào để sprite được xác định? Dường như có nhiều kỹ thuật khác nhau để giảm bớt khối lượng công việc khi vẽ và chúng thường được gộp lại với "đợt". Nó xảy ra với tôi rằng có thể không có câu trả lời thực sự, nhưng có lẽ ai đó ở đây đã tìm thấy thứ mà tôi không có.

Câu trả lời:


14

Về mặt kỹ thuật, "tạo khối" đang đặt nhiều hành động và dữ liệu của chúng vào một cấu trúc dữ liệu để tất cả có thể được thực thi cùng một lúc thay vì riêng lẻ.

Nút thắt lớn nhất của GPU hiện đại không phải là sức mạnh hoạt động của chúng, mà là sự giao tiếp giữa trò chơi của bạn chạy trên CPU và GPU. Mỗi gói dữ liệu được gửi tới GPU có một chi phí chung, nhưng tổng chi phí của một gói nhỏ chỉ lớn bằng một gói lớn, do đó, sẽ là một lợi ích lớn khi bạn gửi một gói lớn thay vì một trăm gói nhỏ hơn. Và đó là những gì theo đợt; làm một gói lớn trong số tất cả những gói nhỏ hơn

Batching đặc biệt hữu ích cho các sprite vì lượng dữ liệu nhỏ một cách lố bịch trên mỗi sprite; bốn đỉnh và bốn hợp âm tex. Vì vậy, chi phí chung của gói nhỏ là tương đối lớn.


1
+1 để đề cập đến vấn đề độ trễ; đây là nguyên tắc rất giống với áp dụng cho lưu lượng truy cập mạng và I / O của đĩa - trong trường hợp chung, rất ít lô lớn bỏ qua nhiều lô nhỏ.
Maximus Minimus

9

Tạo khối Sprite là phương pháp gửi nhiều họa tiết cho GPU chỉ bằng một lệnh gọi rút thăm.

Cả hai câu trả lời khác đều chỉ ra điểm thực sự của việc này: giảm thiểu thay đổi trạng thái và gửi lệnh GPU. Nếu bạn có 100 họa tiết tôi vẽ, mỗi họa tiết có kết cấu riêng, phần cứng chỉ có thể xử lý một sprite mỗi lần. Hàng chục hoặc thậm chí hàng ngàn lõi shader cuối cùng hầu như không được sử dụng và GPU dành quá nhiều thời gian để cấu hình trạng thái kết xuất của nó cho các công tắc kết cấu.

Nếu bạn đặt tất cả các hình ảnh sprite của bạn vào một tập bản đồ, bạn có thể giảm thiểu các thay đổi trạng thái cần thiết để vẽ. Trình điều khiển thậm chí có thể tự động kết hợp các yêu cầu vẽ sprite thành một đợt duy nhất để phần cứng có thể được sử dụng đầy đủ, nhưng điều này không được đảm bảo hoặc có khả năng.

Nếu bạn sử dụng tập bản đồ sprite và sau đó tạo một VBO duy nhất với tất cả các hình tứ giác của bạn được điền vào đó, hãy thực hiện một yêu cầu rút thăm duy nhất với dữ liệu đó, bạn được đảm bảo rằng phần cứng được sử dụng đầy đủ và tất cả các họa tiết của bạn được hiển thị song song.

Sau đó, việc tạo khối Sprite đang thực hiện điều đó: đưa càng nhiều sprite của bạn vào một VBO duy nhất bằng cách sử dụng một tập bản đồ được gửi tới GPU với một lệnh gọi rút thăm, tối đa hóa việc sử dụng GPU.

Có nhiều cách khác để thực hiện việc tạo khối sprite (như kích hoạt phần cứng, sử dụng trình tạo bóng hình học, v.v.) và các lợi ích khác để làm như vậy, nhưng ý chính của nó là việc tạo khối có nghĩa là vẽ nhiều đối tượng trên mỗi lệnh gọi.


-1: Tối thiểu hóa các thay đổi trạng thái không phải là "điểm" của đợt. Đó chỉ là một yêu cầu bắt nguồn từ cách cấu trúc OpenGL. (Đó là điểm của kết cấu, nhưng những người không được yêu cầu.) Câu hỏi đặc biệt yêu cầu định nghĩa "Nền tảng và ngôn ngữ bất khả tri".
API-Beast

Vậy phương pháp vẽ mọi thứ cho backbuffer trước tiên giải quyết vấn đề này như thế nào? Không phải dữ liệu vẫn đang được xử lý cùng một lúc thành một hình ảnh duy nhất trong bộ nhớ và sau đó được đẩy lên bộ đệm trước? Tôi nghĩ rằng sự hiểu biết của tôi phải là một chút thiếu sót.
Bloodyaugust

4
Ông Beast: nó không liên quan gì đến OpenGL hay bất kỳ nền tảng hay ngôn ngữ nào. Đó là cách chính phần cứng thực sự hoạt động, trên tất cả các nền tảng và tất cả các API đồ họa sử dụng bất kỳ ngôn ngữ nào.
Sean Middleditch

6

Đây không phải là một thuật ngữ kỹ thuật được xác định chặt chẽ. Batching về cơ bản là bất kỳ hệ thống nào mà bạn thực hiện nhiều thao tác dưới dạng tập hợp thay vì riêng lẻ và thường được thực hiện bởi vì nó hiệu quả hơn để làm như vậy. Hiệu quả đạt được thường đến từ việc có thể sử dụng lại một số hoặc tất cả bối cảnh mà hoạt động yêu cầu.

Vì vậy, việc trộn sprite chỉ là bất kỳ hệ thống nào cho phép bạn vẽ nhiều sprite cùng một lúc và hy vọng đạt được hiệu quả từ nó. Thông thường lợi ích là tất cả các sprite của bạn đều sử dụng cùng một kết cấu, vì vậy bạn có thể vẽ tất cả các họa tiết trong lô mà không thay đổi kết cấu, đó là một hoạt động tương đối chậm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.