Чи повинен я дати кожному персонажу своє власне VBO або я повинен об'єднати їх в єдине VBO?


10

Я роблю 3D-гру від першої особи. Чи повинен я дати кожному персонажу своє власне VBO або я повинен об'єднати всі символи в одну VBO? Які плюси / мінуси?


Це повторне запитання. У чому я не надто впевнений, але це дуп.
DeadMG

Це схоже на це , але я не вірю, що це дублікат сам по собі, для початку це Open-GL (я не впевнений, чи є якісь конкретні відмінності), тоді як інше питання стосується деформації в DirectX11 (таким чином, імовірно, використовується tessellation, який змінює речі).
Томас Рассел

Відповіді:


11

Це дійсно вибір між продуктивністю та гнучкістю, але я перерахую свої думки щодо цього.

Один єдиний VBO

Позитивні сторони:

  • Лише один дзвінок на малюнок, щоб намалювати свою сцену. Це збільшує продуктивність. Незважаючи на те, що у вашій програмі може знадобитися кілька дзвінків на виклик, ви все одно можете мати одне VBO, і дозволити підрахунку та зміщення визначати ваш малюнок.
  • Не вимагає змін стану між вашими об'єктами. Це збільшує продуктивність.

і негативні сторони:

  • Важко керувати, хоча це залежить від того, як ви пишете свій код, якщо він правильно розроблений і т.д.
  • Під твердим керуванням я маю на увазі такі речі, як оновлення VBO, встановлення правильного зміщення для кожного об'єкта тощо.

Індивідуальний VBO: s

Позитивні сторони:

  • Легкий у виконанні.
  • Простіше керувати з самого початку.

і негативні сторони:

  • Багато змін у державі. Це знижує продуктивність.
  • Багато дзвінків по дзвінкам. Це знизить продуктивність.

Підсумок

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

Однак, поки це не потрібно (кількість об’єктів низька, загалом не багато змін стану тощо), я б рекомендував перейти з окремими VBO: s, якщо ви не побачите, що це не спрацює.

Редагувати

Я забув зазначити, що це було б добре з кількома дзвінками. Найважливіше в критичні періоди ефективності - мінімізувати зміни стану. Ви можете просто встановити кількість індексів для обробки та зміщення для кожного розіграшу дзвінка, і це добре. Але, щоб зміни штату були максимально низькими і здійснювали якомога менше дзвінків, це велике привіт у цій відповіді, або принаймні те, що я намагався сказати.


Якщо ви робите лише 1 дзвінок на розіграші, то ви накручуєте за зміну стану (не за вершиною) стану (уніформи тощо). Також примушує все або нічого для малювання всього. Звичайно, ви можете розбити його так, що є лише 1 VBO кілька викликів, але що робити, якщо ви хочете додати нову сітку?
deceleratedcaviar

1
@Daniel: Нову сітку потрібно просто оновити / додати до VBO. Я забув зазначити, що це було б добре з кількома дзвінками. Найважливіше в критичні періоди ефективності - мінімізувати зміни стану. Ви можете просто встановити кількість індексів для обробки та зміщення для кожного розіграшу дзвінка, і це добре. Але, щоб зміни штату були максимально низькими і здійснювали якомога менше дзвінків, це велике привіт у цій відповіді, або принаймні те, що я намагався сказати. :-)
Вроцлав

Batch, batch, batch у 2005 році прийшов до висновку, що ви можете дозволити собі від 10 К до 25 К партій на 1 ГГц процесора, перш ніж повністю пов'язувати процесор, обробляючи дзвінки лише. Оскільки це перекладається на кілька сотень партій на 60 ГГц, підключення всього до одного VB не є суттєвим, але це точно допоможе, якщо ви поєднаєте геометрію, що має подібні характеристики (термін служби, швидкість оновлення, атрибути) в той же VB.
Ларс Віклунд

1
Я думаю, ви також повинні взяти до уваги зниження фрустуму.
Тара
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.