Hãy bắt đầu với những gì bạn yêu cầu.
Trên phần lớn không có phần cứng nào tồn tại hiện tại sẽ attribute float weights[25];
biên dịch. Mặc dù trình đổ bóng có thể có các mảng thuộc tính, mỗi chỉ mục mảng đại diện cho chỉ số thuộc tính mới mới. Và trên tất cả phần cứng hiện đang tồn tại, số chỉ mục thuộc tính tối đa là ... 16. Bạn cần 25 và đó là chỉ cho các trọng số.
Bây giờ, bạn có thể giảm thiểu điều này một cách dễ dàng bằng cách nhớ rằng bạn có thể sử dụng các thuộc tính vec4
. Vì vậy, bạn lưu trữ mỗi bốn phần tử mảng trong một thuộc tính duy nhất. Mảng của bạn sẽ là attribute vec4 weights[7];
có thể thực hiện được. Logic tải trọng của bạn sẽ phải thay đổi tất nhiên.
Mặc dù vậy, bạn dường như không tham gia vào các chi tiết về điều này thực tế là có nghĩa là cho dữ liệu đỉnh của bạn. Mỗi thuộc tính đại diện cho một thành phần của dữ liệu của một đỉnh. Mỗi đỉnh cho một cuộc gọi rendering sẽ có cùng một lượng dữ liệu; nội dung của dữ liệu đó sẽ khác nhau, nhưng không bao nhiêu dữ liệu.
Để thực hiện những gì bạn đang đề xuất, mỗi đỉnh trong lưới của bạn sẽ cần 25 float mô tả trọng lượng. Ngay cả khi điều này được lưu trữ dưới dạng byte chưa được chuẩn hóa, vẫn còn tối thiểu 25 byte giá trị dữ liệu ở mức tối thiểu. Đó là rất nhiều. Đặc biệt là xem xét cho lớn nhất phần lớn các đỉnh, hầu hết các giá trị này sẽ là 0. Ngay cả trong trường hợp xấu nhất, bạn sẽ xem xét có lẽ 6-7 xương ảnh hưởng đến một đỉnh duy nhất.
Cách xử lý thường được thực hiện trong các trình đổ bóng đỉnh là giới hạn số lượng xương ảnh hưởng đến một đỉnh đơn đến bốn. Bằng cách này, bạn không sử dụng một mảng các thuộc tính; bạn chỉ cần sử dụng thuộc tính vec4
cho trọng số. Tất nhiên, bây giờ bạn cũng cần phải nói xương nào được kết hợp với trọng lượng nào. Vì vậy, bạn có thuộc tính thứ hai vec4
chỉ định chỉ mục xương cho trọng lượng đó.
Điều này tạo ra sự cân bằng tốt. Bạn chỉ chiếm 2 thuộc tính phụ (có thể là các byte chưa ký theo kích thước). Và đối với phần lớn các đỉnh, bạn sẽ không bao giờ nhận thấy, bởi vì hầu hết các đỉnh chỉ bị ảnh hưởng bởi 1-3 xương. Một số ít sử dụng 4, và ít sử dụng hơn 5+. Trong những trường hợp đó, bạn chỉ cần cắt giảm các trọng số thấp nhất và tính lại trọng số của những người khác một cách tương xứng.
Nguồn
2012-01-28 09:03:34
Cảm ơn bạn rất nhiều. Bạn đã trả lời tất cả các câu hỏi của tôi và thậm chí nhiều hơn nữa! Tôi hy vọng điều này sẽ cải thiện đáng kể hiệu suất! Cảm ơn một lần nữa. – Nicholas