В этой статье продолжим изучать шеидерописание.
Обсудим такие моменты как скалирование и поворот UV координат, и напишем простенький шеидер который будет проявлять спрайт через некую текстуру (в нашем случае градиент или шум).
Погнали !
Скалирование UV.
Для этого достаточно умножить UV на какое то значение:
Либо , если нужно скалировать только по одной оси , то вектор:
Если присмотреться то заметно, что ось вращения находится в верхнем левом углу.
Если нам нужно скалировать от центра спрайта то необходимо прописать оффсеты:
(так как пространство нормализовано — то 0.5 это ровно середина координат)
Поворот UV.
С поворотом дело обстоит чуть сложнее. Ибо формула выглядит вот так:
cos(angle)*UV.x-sin(angle)*UV.y, cos(angle)*UV.y+sin(angle)*UV.x
Поэтому пишем :
Как и в случае со скалированием — ось вращения у нас в левом верхнем углу.
Для того чтобы выставить в центр спрайта дописываем оффсет:
(Я не стал убирать переменную PIV из кода, покрутив её вы увидите как ось вращения меняется по горизонтали. Если вам нужно ось вращения в центре — просто вместо PIV напишите 0.5, или выставите значение переменной = 0.5)
Сокрытие спрайта при помощи текстур.
Начнем с градиента.
Закидываем переменные для текстуры градиента и цифрового значения.
Подключаем в переменную градиент :
Далее в коде получаем R канал градиента. ( мы можем взять любой , так как изначально градиент черно-белый.)
И умножаем альфа канал нашего спрайта камушка на R канал градиента:
Крутим рульку base, и наблюдаем как градиент скрывает наш камень.
Переход через шум.
Заменяем градиент на шум.
Оптимизируем код и добавляем функцию Step. Она позволяет убирать плавные переходы в шуме от черного к белому. Получая при этом ровные границы между цветами.
Крутим рульку:
Надеюсь вам был полезен этот материал.
Подписывайтесь на канал, вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !
#godot #gdscript #игровой движок #уроки #программирование