Godot путь новичка. Шейдер ч.2
Добрый вечер, мои дорогие подписчики. Это будет продолжение поста Godot путь новичка. Первый Enemy и первый Шейдер
Смотрел, как сын делал задание по прошлому посту, понял, что ему например, совсем не все понятно было. Постараюсь разъяснить в меру сил, ну и немножко доработать шейдер, в конце поста получится, примерно, следующая анимация.
Ну во первых, что такое UV - это развертка, по сути просто преобразование координат с трехмерного объекта в соответствующие координаты на текстуре, поскольку спрайт это двумерный объект, то все ещё проще и развертка соответствует самому спрайту, разве что координаты в UV идут от 0.0 до 1.0.
Очень наглядно демонстрируется это в туториалах Godot.
Ну добавим в шейдере ранее написанном, одну строчечку для наглядности ещё разок.
Вот ну думаю из этого уже можно догадаться, что белый цвет это значения всех каналов равны 1, а черный это когда цветов нет и значения всех каналов равны 0. Серый это смешение всех каналов в равной пропорции, чем ближе к 1 тем ярче цвет серого. Что это дает и зачем нужно, а так же какое отношение имеет к тому, что пиксели начинали пропадать. Как говорил, в прошлом посте функция random, дает случайные значения от 0.0 до 1.0, то есть по сути разные значения серого. Применим этот шум, к текущему спрайту, чтобы было понятнее о чем говорю.
Ну и собственно в прошлом посте увеличивая прогресс, сравнивали значение прогресса с этой невидимой картой шума и уже уменьшали альфу до нуля. Вот надеюсь стало понятнее, что к чему, да я сам новичок ещё в этих всех вещах, так что может не очень толково объясняю, но чему научился за пару месяцев, тем и пытаюсь поделиться, как просили)
Но просто рандом это дискретный набор случайностей, потому и выглядит как не пойми чего итоговый результат. Шум Перлина же в свою очередь, имеет градиентную основу, что позволяет делать более плавные и крутые штуки. https://ru.wikipedia.org/wiki/Шум_Перлина
вот гуглите про шум Перлина на здоровье, в детали алгоритма у меня влезать большого желания нет пока, но попользоваться им очень даже можно и нужно.
Смело топаем на godotshaders и в снипетах копируем шум перлина
https://godotshaders.com/snippet/2d-noise/
в целом это уже практически готовый шейдер, но он генерирует как бы это сказать, очень мягкий и смазанный шум, надо чтобы плотность шума была повыше. Ну и по аналогии с прошлым, заодно добавлю пару строчек, чтобы можно было посмотреть наглядно, что он там рисует то вообще.
на самом деле, шейдер полностью готов к использованию и даст результат такой же, как и в видяшке из начала поста. Но покажу, что именно рисует функция noise в зависимости от параметра density.
В принципе готов даже к неконструктивной критике, ибо влезаю в вещи которые сам не до конца ещё понимаю. Но работает же, учел ошибки прошлого поста, немножко разъяснил. К следующему посту, постараюсь максимально разобрать непонимание в этом, а заодно погляжу, как сын будет делать, чтобы самое непонятное высмотреть так сказать.
В любом случае, визуально эффект очень приятный, в следующем посте сделаю цветную линию, которая будет появляться перед исчезновением пикселя ну и дающая тот самый чудесный эффект, типа спрайтик плавится перед исчезновением. В целом думаю можете и сами догадаться, что надо просто параметр прогресс сравнивать не только с альфой, а добавить ещё один, чтобы разброс значений был чуть больше. Условно, если прогресс, 0.3, то все что меньше 0.3 то исчезает, а все что между 0.3 и 0.5, меняет цвет. Это и даст тот самый эффект, а можно по краешку пустить черную каемку, линию сделать красненькую и запилить эффект сгорающей бумаги. Ну это унесло меня опять, ладно поглядим что дальше получится.
Спасибо за внимание, надеюсь это разъяснит ещё чуть больше и вы начнете пилить крутые шейдеры и делиться своим практическим опытом в постах, а те кто уже опытные, те не будут писать, что все гавно и ты все делаешь не так. А подробненько изложат, как делать правильно, но не взрывая при этом мозг сложными материями.










Лига Разработчиков Видеоигр
9K постов23.2K подписчик
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"