Godot. Немножечко про шейдеры и BackBufferCopy
Всем привет. Столкнулся с одной проблемой, поделюсь найденным решением.
Решаемая задача: надо применить шейдерный эффект не на одиночный спрайт, а на группу спрайтов(например cutout анимация или сложносоставная иконка в интерфейсе)
Для примера возьму этот эффект
https://godotshaders.com/shader/teleport-effect/
Работает хорошо, эффект симпатичный
Но тут мы получим не совсем ожидаемый результат.
По любому мы должны брать SCREEN_TEXTURE, чтобы получить желаемое.
В принципе уже похоже на правду, но тут есть одно маленькое НО..
Если на экране будет ещё и текстура фона, то шейдер будет применяться и к ней.
Вот на скрине наглядно видно, что он ещё и подложку вместе со спрайтами "телепортирует"
Если честно долго голову ломал и очень конечно дикий велосипед написал, чтобы этого избежать, а все оказалось гораздо проще. В Godot есть специальная нода для этих случаев.
BackBufferCopy
https://docs.godotengine.org/en/stable/classes/class_backbuf...
собственно, она позволяет использовать SCREEN_TEXTURE в шейдере, но для конкретного и нужного региона.
И радуемся полученному результату, теперь телепортируется не одиночный спрайт, а вся группа объектов сразу, что собственно и было нужно.
Так же замечательно это будет работать и с TextureRect и с текстом в контролах.
Спасибо за внимание.
Небольшой но уютный чатик сообщества, если есть вопросы заходите.
https://t.me/Godot_pikabu






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