I'm currently working on implementing Perlin Noise in a ROBLOX-independant fashion (but it will be used on ROBLOX) and I'm having an issue with the noise. As you can see, if I set the grid size to the noise size, it turns out okay looking. However, if I set the grid size to 32, it looks like this. All the individual pieces look okay, but they don't work together... does anyone have any idea on what could be causing this?
Here's my code.
local function rand(seed,lower,upper) math.randomseed(seed) math.random();math.random();math.random();math.random();math.random() return math.random() end local function magnitude(t) return math.sqrt(t[1]^2+t[2]^2) end local function unit(t) return {t[1]/magnitude(t),t[2]/magnitude(t)} end local function randVec(vec,seed) return unit{rand(seed+vec[1]+vec[2]^2/vec[1]),rand(seed+vec[1]+vec[2]^2/vec[1]+1)} end local function dot(t1,t2) return t1[1]*t2[1]+t1[2]*t2[2] end local function ease(x) return 6*x^5-15*x^4+10*x^3 end local function lerp(x,y,a) return x+(y-x)*a end return function(gridsize,seed) return function(x,y) local pointX,pointY=x/gridsize,y/gridsize local nearPoints={ {math.floor(pointX),math.floor(pointY)}, {math.floor(pointX),math.ceil(pointY)}, {math.ceil(pointX),math.ceil(pointY)}, {math.ceil(pointX),math.floor(pointY)} } local influences={} for i,v in pairs(nearPoints) do local subX,subY=0,0 if v[1]>pointX then subX=1 end if v[2]>pointY then subY=1 end influences[i]=dot(randVec(v,seed),{pointX%1-subX,pointY%1-subY}) end return lerp( lerp(influences[1],influences[2],ease(pointX%1)), lerp(influences[3],influences[4],ease(pointX%1)), ease(pointY%1) ) end end