Vẽ chỉ mục có nhanh hơn vẽ không chỉ mục không


8

Tôi cần vẽ nhiều hình đa giác gồm 6 đỉnh (hai hình tam giác).

Không có bất kỳ tọa độ kết cấu, quy tắc, vv, cả hai cách tiếp cận đều dẫn đến 72 byte. Trong tương lai tôi chắc chắn cũng sẽ cần tọa độ kết cấu và quy tắc, điều này sẽ khiến việc vẽ chỉ mục tiêu tốn ít bộ nhớ hơn. Không nhiều lắm mặc dù.

Vì vậy, câu hỏi của tôi là: Đối với các VAO có ít đỉnh trùng nhau, cách tiếp cận nào nhanh hơn? Tôi không quan tâm đến bộ nhớ thêm được sử dụng bởi bản vẽ không chỉ mục, chỉ tốc độ.

Chỉnh sửa: Để làm cho nó rõ ràng.

Cách tiếp cận phi chỉ mục:

float[18] vertices = {
//Triangle 1
1,1,0,
1,0,0,
0,0,0,

//Triangle 2
1,0,0,
0,1,0,
0,0,0,
};

Chỉ số tiếp cận:

float[12] vertices = {
1,1,0,
1,0,0,
0,0,0,
0,1,0,
};

int[6] indices = {
//Triangle 1
0,1,2,

//Triangle 2
0,3,2
};

1
... Tại sao không chỉ đo cả hai cách tiếp cận cho ứng dụng cụ thể của bạn trên phần cứng mục tiêu và tìm ra kết luận?
Sean Middleditch

Câu trả lời:


4

Tôi cố gắng trả lời câu hỏi. Tôi nghĩ rằng bạn nên đi với các chỉ số, vì một vài lý do:

1) Trong mọi trường hợp, lập chỉ mục là hoạt động miễn phí ở phía GPU, bạn không bị phạt ở đó. (đã thêm) Tất nhiên, các chỉ mục là các hoạt động truy cập ngẫu nhiên và có thể ảnh hưởng đến hiệu suất bộ nhớ cache của bộ nhớ GPU.

2) Lập chỉ mục có thể cho phép bộ đệm đỉnh GPU tạo ra một vài tối ưu hóa cho các đỉnh chồng lấp.

3) Dấu chân bộ nhớ nhỏ hơn ở phía GPU nhiều lần có nghĩa là hiệu suất tốt hơn, vì băng thông bộ nhớ là một trong những điểm nghẽn và do nhiều lần trích xuất các hoạt động (ví dụ: 10_10_10_2 -> 4 x float) là không tốn chi phí.

Sự khác biệt về tốc độ có thể không đáng chú ý nếu không có nhiều đỉnh chồng chéo, nơi bạn có thể được cải thiện tốc độ. Nhưng tôi thực sự không có bất kỳ sự thật khó khăn nào để hỗ trợ ý kiến ​​của mình (đi cùng với các chỉ số).


Cũng nhìn này:

/programming/17503787/buffers-indexed-or-direct-interloped-or-separate


1
lại 1) điều gì về việc tối ưu hóa thứ tự chỉ mục cho hiệu năng bộ đệm? có những thuật toán cho điều này thậm chí như sắp xếp lại k-cache. re 3) những gì về chi phí của bộ đệm chỉ mục? đôi khi ba lần tước kết quả trong ít dữ liệu để tải lên ... mặc dù đó không phải là trường hợp phổ biến.
jheriko

1

Nếu các vị trí luôn giống nhau, bạn thậm chí có thể thực hiện mà không cần bất kỳ bộ đệm nào bằng cách lưu trữ mảng trong trình đổ bóng và sử dụng gl_VertexIDđể chọn đỉnh trong trình tạo bóng đỉnh.

#version 330 core

const vec3 data[4] = vec3[]
(
//Triangle 1
vec3(1,1,0),
vec3(1,0,0),
vec3(0,0,0),

//Triangle 2
vec3(1,0,0),
vec3(0,1,0),
vec3(0,0,0)
);

void main()
{
  gl_Position = vec4( data[ gl_VertexID ], 1.0);
}

Và khi được kết xuất với inst instance, bạn có thể đặt điểm, xoay và tỷ lệ cho mỗi thể hiện.
Lasse

@ratchet freak Vị trí sẽ không giống nhau, vì điều này là dành cho địa hình (và tôi không thể sử dụng tam giác_strips vì điều đó sẽ rất khó thực hiện theo cách thích hợp, vì nó dựa trên voxel). Tôi chỉ cần biết nếu tôi nên sử dụng bản vẽ chỉ mục hoặc không chỉ mục. Hoặc thậm chí các danh sách hiển thị cũ, nếu điều đó sẽ nhanh hơn.
KaareZ

@KaareZ Bạn vẫn có thể sử dụng đồng phục để thay đổi vị trí. Hoặc sử dụng instaging để truyền dữ liệu trên mỗi khuôn mặt.
ratchet freak

0

như với tất cả những thứ hiệu suất, đừng đoán, hồ sơ để tìm hiểu.

nó sẽ thay đổi tùy thuộc vào phần cứng và rất nhiều yếu tố phức tạp. đo lường nó bằng cách định hình sẽ tự động xem xét tất cả những điều này cho bạn mà bạn không cần phải biết bất cứ điều gì về chúng.


-1

Giả định của tôi là việc sử dụng lập chỉ mục cho các đỉnh sẽ chậm hơn.

Tôi đã hiểu nhầm câu hỏi ban đầu, nhưng đây là câu trả lời cho việc lập chỉ mục màu. Tôi đoán các quy tắc tương tự sẽ áp dụng cho lập chỉ mục đỉnh (không mất độ chính xác), nhưng đó chỉ là dự đoán.

Nhưng...

  • Theo nguyên tắc chung, tôi đề nghị lập chỉ mục.
  • Lập chỉ mục chậm hơn.
  • Không lập chỉ mục là nhanh hơn.
  • Lập chỉ mục là bộ nhớ hiệu quả hơn.
  • Không lập chỉ mục là ít bộ nhớ hiệu quả.
  • Lập chỉ mục mất độ chính xác màu.
  • Không lập chỉ mục không làm mất độ chính xác màu.

72 byte nhỏ đến mức có thể sẽ hiệu quả hơn về bộ nhớ nếu không lập chỉ mục cho nó.

Một vài quy tắc của ngón tay cái: Lập chỉ mục là bộ nhớ hiệu quả hơn. Lập chỉ mục mất độ chính xác màu. Không lập chỉ mục là nhanh hơn.

Điều này có thể khiến bạn muốn không bao giờ sử dụng lập chỉ mục, nhưng việc đánh đổi bộ nhớ khá quan trọng đối với các hình ảnh có kích thước khá. Độ chính xác màu sắc là không đáng chú ý.

Cách lập chỉ mục hoạt động là khi nó đi vẽ một pixel, nó được cung cấp một chỉ mục và phải tìm màu lên trong một bảng có kích thước được xác định trước. (Giả sử 256 byte, vì vậy bạn bị giới hạn ở 256 màu). Sau đó, nó vẽ pixel đó. Không lập chỉ mục lưu trữ dữ liệu pixel trực tiếp, do đó, không giới hạn màu tới 256. Nhưng trong hình ảnh 100x100, hình ảnh 400ish byte của bạn hiện là 10000 byte.

Từ chối trách nhiệm, tôi đang rút những con số này ra khỏi mũ của tôi.


Tôi đã không hỏi về nén màu.
KaareZ

Câu trả lời siêu ngắn: lập chỉ mục luôn chậm hơn. Tôi đã chôn câu trả lời của mình ở đó, nhưng thêm nó vào dòng đầu tiên bây giờ tôi đã đi vào nén màu, bởi vì đó là chỉ mục.
Evorlor

Tôi đang nói về lập chỉ mục của đỉnh, không phải nén kết cấu. Ví dụ như bạn có v0, v1, v2 và v, 3. Để vẽ hai hình tam giác, bạn chỉ định các chỉ số sau: 0, 2, 3, 0, 2, 4
KaareZ

Ôi sai lầm của tôi. Trong trường hợp đó tôi không biết, nhưng tôi cho rằng các quy tắc tương tự sẽ được áp dụng (trừ mất độ phân giải)
Evorlor
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.