Có phải là thực hành tốt để sử dụng tất cả các đơn vị kết cấu có sẵn?


9

Khi áp dụng nhiều kết cấu cho một lưới, như đối với ánh xạ va chạm, tôi thường liên kết các kết cấu với một vài đơn vị kết cấu cố định đầu tiên, ví dụ: diffuse = unit 0, gập = đơn vị 1, specular = đơn vị 2, sau đó tiếp tục sử dụng chúng cho từng đơn vị lưới khác nhau với kết cấu khác nhau. Nhưng tôi đã luôn tự hỏi tại sao lại glActiveTexturehỗ trợ rất nhiều đơn vị kết cấu (trong liên kết trước đó, nó nói ít nhất là 80).

Vì vậy, tôi nhận ra rằng một cách có thể để quản lý họa tiết là liên kết các kết cấu riêng biệt với từng đơn vị có sẵn và để chúng được bật, chỉ cần cập nhật chỉ số lấy mẫu thống nhất. Điều đó sẽ cải thiện kết xuất hoàn hảo bằng cách giảm số lượng chuyển mạch kết cấu. Nếu bạn có ít kết cấu hơn các đơn vị kết cấu tối đa, bạn không bao giờ phải hủy kết cấu.

Đây có phải là tiêu chuẩn thực hành trên các ứng dụng OpenGL thời gian thực (tôi tin rằng điều này cũng áp dụng cho D3D)? Và có bất kỳ ý nghĩa hiệu quả không rõ ràng của việc thực hiện phương pháp này? Bộ nhớ có lẽ?

Câu trả lời:


11

Phần cứng hiện đại không thực sự có khái niệm về các điểm liên kết kết cấu như được thể hiện bởi OpenGL. Thay vào đó, đơn vị đổ bóng sử dụng một bộ mô tả (chỉ là một loại con trỏ béo) có khả năng giải quyết bất kỳ kết cấu nào miễn là nó tồn tại trong bộ nhớ video. Đây là những gì làm cho những thứ như kết cấu không ràng buộc có thể. Vì vậy, số lượng lớn "đơn vị kết cấu" có sẵn trong các triển khai hiện tại chỉ đơn giản là cố gắng xử lý phần không liên quan này của API.

Điều đó nói rằng, cách được khuyến nghị để thực hiện những gì bạn đang cố gắng (tránh ràng buộc lại kết cấu) là sử dụng các mảng kết cấu , cho phép bạn tự động lập chỉ mục thành một tập hợp họa tiết trong trình tạo bóng, miễn là tất cả chúng đều có cùng định dạng và kích thước. Bài thuyết trình này chứa nhiều chi tiết hơn về những điều này và các kỹ thuật khác để giảm chi phí trình điều khiển khi kết xuất với OpenGL hiện đại: Tiếp cận chi tiết trình điều khiển Zero


Tôi đã xem bài thuyết trình đó trước đây, nó rất hay. Tôi không biết về những gì bạn đề cập trong đoạn đầu tiên, vì vậy cảm ơn vì thông tin đó!
glampert
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.