Need help with implementing a marching cubes algorithm using GDscript

I have debugged tons of stuff with this but at this point I cant really debug any further, so can someone give my code a quick look over and hopefully spot an issue? feel free to ask any questions regarding what has been debugged or what any certain chunk of code is trying to achieve, i will try to post as much relevant info as i can below the code:

@tool
extends Node3D
var voxamnt = 5
var voxels = []
var voxvals = []
var voxtypes = []
var verts = PackedVector3Array()
var inds = PackedInt64Array()
var norms = PackedVector3Array()
var noise = FastNoiseLite.new()
func genmesh(vox,cubeID):
	var additiveInd = cubeID*12
	var points = [
			vox,
			vox + Vector3(1,0,0),
			vox + Vector3(0,-1,0),
			vox + Vector3(1,-1,0),
			vox + Vector3(0,0,1),
			vox + Vector3(1,0,1),
			vox + Vector3(0,-1,1),
			vox + Vector3(1,-1,1)
	]
	var index = 0
	for i in range(0,7):
		print(i)
		if voxvals[indlookup(points[i])]:
			index |= 1 << i
			var cube = MeshInstance3D.new()
			var mesh = BoxMesh.new()
			mesh.size = Vector3(0.2,0.2,0.2)
			cube.mesh = mesh
			cube.position = points[i]
			add_child(cube)
		
	var trigtable = VoxelLookups.tritable[index]
	for i in range(0,trigtable.size()-1):
		var vert = points[VoxelLookups.edgelookup[trigtable[i]][0]].lerp(points[VoxelLookups.edgelookup[trigtable[i]][1]],0.5)
		verts.push_back(vert)
		inds.push_back(verts.size()-1)
func indlookup(pos):
	var ind = null
	for i in range(0,voxels.size()-1):
		
		if voxels[i].x == pos.x and voxels[i].y == pos.y and voxels[i].z == pos.z:
			
			ind = i
	return ind
func march():
	verts.clear()
	var cubeID = 0
	for p1 in range(0,voxamnt-1):
		var vox1 = voxels[0]+Vector3(p1,0,0)
		genmesh(vox1,cubeID)
		
		for p2 in range(0,voxamnt-1):
			var vox2 = voxels[0]+Vector3(p1,0,p2)
			genmesh(vox2,cubeID)
			for p3 in range(0,voxamnt-1):
				var vox3 = voxels[0]+Vector3(p1,-p3,p2)
				genmesh(vox3,cubeID)
func voxeval(pos):
	var surfacelvl = noise.get_noise_2d(pos.x,pos.z)
	if pos.y <= surfacelvl-3:
		voxvals.push_back(true)
		#var cube = MeshInstance3D.new()
		#cube.mesh = PlaneMesh.new()
		#cube.position = pos
		#add_child(cube)
	else:
		voxvals.push_back(false)
func genvoxels():
	voxels = []
	for i1 in range(0,voxamnt):
		var point1 = Vector3(-voxamnt/2 + i1,0,-voxamnt/2)
		voxels.push_back(point1)
		voxeval(point1)
		for i2 in range(0,voxamnt):
			var point2 = Vector3(point1.x,0,-voxamnt/2+i2)
			voxels.push_back(point2)
			voxeval(point2)
			for i3 in range(0,voxamnt):
				var point3 = Vector3(point1.x,-i3,point2.z)
				voxels.push_back(point3)
				voxeval(point3)

# Called when the node enters the scene tree for the first time.
func _ready():
	noise.noise_type = noise.TYPE_PERLIN
	noise.frequency = 0.01
	noise.fractal_lacunarity = 2
	noise.fractal_gain = 0.5
	noise.fractal_type = noise.FRACTAL_FBM
	genvoxels()
	var arr_mesh = ArrayMesh.new()
	var arrays = []
	arrays.resize(Mesh.ARRAY_MAX)
	march()
	await(get_tree().create_timer(2).timeout)
	arrays[Mesh.ARRAY_VERTEX] = verts
	arrays[Mesh.ARRAY_INDEX] = inds
	arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)

	var m = MeshInstance3D.new()
	m.mesh = arr_mesh
	add_child(m)

Ive debugged a ton of stuff,not including all the console errors I’ve come across (which i have eliminated entirely), some of which includes the edge points, which I have visualized using basic box meshes, and the corner points, which I have also visualized using the same method, i have also tried creating simpler meshes with the arraymesh I set up to create, and as you can see I added a small wait before it finalizes and appends the mesh incase computational time was a factor, now I have gotten to the point where everything looks fine and i believe it honestly should work yet it doesnt and there isnt a single console error, please help it would mean the world to me.

here are the lookup tables I used, I do not know enough about marching cubes to know myself if this is the problem, which is why I’m hoping someone more experienced can help me out on this:

const edgelookup = [
	[0, 1],
	[1, 3],
	[3, 2],
	[2, 0],
	[4, 5],
	[5, 7],
	[7, 6],
	[6, 4],
	[0, 4],
	[1, 5],
	[3, 7],
	[2, 6],
]
const tritable = [
	[],
	[ 0, 3, 8],
	[ 0, 9, 1],
	[ 3, 8, 1, 1, 8, 9],
	[ 2, 11, 3],
	[ 8, 0, 11, 11, 0, 2],
	[ 3, 2, 11, 1, 0, 9],
	[ 11, 1, 2, 11, 9, 1, 11, 8, 9],
	[ 1, 10, 2],
	[ 0, 3, 8, 2, 1, 10],
	[ 10, 2, 9, 9, 2, 0],
	[ 8, 2, 3, 8, 10, 2, 8, 9, 10],
	[ 11, 3, 10, 10, 3, 1],
	[ 10, 0, 1, 10, 8, 0, 10, 11, 8],
	[ 9, 3, 0, 9, 11, 3, 9, 10, 11],
	[ 8, 9, 11, 11, 9, 10],
	[ 4, 8, 7],
	[ 7, 4, 3, 3, 4, 0],
	[ 4, 8, 7, 0, 9, 1],
	[ 1, 4, 9, 1, 7, 4, 1, 3, 7],
	[ 8, 7, 4, 11, 3, 2],
	[ 4, 11, 7, 4, 2, 11, 4, 0, 2],
	[ 0, 9, 1, 8, 7, 4, 11, 3, 2],
	[ 7, 4, 11, 11, 4, 2, 2, 4, 9, 2, 9, 1],
	[ 4, 8, 7, 2, 1, 10],
	[ 7, 4, 3, 3, 4, 0, 10, 2, 1],
	[ 10, 2, 9, 9, 2, 0, 7, 4, 8],
	[ 10, 2, 3, 10, 3, 4, 3, 7, 4, 9, 10, 4],
	[ 1, 10, 3, 3, 10, 11, 4, 8, 7],
	[ 10, 11, 1, 11, 7, 4, 1, 11, 4, 1, 4, 0],
	[ 7, 4, 8, 9, 3, 0, 9, 11, 3, 9, 10, 11],
	[ 7, 4, 11, 4, 9, 11, 9, 10, 11],
	[ 9, 4, 5],
	[ 9, 4, 5, 8, 0, 3],
	[ 4, 5, 0, 0, 5, 1],
	[ 5, 8, 4, 5, 3, 8, 5, 1, 3],
	[ 9, 4, 5, 11, 3, 2],
	[ 2, 11, 0, 0, 11, 8, 5, 9, 4],
	[ 4, 5, 0, 0, 5, 1, 11, 3, 2],
	[ 5, 1, 4, 1, 2, 11, 4, 1, 11, 4, 11, 8],
	[ 1, 10, 2, 5, 9, 4],
	[ 9, 4, 5, 0, 3, 8, 2, 1, 10],
	[ 2, 5, 10, 2, 4, 5, 2, 0, 4],
	[ 10, 2, 5, 5, 2, 4, 4, 2, 3, 4, 3, 8],
	[ 11, 3, 10, 10, 3, 1, 4, 5, 9],
	[ 4, 5, 9, 10, 0, 1, 10, 8, 0, 10, 11, 8],
	[ 11, 3, 0, 11, 0, 5, 0, 4, 5, 10, 11, 5],
	[ 4, 5, 8, 5, 10, 8, 10, 11, 8],
	[ 8, 7, 9, 9, 7, 5],
	[ 3, 9, 0, 3, 5, 9, 3, 7, 5],
	[ 7, 0, 8, 7, 1, 0, 7, 5, 1],
	[ 7, 5, 3, 3, 5, 1],
	[ 5, 9, 7, 7, 9, 8, 2, 11, 3],
	[ 2, 11, 7, 2, 7, 9, 7, 5, 9, 0, 2, 9],
	[ 2, 11, 3, 7, 0, 8, 7, 1, 0, 7, 5, 1],
	[ 2, 11, 1, 11, 7, 1, 7, 5, 1],
	[ 8, 7, 9, 9, 7, 5, 2, 1, 10],
	[ 10, 2, 1, 3, 9, 0, 3, 5, 9, 3, 7, 5],
	[ 7, 5, 8, 5, 10, 2, 8, 5, 2, 8, 2, 0],
	[ 10, 2, 5, 2, 3, 5, 3, 7, 5],
	[ 8, 7, 5, 8, 5, 9, 11, 3, 10, 3, 1, 10],
	[ 5, 11, 7, 10, 11, 5, 1, 9, 0],
	[ 11, 5, 10, 7, 5, 11, 8, 3, 0],
	[ 5, 11, 7, 10, 11, 5],
	[ 6, 7, 11],
	[ 7, 11, 6, 3, 8, 0],
	[ 6, 7, 11, 0, 9, 1],
	[ 9, 1, 8, 8, 1, 3, 6, 7, 11],
	[ 3, 2, 7, 7, 2, 6],
	[ 0, 7, 8, 0, 6, 7, 0, 2, 6],
	[ 6, 7, 2, 2, 7, 3, 9, 1, 0],
	[ 6, 7, 8, 6, 8, 1, 8, 9, 1, 2, 6, 1],
	[ 11, 6, 7, 10, 2, 1],
	[ 3, 8, 0, 11, 6, 7, 10, 2, 1],
	[ 0, 9, 2, 2, 9, 10, 7, 11, 6],
	[ 6, 7, 11, 8, 2, 3, 8, 10, 2, 8, 9, 10],
	[ 7, 10, 6, 7, 1, 10, 7, 3, 1],
	[ 8, 0, 7, 7, 0, 6, 6, 0, 1, 6, 1, 10],
	[ 7, 3, 6, 3, 0, 9, 6, 3, 9, 6, 9, 10],
	[ 6, 7, 10, 7, 8, 10, 8, 9, 10],
	[ 11, 6, 8, 8, 6, 4],
	[ 6, 3, 11, 6, 0, 3, 6, 4, 0],
	[ 11, 6, 8, 8, 6, 4, 1, 0, 9],
	[ 1, 3, 9, 3, 11, 6, 9, 3, 6, 9, 6, 4],
	[ 2, 8, 3, 2, 4, 8, 2, 6, 4],
	[ 4, 0, 6, 6, 0, 2],
	[ 9, 1, 0, 2, 8, 3, 2, 4, 8, 2, 6, 4],
	[ 9, 1, 4, 1, 2, 4, 2, 6, 4],
	[ 4, 8, 6, 6, 8, 11, 1, 10, 2],
	[ 1, 10, 2, 6, 3, 11, 6, 0, 3, 6, 4, 0],
	[ 11, 6, 4, 11, 4, 8, 10, 2, 9, 2, 0, 9],
	[ 10, 4, 9, 6, 4, 10, 11, 2, 3],
	[ 4, 8, 3, 4, 3, 10, 3, 1, 10, 6, 4, 10],
	[ 1, 10, 0, 10, 6, 0, 6, 4, 0],
	[ 4, 10, 6, 9, 10, 4, 0, 8, 3],
	[ 4, 10, 6, 9, 10, 4],
	[ 6, 7, 11, 4, 5, 9],
	[ 4, 5, 9, 7, 11, 6, 3, 8, 0],
	[ 1, 0, 5, 5, 0, 4, 11, 6, 7],
	[ 11, 6, 7, 5, 8, 4, 5, 3, 8, 5, 1, 3],
	[ 3, 2, 7, 7, 2, 6, 9, 4, 5],
	[ 5, 9, 4, 0, 7, 8, 0, 6, 7, 0, 2, 6],
	[ 3, 2, 6, 3, 6, 7, 1, 0, 5, 0, 4, 5],
	[ 6, 1, 2, 5, 1, 6, 4, 7, 8],
	[ 10, 2, 1, 6, 7, 11, 4, 5, 9],
	[ 0, 3, 8, 4, 5, 9, 11, 6, 7, 10, 2, 1],
	[ 7, 11, 6, 2, 5, 10, 2, 4, 5, 2, 0, 4],
	[ 8, 4, 7, 5, 10, 6, 3, 11, 2],
	[ 9, 4, 5, 7, 10, 6, 7, 1, 10, 7, 3, 1],
	[ 10, 6, 5, 7, 8, 4, 1, 9, 0],
	[ 4, 3, 0, 7, 3, 4, 6, 5, 10],
	[ 10, 6, 5, 8, 4, 7],
	[ 9, 6, 5, 9, 11, 6, 9, 8, 11],
	[ 11, 6, 3, 3, 6, 0, 0, 6, 5, 0, 5, 9],
	[ 11, 6, 5, 11, 5, 0, 5, 1, 0, 8, 11, 0],
	[ 11, 6, 3, 6, 5, 3, 5, 1, 3],
	[ 9, 8, 5, 8, 3, 2, 5, 8, 2, 5, 2, 6],
	[ 5, 9, 6, 9, 0, 6, 0, 2, 6],
	[ 1, 6, 5, 2, 6, 1, 3, 0, 8],
	[ 1, 6, 5, 2, 6, 1],
	[ 2, 1, 10, 9, 6, 5, 9, 11, 6, 9, 8, 11],
	[ 9, 0, 1, 3, 11, 2, 5, 10, 6],
	[ 11, 0, 8, 2, 0, 11, 10, 6, 5],
	[ 3, 11, 2, 5, 10, 6],
	[ 1, 8, 3, 9, 8, 1, 5, 10, 6],
	[ 6, 5, 10, 0, 1, 9],
	[ 8, 3, 0, 5, 10, 6],
	[ 6, 5, 10],
	[ 10, 5, 6],
	[ 0, 3, 8, 6, 10, 5],
	[ 10, 5, 6, 9, 1, 0],
	[ 3, 8, 1, 1, 8, 9, 6, 10, 5],
	[ 2, 11, 3, 6, 10, 5],
	[ 8, 0, 11, 11, 0, 2, 5, 6, 10],
	[ 1, 0, 9, 2, 11, 3, 6, 10, 5],
	[ 5, 6, 10, 11, 1, 2, 11, 9, 1, 11, 8, 9],
	[ 5, 6, 1, 1, 6, 2],
	[ 5, 6, 1, 1, 6, 2, 8, 0, 3],
	[ 6, 9, 5, 6, 0, 9, 6, 2, 0],
	[ 6, 2, 5, 2, 3, 8, 5, 2, 8, 5, 8, 9],
	[ 3, 6, 11, 3, 5, 6, 3, 1, 5],
	[ 8, 0, 1, 8, 1, 6, 1, 5, 6, 11, 8, 6],
	[ 11, 3, 6, 6, 3, 5, 5, 3, 0, 5, 0, 9],
	[ 5, 6, 9, 6, 11, 9, 11, 8, 9],
	[ 5, 6, 10, 7, 4, 8],
	[ 0, 3, 4, 4, 3, 7, 10, 5, 6],
	[ 5, 6, 10, 4, 8, 7, 0, 9, 1],
	[ 6, 10, 5, 1, 4, 9, 1, 7, 4, 1, 3, 7],
	[ 7, 4, 8, 6, 10, 5, 2, 11, 3],
	[ 10, 5, 6, 4, 11, 7, 4, 2, 11, 4, 0, 2],
	[ 4, 8, 7, 6, 10, 5, 3, 2, 11, 1, 0, 9],
	[ 1, 2, 10, 11, 7, 6, 9, 5, 4],
	[ 2, 1, 6, 6, 1, 5, 8, 7, 4],
	[ 0, 3, 7, 0, 7, 4, 2, 1, 6, 1, 5, 6],
	[ 8, 7, 4, 6, 9, 5, 6, 0, 9, 6, 2, 0],
	[ 7, 2, 3, 6, 2, 7, 5, 4, 9],
	[ 4, 8, 7, 3, 6, 11, 3, 5, 6, 3, 1, 5],
	[ 5, 0, 1, 4, 0, 5, 7, 6, 11],
	[ 9, 5, 4, 6, 11, 7, 0, 8, 3],
	[ 11, 7, 6, 9, 5, 4],
	[ 6, 10, 4, 4, 10, 9],
	[ 6, 10, 4, 4, 10, 9, 3, 8, 0],
	[ 0, 10, 1, 0, 6, 10, 0, 4, 6],
	[ 6, 10, 1, 6, 1, 8, 1, 3, 8, 4, 6, 8],
	[ 9, 4, 10, 10, 4, 6, 3, 2, 11],
	[ 2, 11, 8, 2, 8, 0, 6, 10, 4, 10, 9, 4],
	[ 11, 3, 2, 0, 10, 1, 0, 6, 10, 0, 4, 6],
	[ 6, 8, 4, 11, 8, 6, 2, 10, 1],
	[ 4, 1, 9, 4, 2, 1, 4, 6, 2],
	[ 3, 8, 0, 4, 1, 9, 4, 2, 1, 4, 6, 2],
	[ 6, 2, 4, 4, 2, 0],
	[ 3, 8, 2, 8, 4, 2, 4, 6, 2],
	[ 4, 6, 9, 6, 11, 3, 9, 6, 3, 9, 3, 1],
	[ 8, 6, 11, 4, 6, 8, 9, 0, 1],
	[ 11, 3, 6, 3, 0, 6, 0, 4, 6],
	[ 8, 6, 11, 4, 6, 8],
	[ 10, 7, 6, 10, 8, 7, 10, 9, 8],
	[ 3, 7, 0, 7, 6, 10, 0, 7, 10, 0, 10, 9],
	[ 6, 10, 7, 7, 10, 8, 8, 10, 1, 8, 1, 0],
	[ 6, 10, 7, 10, 1, 7, 1, 3, 7],
	[ 3, 2, 11, 10, 7, 6, 10, 8, 7, 10, 9, 8],
	[ 2, 9, 0, 10, 9, 2, 6, 11, 7],
	[ 0, 8, 3, 7, 6, 11, 1, 2, 10],
	[ 7, 6, 11, 1, 2, 10],
	[ 2, 1, 9, 2, 9, 7, 9, 8, 7, 6, 2, 7],
	[ 2, 7, 6, 3, 7, 2, 0, 1, 9],
	[ 8, 7, 0, 7, 6, 0, 6, 2, 0],
	[ 7, 2, 3, 6, 2, 7],
	[ 8, 1, 9, 3, 1, 8, 11, 7, 6],
	[ 11, 7, 6, 1, 9, 0],
	[ 6, 11, 7, 0, 8, 3],
	[ 11, 7, 6],
	[ 7, 11, 5, 5, 11, 10],
	[ 10, 5, 11, 11, 5, 7, 0, 3, 8],
	[ 7, 11, 5, 5, 11, 10, 0, 9, 1],
	[ 7, 11, 10, 7, 10, 5, 3, 8, 1, 8, 9, 1],
	[ 5, 2, 10, 5, 3, 2, 5, 7, 3],
	[ 5, 7, 10, 7, 8, 0, 10, 7, 0, 10, 0, 2],
	[ 0, 9, 1, 5, 2, 10, 5, 3, 2, 5, 7, 3],
	[ 9, 7, 8, 5, 7, 9, 10, 1, 2],
	[ 1, 11, 2, 1, 7, 11, 1, 5, 7],
	[ 8, 0, 3, 1, 11, 2, 1, 7, 11, 1, 5, 7],
	[ 7, 11, 2, 7, 2, 9, 2, 0, 9, 5, 7, 9],
	[ 7, 9, 5, 8, 9, 7, 3, 11, 2],
	[ 3, 1, 7, 7, 1, 5],
	[ 8, 0, 7, 0, 1, 7, 1, 5, 7],
	[ 0, 9, 3, 9, 5, 3, 5, 7, 3],
	[ 9, 7, 8, 5, 7, 9],
	[ 8, 5, 4, 8, 10, 5, 8, 11, 10],
	[ 0, 3, 11, 0, 11, 5, 11, 10, 5, 4, 0, 5],
	[ 1, 0, 9, 8, 5, 4, 8, 10, 5, 8, 11, 10],
	[ 10, 3, 11, 1, 3, 10, 9, 5, 4],
	[ 3, 2, 8, 8, 2, 4, 4, 2, 10, 4, 10, 5],
	[ 10, 5, 2, 5, 4, 2, 4, 0, 2],
	[ 5, 4, 9, 8, 3, 0, 10, 1, 2],
	[ 2, 10, 1, 4, 9, 5],
	[ 8, 11, 4, 11, 2, 1, 4, 11, 1, 4, 1, 5],
	[ 0, 5, 4, 1, 5, 0, 2, 3, 11],
	[ 0, 11, 2, 8, 11, 0, 4, 9, 5],
	[ 5, 4, 9, 2, 3, 11],
	[ 4, 8, 5, 8, 3, 5, 3, 1, 5],
	[ 0, 5, 4, 1, 5, 0],
	[ 5, 4, 9, 3, 0, 8],
	[ 5, 4, 9],
	[ 11, 4, 7, 11, 9, 4, 11, 10, 9],
	[ 0, 3, 8, 11, 4, 7, 11, 9, 4, 11, 10, 9],
	[ 11, 10, 7, 10, 1, 0, 7, 10, 0, 7, 0, 4],
	[ 3, 10, 1, 11, 10, 3, 7, 8, 4],
	[ 3, 2, 10, 3, 10, 4, 10, 9, 4, 7, 3, 4],
	[ 9, 2, 10, 0, 2, 9, 8, 4, 7],
	[ 3, 4, 7, 0, 4, 3, 1, 2, 10],
	[ 7, 8, 4, 10, 1, 2],
	[ 7, 11, 4, 4, 11, 9, 9, 11, 2, 9, 2, 1],
	[ 1, 9, 0, 4, 7, 8, 2, 3, 11],
	[ 7, 11, 4, 11, 2, 4, 2, 0, 4],
	[ 4, 7, 8, 2, 3, 11],
	[ 9, 4, 1, 4, 7, 1, 7, 3, 1],
	[ 7, 8, 4, 1, 9, 0],
	[ 3, 4, 7, 0, 4, 3],
	[ 7, 8, 4],
	[ 11, 10, 8, 8, 10, 9],
	[ 0, 3, 9, 3, 11, 9, 11, 10, 9],
	[ 1, 0, 10, 0, 8, 10, 8, 11, 10],
	[ 10, 3, 11, 1, 3, 10],
	[ 3, 2, 8, 2, 10, 8, 10, 9, 8],
	[ 9, 2, 10, 0, 2, 9],
	[ 8, 3, 0, 10, 1, 2],
	[ 2, 10, 1],
	[ 2, 1, 11, 1, 9, 11, 9, 8, 11],
	[ 11, 2, 3, 9, 0, 1],
	[ 11, 0, 8, 2, 0, 11],
	[ 3, 11, 2],
	[ 1, 8, 3, 9, 8, 1],
	[ 1, 9, 0],
	[ 8, 3, 0],
	[],
]

What’s the problem? Have you tried the debugger with break points? The code could be easier to read if you type your variables. Also could help performance since gdscript isn’t great for expensive computations, typing your variables will allow for some optimization internally.

Make your inds an PackedInt32Array() and you are one step closer. :slight_smile:

But I guess your tables need some fixing?