Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2013, 22:31   #1
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
Восклицание Perfect Particle 2

Здравствуйте. Хотелось бы представить на данном форуме свою программу Perfect Particle и, вследствие серьезных недоработок в ней, грядущую версию Perfect Particle 2, измененную до неузнаваемости. К сожалению, по причине отсутствия свободного времени, мне не удалось, как было запланировано в апреле, фиксировать на данном форуме весь процесс разработки программы, но, как и было запланировано, я сдал ее в качестве своей курсовой работы и теперь приступаю к ее серьезному улучшению.

Дабы предотвратить кучу бесполезных сообщений, как было в старой теме с моей прошлогодней системой, сообщу сразу, что код Perfect Particle выложен не будет. От участников обсуждения же, прежде всего, хочу увидеть критику программы, критику выдвигаемых мною планов по ее дальнейшему улучшению и результаты тестов программы на разных компьютерах. Хотелось бы избежать бесполезного флуда и видеть здесь сообщения хотя бы немного разбирающихся в данной теме людей.

Я не обещаю частых обновлений в этой теме; все обновления будут производиться по мере разработки программы или каких-то ее компонентов и, что немаловажно, постараюсь обновлять тему таким образом, чтобы мои сообщения максимально (насколько это возможно) отражали ход моей работы. Данная тема, также, будет полезна и просто желающим разобраться в создании собственных систем, так же, как это делаю я, поэтому я с удовольствием отвечу на все вопросы по реализации системы частиц в том диапазоне, в котором сам в этом разобрался.

Итак, что же представляет собою Perfect Particle? Прежде всего, что уже не секрет, это система частиц, позволяющая реализовать различные сложные эффекты в своих графических программах (например, в играх). На данном этапе разработки программы основными ее пользователями, конечно же, являются члены команды Perfect Light, оттого и исходный код как системы, так и ее редактора, доступен только нам. В дальнейшем редактор Perfect Particle 2, думаю, будет использован в качестве инструмента, в котором будут создаваться эффекты для нашей следующей игры.

Отличия данной системы от той, что была представлена в моей прошлой теме, разительны. И, если в прошлой реализации системы мы могли создавать лишь простые, не в полной мере осмысленные эффекты, то здесь мы имеем более широкий набор инструментов, позволяющий расширить диапазон эффектов и улучшить их качество и реализм. Не буду описывать здесь, какие именно изменения были внесены (ведь система была полностью переписана), приведу лишь примеры одних и тех же эффектов, реализованных в старой и новой системах:


Сложность и разнообразие эффектов были достигнуты, прежде всего, введением множества новых свойств, тонкая настройка которых позволяет сделать эффекты более реалистичными. Также, в программе улучшена работа с цветом, добавлена возможность градиентной смены цветов, введено неограниченное количество эмиттеров (излучателей частиц) и возможность перемещать каждый из эмиттеров по заранее заданной траектории. В общем, все, что было задумано до начала разработки программы, было в процессе ее создания реализовано.

К данной теме прикреплена сама программа (Perfect Particle). Во избежание недоразумений, связанных с ее использованием, сразу сообщу о главной, не разрешенной, проблеме: после длительного использования программа зависает, серьезно нагружая компьютер. Нерешенность данной проблемы обусловлена отсутствием понятия 'Perfect Particle' как программного продукта, и то, что я выкладываю в этой теме, есть лишь наработки Perfect Particle 2. Дело в том, что у нас появились идеи, призванные изменить программу до неузнаваемости, а, вместе с тем, и серьезно расширить диапазон возможных эффектов, создаваемых в ней. О том, как это будет сделано, я напишу чуть позже.

Ссылка на программу.

Последний раз редактировалось SaiLight; 13.08.2013 в 22:41.
SaiLight вне форума Ответить с цитированием
Старый 14.08.2013, 10:25   #2
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

В целом неплохо. Оформление знакомое, это какой-то скин AlphaControls?
Из явных недочётов - только мерцание "Прошло времени" и "Сейчас частиц".
Цитата:
сразу сообщу о главной, не разрешенной, проблеме: после длительного использования программа зависает, серьезно нагружая компьютер.
Не заметил ничего подобного. Программа проработа полчаса без проблем.
Kix.IV вне форума Ответить с цитированием
Старый 14.08.2013, 11:24   #3
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
По умолчанию

Kix.IV, оформление - одно из предоставленных в Delphi XE2. Новую систему планирую перенести на Delphi 7.

Цитата:
Не заметил ничего подобного. Программа проработа полчаса без проблем.
Значит, ошибка возникает не на всех компьютерах.
SaiLight вне форума Ответить с цитированием
Старый 14.08.2013, 12:33   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Сообщение от SaiLight Посмотреть сообщение
Значит, ошибка возникает не на всех компьютерах.
Пробовали каким-нибудь профилировщиком прогнать?
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 14.08.2013, 12:49   #5
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
По умолчанию

ROD, не пробовал, но на 90% уверен, что причина ошибки связана с нестандартной темой оформления. Менял тему на стандартную - ошибка исчезала.
SaiLight вне форума Ответить с цитированием
Старый 14.08.2013, 13:05   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Программа годная ) всё понравилось, эффекты красивые получаются, хотя свои я не пробовал ваять.
Есть только существенный вопрос, как это применить-то ? должно же быть некое апи, чтобы задействовать в игре допустим, рендер из программы клиента должен поручать рендеру РР отрисовку частиц нужным образом, а как это сделать ? насколько видно из программки, она задействует опенгл, отсюда вопросы - как задействовать в дх-приложении и куча подобного неясного. Хотя если разработка только внутрипроектная (внутрикомандная) и рендер РР будет вшиваться жёстко в проект, то вопроса конечно не стоит ))

Предложение есть - кнопочку включения выключения эмиттера кинуть туда же где кнопочки добавить убрать - например с глазиком как для слоя в ФШ, мол видно -нет, так быстрее можно будет разбирать эффект по кирпичикам а то между вкладками не очень удобно переключаться. Также сделать (независимо от предыдущей идеи) иконку в список эмиттеров - выключен ли данный эмиттер, более того эту иконку можно сделать непосредственно кнопкой вкл-выкла.

Также есть предложение куда-либо вывести фпс.

Кроме профилировщика могу посоветовать банальное ReportMemoryLeaksOnShutDown := True; (для дельфи2007+) если его ещё не стоит, вполне вероятно может быть просто утечка памяти.
phomm вне форума Ответить с цитированием
Старый 14.08.2013, 13:53   #7
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
Вопрос Графики и траектории. Часть 1

Опишу немного основные идеи, появившиеся у нас и заставившие нас задуматься над разработкой Perfect Particle 2. Прежде всего, это - отсутствие контроля над поведением каждой частицы в процессе ее жизни. Мы задаем лишь начальные свойства, исходя из которых всякая частицы системы будет меняться в процессе своего существования, но мы не имеем возможности менять эти свойства с течением времени. А, тем не менее, для создания более разнообразных эффектов и для добавления им реалистичности, необходимо иметь доступ к некоторым параметрам и возможность их изменять.

Эта идея и привела к главному нововведению, планируемому в Perfect Particle 2 - графикам, используя которые мы получаем доступ к любому параметру частицы, изменяя его в процессе ее жизни. Многие уже, вероятно, знакомы с понятием графиков, использующихся в разных графических программах. График в Perfect Particle 2 представляет собою координатную плоскость, в которой по оси X отложено время жизни объекта (в процентах, от 0 до 100), а по оси Y - один из его параметров. Так, например, рассмотрев подобный график:



мы видим, что в процессе своей жизни частица сначала имеет размер, равный 25, затем, прожив 20% из общего времени, резко уменьшается до 20 и после - начинает плавно увеличиваться до 35.

Таким образом, применив это решение ко всем важным параметрам частицы, мы получаем доступ к процессу их изменения с течением времени. Впрочем, графики могут влиять не только на частицы, но и на эмиттеры. К примеру, с их введением появилась возможность изменять количество создаваемых эмиттером частиц в процессе его жизни.

Другое применение графиков - сохранение траектории движения объекта в графике направлений. В процессе размышления над программой перед нами встал вопрос об улучшении системы перемещений эмиттера. Как можно видеть в Perfect Particle, эмиттеры не совсем верно перемещаются по заданному пути, все время немного от него отклоняясь. Введение графиков позволило решить и эту проблему, сделав, также, перемещение по заданным траекториям более оптимизированным и правильным. А добавление графика скорости позволяет перемещать объект с неравномерной скоростью. В общем случае, теперь задание траектории перемещения объекта будет чуть сложнее, зато без особой нагрузки на компьютер даст намного более широкие возможности перемещения. Редактирование траектории будет состоять из следующих пунктов:

- Создание грубой основы будущей траектории в Редакторе траекторий
- Сохранение созданной траектории в График направлений и ее детализация
- Редактирование скорости перемещения объекта в Графике скорости

Оптимизировать созданную траекторию в Графике направлений - значит, убрать лишние точки, сделав движение по сглаженным участкам траектории более плавным. К примеру, если задать обычную круговую траекторию (как это можно было сделать и в Perfect Particle):



и оптимизировать ее, получим такой результат (сверху - траектория, перенесенная на график направлений программно, а снизу - оптимизированная вручную):


Последний раз редактировалось SaiLight; 14.08.2013 в 14:02.
SaiLight вне форума Ответить с цитированием
Старый 14.08.2013, 13:57   #8
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
Вопрос Графики и траектории. Часть 2

Таким образом, как уже было сказано, появляется возможность задавать сглаженное движение по траектории, используя плавное изменение направления объекта с течением его времени жизни.

В процессе подготовки к написанию новой системы были созданы два компонента для Delphi 7. Один из них - Редактор графиков, другой - написанный на его основе Редактор траекторий. Так как объекты, перемещаемые по новым траекториям теперь будут следовать им не так жестко, как это было в Perfect Particle, редактирование траекторий в Perfect Particle 2 будет производиться в отдельном окне.

Насчет графиков, вроде, все; об остальных нововведениях будет написано чуть позже. Во вложении выкладываю программу, демонстрирующую новые компоненты. Вот краткое руководство по использованию компонента для редактирования графиков:

- Нажатие на кнопку '+/-' - разворачивание/сворачивание компонента
- Вращение колесика мышки - масштабирование сетки
- Вращение колесика мышки при расположении курсора над осью X - масштабирование сетки по оси X
- Вращение колесика мышки при расположении курсора над осью Y - масштабирование сетки по оси Y
- Движение мышки с нажатой средней кнопкой - перемещение сетки
- При выделении мышкой какого-либо отрезка он подсвечивается
- Нажатие левой кнопкой на выделенном отрезке - добавление новой точки
- Нажатие левой кнопкой на точке и перемещение мышки - перемещение выделенной точки
- Нажатие правой кнопкой на точке - удаление точки
- Нажатие левой кнопкой в пустом месте компонента и последующее перемещение мышки - выделение нескольких точек
- Выделенные точки можно перемещать
- Выделение пустого пространства или добавление новой точки снимает выделение со всех выделенных точек

Редактор траекторий в управлении похож на Редактор графиков, поэтому разобраться в нем, думаю, не представит особых трудов.




Отвечаю на заданные в теме вопросы:

Цитата:
Есть только существенный вопрос, как это применить-то ?
Класс PerfectParticle пишется только для использования нашими программистами для проектов, разрабатываемых нашей командой. В данный момент это так, хотя в будущем, возможно, если система будет интересна широкому кругу людей, мы откроем ее. Пока открывать особенно нечего, система еще должна пройти огромный путь оптимизации и улучшения. Также, вероятно, будет возможность сохранять эффекты в виде набора спрайтов, которые любой желающий сможет добавить в свой проект, пока код самого класса будет находиться в закрытом состоянии. Эта возможность в данный момент находится на стадии обсуждения.

Всем спасибо за полезные советы, они будут учтены в ходе разработки.

Test.rar
SaiLight вне форума Ответить с цитированием
Старый 21.08.2013, 01:09   #9
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
Вопрос Новые компоненты

Здравствуйте. С момента моего последнего сообщения в этой теме уже прошло какое-то время, и сегодня я вновь возвращаюсь на этот форум, чтобы рассказать о том, что же было за это время сделано.

Прежде всего, это два компонента, необходимых мне для дальнейшей разработки интерфейса программы. И хотя в интерфейсе Perfect Particle 2 я собираюсь максимально придерживаться идей, реализованных в первой части программы, кое-какие нововведения в нем, все же, будут и, прежде всего это коснется удобства при использовании программы. Для повышения удобства и был создан первый компонент. А вернее, был улучшен уже имеющийся в VCL и так часто используемый в программе SpinEdit. Итак,

TSaiSpin

Данный компонент предназначен для максимально удобного ввода в программу целочисленных значений, но стандартное решение (TSpinEdit), хоть и подходило для моих целей, все же, показалось мне недостаточно удобным. В Perfect Particle это решалось в процессе работы с компонентом внутри самой программы, где для всех компонентов данного типа были созданы вспомогательные функции, добавляющие им необходимые для работы программы возможности. Теперь же я решил внести все изменения напрямую в класс, что привело к созданию данного компонента. Если проанализировать основные недостатки, видящиеся мне в стандартной реализации SpinEdit'а, то можно разделить их на три категории:

- Отсутствие единого события изменения содержимого внутри компонента. И, всвязи с этим, неудобства, вызываемые стандартным событием 'onChange', которое возникает трижды в процессе ввода числа '236'.
- Отсутствие дополнительных удобств при вводе данных, доступных нам в продвинутых программах, таких, как, например, 3D Max.
- Отсутствие контроля за вводимыми значениями. При вводе значения больше максимального, значение внутри компонента сбрасывается на максимальное. При вводе неверного значения (например, строки), просто ничего не происходит.

Исходя из вышеописанных недостатков стандартного компонента, при разработке TSaiSpin было решено внести в него следующие изменения:

- Было введено новое событие 'DoAction', возникающее при нажатии пользователем клавиши ENTER, при потере компонентом фокуса, а также при нажатии на кнопок со стрелками (внутри компонента) или при повороте колеса мышки. Данное нововведение позволит в дальнейшем применять настройки системы только в тех случаях, когда это действительно необходимо и избежать троекратного применения их при вводе все того же числа ('236'). Во вложении с демонстрацией новых компонентов возникновение данного события можно отслеживать по изменениям в Label'е, расположенном справа от компонента.
- При вводе верного значения оно сохраняется в переменную (LastTrue), которая впоследствии используется для восстановления значения внутри компонента при вводе в него любого неверного значения, будь то строка, нецелочисленное значение или любое значение, не попадающее в диапазон [MinValue..MaxValue].
- Были введены дополнительные удобства для ввода данных в компонент. Теперь при повороте колеса мышки значение внутри компонента изменяется на 1 единицу. При повороте же с нажатой клавишей CTRL значение изменяется на 10 единиц.
- При нажатии клавиши ENTER, как и при любом другом действии, вызывающем событие DoAction, а также, при получении фокуса, содержимое компонента выделяется, давая пользователю возможность тут же, без лишних усилий ввести с клавиатуры необходимое значение.

TSaiListBox

Данный компонент представляет собою обычный список, созданный полностью с нуля на основе класса TCustomControl. Еще в начале этого года я создавал класс 'TSaiListBox', но для совершенно иных целей. Его-то, переработав и дополнив, я и оформил в виде компонента. Прежде всего, что особенно важно, данный компонент позволяет двойным нажатием активировать и деактивировать каждый свой элемент. Данная возможность, впрочем, никак не влияет на поведение компонента и введена лишь для визуализации, в данном случае, состояния каждого эмиттера в списке. Здесь активированный элемент означает, что данный эмиттер включен и отображается в окне вывода, а деактивированный - что эмиттер выключен и не отображается.

Во вложении к этой теме прикреплен файл с демонстрацией возможностей новых компонентов.

ComTest.rar

Последний раз редактировалось SaiLight; 21.08.2013 в 01:32.
SaiLight вне форума Ответить с цитированием
Старый 21.08.2013, 01:20   #10
SaiLight
Форумчанин
 
Аватар для SaiLight
 
Регистрация: 10.01.2009
Сообщений: 132
Вопрос Нововведения в Perfect Particle 2. Часть 1

Что же можно сказать насчет изменений, внесенных в Perfect Particle 2 в сравнении со старой версией программы? Прежде всего, необходимо понимать, что данный класс не будет полностью переписан, и все изменения, какими бы серьезными они ни были, будут лишь добавляться к нему, не затрагивая некоторых основополагающих конструкций класса, которых нет нужды затрагивать.

Прежде всего, изменения коснутся диапазонов значений для основных свойств эмиттеров и частиц. Если раньше каждое значение вводилось в диапазоне [Min..Max], используя два соответствующих SpinEdit'а, то теперь, особенно в свете введения в программу понятия 'График', этот метод получения диапазонов будет изменен. В Perfect Particle 2 диапазоны будут задаваться при помощи центрального значения и отклонения от него. То есть, если раньше запись [2..10] выглядела как A = 2, B = 10, то теперь она будет задаваться как A = 6, B = 4.

При этом, используя графики для изменения свойств объектов, при создании, например, каждой новой частицы мы будем вычислять и сохранять случайное отклонение от заданного центрального значения. В данном случае, отклонение будет располагаться в диапазоне [-4..4]. Таким образом, прибавляя данное отклонение к значению свойства на определенный момент жизни, мы будем достигать того же самого случайного разброса, что и при использовании диапазонов из первой версии программы.

Говоря об изменениях, планируемых в Perfect Particle 2, необходимо затронуть и вопрос введения новых свойств частиц и эмиттеров. Одно из главных нововведений появилось, когда встал вопрос о реализации эффекта, похожего на эффект хвоста от ракеты, необходимого для нашей следующей игры.

Возможно, играя в компьютерные игры, многие сталкивались с эффектом 'разрывания' огненного хвоста от ракеты или иных игровых объектов, когда те двигаются со слишком большой скоростью. К примеру, если скорость объекта равна 30, то новые частицы в системе, привязанной к такому объекту, будут создаваться через каждые 30 пикселей на экране. Соответственно, это и дает эффект 'разрывания', когда хвост от ракеты еще виден в левом углу экрана, сам объект уже находится в совершенно противоположном углу, а через весь экран к нему тянутся огненные кляксы - то, что, по идее, должно представлять из себя хвост.

Таким образом, появилась идея введения в систему новых свойств, расширяющих возможность 'закрепления' частиц, реализованную еще в первой версии программы. Напомню, что такая возможность достигалась при включении свойства 'Использовать координаты системы' на вкладке 'Частица', что давало новым частицам возможность перемещаться, используя глобальные координаты всей системы, делая эффект 'деревянным'. Эта возможность и была взята за основу в борьбе с эффектом 'разрывания'. Итак, вот новые свойства, расширяющие данное:

- Использовать направление системы (+ угол отклонения от этого направления). В процессе своей жизни, на каждом шаге, система вычисляет угол между двумя точками - точкой, в которой она находилась на предыдущем шаге и точкой, в которой она находится теперь. Это и есть направление системы. При включении данного свойства эмиттер поворачивается в том направлении, в котором двигается система. Угол отклонения дает возможность повернуть эмиттер в противоположную от направления системы сторону (180), что позволяет создать эффект хвоста от ракеты.
- Толкать в направлении поворота. Данное свойство 'сотрудничает' с предыдущим и заставляет эмиттер задавать направление движения для каждой новой частицы равным углу поворота эмиттера. То есть, данное свойство, как раз, и отвечает за то, в какую сторону полетят созданные частицы.

Таким образом, используя эти два свойства, мы получим красивый хвост для ракеты, не зависящий от скорости перемещения объекта, но зависящий от его направления. То есть, даже при самой большой скорости нашей ракеты, ее хвост никогда не 'порвется' и при этом не будет выглядеть деревянным. Впрочем, зависимости от скорости можно, при желании, достичь, изменяя иные параметры эмиттеров, что лишь сделает эффект более красивым и разнообразным.

К тому же, данные свойства расширяют и диапазон возможных эффектов, создаваемых в системе. Кстати, два свойства, описанные выше, плюс графики для изменения некоторых других свойств с течением времени - основные нововведения в Perfect Particle 2. Я думаю, оттого они и заслужили отдельного упоминания.
SaiLight вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Perfect World сервер Aleksey1408D Свободное общение 1 21.01.2011 14:18
Clock by Perfect Light SaiLight Софт 2 28.07.2010 10:16