Найти в Дзене
Игровой движок Godot engine

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

В этой статье продолжим изучать шеидерописание.

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

Погнали !

Скалирование UV.

Для этого достаточно умножить UV на какое то значение:

-2

Либо , если нужно скалировать только по одной оси , то вектор:

-3
-4

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

-5
-6

Поворот UV.

С поворотом дело обстоит чуть сложнее. Ибо формула выглядит вот так:

cos(angle)*UV.x-sin(angle)*UV.y, cos(angle)*UV.y+sin(angle)*UV.x

Поэтому пишем :

-7
-8

Как и в случае со скалированием — ось вращения у нас в левом верхнем углу.
Для того чтобы выставить в центр спрайта дописываем оффсет:

-9
-10

(Я не стал убирать переменную PIV из кода, покрутив её вы увидите как ось вращения меняется по горизонтали. Если вам нужно ось вращения в центре — просто вместо PIV напишите 0.5, или выставите значение переменной = 0.5)

Сокрытие спрайта при помощи текстур.

Начнем с градиента.
Закидываем переменные для текстуры градиента и цифрового значения.

base используем для сдвига градиента по оси Х
base используем для сдвига градиента по оси Х

Подключаем в переменную градиент :

-12

Далее в коде получаем R канал градиента. ( мы можем взять любой , так как изначально градиент черно-белый.)
И умножаем альфа канал нашего спрайта камушка на R канал градиента:

-13

Крутим рульку base, и наблюдаем как градиент скрывает наш камень.

-14

Переход через шум.

Заменяем градиент на шум.

-15

Оптимизируем код и добавляем функцию Step. Она позволяет убирать плавные переходы в шуме от черного к белому. Получая при этом ровные границы между цветами.

-16

Крутим рульку:

-17

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

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