Tôi có nên cung cấp cho mỗi nhân vật một VBO riêng hay tôi nên gộp chúng thành một VBO duy nhất?


10

Tôi đang làm một trò chơi 3D người đầu tiên. Tôi có nên cung cấp cho mỗi nhân vật một VBO riêng hay tôi nên gộp tất cả các nhân vật vào một VBO? Những ưu / nhược điểm là gì?


Đây là một câu hỏi trùng lặp. Về những gì, tôi không chắc lắm, nhưng nó là một bản dupe.
DeadMG

Nó tương tự như thế này , nhưng tôi không tin rằng đó là một bản sao trùng lặp, để bắt đầu, đây là Open-GL (Tôi không chắc có sự khác biệt cụ thể nào không), trong khi câu hỏi khác là về biến dạng trong DirectX11 (do đó có lẽ sử dụng tessname, thay đổi mọi thứ).
Thomas Russell

Câu trả lời:


11

Đây thực sự là một lựa chọn giữa hiệu suất và tính linh hoạt, nhưng tôi sẽ liệt kê ý kiến ​​của mình về nó.

Một VBO duy nhất

Những mặt tích cực là:

  • Chỉ cần một cuộc gọi vẽ để vẽ cảnh của bạn. Điều này làm tăng hiệu suất. Mặc dù ứng dụng của bạn có thể yêu cầu nhiều cuộc gọi rút thăm, bạn vẫn có thể có một VBO duy nhất và để số đếm và bù trừ quyết định bản vẽ của bạn.
  • Không yêu cầu thay đổi trạng thái giữa các đối tượng của bạn. Điều này làm tăng hiệu suất.

và các mặt tiêu cực là:

  • Khó quản lý, mặc dù điều này phụ thuộc vào cách bạn viết mã, nếu nó được thiết kế đúng, v.v.
  • Bằng cách nói khó quản lý, ý tôi là những thứ như cập nhật VBO, đặt bù chính xác cho mọi đối tượng, v.v.

VBO cá nhân: s

Những mặt tích cực là:

  • Dễ để thực hiện.
  • Dễ dàng quản lý ngay từ đầu.

và các mặt tiêu cực là:

  • Rất nhiều thay đổi nhà nước. Điều này làm giảm hiệu suất.
  • Rất nhiều cuộc gọi rút thăm. Nó sẽ làm giảm hiệu suất.

Tóm lược

Tôi khuyên bạn nên hồ sơ ứng dụng của bạn; có được nút cổ chai thực sự của bạn trong dữ liệu bạn có thể nhìn thấy. Tối ưu hóa sớm có thể được hiển thị (trong trường hợp này) là không cần thiết. Tuy nhiên, như đã nói, nếu bạn phát hiện ra sự mất hiệu suất thực sự trong ứng dụng của mình, với kịch bản VBO: s riêng lẻ , bạn có thể bắt đầu triển khai một VBO duy nhất.

Tuy nhiên, miễn là không cần thiết (số lượng đối tượng thấp, không có nhiều thay đổi trạng thái tổng thể, v.v.) Tôi khuyên bạn nên đi với từng VBO: trừ khi bạn thấy điều đó sẽ không hoạt động.

Biên tập

Tôi quên đề cập rằng nó sẽ ổn với nhiều cuộc gọi rút thăm. Điều quan trọng nhất trong thời gian quan trọng thực hiện là giữ cho các thay đổi trạng thái ở mức tối thiểu. Bạn có thể chỉ cần đặt số lượng chỉ mục để xử lý và bù cho mỗi cuộc gọi rút thăm, và điều này là tốt. Tuy nhiên, hãy giữ các thay đổi trạng thái càng thấp càng tốt và thực hiện càng ít cuộc gọi rút thăm càng tốt, đó là lời chào lớn của câu trả lời này, hoặc ít nhất là những gì tôi đã cố gắng nói.


Nếu bạn chỉ thực hiện một cuộc gọi rút thăm, điều đó sẽ khiến bạn thay đổi trạng thái trên mỗi lưới (không phải trên mỗi đỉnh) thay đổi (đồng phục, v.v.). Cũng buộc tất cả hoặc không có gì để vẽ mọi thứ. Chắc chắn bạn có thể chia nhỏ nó để chỉ có 1 cuộc gọi rút thăm nhiều VBO, nhưng nếu bạn muốn thêm một lưới mới thì sao?
deceleratedcaviar

1
@Daniel: Một lưới mới chỉ cần được cập nhật / thêm vào VBO. Tôi quên đề cập rằng nó sẽ ổn với nhiều cuộc gọi rút thăm. Điều quan trọng nhất trong thời gian quan trọng thực hiện là giữ cho các thay đổi trạng thái ở mức tối thiểu. Bạn có thể chỉ cần đặt số lượng chỉ mục để xử lý và bù cho mỗi cuộc gọi rút thăm, và điều này là tốt. Tuy nhiên, hãy giữ các thay đổi trạng thái càng thấp càng tốt và thực hiện càng ít cuộc gọi rút thăm càng tốt, đó là lời chào lớn của câu trả lời này, hoặc ít nhất là những gì tôi đã cố gắng nói. :-)
Classicalclai

Batch, batch, batch trong năm 2005 đã đi đến kết luận rằng bạn có thể chi trả từ 10k đến 25k lô trên CPU 1 GHz trước khi bạn hoàn toàn bị ràng buộc CPU chỉ bằng cách xử lý các lệnh gọi rút thăm. Vì nó chuyển thành vài trăm lô trên mỗi khung 60Hz, việc sắp xếp mọi thứ vào một VB không cần thiết, nhưng chắc chắn sẽ giúp nếu bạn kết hợp hình học có các đặc điểm tương tự (tuổi thọ, tốc độ cập nhật, thuộc tính) vào cùng một VB.
Lars Viklund

1
Tôi nghĩ rằng bạn cũng nên xem xét sự chán nản.
Tara
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.