Z-порядок с альфа-смешиванием в трехмерном мире

Я работаю над игрой в трехмерном мире только с двухмерными спрайтами (например, игра «Не голодай»). (OpenGL ES2 с C ++)

В настоящее время я упорядочиваю элементы задом наперед, прежде чем рисовать их без пакета (поэтому 1 элемент = 1 вызов). Я хотел бы реализовать пакетирование в моей структуре, чтобы уменьшить количество вызовов отрисовки.

Вот что я получил на данный момент:

  • Закажите все элементы моей сцены задом наперед.
  • Отправить список заказов элементов в Renderer.
  • Рендерер ищет в своем менеджере партий, существует ли партия для данного элемента с его Материалом.

    • Пакет не существовал: создайте новый.
    • Партия существует для элемента с этим Материалом: Добавить спрайт в партию.
  • Вычислить большую сетку со всеми спрайтами для каждой партии (1 тип материала = 1 партия).

  • Когда все партии в порядке, менеджер пакетов вычисляет команды рисования для средства визуализации.

  • Команды рисования процесса визуализации (связать шейдер, связать текстуры, связать буферы, нарисовать элемент)

Изображение, чтобы показать мою проблему здесь: ОбразОбраз

Но у меня есть некоторые проблемы, потому что объекты могут находиться за другими объектами внутри другого пакета.

Как я могу сделать что-то подобное?

2

Решение

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

  • Рендеринг в отсортированном Z-порядке для получения правильных результатов прозрачности
  • Рендеринг сгруппирован по типу материала, предположительно для уменьшения количества изменений состояния GL, возникающих при переключении материалов.

Один из них должен иметь приоритет над другим. Поскольку Z-порядок важен для правильного появления прозрачности, вам, вероятно, придется иметь этот приоритет. Как только вы это сделаете, вы по-прежнему можете группировать предметы из того же материала в Z-порядке.

1

Другие решения

Других решений пока нет …