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

№144. Работа с шеидером через код. Основы основ.

Серия статей посвященная работе с визуальным редактором шеидера находится вот тут — Раз, Два,Три.

В этой же статье будем разбираться с тем как писать шеидеры напрямую в редакторе кода.

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

Первое, что стОит уяснить — координаты по которым расчитывается положение пикселей в спрайте.
Для этого используется две карты градиента. Красный используется для Х координаты, и зеленый для Y.
Координаты нормализованы, соответственно левый верхний угол = 0.0 , а правый нижний = 1.1.

Добавляем в проект спрайт, подвешиваем на него шеидер. Открываем редактор и начинаем писать код.

Собственно сразу же годо нас предупреждает о том, что надо указать тип шеидера.

-2

Наш вариант canvas_item. Так что пишем :

-3

Весь код отрабатывается в функции fragment().

Для начала обьявим наш спрайт. Для этого указываем тип переменной vec4 и её название sprite, а в качестве данных у нас выступает texture.
Далее годо предложит вам подсказку, из которой станет ясно что надо подать само изображение (sampler 2D) и его UV координаты (vec2).

-4

Дописываем данные, и не забываем ставить в конце строки «;».
И теперь для того чтобы шеидер мог вывести результат своей работы надо подать эти данные в COLOR.

-5

В результате вы не увидите никаких изменений, а значит что вы сделали всё правильно и теперь можно работать с исходными данными.
Но прежде чем идти дальше, давайте вернемся к теории. Все типы и функции описаны подробно в документации. И если посмотреть в справку то можно понять что vec4/3/2 это не что иное как вектор. В нашем случае это 4-х компонентный вектор включающий в себя текстуру и координаты. А COLOR это цвет в формате vec4 (RGBA).
И если мы сейчас уберем нашу переменную sprite , и подадим в COLOR просто цвет, то получим следующее:

данные РГБА тоже нормализованы.
данные РГБА тоже нормализованы.

А теперь вернемся к нашим UV координатам.
Если сейчас мы подмешаем к UV исходной картинки некие координаты , то увидим как изображение внутри спрайта сдвинется.
Помним что координаты нормализованы:

до и после.
до и после.

Ну и для примера, включим в свойствах нашего спрайта повтор изображения,

-8

закинем TIME в ось X, и увидим как изображение бесконечно двигается:

-9
-10

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

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

К примеру возьмем спрайт смайла, и зальем его полностью белым цветом.

-11

Либо оставим только красную составляющую:

-12

А подмешав синус и округление можно сделать к примеру мигающий спрайт.

-13

Шейдеры могут модифицировать всё изображение целиком а не только текущий конкретный спрайт. Для этого используются координаты всего экрана.
В следующих статьях рассмотрим эти и другие моменты более подробно.

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

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