6

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
Упоминание других движков допустимо только в технических сравнениях иначе - вы юнитист и бог вам судья.