Invisible terrain bug

As a Roblox developer, it is currently too hard to remove certain terrain. Sometimes when you delete terrain, some of it will not be completely deleted. When you approach the terrain closely in studio, you will see nothing on your screen. However, when you zoom out, you can clearly see that the terrain is rendering. I recommend allowing a way to remove terrain without using the region tool to guess where the terrain lies.

If Roblox can address this issue, it would improve my development experience because it would make my workflow much faster. Whenever I work on large maps, it can be annoying to deal with all the invisible terrain.

Invisible terrain from far away:
invisible terrain1.PNG

Invisible terrain up close:

Repro file:
buggedterrain.rbxl (146.7 KB)

7 Likes

Hey Ev3rSoul! Thanks for noting this, I’ll file a ticket internally and we’ll take a look. We’re continuing to iterate on the terrain tool so feedback like this really helps us improve it!

5 Likes

Hi @EverSoull . Thank you for a detailed report and a repro file. That is really appreciated.
The cases like this can be quite misleading. What is actually going on is that there is a single voxel that has a very low value, in a material that has a weird shape, which makes this voxel invisible (it renders as a box sized 0 studs) when up close, but it still shows something at further distances because of how the LODs work in the current terrain system.
You can confirm this if you delete all valid terrain in the example you sent, just leave that stray voxel, then run this script (fiddle the x/y/z ranges for the approximate location):

local step = 512
for x = 9000, 16384, step do
	for y = 200, 700, step do
		for z = 2000, 3500, step do
			local materials, occupancies = game.Workspace.Terrain:ReadVoxels(Region3.new(Vector3.new(x,y,z), Vector3.new(x+step, y+step, z+step)), 4)
			
			for ix= 1, occupancies.Size.x do
				for iy= 1, occupancies.Size.y do
					for iz= 1, occupancies.Size.z do
						o = occupancies[ix][iy][iz] 
						if o>0 then
                            m = materials[ix][iy][iz]
							print("mat="..m.Name.." occ="..o.." @ "..(x+ix*4-4)..","..(y+iy*4-4)..","..(z+iz*4-4).."!")
--                            materials[ix][iy][iz] = Enum.Material.Grass;
--			                game.Workspace.Terrain:WriteVoxels(Region3.new(Vector3.new(x,y,z), Vector3.new(x+step, y+step, z+step)), 4, materials, occupancies)
						end
					end
				end
			end
		end
	end
end
print("Done")

It will print something like:

mat=Pavement occ=0.12109375 @ 9768,616,2428

Pavement material is specifically problematic for this due to how it forces the specific shape. I will look into whether something can be done to prevent these from becoming fully invisible, but no guarantees for now.

TL;DR: For now, you can use the Region tool to delete the stray voxel in question.

3 Likes

Thank you for your response. I have been using the region tool as a way of dealing with this problem.

1 Like