Chunked 3D tile map generation roblox

🧩 Syntax:
function ComputeLinearIndexing(index, size)
	local row = math.floor((index - 1) / size) + 1
	local column = (index - 1) % size + 1
	return column, row
end




--[[
	Generates a 3D tilemap subdivided into chunks of equal size
]]
function GenerateChunkedTileMap(gridSize: number, subdivisionBase: number)	
	gridSize = math.floor((gridSize/4) * 4)  --> optional, this keeps the map size a multiple of 4
	
	
	--# The number of chunks is derived this way because I have to guarantee
	--# that it is gonna be a square number(1, 4, 9, 16, etc). this is so the
	--# map remains square shaped, and so each chunk has an equal ammount of cells
	--! ↓ ↓ ↓ ↓ ↓ ↓
	
	local numberOfChunks = subdivisionBase^2
	local chunkSize = gridSize/numberOfChunks  --> area of the chunk
	

	local Map: Model = Instance.new("Model")
	Map.Name = "Map"
	
	-- Generate an array of chunk matrixes.
	local chunks = table.create(numberOfChunks)
	for chunkIndex = 1, numberOfChunks do
		local ChunkModel = Instance.new("Model")
		local collumns = table.create(chunkSize)
		
		-- Generate the chunk grid/matrix
		for x = 1, chunkSize do
			local rows = table.create(chunkSize)
			
			for z = 1, chunkSize do
				local tile = {X = x, Z = z}
				rows[z] = tile
				
				local Part = Instance.new("Part")
				Part.Name = x..","..z
				Part.Size = Vector3.one
				Part.Position = Vector3.new(x * Part.Size.X, 10, z * Part.Size.Z)
				Part.Anchored = true
				Part.Material = Enum.Material.SmoothPlastic
				Part.Parent = ChunkModel
			end
			
			collumns[x] = rows
		end
		
		--[[
			Since Chunks are represented as models in the workspace... I got to position them
			But I have no X or Z position to do so! Therefor I use Linear indexing so I can get
			an X & Z index from an array ↓ ↓ ↓ ↓ ↓ ↓ 
		--]]
		
		local x, z = ComputeLinearIndexing(chunkIndex, subdivisionBase)
		
		ChunkModel.Name = chunkIndex
		ChunkModel.Parent = Map
		ChunkModel:PivotTo(CFrame.new(x * ChunkModel:GetExtentsSize().X, 10, z * ChunkModel:GetExtentsSize().Z))
		
		chunks[chunkIndex] = collumns
	end
	
	
	Map.Parent = workspace
	return chunks
end


print(GenerateChunkedTileMap(144, 3))