It’s actually pretty simple, the shader uses a grayscale texture that acts as a “weighted mask”.
So I’ve got screenspace UVs that are added to a “relative offset”, which offsets the texture according to the grayscale input.
It is then multiplied to a “relative tiling” which are a min & max tiling values lerped using the grayscale as an alpha input.
With these two things you can get some pretty nice results! Looks better when the camera isn’t moving but the object is. Shader below.
At first though, I was playing with another version that uses a parallax offset & regular UVs instead of screenspace UVs. Below is how it looks with only the parallax offset multiplied to the grayscale input.
Can’t wait to use this effect in another project, still don’t know how or when but I think it can be a base for some pretty fun VFX.
You could use min & max values for parallax & uv offset for better control as well! So many possibilities…