Terrain
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Terain, çok az gecikmeyle dinamik olarak şekillendirilebilir çevreler oluşturmanızı sağlar. Şu anda 4×4×4 çizgi üzerinde hücreler oluşturur, her hücrenin 0 ila 1 arasındaki bir sayısı vardır, bu sayısal geometrinin hücrenin içine ne kadar çok yer kaplayacağını temsil eder ve sonu
Daha fazla bilgi için, Araziyi Görüntüle bakın.
Özet
Özellikler
Terreno süslemesini etkinleştirir veya devre dışı bırakır.
Animasyon çiminin uzunluğunu belirtir.
MaterialColors, Materyal Renk özellikiçin editori temsil eder ve skriptler tarafından düzenlenemez .
Bir malzemenin rengini almak için şunları kullanın: Terrain:GetMaterialColor() Yaratılışın rengini ayarlamak için: Terrain:SetMaterialColor()
En büyük düzenlenebilir bölgenin sınırlarını gösterir.
Terrain suyunun tonu.
Yerin su yansımalarının ne kadar opak olduğunu kontrol eder.
Terrain suyunun transparansı.
Terrain su dalgalarının maksimum yüksekliğini ayarlar.
Terreno su dalgalarının her dakika yukarı veya aşağı hareket ettiğini ayarlar.
Bir parçanın fiziksel olarak hareket edilemez olup olmadığını belirler.
Parçanın montajının açısal hızı.
Parça montajının dünya alanındaki parça merkezinde.
Parçanın montajının lineer hızı.
Parçanın montajının toplamı.
Kurbanın kök kısmına bir referans.
Bir parçanın arka yüzünün türünü belirler (+Z yönlendirmesi).
Bir parçanın alt yüzünün türünü belirler (-Y yönlendirimi).
Bir parçanın rengini belirler.
Dünyadaki BasePart 'in konumunu ve yönünü belirler.
Bir parçanın başka bir parçaya çarpışıp çarpışmayacağını belirler.
Parçanın yerel sorgu işlemlerinde dikkate alınıp alınmadığını belirler.
Parçanın Touched ve TouchEnded olaylarının parçada ne sıklıkta ateş edileceğini belirler.
Bir parçanın gölge oluşturup oluşturmadığını belirler.
Bir parçanın merkezindeki masa üzerindeki dünya konumunu açıklar.
Bir parçanın çarpışma grupadını açıklar.
Bir parçanın rengini belirler.
Parçanın mevcut fiziksel özelliklerini gösterir.
Bir parçanın birkaç fiziksel özelliğini belirler.
Parçalarda ve bileşenlerde havadan güçleri etkinleştirmek veya devre dışı bırakmak için kullanılır.
Class.BasePart 'in fiziksel varlıklarının BasePart kısmı.
Fiziksel boyutları BasePart fiziksel motoru tarafından dikkate alınan gerçek boyutu.
Bir parçanın Front yüzünün hangi tip bir yüzey olacağını belirler (-Z yönlendirimi).
Bir parçanın sol yüzünün türünü belirler (-X yönü).
Yalnızca yerel kliente görünür olan BasePart.Transparency ile ilgili bir çarpan belirleyin.
Bir parçanın Studio'da seçilebilir olup olmadığını belirler.
Parçanın miktarını, yoğunluğunun ve hacminin ürününü açıklar.
Parçanın kalıcı vücuttoplam masyana veya içine katkıda bulunduğunu belirler.
Bir parçanın tekstürünü ve varsayılan fiziksel özelliklerini belirler.
MaterialVariant ın adı.
Parçanın dünyadaki dönüşümünü açıklar.
Parçanın pivot'unun CFrame 'inden oluğunu belirtir.
Parçanın dünyadaki konumunu açıklar.
Son kaydedilen fiziksel güncellemeden bu yana kaydedilen süre.
Bir parçanın gökyüzü kutusunu ne kadar yansıttığını belirler.
Resize yöntemi tarafından izin verilen en küçük değişikliği açıklar.
Bir parçanın yeniden boyutlandırılabileceği yüzleri tanımlar.
Bir parçanın sağ yüzünün türünü belirler (+X yönü).
Bir montajın kök kısmını belirlemede asıl kural.
Parçanın üç eksen için derece olarak dönme.
Bir parçanın boyutlarını (genişlik, yükseklik) belirler.
Bir parçanın üst yüzünün türünü belirler (+Y yönü).
Bir parçanın görülebilirliğini (parça gizliliğinin tersi) belirler.
Yöntemler
Arazi hücresinin merkezindeki konumunu dünya pozisyonunu (x, y, z) iade eder.
Ağ üzerindeki küçük kısma (x, y, z) sağ-gitti-önümüzdeki kısma döndürür.
Araziyi temizler.
Terreno'nun bir kısmını bir TerrainRegion nesneye kaydeder, böylece daha sonra yeniden yüklenecek. Not: Terreno'nun verileri sunucu ve istemci arasında kopyalanmaz.
Terrain'da boş olmayan hücrelerin sayısını iade eder.
Verilen alanda düz bir top doldurur.
Verilen bir konum, dönme, boyut ve malzeme ile bir blok düz arazi doldurur.
Verilen alanda düz bir yer silindirini doldurur.
Düz arazisi ile bir Region3 alanı doldurur.
Verilen Enum.Material ve bölgenin CFrame ve Boyutu ile dolu bir küçük hacim doldurur.
Belirli bir arazi malzemesi için mevcut arazi malzemesi rengini iade eder.
Terrain objesine bir kısım arazi uygulanır. Not: TerrainRegion verileri sunucu ve istemci arasında kopyalanmaz.
Kanal isimlerine dayanarak bir bölge topu verilerinin masa biçiminde döndürür.
Tablo formatında belirli bir yumuşak yer bölgesi içerir.
- ReplaceMaterial(region : Region3,resolution : number,sourceMaterial : Enum.Material,targetMaterial : Enum.Material):void
Bir bölgenin içindeki bir malzeme kaynağını başka bir malzeme ile değiştirir.
Belirli bir arazi malzemesi için mevcut arazi malzemesi rengini ayarlar.
Nokta pozisyonu içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren
Position nokta pozisyonunu içeren küçük küçük hücreleri tercih ederken küçük küçük hücreleri tercih eder.
Position置顶部时非空格位置的GridCells tercih ederken n空格位置のGridCells'i içeren grilleşme hücrelerinin yerini döndürür.
Voxel kanalı verileri kullanarak bir bölge oluşturur.
Tablo formatını kullanarak belli bir arazi bölgesini ayarlar.
Kuruluşa bir kuvvet uygula.
Kuruluşun center of mass kullanımına bir impuls uygula.
Belirli bir pozisyondaki montaja bir impuls uygula.
Parçaların birbirleriyle çarpışabileceğini veya çarpışmayabileceğini belirler.
Bir parçanın ağ sahibi olup olmadığını kontrol eder.
Nesneye herhangi bir türde katlanmış bir bağlantıyla bağlanmış bir parça tablosu döndürür.
Bu Parçaya bağlı olan tüm Ortakları veya Sınırları iade edin.
Class.BasePart.Mass|Mass özelliğinin değerini iade eder.
Bu bölgenin ağ sahibi olan mevcut oyuncuyu veya sunucunun durumunda nul'u döndürür.
Oyun motoru bu bölüm için ağ sahibini otomatik olarak belirlerse geri döner.
Bir parçanın temel kısmını bir montajın geri döndürür.
Bu parçayla etkileşim kuran tüm BasePart.CanCollide gerçek parçaların bir tablosunu içerir.
Bu bileşenin montajına ilişkin verilen pozisyondaki parçanın lineer hızını iade eder.
Eğer nesne yerini alacak bir paraya bağlanıyorsa (örneğin bir Anchored parçası) geri döndürür, aksi takdirde geri döndürmez.
Stüdyo boyutlandırma aracını kullanarak nesnenin boyutunu değiştirmenin aynısını yapar.
Bu ve tüm bağlantılı parçalar için verilen oyuncuyu ağ sahibi olarak ayarlar.
Oyun motoru, kimin fiziğini ele alacağını dinamik olarak karar vermesine izin verir (bir klien veya sunucu).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Parçanın ve diğer parçaların çakışma geometrisinden yeni bir IntersectOperation oluşturur.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Verilen matrisindeki parçaların geometrisinden düşük olarak yeni bir UnionOperation oluşturur.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Parçadan yeni bir UnionOperation oluşturur, plus birimde verilen matematiksel çizimin kaplandığı yer.
Bir PVInstance 'nin pivot'unu alır.
Tüm ataları ile birlikte PVInstance şeklini alır, böylece merkez noktası artık belirlenen PVInstances ile bulunur.
Etkinlikler
Şuradan alınan Etkinlikler: BasePartFiziksel hareketin sonucu olarak bir parçanın başka bir parçaya dokunmasını durdurur.
Fiziksel hareketin sonucu olarak bir parça başka bir parçaya dokunduğunda ateş eder.
Özellikler
Decoration
Mevcut, çimlerin çizgideki animasyonunu Çim zemin malzemesi üzerinde etkinleştirir veya devre dışı bırakır, ancak bu özellik gelecekteki değişiklikleri kontrol edebilir.
GrassLength
Grass terreno malzemesi üzerindeki animasyon çiminin uzunluğunu belirtir, Class.Terrain.Decoration|Decoration etkinleştirilmiş olmasını varsayarak. Geçerli değerler 0,1 ile 1 arasındadır.
MaterialColors
MaterialColors, Materyal Renk özellikiçin editori temsil eder ve skriptler tarafından düzenlenemez .
Bir malzemenin rengini almak için kullanın: Terrain:GetMaterialColor()
Bir malzemenin rengini ayarlamak için kullanın: Terrain:SetMaterialColor()
WaterWaveSize
Terrain su dalgalarının maksimum yüksekliğini altın olarak ayarlar. Bu, şu anda 0 ve 1 arasında sınırlıdır.
WaterWaveSpeed
Terreno su dalgalarının her dakika yukarı veya aşağı hareket ettiğini ayarlar. Bu anda 0 ve 100 arasında sınırlıdır.
Yöntemler
CellCenterToWorld
Arazi hücresinin merkezindeki konumunu dünya pozisyonunu (x, y, z) iade eder.
Parametreler
Dönüşler
CellCornerToWorld
Ağ üzerindeki küçük kısma (x, y, z) sağ-gitti-önümüzdeki kısma döndürür.
Parametreler
Dönüşler
Clear
Araziyi temizler.
Dönüşler
CopyRegion
Terreno'nun bir kısmını bir TerrainRegion nesneye kaydeder, böylece daha sonra yeniden yüklenecek. Not: Terreno'nun verileri sunucu ve istemci arasında kopyalanmaz.
Parametreler
Dönüşler
Kod Örnekleri
local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)
FillBall
Verilen alanda düz bir top doldurur.
Parametreler
Arazi topunun merkezindeki konum.
Terren topunun stud'larındaki radius.
Arazi topunun Enum.Material kümesi.
Dönüşler
Kod Örnekleri
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
Verilen bir konum, dönme, boyut ve malzeme ile bir blok düz arazi doldurur.
Parametreler
Terreno blokunun cframe (pozisyon ve yön)
Kare bloğunun boyutları - yüksekliği ve genişliği.
Arazi blokunun Enum.Material 'i.
Dönüşler
FillCylinder
Verilen alanda düz bir yerin silindirini doldurur. Alan CFrame, yükseklik ve çevre kullanılarak tanımlanır.
Kullanım
workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)
Parametreler
Terin küre (pozisyon ve yön) CFrame'i.
Terin kürevi yüksekliği.
Terin küre silindirinin çevrelerindeki mesafe.
Terin küre Enum.Material 'ı.
Dönüşler
FillWedge
FillWedge() bir Class.Terrain ile verilen şekilli bir hacim Terrain ile bir küme biçimindeki bir hacimle doldurur. Enum.Material ve bölgenin boyutu ile bölgeyi yönlendirir. 0> Class.WedgePart0> ile e
Parametreler
Doldurulacak köşenin konumu ve yönü.
Doldurmanız gereken köşenin boyutu.
Kızakla doldurulacak malzeme.
Dönüşler
GetMaterialColor
Belirlenen yer malzemesi için mevcut yer malzemesi rengini iade eder.
Parametreler
Dönüşler
PasteRegion
Terrain objesine bir kısım arazi uygulanır. Not: TerrainRegion verileri sunucu ve istemci arasında kopyalanmaz.
Parametreler
Dönüşler
Kod Örnekleri
--[[
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
Kanal isimlerine dayanarak bir bölge topu verilerinin masa biçiminde döndürür.
Parametreler
Okuyacak hedef bölgesi. Voxel kümesine uymalıdır. Bölgenin çok büyük olduğu durumda bir hata oluşur; sınır şu anda 4194304 voxels³'dir.
Voxel özelliğinin çözünürlüğü. 4 olmalıdır.
Voxel verilerinden erişilecek kanal ID'leri (ip) gereken bir matrisi temsil eder. Her kanal ID'i, voxel'de depolanan bir tür veri temsil eder. Mevcut desteklenen ID'ler şunları temsil eder: {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .
Dönüşler
Geri bildirimdeki channelIds girişine dayanarak voxel verileri bir sözlük olarak döndürür. Anahtarlar, her bir kanal ID'sini kendi değerleri olarak bir 3D veri matrisi olarak temsil eder.
- SolidMaterial — Voxel'in Enum.Material malzemesi. Not edin ki, artık Water desteklemiyor; yerine, su içeren bir voxel'in değeri 0> SolidMaterial0> olacaktır.
- SolidOccupancy — Malzeme voxel'inin malzeme alanı, belirtilen SolidMaterial kanalındaki malzeme alanı. Bu, 0 (boş) ve 1 (tam) arasındaki bir değerdir.
- LiquidOccupancy — Water malzemesinin bir voxel olarak kapasitesini belirtir, 0 (su yok) ve 1 (su dolu) arasında bir değer olarak. SolidOccupancy 1 ve 0> SolidMaterial
Sözlük ayrıca her kanal verisinin 3D matrisi boyutunu temsil eden bir Size anahtarı içerir.
Kod Örnekleri
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
Tablo formatında belirli bir yumuşak yer bölgesi içerir.
Parametreler
Okuyacak hedef bölgesi. Voxel kümesine uymalıdır. Bölge çok büyükse bir hata oluşur. Sınır şu anda 4194304 voxels^3'tür.
Voxel özelliğinin çözünürlüğü. 4 olmalıdır.
Dönüşler
Raw voxel data'yı iki 3D阵 olarak iade eder.
- materials - Enum.Material hedef alanındaki 3B matrisi. Ayrıca, katmanlı matrislerin boyutlarına eşit olan Boyut alanını içerir.
- occupancies - Hedef alanındaki üstel sayıların değerleri için 3B matrisi. Ayrıca, boyut alanının üstel matrisi ile eşit.
Kod Örnekleri
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
ReplaceMaterial, belli bir Enum.Material malzemesinin içindeki yerini başka bir malzemeyle değiştirir. Temel olarak, bu Region3 içindeki bir bul-ve değiştirme işlemdir.
Kısıtlamalar
Bu metodu çağırken, resolution parametresi kesin olarak 4 olmalıdır. Ayrıca, Region3'ün minimum ve maksimum noktalarının yerleştirilmesi için yüzdesi 4'e bölünmelidir. Bu nedenle, bir bölgeyi bu işlevle uyumlu hale getirmek için Region3:ExpandToGrid() kullan
Parametreler
Değiştirme işleminin meydana gelbölge.
Değiştirme işleminin dünyaçözünürlük; şu anda bunun doğru olması gerekir 4.
Değiştirilecek eski malzeme.
Yeni malzeme.
Dönüşler
Kod Örnekleri
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
Belirli bir arazi malzemesi için mevcut arazi malzemesi rengini belirler. Arazi malzemesi, temel rengini belirli renge değiştirir.
Parametreler
Dönüşler
WorldToCell
Nokta pozisyonu içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren küçük hücreyi içeren
Parametreler
Dönüşler
WorldToCellPreferEmpty
Position nokta pozisyonunu içeren küçük küçük hücreleri tercih ederken küçük küçük hücreleri tercih eder.
Parametreler
Dönüşler
WorldToCellPreferSolid
Position置顶部时非空格位置的GridCells tercih ederken n空格位置のGridCells'i içeren grilleşme hücrelerinin yerini döndürür.
Parametreler
Dönüşler
WriteVoxelChannels
Voxel kanalı verileri kullanarak bir bölge oluşturur.
Parametreler
Yazılacak hedef bölgesi. Voxel kafesiyle uyumlu olmalıdır. Bölge çok büyükse bir hata oluşur; sınır şu anda 4194304 voxels³'dir.
Voxel özelliğinin çözünürlüğü. 4 olmalıdır.
Class.Terrain:ReadVoxelChannels()|ReadVoxelChannels() dönüş değerine benzer voxel verilerin sözlüğü. Anahtarlar, her bir kanal ID'ini kendi öz değer olarak bir 3D veri arayüzü olarak temsil eder. Sözlük tek veya çok kanal girişlerini destekleyebilir.
- SolidMaterial — Voxel'in Enum.Material malzemesidir. Not edin ki, artık Water desteklenmiyor; yerine, sadece su içeren bir voxel girilmelidir; burada, 0> SolidMaterial = Enum.Material
- SolidOccupancy — Malzeme SolidMaterial kanalında belirtilen malzeme kapasitesi. Bu, 0 (boş) ve 1 (dolu) arasında bir değer olmalıdır.
- LiquidOccupancy — Water malzemesinin bir voxel olarak kapasitesini belirtir, 0 (su yok) ve 1 (su dolu) arasında bir değer olarak. SolidOccupancy 1 ve 0> SolidMaterial
Dönüşler
Kod Örnekleri
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
Tablo formatını kullanarak belli bir arazi bölgesini ayarlar.
Parametreler
Yazılacak hedef bölgesi. Voxel kaynağına uymalıdır. Bölgenin çok büyük olduğu durumda bir hata oluşur.
Voxel özelliğinin çözünürlüğü. 4 olmalıdır.
3DENSE Material.Dimensions matematiksel bölüm boyutu hedef bölgesinin büyüklüğüne eşdeğer olmalıdır.
3B voxel kapasitesi (0 ile 1 arasındaki numara) boyutları hedef bölgesinin boyutuna eşit olmalıdır.
Dönüşler
Kod Örnekleri
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)
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))