Hello, there. I need help on how to add fractal noise to my 3d Terrain Perlin noise system, as I want to make more advanced terrain than what I can do with this system I made. I’ve tried and failed, as I do not have enough knowledge to make this work .please help if you can. Thanks!!
local SERVER_STORAGE = game:GetService("ServerStorage")
local DATA_MODULE = require(SERVER_STORAGE.Modules:WaitForChild("DataModule"))
local ERROR_MODULE = require(SERVER_STORAGE.Modules:WaitForChild("ErrorModule"))
local STARTING_POSITION = DATA_MODULE.ChunkSettings.ChunkStartingPos
local DYNAMIC_POSITION = DATA_MODULE.ChunkSettings.ChunkDynamicPos
local RELATIVE_POSITION = DATA_MODULE.ChunkSettings.RelativePosition
local CHUNK_NUMBER = 0
local Z_INCREMENT_AMOUNT = 0
local BLOCK_VECTOR = 0
local BLOCK_NUMBER = 0
local INVERSE_X = 0
local INVERSE_Z = 0
local BLOCK_SIZE = DATA_MODULE.ChunkSettings.BlockSize
local FREQUENCY_SCALE = 50
local AMPLITUDE_ = 20
local NOISE_AVERAGE = 0
local AB = 0
local BC = 0
local AC = 0
local DENSITY = 0
local OCTAVES = 4
local LACUNARITY = 3
local PERSISTENCE = 0.35
local function Perlin(X,Y,Z,octaves,lacunarity,persistance)
AB = math.noise(Y/FREQUENCY_SCALE,Z/FREQUENCY_SCALE,12545)*AMPLITUDE_
BC = math.noise(X/FREQUENCY_SCALE,Z/FREQUENCY_SCALE,12545)*AMPLITUDE_
AC = math.noise(X/FREQUENCY_SCALE,Y/FREQUENCY_SCALE,12545)*AMPLITUDE_
BLOCK_VECTOR = Vector3.new(X,Y,Z)
NOISE_AVERAGE =AB+BC+AC+Y
return NOISE_AVERAGE
end
local function CreateChunk(BLOCKSIZE,DYNAMIC_POS,DYNAMIC_POS_2,STATIC_POS,CHUNK_NUM,BLOCK_NUM)
DYNAMIC_POS_2 = DYNAMIC_POS + Vector3.new(STATIC_POS,0,STATIC_POS)
ERROR_MODULE.ChunkSettings(DYNAMIC_POS,DYNAMIC_POS_2,BLOCKSIZE)
local X_Z_POSITION = math.floor(math.abs((((DYNAMIC_POS-DYNAMIC_POS_2)/BLOCKSIZE).X)))
local Y_POSITION = DATA_MODULE.ChunkSettings.ChunkHeight
local ModPos = DYNAMIC_POS
local ModPos2 = DYNAMIC_POS_2
local MULTIPLICATION_X_VALUE = 1
local MULTIPLICATION_Z_VALUE = 1
if ModPos.X>ModPos2.X then
MULTIPLICATION_X_VALUE = -1
end
if ModPos.Z>ModPos2.Z then
MULTIPLICATION_Z_VALUE = -1
end
for Y1 = 1 , Y_POSITION do
for Z1 = 1, X_Z_POSITION do
for X1=1,X_Z_POSITION do
DENSITY = Perlin(
ModPos.X+MULTIPLICATION_X_VALUE*(((X1-1)*BLOCKSIZE)+BLOCKSIZE/2),
ModPos.Y+((Y1-1)*(BLOCKSIZE)+BLOCKSIZE/2),
ModPos.Z+MULTIPLICATION_Z_VALUE*(((Z1-1)*BLOCKSIZE)+BLOCKSIZE/2),
OCTAVES,
LACUNARITY,
PERSISTENCE
)
if DENSITY<21 then
local block = Instance.new("Part")
block.Size = Vector3.new(BLOCKSIZE,BLOCKSIZE,BLOCKSIZE)
block.Position = BLOCK_VECTOR
block.Parent = game.Workspace
block.Anchored = true
BLOCK_NUMBER = BLOCK_NUMBER +1
block.Name = "block"..tostring(BLOCK_NUM).."/"..CHUNK_NUM
end
end
end
game:GetService("RunService").Heartbeat:Wait()
end
end
local function CreateChunkCluster(BLOCK_Size,POS_1,POS_2,RELATIVE_POS,INCREMENT_AMOUNT,CHUNK_NUM,BLOCK_N)
for ZChunkAmount = 1,10 do
for XChunkAmount = 1,10 do
CHUNK_NUM = CHUNK_NUM+1
CreateChunk(BLOCK_Size,POS_1,POS_2,RELATIVE_POS,CHUNK_NUM,BLOCK_N)
POS_1 = Vector3.new((POS_1.X+RELATIVE_POS),0,INCREMENT_AMOUNT)
end
INCREMENT_AMOUNT = INCREMENT_AMOUNT + RELATIVE_POS
POS_1 = Vector3.new(0,0,INCREMENT_AMOUNT)
end
end
CreateChunkCluster(
BLOCK_SIZE,
STARTING_POSITION,
DYNAMIC_POSITION,
RELATIVE_POSITION,
Z_INCREMENT_AMOUNT,
CHUNK_NUMBER,
BLOCK_NUMBER)