2015-08-03 6 views
0

Я читал о том, как некоторые архитектуры на основе OpenGL управляют своими объектами, пытаясь создать свой собственный легкий вес, основанный на конкретных потребностях моего приложения (пожалуйста, нет «почему нет» вы просто используете ответы этого существующего продукта ». Одна архитектура, которую я изучал, - это график быстрой сцены Qt, и, хотя это имеет большой смысл, я чем-то смущен.OpenGL Primitive Ordering vs. Primitive Batching

Согласно их документации, непрозрачные примитивы заказываются спереди-назад, а непрозрачные примитивы заказываются спереди назад. Заказ состоит в том, чтобы сделать раннее z-убийство, надеясь исключить необходимость обрабатывать пиксели, которые появляются за другими. Это, по-видимому, довольно распространенная практика, и я понимаю. Это имеет смысл.

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

Я не понимаю, как эти два метода работают вместе. Скажем, у меня есть 3 разных материала (давайте просто сказать, что они все непрозрачны для упрощения) и 100 предметов, которые используют один из трех материалов, тогда я теоретически мог бы создать 3 партии, основанных на материалах. Но что, если мои 100 предметов находятся на разных глубинах сцены? Должен ли я затем создать более 3 партий, чтобы я мог правильно сортировать элементы и отображать их спереди назад?

Основываясь на том, что я читал о других двигателях, таких как Ogre 3D, оба метода, кажется, используются довольно регулярно, я просто не понимаю, как они используются вместе.

ответ

1

Если у вас действительно есть 3 материала, вы можете обрабатывать только объекты, которые отображаются в группе в соответствии с их сортировкой. Время от времени сортировка может быть оптимизирована для объектов, которые не перекрывают друг друга, чтобы минимизировать переключатели материалов.

Настоящий «трюк» за всем, что как раз сочетать материалы. Если двигатель может создать один материал из трех исходных материалов и использовать шейдеры для правильного применения настроек материала к различным объектам (в основном, это преобразование координат текстуры), все можно одновременно выгружать и упорядочивать , Но если это невозможно, двигатель не может оптимизировать его дальше и должен время от времени переключать материал.

Вам не нужно группировать каждый материал в вашей сцене вместе. Но если можно сгруппировать те материалы, которые часто переключаются друг с другом, это может значительно улучшить производительность.

+0

И это зависит от профилирования, чтобы увидеть, превышает ли штраф завышения штраф за переключение. Если штраф завышения меньше, то дозирующие материалы важнее, чем заказывать всю сцену. –

+0

Вы говорите, что сортировка выполняется на материал? Как и в, вы не сортируете все на сцене со всем, что есть на сцене, а скорее просто сортируете вещи, которые используют один и тот же материал, и соглашаетесь с тем, что некоторые перечеркивания все равно будут возникать? Или вы говорите противоположное, что вы сортируете вещи, а затем партии объектов, которые отображаются вместе, которые имеют один и тот же материал? – Moohasha

+0

Кстати, когда я говорю разные «материалы», я имею в виду разные шейдеры. То есть вещи, которые нельзя комбинировать, а не только разные состояния (например, цвета), которые можно объединить в один и тот же материал. – Moohasha

 Смежные вопросы

  • Нет связанных вопросов^_^