Я читал о том, как некоторые архитектуры на основе OpenGL управляют своими объектами, пытаясь создать свой собственный легкий вес, основанный на конкретных потребностях моего приложения (пожалуйста, нет «почему нет» вы просто используете ответы этого существующего продукта ». Одна архитектура, которую я изучал, - это график быстрой сцены Qt, и, хотя это имеет большой смысл, я чем-то смущен.OpenGL Primitive Ordering vs. Primitive Batching
Согласно их документации, непрозрачные примитивы заказываются спереди-назад, а непрозрачные примитивы заказываются спереди назад. Заказ состоит в том, чтобы сделать раннее z-убийство, надеясь исключить необходимость обрабатывать пиксели, которые появляются за другими. Это, по-видимому, довольно распространенная практика, и я понимаю. Это имеет смысл.
В их документации также говорится о том, как элементы, которые используют один и тот же материал, могут быть собраны вместе, чтобы уменьшить количество изменений состояния. То есть, общая шейдерная программа может быть привязана один раз, а затем несколько элементов, отображаемых с использованием одного и того же шейдера. Это также имеет смысл, и я хорошо справляюсь с этим.
Я не понимаю, как эти два метода работают вместе. Скажем, у меня есть 3 разных материала (давайте просто сказать, что они все непрозрачны для упрощения) и 100 предметов, которые используют один из трех материалов, тогда я теоретически мог бы создать 3 партии, основанных на материалах. Но что, если мои 100 предметов находятся на разных глубинах сцены? Должен ли я затем создать более 3 партий, чтобы я мог правильно сортировать элементы и отображать их спереди назад?
Основываясь на том, что я читал о других двигателях, таких как Ogre 3D, оба метода, кажется, используются довольно регулярно, я просто не понимаю, как они используются вместе.
И это зависит от профилирования, чтобы увидеть, превышает ли штраф завышения штраф за переключение. Если штраф завышения меньше, то дозирующие материалы важнее, чем заказывать всю сцену. –
Вы говорите, что сортировка выполняется на материал? Как и в, вы не сортируете все на сцене со всем, что есть на сцене, а скорее просто сортируете вещи, которые используют один и тот же материал, и соглашаетесь с тем, что некоторые перечеркивания все равно будут возникать? Или вы говорите противоположное, что вы сортируете вещи, а затем партии объектов, которые отображаются вместе, которые имеют один и тот же материал? – Moohasha
Кстати, когда я говорю разные «материалы», я имею в виду разные шейдеры. То есть вещи, которые нельзя комбинировать, а не только разные состояния (например, цвета), которые можно объединить в один и тот же материал. – Moohasha