Имейте в виду, что для точечных спрайтов существуют жесткие ограничения по размеру, и чем больше размер, тем ниже производительность.Если ваша цель состоит в том, чтобы иметь только 12 «частиц», я думаю, вы должны сделать их четырехугольными.С другой стороны, если ваша цель состоит в том, чтобы иметь 12 облаков, состоящих из множества «облачных частиц», каждое из которых дает им анимационный эффект, тогда да, вам следует использовать точечные спрайты.
Узким местом будетскорость заполнения, тем более что вы, вероятно, будете использовать смешивание.
Если у вас более 100 облаков, вопрос об использовании точечных спрайтов или нет становится более актуальным.Чтобы оживить их, вам нужно либо отправить новый буфер для открытия каждого кадра (метод 1), либо отобразить каждое облако в отдельном вызове с другой матрицей преобразования (метод 2).Последний, скорее всего, будет самым медленным, но первый требует, чтобы вы отправляли 4 новые вершины на облако (при условии индексированного рендеринга) по сравнению с 1 новой версией на облако, если вы использовали точечные спрайты (метод 3).
На данный момент очень легко приблизительно рассчитать, что будет самым быстрым.Метод 2 означает 16*4*num_clouds
байтов данных, передаваемых в GPU каждый кадр, метод 1 равен d*4*num_clouds
, а метод 3 d*num_clouds
, где d равно 2 или 3, в зависимости от того, нужен ли вам z.
СтоитСледует также отметить, что метод 1 и 3 отправляют данные в одном пакете, а метод 2 отправляет 16 * 4 байта за раз.
Поскольку вы используете GL ES 2, вы можете пропустить матрицу в методе 2 и простоотправьте перевод в виде вектора, но вы по-прежнему будете страдать от непартийной передачи данных и стоимости установки униформы для каждого экземпляра.
РЕДАКТИРОВАТЬ: На самом деле то, что вы бы сделали в случае многих частиц будетустановить одинаковое время и задать скорость для облаков в качестве статических атрибутов, а затем анимировать их в шейдере, умножив скорость на время и убедившись, что при необходимости они обертываются вокруг края.Таким образом, вам потребуется всего лишь 4 байта на кадр для полностью анимированной облачной сцены.