地形讓您創建動態變形環境,並且幾乎沒有延遲。目前基於 4×4×4 格子細胞,每個細胞都有一個數字介於 0 和 1之間,代表幾何應該佔用細胞的量,以及細胞的材料。占用率決定細胞是如何與周圍的細胞一起變形的,結果是沒有網格限制的錯覺。
欲了解更多信息,請參閱地形。
概要
屬性
啟用或停用地形裝飾。
指定動畫草的長度。
MaterialColors 代表材料顏色功能的編輯器,並且 不能被腳本編輯 。
若要取得材料的顏色,請使用:Terrain:GetMaterialColor() 若要設置材料的顏色,請使用:Terrain:SetMaterialColor()
顯示最大可編輯區域的邊界。
地形水的色調。
控制地形水反射的不透明程度。
地形水的透明度。
以厘米設定地形水波的最大高度。
設置地形水波每分鐘移動上下的次數。
決定零件是否因物理學而無法移動。
零件裝配的角速度。
零件在世界空間的質量中心。
零件裝配的線速度。
零件裝配的總重量。
指向裝配的根部分。
決定零件後面的表面類型 (+Z方向)。
決定零件底面的表面類型(-Y方向)。
決定零件的顏色。
決定世界中 BasePart 的位置和方向。
決定零件是否可能與其他零件碰撞。
決定零件在空間查詢操作期間是否被考慮。
決定是否 Touched 和 TouchEnded 事件在零件上發射。
決定零件是否投射陰影。
描述零件的重心位置在哪裡。
描述零件衝突群組的名稱。
決定零件的顏色。
指示零件目前的物理特性。
決定零件的多個物理特性。
用於啟用或禁用零件和裝配的空氣動力。
物理引擎所看到的 BasePart 實際尺寸。
決定零件前面的表面類型(-Z方向)。
決定零件左面的表面類型(-X方向)。
決定只對本地客戶可見的乘數 BasePart.Transparency 。
決定零件是否可在 Studio 中選擇。
描述零件的質量、密度和體積的產品。
決定零件是否會對其剛性身體的總質量或慣性有貢獻。
決定零件的紋理和預設物理特性。
MaterialVariant 的名稱。
描述世界中零件的旋轉。
指定零件的軸偏移來自其 CFrame 。
描述零件在世界上的位置。
上次記錄物理更新的時間。
決定零件是否反映了天空盒。
描述縮放方法可允許的最小尺寸變更。
描述可以縮放零件的面。
決定零件右面的表面類型 (+X 方向)。
決定組裝根部分的主要規則。
零件在三軸上的旋轉度。
決定零件的尺寸(長度、寬度、高度)。
決定零件頂部面的表面類型 (+Y 方向)。
決定零件能被看到多少(與零件隱形度相反)。
方法
返回地形元素中心的世界位置(x,y,z)。
返回網格細胞的左下角位置(x, y, z)。
清除地形。
將一塊地形存入 TerrainRegion 對象中,以便稍後載回。注意:TerrainRegion資料不會在伺服器與客戶端之間複製。
返回地形中非空白細胞數量。
在指定空間填滿一球滑順的地形。
用給定的位置、旋轉、尺寸和材料填滿一塊平滑的地形。
在給定的空間中填滿平滑地形的筒體。
用平滑的地形填充 Region3 空間。
用給定的 Enum.Material 和地區的 CFrame 和尺寸填滿楔形體積的地形。
返回指定地形材料的現有地形材料顏色。
將地形塊應用到地形對物件。注意:TerrainRegion資料不會在服務器和客戶端之間複製。
返回基於通道名稱的表格中的地形體積數據的區域。
以表格形式返回特定區域的平滑地形。
- ReplaceMaterial(region : Region3,resolution : number,sourceMaterial : Enum.Material,targetMaterial : Enum.Material):()
用另一種材料取代區域內物質的地形。
設置目標地形材料的現有地形材料顏色。
返回包含點 位置 的網格細胞位置。
返回包含點位置的網格細胞位置,在位置位於網格邊緣時,優先使用空白網格細胞。
返回包含點位置的網格細胞位置,在位置位於網格邊緣時,優先使用非空白網格細胞。
使用沃塞爾通道數據辭典設置地形區域。
使用表格格式設置特定區域的平滑地形。
對裝配應用角度脈沖。
在裝配的 center of mass 應用脈沖到裝配。
在指定位置應用脈沖到裝配。
返回零件是否可以相互碰撞。
檢查您是否可以設置零件的網絡所有權。
返回包含任何種類剛性聯組合的對象與零件的表。
返回連接到此零件的所有關節或限制。
返回 Mass 屬性的值。
返回這部分網絡所有者的當前玩家,或在伺服器的情況下返回 nil。
如果遊戲引擎自動決定此部分的網絡所有者,返回真值。
返回零件組合的基本零件。
返回包含這個部分交叉的所有 BasePart.CanCollide 真實零件的表。
返回零件在指定位置相對於此零件的線速度。
如果對象連接到會將其保持在位置的零件(例如 Anchored 零件),則返回真值;否則返回假值。
以相同於使用 Studio 縮放工具的方式變更對象的大小。
將指定的玩家設為網絡所有者,用於此網絡和所有連接的零件。
讓遊戲引擎動態決定誰會處理零件的物理(客戶端之一或服務伺服器)。
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
從零件和給定數陣列中的其他零件的重疊幾何圖中創建一個新的 IntersectOperation 。
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
從零件中創建一個新的 UnionOperation ,減去給定數陣列中零件所佔的幾何圖形。
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
從零件中創建一個新的 UnionOperation ,加上給定數陣列中零件所佔的幾何圖形。
獲得 PVInstance 的軸心。
將 以及所有其子孫 轉換為指定的 位置,使旋轉點現在位於指定的 位置。
屬性
MaterialColors
MaterialColors 代表材料顏色功能的編輯器,並且 不能被腳本編輯 。
要取得材料的顏色,使用:Terrain:GetMaterialColor()
要設置材料的顏色,使用:Terrain:SetMaterialColor()
方法
CellCenterToWorld
返回地形元素中心的世界位置(x,y,z)。
參數
返回
CellCornerToWorld
返回網格細胞的左下角位置(x, y, z)。
參數
返回
Clear
清除地形。
返回
CopyRegion
將一塊地形存入 TerrainRegion 對象中,以便稍後載回。注意:TerrainRegion資料不會在伺服器與客戶端之間複製。
參數
返回
範例程式碼
The following code will copy the whole Terrain and clear it. After 5 seconds it will paste the terrain back.
local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)
FillBall
在指定空間填滿一球滑順的地形。
參數
返回
範例程式碼
Terrain:FillBall() creates a ball of terrain given a center position, ball radius, and terrain materials.
local Workspace = game:GetService("Workspace")
-- Creates a ball of grass at (0,0,-10) with a radius of 10 studs
Workspace.Terrain:FillBall(Vector3.new(0, 0, -10), 10, Enum.Material.Grass)
FillBlock
用給定的位置、旋轉、尺寸和材料填滿一塊平滑的地形。
參數
返回
FillCylinder
在給定的空間中填滿平滑地形的筒體。空間使用 CFrame、高度和範圍來定義。
local Workspace = game:GetService("Workspace")Workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)
參數
返回
FillWedge
填滿給定的 和區域的 和尺寸的楔形體積。楔子的方向與等值的 WedgePart 相同。
參數
要填充的楔子位置和方向。
要填充的楔子的尺寸。
楔子將被填滿的材料。
返回
PasteRegion
將地形塊應用到地形對物件。注意:TerrainRegion資料不會在服務器和客戶端之間複製。
參數
返回
範例程式碼
Creates some terrain, copies it, then pastes it using the following API:
--[[
Note: The use of int16 variants for these API is the result of legacy code.
The underlying voxel grid system uses Vector3int32 (Vector3).
]]
local Workspace = game:GetService("Workspace")
local Terrain = Workspace.Terrain
-- Create a simple terrain region (a 10x10x10 block of grass)
local initialRegion = Region3.new(Vector3.zero, Vector3.one * 10)
Terrain:FillRegion(initialRegion, 4, Enum.Material.Grass)
-- Copy the region using Terrain:CopyRegion
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 (in this example, offsetting by 5 studs on the X-axis)
local newRegionCorner = Vector3int16.new(5, 0, 0)
-- Paste the region using Terrain:PasteRegion
Terrain:PasteRegion(copiedRegion, newRegionCorner, true)
ReadVoxelChannels
返回基於通道名稱的表格中的地形體積數據的區域。
參數
要讀取的目標區域必須與音箱網格對齊。如果區域過大,將發生錯誤;目前限制為 4194304 個音箱³。
音箱解析度。必須是 4。
需要從虛擬空間數據中訪問的通道ID(字串)列表。每個通道ID代表在 voxe體素 中儲存的數據類型。目前支持的ID是{"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"}。
返回
返回 voxel 數據作為基於 channelIds 輸入的辭典。鑰匙代表每個通道 ID 並將其值轉換為 3D 數據的陣列。
- SolidOccupancy — 在 SolidMaterial 通頻道中指定的體素材料的使用率。這是一個介於 0(空)和 1(滿)之間的值。
辭典也包含一個 Size 值代表每個通道數據3D陣列大小的鑰匙。
範例程式碼
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
以表格形式返回特定區域的平滑地形。
參數
要讀取的目標區域必須與音箱網格對齊。如果區域過大,將發生錯誤。目前限制為 4194304 個音箱^3。
音箱解析度。必須是 4。
返回
以兩個 3D 陣列返回原始音箱數據。
- materials - 來自目標區域的 3D 陣列 Enum.Material 。也包含尺寸欄位,與孤立陣列的尺寸相等。
- occupancies - 來自目標區域的 3D 空間值數組。也包含一個大小欄位,等於叢集數組的尺寸。
範例程式碼
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
取代材料會將特定的 內的地形替換為另一種材料。本質上是在 Terrain 材料上的匹配和替換操作。
限制
當呼叫此方法時,resolution參數必須正確為 4。此外,區域 3 必須與地形材料網格對齊,即區域 3 的最小和最大點數必須是 4 的倍數。使用 Region3:ExpandToGrid() 將區域變更為與此功能相容。
參數
替換操作將發生的區域。
替換操作將發空間的解析度;目前這必須是正確的 4。
將被替換的舊材料。
新的材料。
返回
範例程式碼
This code sample demonstrates the usage of Terrain:ReplaceMaterial() by replacing grass near the game origin with asphalt. It does this by constructing a Region3 using two Vector3s.
local Workspace = game:GetService("Workspace")
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)
SetMaterialColor
設置目標地形材料的現有地形材料顏色。地形材料將向指定顏色移動其基礎顏色。
參數
返回
WorldToCellPreferEmpty
返回包含點位置的網格細胞位置,在位置位於網格邊緣時,優先使用空白網格細胞。
參數
返回
WorldToCellPreferSolid
返回包含點位置的網格細胞位置,在位置位於網格邊緣時,優先使用非空白網格細胞。
參數
返回
WriteVoxelChannels
使用沃塞爾通道數據辭典設置地形區域。
參數
要寫入的目標區域必須與音箱網格對齊。如果區域過大,將發生錯誤;目前限制為 4194304 個音箱³。
音箱解析度。必須是 4。
與 ReadVoxelChannels() 返回值相似的音箱數據辭典。鑰匙代表每個通道ID,並以其各自的值作為3D數據的陣列。辭典可支持單個或多個通道輸入。
- SolidMaterial — 虛擬物體的 Enum.Material 材料。請注意,Water 不再支持;相反,只包含水的體素應該輸入為 SolidMaterial = Enum.Material.Air, LiquidOccupancy = x,其中 x 是介於 0(獨家)和 1(包括)之間的數字。
- SolidOccupancy — 在 SolidMaterial 通頻道中指定的物體素材料的使用率。這應該是 0(空)和 1(滿)之間的值。
返回
範例程式碼
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
使用表格格式設置特定區域的平滑地形。
參數
要寫入的目標區域必須與音量網格對齊。如果區域過大,將發生錯誤。
音箱解析度。必須是 4。
3D枚列的 Enum.Material. 維度必須與目標區域在瓦斯中的大小完全匹配。
3D 的 voxel 佔用量處理 (數字介於 0 和 1之間)。維度必須與目標區域在 voxels 的大小相匹配。
返回
範例程式碼
Example
local Workspace = game:GetService("Workspace")
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)
Many terrain methods throw an error if their given region size is too large. The limit is currently 4194304 voxels^3 for ReadVoxels() and WriteVoxels(), and 67108864 voxels^3 for other methods. For methods that take a cframe + size combination (e.g. FillBlock, FillCylinder etc.), then the region volume is calculated from the AABB of the target area.
local REGION_START = Vector3.new(-20, -20, -20)
local REGION_END = Vector3.new(20, 20, 20)
local CFRAME = CFrame.new(0, 20, 0)
local SIZE = 50
local function getRegionVolumeVoxels(region)
local resolution = 4
local size = region.Size
return (size.x / resolution) * (size.y / resolution) * (size.z / resolution)
end
local function isRegionTooLargeForReadWriteVoxels(region)
return getRegionVolumeVoxels(region) > 4194304
end
local function isRegionTooLarge(region)
return getRegionVolumeVoxels(region) > 67108864
end
-- Helper function to get an axis-aligned Region3 from the given cframe and size
local function getAABBRegion(cframe, size)
local inv = cframe:Inverse()
local x = size * inv.RightVector
local y = size * inv.UpVector
local z = size * inv.LookVector
local w = math.abs(x.X) + math.abs(x.Y) + math.abs(x.Z)
local h = math.abs(y.X) + math.abs(y.Y) + math.abs(y.Z)
local d = math.abs(z.X) + math.abs(z.Y) + math.abs(z.Z)
local pos = cframe.Position
local halfSize = Vector3.new(w, h, d) / 2
return Region3.new(pos - halfSize, pos + halfSize):ExpandToGrid(4)
end
-- Specific functions for checking individual methods
local function isRegionTooLargeForFillBall(cframe, radius)
local diameter = radius * 2
return isRegionTooLarge(getAABBRegion(cframe, Vector3.new(diameter, diameter, diameter)))
end
local function isRegionTooLargeForFillBlock(cframe, size)
return isRegionTooLarge(getAABBRegion(cframe, size))
end
local function isRegionTooLargeForFillCylinder(cframe, height, radius)
local diameter = radius * 2
return isRegionTooLarge(getAABBRegion(cframe, Vector3.new(diameter, height, diameter)))
end
local function isRegionTooLargeForFillRegion(region)
return isRegionTooLarge(region)
end
local function isRegionTooLargeForFillWedge(cframe, size)
return isRegionTooLarge(getAABBRegion(cframe, size))
end
local function isRegionTooLargeForReplaceMaterial(region)
return isRegionTooLarge(region)
end
local region = Region3.new(REGION_START, REGION_END)
print(isRegionTooLargeForReadWriteVoxels(region))
print(isRegionTooLargeForFillBall(CFRAME, SIZE))
print(isRegionTooLargeForFillBlock(CFRAME, SIZE))
print(isRegionTooLargeForFillCylinder(CFRAME, SIZE, SIZE))
print(isRegionTooLargeForFillRegion(region))
print(isRegionTooLargeForFillWedge(CFRAME, SIZE))
print(isRegionTooLargeForReplaceMaterial(region))