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