So I made this script that manages to generate some pretty natural terrain in chunks. I want to make it look more natural by making the blocks less "blocky". I know marching cubes might work with that kind of stuff but it limits terrain generation. Is there any other way to "flatten" the terrain?

Script:

chunks = 20
csize = 30
platform = 4
scale = 150
amplitude = 7

seed = math.random(0, 10e5)
print(seed)

fold = Instance.new("Folder")
fold.Name = "PT"
fold.Parent = game.Workspace

part = Instance.new("Part")
part.Anchored = true
part.Size = Vector3.new(platform, 20, platform)
part.Color = Color3.fromRGB(255, 255, 255)
part.Locked = true
part.Parent = game.ServerStorage

w = Instance.new("Part")
w.Anchored = true
w.Size = Vector3.new(platform, 20, platform)
w.Color = Color3.fromRGB(100, 100, 255)
w.Locked = true
w.Transparency = 0.7
w.Parent = game.ServerStorage

function GenChunk(x, z)
	for x = (-csize/2)+x*csize, (csize/2)+x*csize do
		for z = (-csize/2)+z*csize, (csize/2)+z*csize do
			local y1 = math.noise(x/scale/0.5, z/scale/0.5, seed) * amplitude
			local y2 = math.noise(x/scale, z/scale, seed) * amplitude*3
			local y3 = math.noise(x/scale/1.75, z/scale/1.75, seed) * amplitude*4
			
			local y = (y1 * y2 * y3)/2
			
			local p = part:Clone()
			p.CFrame = CFrame.new(Vector3.new(platform*x, y, platform*z))
			
			if y <= -1 then
				p.Color = Color3.fromRGB(200, 200, 50)
			end
			if y > -1 and y <= 0 then
				p.Color = Color3.fromRGB(100, 50, 0)
			end
			if y > 0 and y <= 2 then
				p.Color = Color3.fromRGB(150, 75, 25)
			end
			if y > 2 and y <= 29 then
				p.Color = Color3.fromRGB(50, 150, 50)
			end
			if y > 29 and y <= 51 then
				p.Color = Color3.fromRGB(50, 100, 50)
			end
			if y > 51 and y <= 65 then
				p.Color = Color3.fromRGB(100, 125, 100)
			end
			if y > 65 then
				p.Color = Color3.fromRGB(200, 200, 200)
			end
			
			p.Parent = fold
			
			local wa = w:Clone()
			wa.CFrame = CFrame.new(Vector3.new(platform*x, -3, platform*z))
			wa.Parent = game.Workspace.PT
		end
	end
end

for x = -chunks/2, chunks/2 do
	for z = -chunks/2, chunks/2 do
		wait()
		GenChunk(x, z)
	end
end

print("Done!")

function close()
	game.Workspace.PT:Destroy()
end

game:BindToClose(close)

Image of example terrain: Image_1