How to make Infinite sand part terrain

local plr = game.Players.LocalPlayer
local sand = workspace:WaitForChild("Sand")

game["Run Service"].RenderStepped:Connect(function()
	if plr.Character then
		local hrp = plr.Character:FindFirstChild("HumanoidRootPart")
		if hrp then
			local Pos = hrp.Position
			if (Vector3.new(Pos.X, sand.Position.Y, Pos.Z) - sand.Position).Magnitude >= 300 then
				sand.CFrame = CFrame.new(Pos.X, sand.Position.Y, Pos.Z)
			end
		end
	end
end)
1 Like

For the visual part, you can have a Block Mesh that has the scale to something along the lines of (1000,1,1000).
If you do want it to be actually infinite and not just an illusion, then you need a bit of code.

What I recommend doing is having a very long wait() loop. Unless the player is specifically looking for the moment that the part moves, it’s also not noticeable.

-- LocalScript
while wait(60) do
    workspace.InfiniteBaseplate.Position = Vector3.new(HumanoidRootPart.Position.X, workspace.InfiniteBaseplate.Position.Y, HumanoidRootPart.Position.Z)
end

Do keep in mind that this is not a functional script, you’d have to get the HumanoidRootPart yourself, this is merely the command that would do the movement itself.

procedural generation,
you are on a baseplate.
there are 8 baseplates around that bseplate , when you cross over to the next base plate 8 more load around that one and the ones that are far away get despawned/:Destroy()ed

image
you are the little purple dot
image
you move across here the ones in red get destroyed and the new ones load

1 Like