Khi nào thì tốt hơn để tải ma trận mô hình một phần lên shader đỉnh?


8

Đến bây giờ, khi hiển thị cảnh của tôi và trong khi lặp qua biểu đồ cảnh, đối với mỗi nút, ma trận mô hình của nó được tính từ ma trận mô hình của cha mẹ và tư thế của nút cảnh. Điều này khá đơn giản và đã giảm số phép nhân ma trận xuống một phép nhân trên mỗi nút và khung.

Nhưng tất cả các phép nhân ma trận này phải được thực hiện trên CPU và trong mọi khung hình để có thể thực hiện (nhiều lần liên tiếp) các nút cảnh rất nhanh. Tuy nhiên, GPU có lẽ phù hợp hơn nhiều để thực hiện nhiều phép nhân ma trận, vì vậy tôi nghĩ đến việc gửi nhiều ma trận mô hình một phần cho trình tạo bóng đỉnh thay vì tính toán mọi thứ trên CPU.

Gửi từng bộ phận (vì vậy tư thế của mọi nút) cho GPU có thể không có ý nghĩa nhiều, vì trong trường hợp này, tất cả các tính toán được thực hiện cho mọi đỉnh thay vì mỗi nút, điều này thực sự sẽ làm giảm hiệu suất. Nhưng có lẽ các nút cảnh có nhiều trẻ em hoặc chỉ những đứa trẻ không di chuyển (so với cha mẹ của nó) có thể là nơi để phân chia ma trận mô hình và chuyển các phép nhân sang shader.

Vì vậy, khi nào tốt hơn là gửi ma trận mô hình một phần cho trình đổ bóng và di chuyển phép nhân sang GPU? Hay nó chỉ đơn giản là một ý tưởng tồi cho việc này?

Câu trả lời:


9

Làm toán với đồng phục là một trình tạo bóng thường sẽ không mang lại cho bạn bất kỳ hiệu suất nào so với thực hiện trên CPU. CPU không chậm hơn GPU khi thực hiện phép toán ma trận, nó chỉ không có cấu trúc để thực hiện song song một lượng lớn toán học. Nhưng bạn phải thực sự làm số lượng lớn toán học đó để có được một chiến thắng. Gửi thêm dữ liệu cho GPU chỉ để GPU nhân hai ma trận với nhau sẽ hiếm khi khiến bạn mất mạng.

Bây giờ, giả sử bạn có một bộ đệm của ma trận lột da. Nó có thể bắt đầu quan trọng cho dù bạn biến đổi tất cả chúng thành không gian thế giới trên CPU hay chỉ truyền một ma trận mô hình không gian thế giới bổ sung cho GPU. Nhưng thậm chí sau đó nó phụ thuộc vào tỷ lệ đỉnh của bạn với xương.


Tôi phụ thuộc vào số lượng tính toán.GPU thực sự nhanh về các phép toán. Vì vậy, đây là vấn đề về thử và điểm chuẩn.
Michael IV

5

Hiếm khi, nếu có bao giờ. Bạn đã trả lời một nửa câu hỏi đó trong câu hỏi của riêng bạn: một shader đỉnh chạy một lần trên mỗi đỉnh, một shader mảnh một lần trên mỗi mảnh. Nếu bạn không làm điều gì đó duy nhất cho đỉnh hoặc đoạn đó, thì bạn đang thực hiện chính xác điều tương tự mỗi khi bạn gọi một shader. Điều đó không có vẻ hiệu quả hơn đối với tôi.

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.