Sự đánh đổi hiệu suất giữa kết xuất trước và trả chậm là gì?


9

Kết xuất chuyển tiếp là quá trình tính toán giá trị rạng rỡ cho một mảnh bề mặt trực tiếp từ thông tin hình học và ánh sáng đầu vào. Kết xuất hoãn lại phân chia quá trình đó thành hai bước: đầu tiên tạo ra bộ đệm không gian màn hình chứa các thuộc tính vật liệu (bộ đệm hình học hoặc bộ đệm G) được tạo bằng cách rasterize hình học đầu vào và thứ hai tạo ra giá trị rạng rỡ cho mỗi pixel bằng cách kết hợp G- đệm với thông tin chiếu sáng.

Kết xuất hoãn lại thường được trình bày dưới dạng tối ưu hóa kết xuất chuyển tiếp. Một lời giải thích là ánh sáng khá tốn kém và nếu bạn có bất kỳ sự rút tiền nào thì bạn sẽ chiếu sáng các pixel sẽ không bao giờ được nhìn thấy trên màn hình, trong khi nếu bạn lưu trữ các thuộc tính vật liệu vào bộ đệm G và sau đó, bạn chỉ chiếu sáng một pixel sẽ thực sự xuất hiện trên màn hình. Đây thực sự là một lợi thế của việc trì hoãn, cho rằng bạn cũng có thể thực hiện vượt qua trước độ sâu và sau đó thực hiện chuyển tiếp kết xuất với kiểm tra độ sâu được đặt thành D3D11_COMPARISON_EQUALhoặc GL_EQUALtương đương?

Kết xuất hoãn lại cũng có khả năng lên lịch tốt hơn trên GPU. Việc tách một sợi dọc / mặt sóng lớn thành mặt sóng hình học nhỏ hơn và sau đó mặt sóng ánh sáng nhỏ hơn sau đó sẽ cải thiện công suất sử dụng (nhiều mặt sóng trong chuyến bay đồng thời). Nhưng bạn cũng kết thúc với việc sử dụng băng thông nhiều hơn (viết ra một số lượng lớn các kênh vào bộ đệm G, sau đó đọc lại chúng trong khi chiếu sáng). Rõ ràng các chi tiết cụ thể ở đây phụ thuộc rất nhiều vào GPU của bạn, nhưng các nguyên tắc chung là gì?

Có những cân nhắc hiệu suất thực tế khác khi quyết định giữa kết xuất trước và trả chậm? (Giả sử rằng chúng ta có thể sử dụng các biến thể của từng kỹ thuật nếu cần thiết: tức là chúng ta có thể so sánh lát gạch phía trước với lát gạch bị hoãn lại.)

Câu trả lời:


11

Có thể tránh rút tiền từ các đối tượng mờ đục ngay cả khi hiển thị chuyển tiếp bằng cách thực hiện trước độ sâu và sử dụng thông tin đó để từ chối bất kỳ pixel nào không thực sự hiển thị. Tuy nhiên, tùy thuộc vào chi phí đỉnh của cảnh của bạn, việc vượt qua độ sâu có thể thêm một lượng chi phí hiệu suất không được chấp nhận. Thêm vào đó, render bằng cách sử dụng đường ống dẫn bóng điểm ảnh của các phương tiện GPU mà bạn không phải trả một chi phí cho mỗi điểm ảnh được render, bạn phải trả một chi phí cho mỗi điểm ảnh 2x2 quad được trả lại. Vì vậy, ngay cả khi thực hiện một bước trước sâu vẫn khiến các cạnh tam giác lãng phí các pixel làm mờ sẽ bị loại bỏ.

Lập lịch cho GPU là một chủ đề phức tạp và sự đánh đổi giữa chuyển tiếp và hoãn lại không chỉ đơn giản là "chạy nhanh hơn mà sử dụng nhiều băng thông hơn". Nếu bạn có hai hoạt động rẻ như nhau chạy theo trình tự và mỗi lần sử dụng cùng một số tài nguyên, thì không có lý do gì để chia chúng thành các shader riêng biệt: hai mặt sóng nhỏ mà mỗi tài nguyên X sử dụng về cơ bản không hoạt động tốt hơn một mặt sóng dài hơn cũng sử dụng tài nguyên X. Tuy nhiên, nếu bạn có một hoạt động rẻ tiền và một hoạt động đắt tiền để chạy theo trình tự, thì nó có thể được hưởng lợi từ việc chia thành các shader riêng biệt: trình tạo bóng nói chung sẽ dự trữ lượng tài nguyên tối đa mà nó có thể sử dụng tại bất kỳ thời điểm nào. Nó ' Có thể hiểu rằng kết xuất chuyển tiếp có thể không thể sử dụng tất cả băng thông của GPU của bạn vì có quá ít mặt sóng trong chuyến bay nên không thể phát hành đủ các hoạt động để bão hòa băng thông. Nhưng nếu bạnđược giới hạn băng thông, có thể không có lợi thế cho kết xuất hoãn lại (vì có thể nó sẽ sử dụng nhiều băng thông hơn).

Một mối quan tâm hiệu suất bổ sung là kết xuất chuyển tiếp hỗ trợ các loại vật liệu khác nhau (BRDF khác nhau, giả sử) chỉ bằng cách sử dụng một shader khác nhau cho đối tượng đó. Trình kết xuất bị trì hoãn đơn giản cần xử lý các loại vật liệu khác nhau theo một cách khác (có thể là một nhánh trong trình đổ bóng), vì công việc không còn được nhóm thành các mặt cong / mặt sóng tùy thuộc vào đối tượng được kết xuất. Điều này có thể được giảm thiểu bằng trình kết xuất được lát gạch nếu chỉ các khu vực cụ thể trên màn hình sử dụng loại vật liệu thay thế (giả sử cho tóc), sau đó bạn có thể sử dụng biến thể đổ bóng với nhánh loại vật liệu chỉ dành cho gạch có chứa bất kỳ pixel nào với vật liệu đó .

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.