Я пишу систему частиц и хотел бы найти способ добиться правильного альфа-смешивания без сортировки частиц, потому что:
- Каждая частица является точечным спрайтом в одной сетке, и я не могу использовать возможность графа сцены для сортировки прозрачных узлов. Однако системный узел должен быть правильно отсортирован.
- Положение частиц на шейдере вычисляется по начальной скорости, ускорению и времени. Чтобы отсортировать систему, мне нужно будет выполнить все эти вычисления на CPU, чего я хочу избежать.
- Сортировка сотен частиц по положению камеры и загрузка их на GPU в каждом кадре для тихой тяжелой работы.
Альфа-тестирование кажется достаточно быстрым на GLES 2.0 и отлично работает для непрозрачных, но «замаскированных» текстур. Тем не менее, этого недостаточно для полупрозрачных частиц.
Как бы вы справились с этим?
opengl
opengl-es
particles
transparency
Степан Заступов
источник
источник
Ответы:
Вот что я бы сделал.
Шаг 1: Не сортируйте. Просто сделай это. Посмотри, если это проблема. Скорее всего, нет.
Шаг 2: Ограничьте частицы так, чтобы они не нуждались в сортировке, например:
Только твердые тела (возможно с краями альфа-покрытия)
Просто аддитивные биты
Шаг 3: если требуется больше, разделите рендеринг частиц на части, которые должны быть впереди и на остальной части, и выполните рендеринг за несколько проходов (например, можно исправить сложный дым)
Шаг 4: если все еще нужно больше или если вам нужно общее решение, одна вещь, которая приходит на ум, - это использовать MRT, чтобы выполнить очень грубую сортировку N-сегмента; рендеринг частиц в N выходных поверхностей и составить их в отдельный проход.
Что-нибудь еще потребует дополнительной информации о вашем конкретном случае использования. Но я уверен, что вам не нужна независимость от заказов. Просто используйте достаточно частиц в случайном порядке, и все будет хорошо =)
источник
Только не пишите в буфер глубины при рендеринге частиц. Это позволит им всем быть представленными и смешанными друг с другом. Вы все равно должны выполнить тестирование глубины, чтобы они могли быть правильно перекрыты геометрией в сцене.
источник
Использование порядка смешивания добавок не имеет значения:
Это предполагает, что ваша текстура спрайта имеет прозрачный фон.
источник