Соберем простой шейдер который будет имитировать лупу. То бишь увеличительное стекло.
Добавляем в проект спрайт, в моем случае это сетка ТВ, и накидываем на него шейдер.
Для начала напишем код, который будет просто увеличивать всю площадь.
Нам потребуется одна переменная для регулирования силы увеличения, я назвал её power и вывел в меню ноды.
Крутим. И наблюдаем как наша текстура увеличивается.
Нам надо чтобы увеличение было от центра, поэтому добавляем переменную center. В ней будет храниться вектор центра UV.
Соответственно подмешиваем её в наши расчеты.
Теперь всё работает как надо.
Практически мы получили лупу, только квадратную и на весь экран =).
Теперь надо как-то ограничить влияние зума на спрайт, для того чтобы эффект был локальным а не на весь экран.
Для примера, возьмем наш любимый UV.x градиент, и подмешаем его к power переменной.
В результате скалироваться будет только та часть пикселей, которая находится на светлой части градиента. Чем светлее тем больше.
Как вы могли догадаться, если вместо линейного градиента подключить круговой ( radial ) , то получим то, что и требовалось.
Добавляем переменную grad, и рисуем в ней вот такой круговой градиент.
ну и подмешиваем это всё в UV.
Нам надо чтобы двигались пиксели в центре , поэтому инвертируем
Ну вот, практически то что нужно.
При помощи smoothstep мы можем сделать более контроллируемый радиус градиента.
Я вывел пару переменных inner и outter, чтобы было удобнее настраивать.
Альтернативно можно использовать свою карту градиента(и не только) нарисованную к примеру в photoshop.
На этом всё.
Подписывайтесь на канал, вступайте в группу в ВК.
Удачи в изучении годо !