|
|
|||||
[+4 11.07.10]
Регистрация: Jun 2010
Сообщений: 9
|
Система частиц
В общем, захотелось мне написать что-то красивое. Подумал, что система частиц - это самое оно. Решил сделать подобие огня, но так и не доделал, ибо лаги аццкие. На 50-и частицах у меня начинаются неимоверные тормоза и подбирать параметры при таком рендеринге я как-то не могу.
http://petya-kurochkin.narod.ru/particles.html - это то, что получилось. Исходники во вложении. Немного о том, как я это делал: 1. Создаётся Bitmap. С помощью AddChild он добавляется к экземпляру класса документа. 2. Загружается картинка с файла, и используется как текстура при создании сис-мы частиц. 3. Система частиц (ParticlesSystem) создаёт массив Particles, даёт им случайные текстуры (но в примере я использовал только одну) и рандомизирует всякие параметры: скороть, угловая скорость, угол, начальные координаты, первое время жизни и т.п. 4. Подписываемся на ENTER_FRAME, в котором вызываем метод Render() сис-мы частиц. Та, в свою очередь вызывает метод Render() у каждой частички. Particle.Render обновляет данные о частице (скорость и т.п.) и делает метод Bitmap.Draw() с соответствующими цветовыми и пространственными преобразованиями. Метод наложения multiply. 5. После этого копируем с вспомогательного Bitmap'а всё на основной. Но при такой схеме всё достаточно сильно тормозит. Как можно оптимизировать? Я избавился от всех лишних операций с памятью, пересмотрел код и т.п., но мысли приходит только три: 1. Делать не Draw(...), а использовать какие-то другие средства для рисования, возможно, более быстрые. 2. Избавится от цикла вызовов Particle.Render, а в цикле пройтись по его параметрам из внешнего класса таким образом сократив время на вызов функции. Но мне кажется, что это левое решение, ибо портит архтитектуру + неизвестно, сколько времени потратится на обращение к данным класса Particles. 3. Ждать аппаратного ускорения. |
|
|||||
[+4 11.07.10]
Регистрация: Jun 2010
Сообщений: 9
|
Никто систему частиц не делал никогда, что ли?(
|
|
|||||
Регистрация: Feb 2009
Сообщений: 1,195
|
При рисовании через copyPixels и с общим обработчиком для всех частиц (без объекта "частица" и вызовов её методов) будет существенно быстрее. draw и постоянные вызовы методов тормозят. Если надо частицы разных цветов и размеров, можно подготовить их заранее (программно) во всех нужных вариантах.
|
|
|||||
Регистрация: Mar 2008
Сообщений: 259
|
Пффф, я что-то не понял а вы что работаете постоянно с одной битмапдатой и одним битмапом?
Т.е. вы в цикле буквально затираете экран, отрисовываете и изменяете пикселы его содержимого?? Создатей лучше n битмапов, с разными параметрами изначальными, которые будут ездить по сцене (и даже пусть вы применяете преобразования к ним) - и то будет быстрее. То, что вы сейчас делаете - это отрисовывание программное многоразовое перерисовывание кучи пикселов. |
|
|||||
[+4 11.07.10]
Регистрация: Jun 2010
Сообщений: 9
|
VVAll при наличии у частиц альфа-канала уже не получится использовать CopyPixels, очевидно же. Вариант программной подготовки всех возможных вариантов частиц тоже как-то не впечатляет: чел. глаз может видеть, как я помню несколько миллиардов цветов. Да черт с ним, даже, если сделать 65535 цветов еще остаётся трансформация поворота. Т.е. еще минимум 300 вариантов. Перемножаем. Мде. Нехило так выходит. А ведь еще несколько текстур на одну частицу планируется.
Сайлас: Цитата:
|
|
|||||
Регистрация: Feb 2009
Сообщений: 1,195
|
А не надо замахиваться на такое количество вариантов частиц и прочие навороты. Проблема с альфа-каналом решается точно так же, как и с цветами. Просто надо помнить, что Flash медленный по всем параметрам, и не пытаться использовать его не по назначению.
|
|
|||||
Регистрация: Mar 2008
Сообщений: 259
|
Я думаю мало кто расскажет, как обрабатывает флеш движение своих элементов (хотя, на этом форуме, есть знатоки внутренностей флеша). Но хотя бы достаточно того, что те библиотеки написаны не на экшнскрипте, а ниже на с++ скорее всего.
Ну и не говоря, о том, что вы с этими пикселями еще лишние действия делаете. Ну попробуйте крутить и двигать 50 битмапов и посмотрите на результат. |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
вот хорошие демки по работе с партиклями:
http://www.nulldesign.de/category/ex...nts/particles/ движки * FLiNT http://flintparticles.org/ * Partigen (Not free) http://desuade.com/products/partigen/ * Pulse Particle System - A general purpose AS3 particle system. http://www.rogue-development.com/pulseParticles.html * Emitter - ActionScript 3.0 particle FX engine. http://code.google.com/p/emitter/ * Stardust - ActionScript 3.0 Particle engine. http://code.google.com/p/stardust-particle-engine/ * Orion - An all around simple and flexible particle generator. http://blog.coursevector.com/orion * particlesun - A 3D or 2D Particle Engine for Actionscript 3.0 http://code.google.com/p/particlesun/
__________________
Отряд Котовскага |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
petyakurochkin, проверяете ли вы, перед тем как вызвать draw, попадает ли отрисовываемая частицу в "поле зрение" битмапы, на которой вы рисуете? Если частица выходит за ее границы - то неотрисовка частицы может серьезно увеличить производительность
|
|
|||||
Регистрация: Feb 2007
Сообщений: 30
|
А кто-нибудь может хотя бы в общем описать плюсы/минусы этих движков. В частности интересует самый быстрый и самый легковесный.
|
Часовой пояс GMT +4, время: 06:55. |
|
« Предыдущая тема | Следующая тема » |
Теги |
оптимизация , тормоза , частицы |
|
|