Terrain
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Địa hình cho phép bạn tạo môi trường biến đổi định tĩnh với ít hoặc không có lag. Hiện tại được dựa trên một lưới 4×4×4 các tế bào, nơi mỗi tế bào có một số giữa 0 và 1 diễn tả số lượng hình họa nên tế bào nên
Để biết thêm thông tin, xem Mặt địa hình .
Tóm Tắt
Thuộc Tính
Mở hoặc đóng trang trí địa hình.
Chỉ định chiều dài của cỏ hoạt họa.
MaterialColors đại diện cho editor cho tính năng Màu Vật, và không thể được chỉnh sửa bởi các <a href="/reference/engine/datatypes">mẫu</a> .
Để nhận màu của một vật liệu, hãy sử dụng: Terrain:GetMaterialColor() Để cài đặt màu của một vật liệu, hãy sử dụng: Terrain:SetMaterialColor()
Hiển thị các giới hạn của khu vực có thể chỉnh sửa lớn nhất.
Màu sắc của nước địa hình.
Điều khiển độ trong suốt của bóng nước khu vực.
Độ trong suốt của nước địa hình.
Điều chỉnh chiều cao tối đa của các môn nước địa hình trong studs.
Điều chỉnh số lần mà nước địa hình sẽ di chuyển lên xuống mỗi phút.
Xác định có phải một bộ phận là vật rắn bởi vật lý hay không.
Tốc độ góc của hệ thống tập hợp phần.
Trung tâm của hàng loạt của bộ phận trong không gian thế giới.
Tốc độ truyền thẳng của hộp số.
Tổng trọng lượng của hàng tập họp.
Một tham chiếu đến phần chính của hệ thống.
Xác định loại bề mặt cho mặt sau của một bộ phận (+Z hướng).
Xác định loại bề mặt cho mặt dưới của một bộ phận (-Y hướng).
Xác định màu của một bộ phận.
Xác định vị trí và hướng tây của BasePart trên thế giới.
Xác định có phải vật nào có thể va chạm với nhau.
Xác định có phải xử lý phần nào trong các hành động truy vấn không gian.
Xác định nếu sự kiện Touched và TouchEnded xảy ra trên bộ phận.
Xác định có hay không một bộ phận tạo ra bóng tối.
Mô tả vị trí trên thế giới mà trung tâm hồi quang của một bộ phận được đặt.
Mô tả tên của một nhóm va chạm của một phần.
Xác định màu của một bộ phận.
Chỉ định các thuộc tính vật lý hiện tại của bộ phận.
Xác định một số thuộc tính vật lý của một bộ phận.
Được sử dụng để bật hoặc tắt các lực khí tương đối trên các bộ phận và tập hợp.
Kích thước thực tế của BasePart như được xem xét bởi các khối lận BasePart lận lý.
Xác định loại bề mặt cho mặt trước của một bộ phận (-Z hướng).
Xác định loại bề mặt cho mặt trái của một bộ phận (-X hướng).
Xác định một hệ số nhân cho BasePart.Transparency mà chỉ người dùng địa phương mới có thể thấy.
Xác định có phải một bộ phận được chọn trong Studio không.
Mô tả hầu hết lượng lớn của bộ phận, sản lượng của nó và khối lượng.
Xác định xem liệu phần có đóng góp vào tổng sức mạnh hoặc tốc độ chết của cơ thâncứng rắn của nó hay không.
Xác định các thuộc tính và thuộc tính vật lý mặc định của một phần.
Tên của MaterialVariant .
Mô tả sự quay của bộ phận trong thế giới.
Định vị lệch của các cột trụ của bộ phận từ các CFrame của nó.
Mô tả vị trí của bộ phận trên thế giới.
Thời gian kể từ lần cuối cập nhật vật lý.
Xác định mức độ phản chiếu của một bộ phận trên trời.
Mô tả thay đổi nhỏ nhất cho phép bởi phương pháp Thay đổi kích thước.
Mô tả các khuôn mặt mà một phần có thể được thay đổi kích thước.
Xác định loại bề mặt cho mặt phải của một bộ phận (+X hướng).
Quy tắc chính để xác định phần thân của một bản dựng.
Sự quay của bộ phận theo độ cho ba trục.
Xác định các kích thước của một bộ phận (Độ dài, chiều rộng, chiều cao).
Xác định loại bề mặt cho mặt trên của một bộ phận (+Y hướng).
Xác định mức độ mà một phần có thể được nhìn thấy thông qua (ản định hướng ngược lại của sự mờ dần).
Phương Pháp
Trả về vị trí trung tâm của hạt đất (x, y, z).
Quay vị trí góc bên trái dưới của thành phần lưới (x, y, z).
Xóa mặt địa hình.
Lưu một phần của địa hình vào một TerrainRegion để có thể được tải lại sau đó. Ghi chú: Dữ liệu TerrainRegion không bị sao chép giữa máy chủ và máy chủ khách.
Trả lại số lượng các tế bào không rỗng trong Terrain.
Lấp đầy một quả cầu địa hình mịn trong một không gian cụ thể.
Làm cho một khối địa hình mịn màng bằng cách đặt một vị trí, vòng quay, kích thước và vật liệu nhất định.
Làm đầy một trụ trơn trong một không gian nhất định.
Làm đầy một khu vực Region3 với mặt địa hình mịn.
Làm đầy một khối lượng hình chữ nhật của Terrain bằng cách sử dụng Enum.Material và CFrame và Kích thước của khu vực.
Điều chỉnh màu mặt địa hình hiện tại cho mặt địa hình được xác định.
Xem xét một phần của địa hình vào đối tượng Địa hình. Ghi chú: TerrainRegion dữ liệu không được sao chép giữa máy chủ và máy chủ.
Trả lại một khu vực dữ liệu voxel địa hình trong dạng bảng dựa trên tên kênh.
Trả lại một khu vực nhất định của mặt đất mịn trong dạng bảng.
- ReplaceMaterial(region : Region3,resolution : number,sourceMaterial : Enum.Material,targetMaterial : Enum.Material):void
Thay thế mặt địa hình của một vật liệu trong khu vực bằng một vật liệu khác.
Điều chỉnh màu mặt địa hình hiện tại cho địa hình được xác định.
Trả về vị trí màn hình đang hiển thị vị trí điểm .
Trả về vị trí màn hình trong lưới chứa vị trí điểm, thích hợp khi vị trí ở một cạnh lưới.
Trả về vị trí màn hình trong lưới màu đỏ, bao gồm vị trí điểm, để đảm bảo màn hình không rỗi khi vị trí ở một cạnh lưới.
Định vị một khu vực của địa hình bằng cách sử dụng từ điển dữ liệu kênh voxel.
Đặt một khu vực nhất định của mặt đất mịn bằng cách sử dụng hình dạng bảng.
Xem xét áp dụng một ngực đạo cho hệ thống.
Xem xét áp dụng một xoay tốc độ vào bộ tập hợp tại trung tâm center of mass của nó.
Xem xét áp dụng một xoay tốc độ đến bộ tập hợp ở vị trí đặc định.
Quyết định xem các bộ phận có thể va chạm với nhau.
Kiểm tra xem bạn có thể thiết lập sở hữu mạng của một phần.
Trả lại một bảng các bộ phận kết nối với mục bằng bất kỳ loại nào của mối hàn cứng.
Trả lại tất cả Cột kết nối hoặc Giới hạn mà đã kết nối với phần này.
Trả giá trị của thuộc tính Mass .
Trả về người chơi hiện tại mà là chủ mạng của phần này, hoặc là nil trong trường hợp của máy chủ.
Trả về true nếu Engine game tự động quyết định chủ mạng cho phần này.
Trả lại phần cơ bản của một bộ sưu tập các bộ phận.
Trả về một bảng của tất cả BasePart.CanCollide các bộ phận thực sự có khớp nối với bộ phận này.
Đo lường tốc độ truyền thẳng của cấu hình của bộ phận ở vị trí được cho đối với bộ phận này.
Trả về true nếu đối tượng được kết nối với một phần để giữ nó ở chỗ (ví dụ, một phần Anchored )), trái lại trả về false.
Thay đổi kích thước của một đối tượng chỉ như sử dụng công cụ thay đổi kích thước Studio.
Đặt người chơi được cho là chủ mạng cho các bộ phận này và tất cả các bộ phận kết nối.
Cho phép động cơ trò chơi quyết định dinamically ai sẽ xử lý vật lý của bộ phận (một trong những khách hàng hoặc máy chủ).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tạo một IntersectOperation mới từ geometria vuông góc của bộ phận và các bộ phận khác trong mảng được cung cấp.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tạo một ô UnionOperation mới từ bên, giảm đi geometri bị chiếm bởi các bộ phận trong danh sách đã được cung cấp.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tạo một cái mới UnionOperation từ bên, plus geometries bị chiếm bởi các bộ phận trong given array.
Nhận pivot của một PVInstance .
Biến hình PVInstance cùng với tất cả các con cháu của nó PVInstances để pivot được đặt ở CFrame đã định.
Sự Kiện
Sự Kiện kế thừa từ BasePartBắt lửa khi một phần dừng chạm vào một phần khác do chuyển động cơ họa.
Bắt lửa khi một phần chạm vào một phần khác do chuyển động cơ học.
Thuộc Tính
Decoration
Hiện đang bật hoặc tắt cỏ animatron trên vật liệu địa hình Cỏ , mặc dù những thay đổi trong tương lai của thuộc tính này có thể điều khiển các tính năng trang trí thêm.
GrassLength
Định kích thước của cỏ hoạt họa trên vật liệu địa hình Grass , giả sử Decoration được bật. Các giá trị hợp lệ là giữa 0.1 và 1.
MaterialColors
MaterialColors đại diện cho editor cho tính năng Màu Vật, và không thể được chỉnh sửa bởi các <a href="/reference/engine/datatypes">mẫu</a> .
Để nhận màu của một vật liệu, hãy sử dụng: Terrain:GetMaterialColor()
Để đặt màu của một vật liệu, hãy sử dụng: Terrain:SetMaterialColor()
WaterWaveSize
Điều chỉnh chiều cao tối đa của các mông nước địa hình trong studs. Hiện tại điều này được hạn chế giữa 0 và 1.
WaterWaveSpeed
Điều chỉnh số lần mà nước địa hình di chuyển lên xuống mỗi phút. Hiện tại được giới hạn giữa 0 và 100.
Phương Pháp
CellCenterToWorld
Trả về vị trí trung tâm của hạt đất (x, y, z).
Tham Số
Lợi Nhuận
CellCornerToWorld
Quay vị trí góc bên trái dưới của thành phần lưới (x, y, z).
Tham Số
Lợi Nhuận
Clear
Xóa mặt địa hình.
Lợi Nhuận
CopyRegion
Lưu một phần của địa hình vào một TerrainRegion để có thể được tải lại sau đó. Ghi chú: Dữ liệu TerrainRegion không bị sao chép giữa máy chủ và máy chủ khách.
Tham Số
Lợi Nhuận
Mẫu mã
local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)
FillBall
Lấp đầy một quả cầu địa hình mịn trong một không gian cụ thể.
Tham Số
Vị trí của trung tâm của quả cầu địa hình.
Bán kính ở dấu hiệu của bóng địa hình.
Của quả bóng địa hình. Enum.Material
Lợi Nhuận
Mẫu mã
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
Làm cho một khối địa hình mịn màng bằng cách đặt một vị trí, vòng quay, kích thước và vật liệu nhất định.
Tham Số
cframe (vị trí và hướng tượng) của khối địa hình.
Kích thước của cục khối hình vuông - chiều cao và chiều rộng.
Cục khối Enum.Material của mặt đất.
Lợi Nhuận
FillCylinder
Làm đầy một trụ tròn mịn trong một không gian cụ thể. Khoảng không được định bằng cách sử dụng CFrame, chiều cao và bán kính.
Sử dụng
workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)
Tham Số
CFrame (vị trí và hướng tâm) của trụ đất.
Chiều cao trong studs của hình trụ địa hình.
Bán kính ở định dạng của hình trụ địa hình.
Các Enum.Material của cylinder địa hình.
Lợi Nhuận
FillWedge
FillWedge() Làm đầy một khối lượng hình chữ nhật có hình dạng của Terrain với Enum.Material được đưa và khu vực 0> Datatype.CFrame0> và kích thước. Hướng của khố
Tham Số
Vị trí và hướng của cánh tay để điền.
Kích thước của cánh tài liệu để đầy.
Vật liệu mà cánh dao sẽ được điền.
Lợi Nhuận
GetMaterialColor
Trả lại màu mặt địa hình hiện tại cho vật liệu địa hình được xác định.
Tham Số
Lợi Nhuận
PasteRegion
Xem xét một phần của địa hình vào đối tượng Địa hình. Ghi chú: TerrainRegion dữ liệu không được sao chép giữa máy chủ và máy chủ.
Tham Số
Lợi Nhuận
Mẫu mã
--[[
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
Trả lại một khu vực dữ liệu voxel địa hình trong dạng bảng dựa trên tên kênh.
Tham Số
Vùng mục tiêu để đọc. Phải được dịch chuyển theo lưới voxel. Sẽ ném một lỗi nếu vùng quá lớn; giới hạn hiện tại là 4194304 voxels³.
Độ phân giải Voxel. Phải là 4.
Một dàn ID kênh (chuỗi) cần thiết phải truy cập từ dữ liệu voxel. Mỗi ID kênh đại diện một loại dữ liệu được lưu trong voxel. Các ID hỗ trợ hiện tại là {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .
Lợi Nhuận
Trả về dữ liệu voxel như một từ điển dựa trên lựa chọn channelIds . Các chìa khóa đại diện mỗi ID kênh với giá trị tương ứng của họ như một dàn 3D dữ liệu.
- SolidMaterial — Vật liệu Enum.Material của voxel. Lưu ý rằng Water không còn được hỗ trợ nữa; thay vào đó, một voxel chứa nước sẽ có giá trị 0> LiquidOccupancy0> .
- SolidOccupancy — Kích thước của vật liệu voxel như được quy định trong kênh SolidMaterial này. Đây là một giá trị giữa 0 (trống) và 1 (đầy đủ).
- LiquidOccupancy — Định nghĩa sự chiếm hữu của vật liệu Water trong một voxel như một giá trị giữa 0 (không có nước) và 1 (đầy nước). Nếu <
Cuộn từ điều này cũng có một Size key với giá trị đại diện cho kích thước 3D của mỗi dữ liệu kênh.
Mẫu mã
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
Trả lại một khu vực nhất định của mặt đất mịn trong dạng bảng.
Tham Số
Vùng mục tiêu để đọc. Phải được dịch chuyển theo lưới voxel. Sẽ ném một lỗi nếu vùng quá lớn. Giới hạn hiện tại là 4194304 voxels^3.
Độ phân giải Voxel. Phải là 4.
Lợi Nhuận
Trả lại dữ liệu voxel thô như hai đường dữ liệu 3D.
- materials - 3D array của Enum.Material từ khu vực mục tiêu. Cũng chứa một trường Kích thước, bằng kích thước của các ma trận đã được ghép.
- occupancies - Một ma trận occupancies của giá trị địa điểm từ khu vực mục tiêu. Cũng chứa một trường Size, bằng kích thước của các ma trận đa dạng.
Mẫu mã
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 thay thế mặt địa hình của một vùng Enum.Material nào đó bằng một vùng khác. Essentially, it is a find-and-replace operation on Region3 materials.
Hạn chế
Khi gọi phương thức này, resolution參數必須是正確的 4. 此外, Region3:ExpandToGrid()必須 được thêm vào khu vực vật liệu, i.e. các thành phần của điểm tối thiểu và tối đa của Region3 phải được chia bằng 4. S
Tham Số
Vùng mà hoạt động thay thế sẽ xảy ra.
Độ phân giải mà hoạt động thay thế sẽ diễn địa điểm; vào thời điểm này, điều này phải chính xác 4.
Vật liệu cũ để được thay thế.
Vật liệu mới.
Lợi Nhuận
Mẫu mã
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
Điều chỉnh màu mặt địa hình hiện tại cho địa hình được xác định. Màu mặt địa hình sẽ thay đổi màu sơ bản của nó thành màu sơ bản của màu được xác định.
Tham Số
Lợi Nhuận
WorldToCell
Trả về vị trí màn hình đang hiển thị vị trí điểm .
Tham Số
Lợi Nhuận
WorldToCellPreferEmpty
Trả về vị trí màn hình trong lưới chứa vị trí điểm, thích hợp khi vị trí ở một cạnh lưới.
Tham Số
Lợi Nhuận
WorldToCellPreferSolid
Trả về vị trí màn hình trong lưới màu đỏ, bao gồm vị trí điểm, để đảm bảo màn hình không rỗi khi vị trí ở một cạnh lưới.
Tham Số
Lợi Nhuận
WriteVoxelChannels
Định vị một khu vực của địa hình bằng cách sử dụng từ điển dữ liệu kênh voxel.
Tham Số
Vùng mục tiêu để viết. Phải được dịch chuyển theo lưới voxel. Sẽ ném lỗi nếu vùng quá lớn; giới hạn hiện tại là 4194304 voxels³.
Độ phân giải Voxel. Phải là 4.
Từ điển dữ liệu voxel tương tự giá trị trả về của ReadVoxelChannels() . Các chìa khóa đại diện mỗi ID kênh với giá trị tương ứng của họ như một dải 3D dữ liệu. Cục từ điển có thể hỗ trợ một hoặc nhiều lựa chọn kê
- SolidMaterial — Vật liệu Enum.Material của voxel. Lưu ý rằng Water không còn được hỗ trợ nữa; thay vào đó, một voxel chứa chỉ nư
- SolidOccupancy — Kích thước của vật liệu voxel như được quy định trong kênh SolidMaterial này. Đây nên là một giá trị từ 0 (trống) đến 1 (đầy đủ).
- LiquidOccupancy — Định nghĩa sự chiếm hữu của vật liệu Water trong một voxel như một giá trị giữa 0 (không có nước) và 1 (đầy nước). Nếu <
Lợi Nhuận
Mẫu mã
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
Đặt một khu vực nhất định của mặt đất mịn bằng cách sử dụng hình dạng bảng.
Tham Số
Vùng mục tiêu để viết. Phải được tham chiếu đến lưới voxel. Sẽ ném lỗi nếu vùng quá lớn.
Độ phân giải Voxel. Phải là 4.
3D array ofENSEMBLE. Vị trí điểm 3D của Dimensions phải hoàn toàn trùng kích thước của vùng mục tiêu trong voxels.
3D array of voxel occupations (number between 0 and 1). Các kích thước phải hoàn toàn trùng kích thước của vùng mục tiêu trong voxels.
Lợi Nhuận
Mẫu mã
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))