Найти тему
Игровой движок Godot engine

№135. Практика. Рой мух на основе шума.

В этой статье соберем сценку, в которой над мусорным ведром будет летать несколько мух.

Основное — анимация должна быть зациклена и не должна быть создана вручную по понятным причинам.

Использовать будем шум. Если кто то пропустил в свое время статью по шуму — вам сюда.

Создаём новый ресурс.

-2

Чтобы получить зацикленность в настройках шума поставим галочку возле Seamless. Таким образом пиксели в начале и в конце изображения станут идентичными и мы получим ровный стык при переходе с последнего значения в первое.

-3

Сохраним ресурс как noise.tres.
Если вам нужно визуально видеть как выглядит шум, то можно подключить его скажем в textureRect. Для этого просто дропните ресурс шума в его текстуру.

-4

Можно убедиться что текстура действительно бесшовная.

-5

Теперь пару слов о том как нам получить непосредственно сами данные зацикленного шума.
Если внимательно посмотреть в инспектор, то можно заметить что галочка Seamless находится не в самом блоке шума , а выше в разделе NoiseTexture.
Если мы будем брать данные из noise.get_noise2d, то никакой зацикленности мы не получим, так как обращение будет к шуму.

Для того чтобы нам получить возможность получать данные с зацикленной текстуры , нам необходимо создать новый ресурс Image, и указать в качестве изображения для него нашу NoiseTexture.
Тем самым мы как бы запекаем данные шума в картинке, с которой в последствии можем собирать данные при помощи get_pixel.

Код.

Загружаем текстуру в новый Image. (yield в коде для того, чтобы текстура успела сгенерироваться перед манипуляциями)
В цикле создаем наших мух, и сразу накидываем им разные размеры для объема.

-6

В процессе каждой мухе указывам в качестве сдвига данные значений пикселей из Image.
Для того чтобы нам не вылетать за пределы текстуры , я ограничил данные для координаты = 299 (размеры текстуры шума). Как только мы прочитали 299 пиксель, сбрасываемся в 0.

Thrash — спрайт мусорного ведра.
Thrash — спрайт мусорного ведра.

Не забываем что get_pixel возвращает нам данные в виде RGBA, поэтому в коде я беру нулевой индекс (R).

Ну и теперь меняя значения шума в ресурсе шума, мы можем менять динамику мух практически в один клик.

-8

Надеюсь вам был полезен этот материал.
Подписывайтесь на канал,
вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !

#godot #gdscript #уроки #игровой движок #программирование