# How would I use noise properly for a 'y' value?

I’ve never really delved much into terrain generation so this is a tad bit confusing for me. What i want to do is make a value ‘y’ that i can set the position of my hexagonal segment to (Trying to replicate hexaria terrain).

I want to have only 2 for loops as oppose to 3, one for x axis and the other for z. This is what i have currently:

``````local PerlinNoise = require(script.PerlinNoise)

local TerrainFolder = game.Workspace.TerrainFolder
local Hexagons = TerrainFolder.Hexagons

local Hexagon = game.Workspace.Segment

local SizeX = 124
local SizeZ = 124
local SizeY = 256

local Amplitude = 256
local noisescale = 32

local Seed = math.random(1,1000000)

local HexSize = Vector2.new(Hexagon.Size.X, Hexagon.Size.Z)

for x = 0, SizeX do
for z = 0, SizeZ do
for y = -10 / 2, SizeY do
local nx = math.noise(y / noisescale, z / noisescale, Seed) * Amplitude
local ny = math.noise(x / noisescale, z / noisescale, Seed) * Amplitude
local nz = math.noise(x / noisescale, y / noisescale, Seed) * Amplitude

local Density = nx + ny + nz + y

if Density > 20 then
local Offset = HexSize.Y / 2 * (x % 2)
local Color

Hexagon = Hexagon:Clone()
Hexagon.Position = Vector3.new(x * (HexSize.X * 0.75), y * 0.75, z * HexSize.Y + Offset)

if y >= 50 then
Color = Color3.fromHSV(0.0925833, 0.153841, math.clamp(y / SizeY, 0.2, 0.6))
end

if y < 50 then
Color = Color3.fromHSV(0.375306, 0.79411, math.clamp(y / 50, 0.25, 0.4))
end

if y < 3 then
Color = Color3.fromHSV(0.158111, 0.187503, math.clamp(y / 3, 0.4, .8))
end

Hexagon.Color = Color
Hexagon.Parent = Hexagons
break
end
end
end

wait(.2)
end
``````

I’m trying to get rid of the need for ‘y’
(The map will be only rendered once then used, so performance isn’t an issue)

This is what it gives me, as you can see it’s not really that good

I’d also like to know how I can create a radial gradient heightmap via code so that I can blend that with noise and create island terrain. Any pointers would help alot.

Not totally sure what you’re asking, but here’s an example:

``````for x = 0, SizeX-1 do
for z = 0, SizeZ-1 do
local y = math.noise(x / noisescale, z / noisescale, Seed) * Amplitude

-- example
local part = Instance.new("Part")
part.Anchored = true
part.Size = Vector3.new(1 ,y, 1)
part.CFrame = CFrame.new(x, y / 2, z)
part.Parent = workspace
end
end
``````