Terrain

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat

Tanah memungkinkan Anda membuat lingkungan yang dapat berubah dinamis dengan sedikit hingga tidak ada kelambatan.Saat ini didasarkan pada grid 4×4×4 sel, di mana setiap sel memiliki nomor antara 0 dan 1 yang mewakili berapa banyak geometri harus mengisi sel, dan materi sel.Kepadatan menentukan bagaimana sel akan berubah bersama dengan sel di sekitarnya, dan hasilnya adalah ilusi tidak memiliki batasan grid.

Untuk informasi lebih lanjut, lihat Tanah.

Rangkuman

Properti

Properti diwarisi dari BasePartProperti diwarisi dari PVInstance

Metode

Metode diwarisi dari BasePartMetode diwarisi dari PVInstance

Acara

Acara diwarisi dari BasePart

Properti

Decoration

Tidak Dapat Ditulis Skripnya
Baca Paralel

Saat ini mengaktifkan atau menonaktifkan rumput beranimasi di material medan Rumput , meskipun modifikasi masa depan dari properti ini dapat mengontrol fitur dekoratif tambahan.

GrassLength

Tidak Dapat Ditulis Skripnya
Baca Paralel

Mengidentifikasi panjang rumput beranimasi pada material medan Rumput , dengan asumsi Decoration diaktifkan. Nilai yang valid berada di antara 0.1 dan 1.

MaterialColors

BinaryString
Tidak Dapat Ditulis Skripnya
Baca Paralel

MaterialColors mewakili editor untuk fitur Warna Material, dan tidak dapat diedit oleh skrip .

Untuk mendapatkan warna material, gunakan: Terrain:GetMaterialColor()

Untuk menetapkan warna material, gunakan: Terrain:SetMaterialColor()

MaxExtents

Hanya Baca
Tidak Direplikasi
Baca Paralel

Menampilkan batas-batas wilayah paling besar yang dapat diedit.

WaterColor

Baca Paralel

Tinta air Tanah.

WaterReflectance

Baca Paralel

Mengontrol seberapa opak refleksi air di Tanah.

WaterTransparency

Baca Paralel

Transparansi air Tanah.

WaterWaveSize

Baca Paralel

Mengatur ketinggian maksimum gelombang air Tanah dalam stud. Ini saat ini dibatasi antara 0 dan 1.

WaterWaveSpeed

Baca Paralel

Mengatur berapa kali gelombang air Tanah akan bergerak naik dan turun per menit. Ini saat ini dibatasi antara 0 dan 100.

Metode

CellCenterToWorld

Kembalikan posisi dunia pusat sel medan (x, y, z).

Parameter

Nilai Default: ""
Nilai Default: ""
Nilai Default: ""

Memberikan nilai

CellCornerToWorld

Kembalikan posisi sudut kiri bawah ke depan grid sel (x, y, z).

Parameter

Nilai Default: ""
Nilai Default: ""
Nilai Default: ""

Memberikan nilai

Clear

()

Menyapu tanah.


Memberikan nilai

()

CopyRegion

Menyimpan potongan tanah ke dalam objek TerrainRegion sehingga dapat dimuat kembali nanti.Catatan: TerrainRegion data tidak diulang antara server dan klien.

Parameter

region: Region3int16
Nilai Default: ""

Memberikan nilai

Contoh Kode

The following code will copy the whole Terrain and clear it. After 5 seconds it will paste the terrain back.

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

Kembalikan jumlah sel non-kosong di Tanah.


Memberikan nilai

FillBall

()

Mengisi bola tanah mulus di ruang tertentu.

Parameter

center: Vector3

Posisi pusat bola medan.

Nilai Default: ""
radius: number

Jari dalam stud dari bola medan.

Nilai Default: ""
material: Enum.Material

The Enum.Material dari bola medan.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

Terrain:FillBall() creates a ball of terrain given a center position, ball radius, and terrain materials.

Filling a Ball of Terrain

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

()

Mengisi blok tanah mulus dengan lokasi, rotasi, ukuran, dan material yang diberikan.

Parameter

cframe: CFrame

Posisi dan orientasi blok tanah.

Nilai Default: ""
size: Vector3

Ukuran dalam stud dari blok persegi - baik ketinggian dan lebar.

Nilai Default: ""
material: Enum.Material

The Enum.Material dari blok medan.

Nilai Default: ""

Memberikan nilai

()

FillCylinder

()

Mengisi silinder tanah mulus di ruang tertentu. Ruang didefinisikan menggunakan CFrame, ketinggian, dan radius.


local Workspace = game:GetService("Workspace")
Workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)

Parameter

cframe: CFrame

Posisi dan orientasi silinder tanah.

Nilai Default: ""
height: number

Tinggi dalam stud dari silinder medan.

Nilai Default: ""
radius: number

Jari dalam stud dari silinder medan.

Nilai Default: ""
material: Enum.Material

The Enum.Material dari silinder medan.

Nilai Default: ""

Memberikan nilai

()

FillRegion

()

Mengisi ruang Region3 dengan medan mulus.

Parameter

region: Region3
Nilai Default: ""
resolution: number
Nilai Default: ""
material: Enum.Material
Nilai Default: ""

Memberikan nilai

()

FillWedge

()

FillWedge() mengisi volume berbentuk segi tiga dari Terrain dengan Enum.Material dan ukuran area dan yang diberikan CFrame .Orientasi pasak sama dengan setara WedgePart .

Parameter

cframe: CFrame

Posisi dan orientasi pasak untuk diisi.

Nilai Default: ""
size: Vector3

Ukuran lembaga untuk diisi.

Nilai Default: ""
material: Enum.Material

Bahan yang akan diisi dengan pasak.

Nilai Default: ""

Memberikan nilai

()

GetMaterialColor

Tulis Paralel

Kembalikan warna material medan saat ini untuk material medan yang ditentukan.

Parameter

material: Enum.Material
Nilai Default: ""

Memberikan nilai

PasteRegion

()

Menerapkan potongan tanah ke objek Tanah. Catatan: TerrainRegion data tidak berkembang di antara server dan klien.

Parameter

Nilai Default: ""
corner: Vector3int16
Nilai Default: ""
pasteEmptyCells: boolean
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

Creates some terrain, copies it, then pastes it using the following API:

Create, Copy and Paste Terrain

--[[
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

Tulis Paralel

Kembalikan wilayah data vokel medan di format tabel berdasarkan nama saluran.

Parameter

region: Region3

Wilayah target untuk dibaca. Harus sesuai dengan grid voxel. Akan menyebabkan kesalahan jika wilayah terlalu besar; batas saat ini adalah 4194304 voksels³.

Nilai Default: ""
resolution: number

Resolusi voksel. Harus menjadi 4.

Nilai Default: ""
channelIds: Array

Array ID saluran (string) yang perlu diakses dari data voksel.Setiap ID saluran mewakili jenis data yang disimpan di voxel.ID yang didukung saat ini adalah {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .

Nilai Default: ""

Memberikan nilai

Kembalikan data vokel sebagai kamus berdasarkan input channelIds . Kunci mewakili setiap ID saluran dengan nilai masing-masing sebagai array data 3D.

  • SolidMaterial — Bahan Enum.Material dari vokel.Perhatikan bahwa Water tidak lagi didukung; sebagai gantinya, vokel yang berisi air akan memiliki nilai LiquidOccupancy .
  • SolidOccupancy — Pemenuhan material vokel seperti yang ditentukan di saluran SolidMaterial. Ini adalah nilai antara 0 (kosong) dan 1 (penuh).
  • LiquidOccupancy — Menypesifikasi keberadaan material Water di voksel sebagai nilai antara 0 (tidak ada air) dan 1 (penuh air).Jika SolidOccupancy adalah 1 dan SolidMaterial tidak adalah Air , ini akan menjadi 0.

Kamus juga berisi kunci Size dengan nilai yang mewakili ukuran array 3D dari setiap data saluran.

Contoh Kode

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

Tulis Paralel

Kembalikan wilayah tertentu dari medan halus dalam format tabel.

Parameter

region: Region3

Wilayah target untuk dibaca. Harus sesuai dengan grid voxel. Akan menyebabkan kesalahan jika wilayah terlalu besar. Batas saat ini adalah 4194304 voksels^3.

Nilai Default: ""
resolution: number

Resolusi voksel. Harus menjadi 4.

Nilai Default: ""

Memberikan nilai

Kembalikan data vokel mentah sebagai dua array 3D.

  • - array 3D dari area target. Juga berisi bidang Ukuran, sama dengan dimensi array terkait.
  • occupancies - array 3D nilai occupasi dari area target. Juga berisi bidang Ukuran, sama dengan dimensi array terkait.

Contoh Kode

Terrain:ReadVoxels() Code Example

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

()

Pengganti Bahan menggantikan medan dari tertentu Enum.Material dalam Region3 dengan bahan lain.Pada dasarnya, ini adalah operasi temukan dan ganti pada Terrain materi.

Kontraksi

Saat memanggil metode ini, parameter resolution harus persis 4.Selain itu, Region3 harus disesuaikan dengan grid materi medan, yaitukomponen minimum dan maksimum dari Region3 harus dibagi 4.Gunakan Region3:ExpandToGrid() untuk membuat wilayah kompatibel dengan fungsi ini.

Parameter

region: Region3

Wilayah di mana operasi penggantian akan terjadi.

Nilai Default: ""
resolution: number

Resolusi di mana operasi penggantian akan tempat; saat ini harus persis 4.

Nilai Default: ""
sourceMaterial: Enum.Material

Bahan lama yang harus diganti.

Nilai Default: ""
targetMaterial: Enum.Material

Bahan baru.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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.

Terrain:ReplaceMaterial

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

()

Tetapkan warna material medan saat ini untuk material medan tertentu. Material medan akan bergeser warna dasarnya menuju warna tertentu.

Parameter

material: Enum.Material
Nilai Default: ""
value: Color3
Nilai Default: ""

Memberikan nilai

()

WorldToCell

Kembalikan lokasi sel grid yang berisi posisi titik **** .

Parameter

position: Vector3
Nilai Default: ""

Memberikan nilai

WorldToCellPreferEmpty

Kembalikan lokasi sel grid yang berisi posisi titik, memilih sel grid kosong saat posisi berada di tepi grid.

Parameter

position: Vector3
Nilai Default: ""

Memberikan nilai

WorldToCellPreferSolid

Kembalikan lokasi sel grid yang berisi posisi titik, memilih sel grid non-kosong saat posisi berada di tepi grid.

Parameter

position: Vector3
Nilai Default: ""

Memberikan nilai

WriteVoxelChannels

()

Mengatur wilayah tanah menggunakan kamus data saluran voksel.

Parameter

region: Region3

Wilayah target untuk ditulis. Harus sesuai dengan grid voxel. Akan menyebabkan kesalahan jika wilayah terlalu besar; batas saat ini adalah 4194304 voksels³.

Nilai Default: ""
resolution: number

Resolusi voksel. Harus menjadi 4.

Nilai Default: ""
channels: Dictionary

Kamus data voksel yang mirip dengan nilai pengembalian dari ReadVoxelChannels() .Kunci mewakili setiap ID saluran dengan nilai masing-masing sebagai array data 3D.Kamus dapat mendukung input saluran tunggal atau banyak.

  • SolidMaterial — Bahan Enum.Material dari vokel.Perhatikan bahwa Water tidak lagi didukung; sebagai gantinya, vokel yang hanya berisi air harus dimasukkan sebagai SolidMaterial = Enum.Material.Air, LiquidOccupancy = x , di mana x adalah angka antara 0 (eksklusif) dan 1 (inklusif).
  • SolidOccupancy — Pemenuhan material vokel seperti yang ditentukan di saluran SolidMaterial. Ini harus menjadi nilai antara 0 (kosong) dan 1 (penuh).
  • LiquidOccupancy — Menypesifikasi keberadaan material Water di voksel sebagai nilai antara 0 (tidak ada air) dan 1 (penuh air).Jika SolidOccupancy adalah 1 dan SolidMaterial tidak adalah Air , ini akan menjadi 0.
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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

()

Mengatur wilayah tertentu dari medan halus menggunakan format tabel.

Parameter

region: Region3

Wilayah target untuk ditulis. Harus disesuaikan dengan grid voxel. Akan menyebabkan kesalahan jika wilayah terlalu besar.

Nilai Default: ""
resolution: number

Resolusi voksel. Harus menjadi 4.

Nilai Default: ""
materials: Array

배열 3D dari Enum.Material. Dimensi harus persis cocok dengan ukuran wilayah target dalam voksels.

Nilai Default: ""
occupancy: Array

배열 3D dari keberadaan voksel (angka antara 0 dan 1). Dimensi harus sesuai dengan ukuran wilayah target dalam vokel.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

Example

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.

Maximum Region Size

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))

Acara