Быстрая система частиц на GPU, обладающая следующими характеристиками:
1) Занимает константное количество памяти, не зависящая от количества частиц. Я запускал слайдшоу из миллиарда частиц на смартфоне с 1 ГБ памяти)
2) Не потребляет процессорного времени, так как всё делает GPU.
3) Помещается в exe'шник размером менее 3 КБ.
4) Является функцией от времени => её можно перематывать в любой момент и её не нужно просчитывать, когда она не видима камерой.
5) Для реализации достаточно поддержки OpenGL ES 2.0 и даже не нужно ни одного расширения!
6) Нет сортировки, поэтому используется только аддитивный блендинг. Но метод можно расширить, если реализовать поразрядную сортировку на GPU с помощью вычислительных шейдеров. Но в этом случае пункты 1, 3 и 5 исчезнут.
Новая оптимизированная версия под Android на OpenGL ES 2.0 с возможностью крутить камерой и кучей других фич. Благодаря пункту 5 работает даже на таком говне мамонта, как Mali 400.
Ссылка: Google Play
Подробнее про управление можно узнать из ролика на странице приложения или прочитать в окне "О программе...".
скриншоты?
Suslik
> скриншоты?
Добавил один, но пришлось jpeg'ом качество сильно испортить, чтобы влезть в ограничение 125 КБ. И вообще это надо в движении смотреть. Ещё добавил незапакованную версию, на которую антивирусы ругаться не должны.
прикольно, как делал? это через image2D во фрагментном шейдере или через геометрический шейдер?
Suslik
> прикольно, как делал? это через image2D во фрагментном шейдере или через
> геометрический шейдер?
Вершинный шейдер + фрагментный шейдер. Никаких геометрических и вычислительных шейдеров не использовал. В демке нет ни одной текстуры. Всё полностью генерируется в вершинном шейдере в реальном времени и сразу же рисуется как point sprites. Шейдер использует только текущее время, пару десятков констант (uniform'ов) и gl_VertexID. Никаких вершинных атрибутов, никаких текстур не используется вообще.
VBO только один - на 4 байта. Он нужен OpenGL, чтобы тот не подумал, что если я не задал ни одного атрибута, то можно ничего и не рисовать. Такое поведение вроде как прописано в спецификации compatibility контекстов версии меньше 4.3 и я реально с ним сталкивался. Правда не на всех драйверах. В core контексте и в compatibility начиная 4.3 такого уже нет. Но я создавал compatibility, чтобы за счёт фиксированного функционала уменьшить размер демки.
аа, понял. я просто думал, что в таком случае память под автоматически сгенерированные индексы всё равно выделяется на стороне GPU. но логично, что по идее может и обойтись без неё.
Но вообще можно сколько угодно расширять этот метод текстурами, UBO и другими способами передавать данные в шейдер. Можно передавать какие-нибудь коэффициенты полинома или явную зависимость какого-то параметра от возраста частицы. И так далее.
А можно прямо в код шейдера вписать любую функцию от времени.
Новая версия: FlyingParticles 1.1
По сравнению с предыдущей версией стало намного красивее.
Немного увеличил размер частиц и сделал их гораздо более яркими. Увеличил скорость вращения эмиттера. Теперь он разбрасывает частицы в разные стороны по спирали.
Кстати, забыл сказать, что ещё с первой версии на Shift можно ускорять время, а на Ctrl - замедлять. В замедленном режиме здорово наблюдать, как перед тобой пролетают частицы.
красиво! Сделать еще вывод FPS и будет бэнчмарк :)
RadianTOR
> Сделать еще вывод FPS и будет бэнчмарк :)
Ну эту фичу я для фрапса оставил.
Добавил музыку, изменил эффект и сделал автоматическое изменение скорости эффекта. Получилась вот такая интро:
FlyingParticles 4k intro
Правда не совсем обычная, потому что нет сюжета и длится она бесконечно. К тому же, на разных видеокартах она выглядит немного по-разному.
Ещё осталось немного места, но не знаю, что бы сюда ещё полезного добавить. И это я ещё управление не выпилил, без него ещё место освободится. В целом наверное доступно ещё пол-килобайта до лимита в 4К.
Выложил на pouet.net:
http://www.pouet.net/prod.php?which=67219
gammaker
Win8.0, GTX770 - демка не работает.
запускается норм
Mikle
> Win8.0, GTX770 - демка не работает.
Странно. А что происходит? Вылетает при запуске? У меня на Win 10, GTX 755M работает...
Просто пишет, что программа закрыта потому, что не работает.
Тема в архиве.