Learn
Engine Class
Terrain
Not Creatable

Summary
Methods
AutowedgeCells(region: Region3int16):()
Deprecated
Clear():()
ConvertToSmooth():()
Deprecated
FillBall(center: Vector3,radius: number,material: Enum.Material):()
FillBlock(cframe: CFrame,size: Vector3,material: Enum.Material):()
FillCylinder(cframe: CFrame,height: number,radius: number,material: Enum.Material):()
FillRegion(region: Region3,resolution: number,material: Enum.Material):()
FillWedge(cframe: CFrame,size: Vector3,material: Enum.Material):()
GetCell(x: number,y: number,z: number):Tuple
Deprecated
GetWaterCell(x: number,y: number,z: number):Tuple
Deprecated
PasteRegion(region: TerrainRegion,corner: Vector3int16,pasteEmptyCells: boolean):()
ReadVoxelChannels(region: Region3,resolution: number,channelIds: {any}):Dictionary
ReadVoxels(region: Region3,resolution: number):Tuple
ReplaceMaterial(region: Region3,resolution: number,sourceMaterial: Enum.Material,targetMaterial: Enum.Material):()
SetCell(x: number,y: number,z: number,material: Enum.CellMaterial,block: Enum.CellBlock,orientation: Enum.CellOrientation):()
Deprecated
SetCells(region: Region3int16,material: Enum.CellMaterial,block: Enum.CellBlock,orientation: Enum.CellOrientation):()
Deprecated
SetWaterCell(x: number,y: number,z: number,force: Enum.WaterForce,direction: Enum.WaterDirection):()
Deprecated
WriteVoxelChannels(region: Region3,resolution: number,channels: Dictionary):()
WriteVoxels(region: Region3,resolution: number,materials: {any},occupancy: {any}):()
Inherited Members

API Reference
Properties
Decoration
Not Scriptable
Read Parallel
Capabilities: Environment
Terrain.Decoration:boolean

GrassLength
Not Scriptable
Read Parallel
Capabilities: Environment
Terrain.GrassLength:number

IsSmooth
Deprecated

MaterialColors
Not Scriptable
Read Parallel
Capabilities: Environment
Terrain.MaterialColors:BinaryString

MaxExtents
Read Only
Not Replicated
Read Parallel
Capabilities: Environment
Terrain.MaxExtents:Region3int16

WaterColor
Read Parallel
Capabilities: Environment
Terrain.WaterColor:Color3

WaterReflectance
Read Parallel
Capabilities: Environment
Terrain.WaterReflectance:number

WaterTransparency
Read Parallel
Capabilities: Environment
Terrain.WaterTransparency:number

WaterWaveSize
Read Parallel
Capabilities: Environment
Terrain.WaterWaveSize:number

WaterWaveSpeed
Read Parallel
Capabilities: Environment
Terrain.WaterWaveSpeed:number

Methods
AutowedgeCell
Deprecated

AutowedgeCells
Deprecated

CellCenterToWorld
Capabilities: Environment
Terrain:CellCenterToWorld(
Parameters
Returns

CellCornerToWorld
Capabilities: Environment
Terrain:CellCornerToWorld(
Parameters
Returns

Clear
Capabilities: Environment
Terrain:Clear():()
Returns
()

ConvertToSmooth
Deprecated

CopyRegion
Capabilities: Environment
Terrain:CopyRegion(region:Region3int16):TerrainRegion
Parameters
Code Samples
Terrain:CopyRegion()
local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)

CountCells
Capabilities: Environment
Terrain:CountCells():number
Returns

FillBall
Capabilities: Environment
Terrain:FillBall(
center:Vector3, radius:number, material:Enum.Material
):()
Parameters
center:Vector3
radius:number
material:Enum.Material
Returns
()

FillBlock
Capabilities: Environment
Terrain:FillBlock(
cframe:CFrame, size:Vector3, material:Enum.Material
):()
Parameters
cframe:CFrame
size:Vector3
material:Enum.Material
Returns
()

FillCylinder
Capabilities: Environment
Terrain:FillCylinder(
cframe:CFrame, height:number, radius:number, material:Enum.Material
):()
Parameters
cframe:CFrame
height:number
radius:number
material:Enum.Material
Returns
()

FillRegion
Capabilities: Environment
Terrain:FillRegion(
region:Region3, resolution:number, material:Enum.Material
):()
Parameters
region:Region3
resolution:number
material:Enum.Material
Returns
()

FillWedge
Capabilities: Environment
Terrain:FillWedge(
cframe:CFrame, size:Vector3, material:Enum.Material
):()
Parameters
cframe:CFrame
size:Vector3
material:Enum.Material
Returns
()

GetCell
Deprecated

GetMaterialColor
Write Parallel
Capabilities: Environment
Terrain:GetMaterialColor(material:Enum.Material):Color3
Parameters
material:Enum.Material
Returns

GetWaterCell
Deprecated

PasteRegion
Capabilities: Environment
Terrain:PasteRegion(
region:TerrainRegion, corner:Vector3int16, pasteEmptyCells:boolean
):()
Parameters
pasteEmptyCells:boolean
Returns
()
Code Samples
Create, Copy and Paste Terrain
local Terrain = workspace.Terrain
-- Create a simple terrain region
local initialRegion = Region3.new(Vector3.zero, Vector3.one * 10)
Terrain:FillRegion(initialRegion, 4, Enum.Material.Grass)
-- Copy the region
local copyRegion = Region3int16.new(Vector3int16.new(0, 0, 0), Vector3int16.new(10, 10, 10))
local copiedRegion = Terrain:CopyRegion(copyRegion)
-- Define where to paste the region
local newRegionCorner = Vector3int16.new(5, 0, 0)
-- Paste the region
Terrain:PasteRegion(copiedRegion, newRegionCorner, true)

ReadVoxelChannels
Write Parallel
Capabilities: Environment
Terrain:ReadVoxelChannels(
region:Region3, resolution:number, channelIds:{any}
Parameters
region:Region3
resolution:number
channelIds:{any}
Returns
Code Samples
Terrain:ReadVoxelChannels()
local REGION_START = Vector3.new(-20, -20, -20)
local REGION_END = Vector3.new(20, 20, 20)
local function printRegion(terrain, region)
local channelOutput = terrain:ReadVoxelChannels(region, 4, { "SolidOccupancy", "SolidMaterial", "LiquidOccupancy" })
local size = channelOutput.Size
for x = 1, size.X do
for y = 1, size.Y do
for z = 1, size.Z do
print(
("(%2i, %2i, %2i): %.2f %s %.2f"):format(
x,
y,
z,
channelOutput.SolidOccupancy[x][y][z],
channelOutput.SolidMaterial[x][y][z].Name,
channelOutput.LiquidOccupancy[x][y][z]
)
)
end
end
end
end
local region = Region3.new(REGION_START, REGION_END)
printRegion(workspace.Terrain, region)

ReadVoxels
Write Parallel
Capabilities: Environment
Terrain:ReadVoxels(
region:Region3, resolution:number
Parameters
region:Region3
resolution:number
Returns
Code Samples
Terrain:ReadVoxels()
local REGION_START = Vector3.new(-20, -20, -20)
local REGION_END = Vector3.new(20, 20, 20)
local function printRegion(terrain, region)
local materials, occupancies = terrain:ReadVoxels(region, 4)
local size = materials.Size -- Same as occupancies.Size
for x = 1, size.X, 1 do
for y = 1, size.Y, 1 do
for z = 1, size.Z, 1 do
print(("(%2i, %2i, %2i): %.2f %s"):format(x, y, z, occupancies[x][y][z], materials[x][y][z].Name))
end
end
end
end
local region = Region3.new(REGION_START, REGION_END)
printRegion(workspace.Terrain, region)

ReplaceMaterial
Capabilities: Environment
Terrain:ReplaceMaterial(
region:Region3, resolution:number, sourceMaterial:Enum.Material, targetMaterial:Enum.Material
):()
Parameters
region:Region3
resolution:number
sourceMaterial:Enum.Material
targetMaterial:Enum.Material
Returns
()
Code Samples
Terrain:ReplaceMaterial
local terrain = workspace.Terrain
local region = Region3.new(Vector3.new(-20, -20, -20), Vector3.new(20, 20, 20))
local resolution = 4
local materialToReplace = Enum.Material.Grass
local replacementMaterial = Enum.Material.Asphalt
terrain:ReplaceMaterial(region, resolution, materialToReplace, replacementMaterial)

SetCell
Deprecated

SetCells
Deprecated

SetMaterialColor
Capabilities: Environment
Terrain:SetMaterialColor(
material:Enum.Material, value:Color3
):()
Parameters
material:Enum.Material
value:Color3
Returns
()

SetWaterCell
Deprecated

WorldToCell
Capabilities: Environment
Terrain:WorldToCell(position:Vector3):Vector3
Parameters
position:Vector3
Returns

WorldToCellPreferEmpty
Capabilities: Environment
Terrain:WorldToCellPreferEmpty(position:Vector3):Vector3
Parameters
position:Vector3
Returns

WorldToCellPreferSolid
Capabilities: Environment
Terrain:WorldToCellPreferSolid(position:Vector3):Vector3
Parameters
position:Vector3
Returns

WriteVoxelChannels
Capabilities: Environment
Terrain:WriteVoxelChannels(
region:Region3, resolution:number, channels:Dictionary
):()
Parameters
region:Region3
resolution:number
channels:Dictionary
Returns
()
Code Samples
Terrain:WriteVoxelChannels()
local region = Region3.new(Vector3.new(0, 0, 0), Vector3.new(64, 32, 64))
local RESOLUTION = 4
local OCC_EPSILON = 1 / 256
local function generateRandomTerrainInRegion(regionInput)
local region = regionInput:ExpandToGrid(4)
local size = region.Size / 4
local solidMaterials = {}
local solidOccupancies = {}
local waterOcc = {}
for x = 1, size.X do
table.insert(solidMaterials, {})
table.insert(solidOccupancies, {})
table.insert(waterOcc, {})
for y = 1, size.Y do
table.insert(solidMaterials[x], {})
table.insert(solidOccupancies[x], {})
table.insert(waterOcc[x], {})
for z = 1, size.Z do
local mat = if math.random() < 0.5 then Enum.Material.Air else Enum.Material.Sand
local occ = 0
local water = math.random()
if mat == Enum.Material.Sand then
occ = math.random() / 2 + 0.5
if occ > 1 - OCC_EPSILON then
water = 0 -- Solids cannot contain water
end
else
occ = 0
end
table.insert(solidMaterials[x][y], mat)
table.insert(solidOccupancies[x][y], occ)
table.insert(waterOcc[x][y], water)
end
end
end
return { SolidMaterial = solidMaterials, SolidOccupancy = solidOccupancies, LiquidOccupancy = waterOcc }
end
local regionContent = generateRandomTerrainInRegion(region)
workspace.Terrain:WriteVoxelChannels(region, 4, regionContent)

WriteVoxels
Capabilities: Environment
Terrain:WriteVoxels(
region:Region3, resolution:number, materials:{any}, occupancy:{any}
):()
Parameters
region:Region3
resolution:number
materials:{any}
occupancy:{any}
Returns
()
Code Samples
Terrain:WriteVoxels()
local terrain = workspace.Terrain
local resolution = 4
local region = Region3.new(Vector3.new(0, 0, 0), Vector3.new(16, 28, 20)):ExpandToGrid(resolution)
local materials = {
{
{
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air },
},
{
{
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Air },
},
{
{
Enum.Material.CrackedLava,
Enum.Material.Sand,
Enum.Material.Sand,
Enum.Material.Sand,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Air },
},
{
{
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air },
},
}
local occupancies = {
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 0.5, 0.5, 0.5, 0.5 },
{ 0, 0, 0, 0, 0 },
},
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 1, 1, 1, 0.5 },
{ 0, 1, 1, 1, 0 },
},
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 1, 1, 1, 0.5 },
{ 0, 1, 1, 1, 0 },
},
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 0.5, 0.5, 0.5, 0.5 },
{ 0, 0, 0, 0, 0 },
},
}
terrain:WriteVoxels(region, resolution, materials, occupancies)

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.