Godot. Путь к основам VFX. Пишем свой outline shader. Ч2
День добрый, уважаемые любители Godot'a. Продолжу мучать шейдер. Начало тут
Godot. Путь к основам VFX. Пишем свой outline shader. Ч1
Напомню на чем остановились, кому интересно это, те наверняка и так увидели проблему, кто поленивее, тем сейчас покажу.
Вот как получается на больших значениях.
Почему так происходит и что это за хрень вообще, на самом деле все очень просто)
В это части и будем это исправлять, тут вообще никакой беды нету и это вобще не значит что это плохой или неправильный код, он просто не нужен для этой задачи, но для понимания как работают шейдеры, он очень даже хорош. Бонусом покажу, что можно замутить из этого казалось бы неправильного кода.
Как видите мы вполне научились делать копию картинки с помощью шейдера, а этого знания уже достаточно чтобы запилить например аналог reflected image из Baldurs Gate
Ну или например для какого-нибудь блинка или фазового смещения можно оставлять шлейф за персонажем, после резкого перемещения. Конечно это можно сделать и создавая копии картинки с помощью gdscript, но зачем нагружать ЦП и память, если можно это переложить на видяху, да и кода будет существенно меньше)
Ну да ладно, если кому это надо и интересно, так напишите в комментах после этой части можно в принципе запилить серию и сделать такой эффект, чтобы можно было его применять в игрушечке сразу.
Вернемся к аутлайну, уже видно что текущий вариант совершенно не годится, если значения превышают какие-то лимиты, да и смещение идет только по горизонтали и вертикали. Все варианты которые я смотрел, так или иначе схожие по смыслу, хоть и разные по реализации. Ну и посетила голову мысль случайная, зачем вообще все это городить, если по сути можно отскейлить картинку до нужного размера, вычесть из отскейленной текущие цвета и получим нужный результат по сути. Так и поступлю пожалуй).
В снипетах есть готовый код скейла его и возьму.
https://godotshaders.com/snippet/scale/
Вставим это дело в шейдер и вычтем исходную картинку.
Ну теперь дело осталось за малым, надо всего лишь покрасить большую картинку цветом из параметров и вернуть назад, исходную картинку.
Ну вот получили нужный результат без всяких проблем с тем больше или меньше картинка.
Тут остается ещё ряд проблем, но велосипед потихоньку начинает ехать и нужный результат становится все ближе и ближе. В следующей части будет разбор как сделать градиентную заливку.
Спасибо за внимание.






Свидетели Godot'овы
91 пост333 подписчика
Правила сообщества
Нельзя писать плохой про Godot и можно писать хороший про Godot. Borat.jpg
Упоминание других движков допустимо только в технических сравнениях иначе - вы юнитист и бог вам судья.