I'm trying to understand 2D Perlin noise from a visual point of view and I want to ask a couple of questions here to make sure I'm on the right track. I use WebGL and write custom shaders for rendering.
I start by calculating a dot product across one grid cell between a position vector from the center of the cell and one vertical vector and I get the gradient below (red is positive values and blue - negative). If I rotate the vector, it rotates the gradient:
Q1: The Wikipedia on "gradient noise" says "...a lattice of random gradients, dot products of which are then interpolated...". That's not correct, what creates actual gradients here is the dot operation itself, "gradient" vectors are just normal vectors, right?
Below are 3 different interpolations of 4 dots products between 4 random vectors and 4 position vectors calculated from each corner of each cell, the first one is simple average, the second is bilinear interpolation and the third is bilinear with smoothstep.
Q2: So what gives Perlin noise its organic blobby flowing look and feel is the interpolation method, rather that the gradients, in particular, the fact that bilinear interpolation is not linear but quadratic?
Thank you!