I want to generate some cool terrain, which means I don’t want to use heightmaps, which means I need 3d noise. The problem I have with Roblox’s 3d noise is that there’s no easy way to set the seed.

The function uses a perlin noise algorithm to assign fixed values to coordinates. For example, math.noise(1.158, 5.723) will always return 0.48397532105446 and math.noise(1.158, 6) will always return 0.15315161645412 .

Wouldn’t players eventually notice that their generated worlds with supposedly different seeds are just offsets of each other?

Maybe I am misunderstanding how math.noise works…?

Maybe I could do this:

local seed = 123456
local range = 100 -- idk
local random = Random.new(seed)
local offsets = Vector3.new(
random:NextNumber(-range, range),
random:NextNumber(-range, range),
random:NextNumber(-range, range)
)
print(math.noise(offsets.X + 0.1, offsets.Y + 0.2, offsets.Z + 0.3))

This way, seeds are more chaotic; a small change can drastically change the offsets.
I’m not sure how different generated worlds can get like this though…