Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Погрузитесь в логическую головоломку: откручивайте болты из планок на самых сложных уровнях! Вы не только расслабитесь в конце сложного дня, но еще и натренируете свой мозг, решая увлекательные задачки. Справитесь с ролью опытного мастера? Попробуйте свои силы в режиме онлайн бесплатно и без регистрации!

Головоломка. Болты и Гайки

Казуальные, Гиперказуальные, Головоломки

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Gamedev + VFX

С этим тегом используют

Инди Разработка Инди игра Игры Unity Компьютерные игры YouTube Компьютерная графика Спецэффекты Фильмы 3D Cgi VFX Adobe After Effects Все
35 постов сначала свежее
6
MrMouseSE
7 лет назад
Лига Разработчиков Видеоигр

Базовые FX на GMS2. Составные эффекты⁠⁠

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

Базовые FX на GMS2. Составные эффекты VFX, Gms2, Gamedev, Гифка, Длиннопост

Первое, что хочется сказать: @AZAMATIKA, в прошлом посте давал ссылку на редактор партиклов для GMS2. Лично у меня противоречивые чувства от этой штуки.

Плюсы очевидны: наглядность, возможность редактировать "налету".

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

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

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

Погнали!

Пара слов теории.

собственно "кольцо огня" из первого поста:

// объявление системы
ring = part_system_create()
// объявление и свойства частиц
ring_part = part_type_create()
part_type_shape(ring_part, pt_shape_ring)
part_type_color_hsv(ring_part, 4,14,80,110,220,250)
part_type_life(ring_part,10,11)
part_type_alpha2(ring_part,0.4,0)
part_type_size(ring_part,0.3,0.3,0.51,0)
part_type_blend(ring_part,0)
//объявление и свойства эммитера
ring_emit = part_emitter_create(ring)
part_emitter_region(ring, ring_emit, x,x,y,y,ps_shape_rectangle,ps_distr_gaussian)
part_emitter_burst(ring, ring_emit, ring_part, 1)

вкратце: объявляется система частиц (это абстракция управления), объявляется частица и её параметры (это непосредственно то, что можно будет потрогать глазами), объявляется эммитер и его параметры (это управляющая сущность, которая непосредственно спамит сущностями партиклов).

Отдельно про прикладное использование. Например: если привязать part_emitter_region к мышке (в поля x и y вписать mouse_x и mouse_y) то эффект всегда будет рождаться под курсором. А если х и у перепутать - то получите зеркалирование относительно главной диагонали. Так, например, можно реализовать какую-нибудь вундервафлю, которой игрок указывает куда упасть.

Базовые FX на GMS2. Составные эффекты VFX, Gms2, Gamedev, Гифка, Длиннопост

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

Базовые FX на GMS2. Составные эффекты VFX, Gms2, Gamedev, Гифка, Длиннопост

разбираемся: разлетающиеся "осколки", взрывная волна, огонь "бушует" внутри кольца ну и само кольцо. Итого 5 штук:

if mouse_check_button_released(mb_left)
{
scr_ring() //кольцо взрывной волны
scr_firering() //кольцо "огня"
scr_turbulence() //беснующийся огоньв нутри кольца
scr_ringsmoke() //дым после взрыва
scr_smallparts() // осколки
}

этот блок просто для наглядности логики, лежит у меня в объекте, в steps. Соответственно вызывает 5 скриптов, в каждом из которых хранится свой эффект, который является частью общего эффекта. И выглядят они вот так

Базовые FX на GMS2. Составные эффекты VFX, Gms2, Gamedev, Гифка, Длиннопост

Собственно, собрав всё это в кучу и получаем то, что на гифке вначале. Этот взрыв гораздо интереснее и красочнее, радует глаз.

Составные эффекты можно реализовывать по-разному, в зависимости от задачи, вот, например две разных реализации огнемётов, вращающихся за курсором:

Базовые FX на GMS2. Составные эффекты VFX, Gms2, Gamedev, Гифка, Длиннопост

левый создан по принципу, что изложен выше: эмиттер из исходной точки выпускает два разных набора частиц.

direction = point_direction(x,y,mouse_x,mouse_y)
flame = part_system_create()
smoke_part = part_type_create()
part_type_shape(smoke_part, pt_shape_explosion)
part_type_color1(smoke_part, c_dkgray)
part_type_life(smoke_part,22,28)
part_type_alpha3(smoke_part,0.0,0.45,0)
part_type_size(smoke_part,0.0,0.6,0.01,0.2)
part_type_speed(smoke_part,10,11,0,2)
part_type_direction(smoke_part,direction-18,direction+18,0,-1.5)
part_type_blend(smoke_part,0)
part_type_orientation(smoke_part,-14,14,4,-1,0.5)


flame_part = part_type_create()
part_type_shape(flame_part, pt_shape_explosion)
part_type_color_hsv(flame_part, 4,15, 230,255,240,255)
part_type_life(flame_part,18,22)
part_type_alpha3(flame_part,0.0,0.6,0)
part_type_size(flame_part,0.3,0.8,-0.02,0.2)
part_type_speed(flame_part,10,11,0,2)
part_type_direction(flame_part,direction-15,direction+15,0,-1)
part_type_blend(flame_part,1)
part_type_orientation(flame_part,-14,14,4,-1,0.5)


flame_emit = part_emitter_create(flame)
part_emitter_region(flame, flame_emit, x-12,x+12,y-12,y+12,ps_shape_rectangle,ps_distr_gaussian)
part_emitter_burst(flame, flame_emit, smoke_part, 18)
part_emitter_burst(flame, flame_emit, flame_part, 18)

по сути - это два разных эффекта (дым и огонь), один эмиттер рождает враз и то и другое.

А правый исповедует несколько иную логику:

direction = point_direction(x,y,mouse_x,mouse_y)
variation = random_range(0,100)

flame = part_system_create()

flame_part = part_type_create()
part_type_shape(flame_part, pt_shape_explosion)
if variation > 50
{
part_type_color1(flame_part, c_dkgray)
part_type_life(flame_part,22,28)
part_type_alpha3(flame_part,0.0,0.55,0)
part_type_size(flame_part,0.0,0.6,0.01,0.2)
part_type_speed(flame_part,12,13,-0.3,2)
part_type_direction(flame_part,direction-18,direction+18,0,-1.5)
part_type_blend(flame_part,0)
part_type_orientation(flame_part,-14,14,4,-1,0.5)
}
else
{
part_type_color_hsv(flame_part, 4,15, 230,255,240,255)
part_type_life(flame_part,18,22)
part_type_alpha3(flame_part,0.0,0.6,0)
part_type_size(flame_part,0.3,0.8,-0.02,0.2)
part_type_speed(flame_part,8,11,0,2)
part_type_direction(flame_part,direction-15,direction+15,0,-1)
part_type_blend(flame_part,true)
part_type_orientation(flame_part,-14,14,4,-1,0.5)
}
flame_emit = part_emitter_create(flame)
part_emitter_region(flame, flame_emit, x-12,x+12,y-12,y+12,ps_shape_rectangle,ps_distr_gaussian)
part_emitter_burst(flame, flame_emit, flame_part, 18)

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

Ещё один тип составных эффектов - те, что идут каскадом, вызывая после себя другие эффекты.

Базовые FX на GMS2. Составные эффекты VFX, Gms2, Gamedev, Гифка, Длиннопост

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

Базовые FX на GMS2. Составные эффекты VFX, Gms2, Gamedev, Гифка, Длиннопост

Ну вот, собственно и всё, обзорно по составным эффектам. Ну и фейерверку вам за пройденный уровень! :D

Базовые FX на GMS2. Составные эффекты VFX, Gms2, Gamedev, Гифка, Длиннопост
Показать полностью 7
[моё] VFX Gms2 Gamedev Гифка Длиннопост
8
37
MrMouseSE
7 лет назад
Лига Разработчиков Видеоигр

Базовые FX на GMS2⁠⁠

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

Базовые FX на GMS2 Gms2, Gamemaker Studio 2, VFX, Gamedev, Гифка, Длиннопост
Базовые FX на GMS2 Gms2, Gamemaker Studio 2, VFX, Gamedev, Гифка, Длиннопост
Базовые FX на GMS2 Gms2, Gamemaker Studio 2, VFX, Gamedev, Гифка, Длиннопост
Базовые FX на GMS2 Gms2, Gamemaker Studio 2, VFX, Gamedev, Гифка, Длиннопост
Базовые FX на GMS2 Gms2, Gamemaker Studio 2, VFX, Gamedev, Гифка, Длиннопост
Базовые FX на GMS2 Gms2, Gamemaker Studio 2, VFX, Gamedev, Гифка, Длиннопост

И небольшой тутор для самых юных с парой фишек:

Базовые FX на GMS2 Gms2, Gamemaker Studio 2, VFX, Gamedev, Гифка, Длиннопост

это коТ системы частиц. Параметры эммитера, которые задействованы - область применения и принцип рождения. Тут конкретно - разово рождается 12 штук частиц по имени flame_part.

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

Самое интересное, конечно же, настройки частиц. По порядку:

- shape - картинка, которая будет использоваться как частица

- color_rgb - цвет партиклов в ргб диапазоне... ни добавить, ни отнять.

- life - время жизни

- apha3 - какой-то местный кастрат альфа/пер тайм. Т.е. отрезок жизни частицы делится на трое и катает альфу от первого ко второму, а затем к третьему значению. (У меня 0.0 и 0 оба варианта допустимы, но через точку писать не стоит, конечно же, дабы не захламлять, не пишите так)

- size - размер частицы

- speed - скорость

- direction - направление, по которому будет применяться параметр скорости

- blend - режим смешивания аддитив (может быть включен и нет)

- orientation - поворот частицы во время жизни.

Настройки есть ещё, но общий принцип работы всё равно для всех примерно один.

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

Например:

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

Альфа - так или иначе все частицы рождаются в какой-то момент и в какой-то исчезают. Чем плавнее частицы переходят в ноль - тем более незаметно это исчезновение. Поэтому на какие-то плавные эффекты, типа взрывов, огня - альфа должна уходить в ноль. Не стоит недооценивать третью точку в альфа3. Эффект, альфа3(1,1,0) - будет дольше виден, чем альфа2(1,0) и наоборот. А если ваш эффект рождается из точки - то альфа3(0,1,0) - как раз то, что нужно.

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

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

Поворот - поворот добавит естественности, но может и наоборот сделать всё говном. Крайне важно не переборщить, иногда для хорошего эффекта хватает пол градуса в секунду, а иногда и бешенное вращение будет збс!

И ещё пару слов про параметры. Почти во всех параметрах частицы есть значение эволюции (incr) и хаотичности (wiggle). Эволюция более менее понятна - чем больше плюс - тем быстрее приращение, в минус - тоже, но с обратным знаком. А вот wiggle - вещь более специальная и не везде подойдёт. Например для реактивной струи огнемёта нелохо завиглить размер - это придаст потоку хаотичной турбулетности (на самом деле нет, но выглядеть будет похоже). Или вам нужны взлетающие мыльные пузыри (тут виглом можно создать эффект лопающихся, во время подъема шариков). А в скорости, например, wiggle позволит создать эффект пробегающих по скоплению эффекта огоньков. Применений полно, всё не перечислить. Главное общая концепция - чем больше хаоса - тем вероятнее вигл надо использовать.

Ну и не расчитывайте "сесть и сделать". Более менее внятные картинки получаются всегда раза с 50ого. Настроил, посмотрел... посмотрел и настроил... Главное, во время отладки, не менять все параметры враз, а вычленять какие-то конкретные и подправлять их, потом брать следующий, и т.д. и т.п.

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

З.ы. конкретные листинги выкладывать не буду, чтоб не захламлять, если кому надо - обращайтесь в комментах.

Показать полностью 6
[моё] Gms2 Gamemaker Studio 2 VFX Gamedev Гифка Длиннопост
12
MrMouseSE
7 лет назад
Лига Разработчиков Видеоигр

Круговая индикация (fixed)... GMS2⁠⁠

В прошлой теме мне справедливо заметили про рукожопость про низкую производительность решения, с чем я согласен. Гораздо более правильно отрисовывать индикатор в один примитив, чем в 100500 линий. @Nefrace , спасибо тебе за поджопник в нужном направлении подсказочку. Был ешё вариант с постепенной отрисовкой спрайта, но, конкретно для этой задачи, данный способ считаю неоптимальным, но, в принципе, более универсальным.

Погнали!

Круговая индикация (fixed)... GMS2 Game maker studio 2, Gamedev, Гифка, Длиннопост, VFX

Итак, в чем прикол? Круг отрисовывается в N трианглов целиком, а не из последовательной отрисовки каждой отдельной линии, из которой круг состоит. Не думаю, что можно подвесить приложуху тем круговым индикатором, что был в первый раз, уж больно он прост, но, если напихать вдесятером - то и саша порвётся сильно захотеть - можно что угодно повесить.

Листинг:

Круговая индикация (fixed)... GMS2 Game maker studio 2, Gamedev, Гифка, Длиннопост, VFX

почему картинкой? Ну потому что - прошаренные чуваки и так всё напишут, а те, кому это может быть полезным - при переписывании подправят под себя (или хотя бы проникнуться тем, что происходит в скрипте)... хотя кого я обманываю. Если кому-то нужен формат для копипасты: https://pastebin.com/vfnLzgqU

ну и для развлекалова, что можно намутить из такой штуки:

Круговая индикация (fixed)... GMS2 Game maker studio 2, Gamedev, Гифка, Длиннопост, VFX

такие загогулины делаются путём добавления в lenghdir_x/lenghdir_y во второй аргумент (угол) функции типа sin/cos/tan и всё такое, можете поэксперементировать сами.

Круговая индикация (fixed)... GMS2 Game maker studio 2, Gamedev, Гифка, Длиннопост, VFX

з.ы. вкратце для тех, кто не шарит и хочет разобраться: в скрипт передается значение индикатора (например скорость, под переменную current_value), дальше значение преобразуется в угол дуги через отношение макс.угла к макс.возможному значению счётчика. Потом проверка на активацию (activation_button - это кнопка, которая активирует увеличение значения скрипта). В каскаде условий ещё свистоперделки напиханы, типа замедления увеличения значения обратнопропорционально текущему(типа чем выше скорость, тем медленнее она прирастает). При достижении капа - счетчик сбрасывает рандомное значение, ну типа имитирует реал... впрочем похуй, выглядит збс! :D Дальше в цикле прокатывается i вплоть до текущего значения счетчика в градусах, где шаг - отношение к радиусу. Почему к радиусу? Ну потому что физический смысл получится - кол-во сторон многоугольника... Из свистелко-перделок - определение цвета в зависимости от значения. Если это не надо - можно вынести arc_color выше цикла и завязать на текущее значение

arc_color = make_color_hsv(70 - clamp(70/max_value*current_value,10,70),255,255)

тогда меняться будет вся полоса, а не радугой. Ну и расширение первого значения в hsv - расширит диапазон цветов, дуги. Последняя точка рисуется вне цикла, чтобы прирост дуги был не скачками кратно шагу i, а плавненько.

з.ы. в листинге вариант с половинным градиентом, если хочется, что бы полоска стухала и наружу и внутрь - нужно делать ещё один проход draw_primitive_begin/draw_primitive_end, с циклом, в точках которого указывать альфу наоборот (про толщину тока не забываем). Почему так?

Круговая индикация (fixed)... GMS2 Game maker studio 2, Gamedev, Гифка, Длиннопост, VFX

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

з.з.ы. а ещё можно в поверхости бублики вырезать

Круговая индикация (fixed)... GMS2 Game maker studio 2, Gamedev, Гифка, Длиннопост, VFX
Показать полностью 5
[моё] Game maker studio 2 Gamedev Гифка Длиннопост VFX
9
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии