Должен ли я дать каждому персонажу свой собственный VBO или я должен объединить их в один VBO?

10

Я делаю 3D игру от первого лица. Должен ли я дать каждому персонажу свой собственный VBO или я должен объединить все символы в один VBO? Какие плюсы / минусы?

Ксавье
источник
Это дублирующий вопрос. В чем, я не слишком уверен, но это обман.
DeadMG
Это похоже на это , но я не верю, что это само по себе дубликат, для начала, это Open-GL (я не уверен, есть ли какие-то особые различия), тогда как другой вопрос о деформациях в DirectX11 (таким образом, по-видимому, используя тесселяцию, которая меняет вещи).
Томас Рассел

Ответы:

11

Это действительно выбор между производительностью и гибкостью, но я перечислю свое мнение по этому поводу.

Один сингл VBO

Положительные стороны:

  • Всего один вызов для рисования вашей сцены. Это увеличивает производительность. Хотя вашему приложению может потребоваться несколько вызовов отрисовки, вы все равно можете иметь один VBO и позволить подсчету и смещению определять ваш рисунок.
  • Не требует изменения состояния между вашими объектами. Это увеличивает производительность.

и отрицательные стороны:

  • Сложно управлять, хотя это зависит от того, как вы пишете свой код, правильно ли он спроектирован и т. Д.
  • Говоря « трудно управлять», я имею в виду такие вещи, как обновление VBO, установка правильного смещения для каждого объекта и т. Д.

Индивидуальные VBO: s

Положительные стороны:

  • Легко реализовать.
  • Проще управлять с самого начала.

и отрицательные стороны:

  • Много изменений состояния. Это снижает производительность.
  • Много розыгрышей. Это снизит производительность.

Резюме

Я бы порекомендовал вам профилировать вашу заявку; получить реальное узкое место в данных, которые вы можете увидеть. Преждевременная оптимизация может быть показана (в этом случае) как ненужная. Однако, как говорится, если вы обнаружите реальную потерю производительности в вашем приложении, учитывая сценарий отдельных VBO , вы можете начать реализацию одного VBO.

Однако до тех пор, пока это не нужно (количество объектов невелико, в целом не так много изменений состояния и т. Д.), Я бы рекомендовал использовать отдельные VBO, если только вы не видите, что это не сработает.

редактировать

Я забыл упомянуть, что было бы хорошо с несколькими вызовами розыгрыша. Самое важное в критические моменты производительности - это сохранять минимальные изменения состояния. Вы можете просто установить количество обрабатываемых индексов и смещение для каждого вызова отрисовки, и это нормально. Но, тем не менее, сохраняйте изменения состояния как можно ниже и делайте как можно меньше вызовов для отрисовки, это большой привет этого ответа или, по крайней мере, то, что я пытался сказать.

Wroclai
источник
Если вы выполняете только один вызов отрисовки, это приводит к изменению состояния для каждой сетки (не для каждой вершины) (униформа и т. Д.). Также вынуждает все или ничего для рисования всего. Конечно, вы можете разбить его так, чтобы было только 1 VBO множественных вызовов отрисовки, но что если вы хотите добавить новую сетку?
замедленная
1
@Daniel: новая сетка должна быть просто обновлена ​​/ добавлена ​​в VBO. Я забыл упомянуть, что было бы хорошо с несколькими вызовами розыгрыша. Самое важное в критические моменты производительности - это сохранять минимальные изменения состояния. Вы можете просто установить количество обрабатываемых индексов и смещение для каждого вызова отрисовки, и это нормально. Но, тем не менее, сохраняйте изменения состояния как можно ниже и делайте как можно меньше вызовов для отрисовки, это большой привет этого ответа или, по крайней мере, то, что я пытался сказать. :-)
Вроцлав
Пакет, партия, партия в 2005 году пришли к выводу, что вы можете позволить себе от 10 до 25 тысяч пакетов на процессоре с частотой 1 ГГц, прежде чем вы будете полностью ограничены процессором, обрабатывая только вызовы отрисовки. Поскольку это приводит к нескольким сотням пакетов на кадре 60 Гц, втирать все в один VB несущественно, но это, безусловно, поможет, если вы объединяете геометрию, которая имеет сходные характеристики (время жизни, частота обновления, атрибуты), в один VB.
Ларс Виклунд
1
Я думаю, что вы также должны принять во внимание отбор Frustum.
Тара