Найти в Дзене

№207. Полноэкранный шейдер увеличительного стекла.

Своего рода логическое продолжение предыдущей статьи.
На сей раз выйдем в глобальное пространство, и поправим баги. Настройки проекта : Для того чтобы шейдер применился ко всему экрану накинем CanvasLayer, под него положим ColorRect и подключим на него шейдер. Закидываем в шейдер изображение всего экрана Если вы всё сделали правильно, то увидите спрайт который лежит в сцене. У меня это прекрасное болото в лесу. Дальше рисуем градиент, который будет в последствии деформировать наш экран.
Тут всё по классике - добавляем вектор центра экрана (cent) и вычитаем его из UV градиента.
Для того чтобы его увидеть, я временно вывел его в COLOR. Градиент есть. Давайте сразу его «подрежем» через smoothstep . Так как у нас должно быть круглое «стекло», поправим этот момент.
Добавляем переменную которая будет считать разницу между шириной и высотой экрана. И подмешаем это значение в радиус градиента. Возможно, после этих правок вы не увидите на экране ваш градиент. Потому что он сдвинется в левую час

Своего рода логическое продолжение предыдущей статьи.
На сей раз выйдем в глобальное пространство, и поправим баги.

Настройки проекта :

-2

Для того чтобы шейдер применился ко всему экрану накинем CanvasLayer, под него положим ColorRect и подключим на него шейдер.

-3

Закидываем в шейдер изображение всего экрана

можно заметить что в данном случае мы берем экранные координаты через SCREEN_UV
можно заметить что в данном случае мы берем экранные координаты через SCREEN_UV

Если вы всё сделали правильно, то увидите спрайт который лежит в сцене. У меня это прекрасное болото в лесу.

Дальше рисуем градиент, который будет в последствии деформировать наш экран.
Тут всё по классике - добавляем вектор центра экрана (cent) и вычитаем его из UV градиента.
Для того чтобы его увидеть, я временно вывел его в COLOR.

-5

Градиент есть. Давайте сразу его «подрежем» через smoothstep .

-6

Так как у нас должно быть круглое «стекло», поправим этот момент.
Добавляем переменную которая будет считать разницу между шириной и высотой экрана. И подмешаем это значение в радиус градиента.

-7

Возможно, после этих правок вы не увидите на экране ваш градиент. Потому что он сдвинется в левую часть экрана ( глобального экрана приложения). В таком случае просто сдвиньте экран чуть левее при помощи мышки.
( в самом приложении круг будет виден сразу )

-8

Ну что же, у нас есть круг, есть фон. Осталось только дописать увеличение всего изображения, и смешать это увеличение с нашим кругом.

Добавим в код переменную силы увеличения power. И немного перепишем код.

-9

Теперь, когда вы будете менять значение power , вы увидите как всё изображение увеличивается из центра экрана.
(проверять надо в запущенном приложении, в редакторе координаты экрана будут браться от всего экрана годо)

Далее, прикрутим наш градиент. Чтобы уже можно было видеть зону нашего увеличительного стекла.

-10

Крутим power и видим как увеличивается наш экран в зоне влияния градиента.

-11

Можем заметить что увеличение идет не локальное, а от центра экрана. Поэтому поправим это в коде шейдера

-12

Проверяем

-13

Вот теперь порядок.
На этом можно остановиться. Изменяя значения переменной cent вы можете двигать «лупу» по экрану.

На этом всё.
Подписывайтесь на канал,
вступайте в группу в ВК.
Удачи в изучении годо !