Я расскажу как я сделал через шойдеры, в общем проход опять же по всем пикселям будет полюбому.
В общем есть нормал карта, далее есть текстура отражения (картинка), далее есть текстурные координаты (координата пикселя на картинке), далее берёшь нормал карту, получаешь цвет ргб, и делишь каждый эллемент на 255.0 получаешь число от 0 до 1.0. Далее умножай на силу смещения, и Читай пиксель с картинки в его необходимых координатах + полученные переменные из нормал карты. Получиться рефракция изображения исходя из нормал карты. Чтобы сделать неповторяемость и волны, смещай нормал карту ввлево-вверх, и читай пиксель с этим смещением + общее арифметическое с такойже нормал текстуры только с противоположным смещением её. Получаться красивые и неповторяемые волны