Voxel mesh generation not working.

I am building a voxel engine, and everything seems to be working(no errors), but when I try to build the mesh, it gives me an empty mesh with 0 verts and 0 tris. I can’t tell if it is a problem with my voxel generator or my mesh generator(3d arrays don’t show up in the inspector).

Yes, I know that the generation should be on the world class, not the chunk, and I will move it there just as soon as I can make the Chunks work(I am currently testing this with a single chunk, which is a mesh filter, mesh renderer, and Chunk script.)

Also, I want to keep the mesh-making separate from the voxel making and mesh assigning, because I am going to later incorporate other modifications to the mesh (like smoothing). Thanks!

Here is the Chunk itself:

#pragma strict
var Voxels:Voxel[,,]=new Voxel[16,16,16];
var sample:Voxel[]=new Voxel[16];
var mesh:Mesh;

@ContextMenu("GenerateVoxels")
function Generate(){
var image : int[,]=new int[16,16];//image generation. Better gen will go here later.
	for(var x:int=0;x<16;x++){
		for(var y:int=0;y<16;y++){
		image[x,y]=Mathf.RoundToInt(16*Mathf.PerlinNoise(x,y));
		}
	}//Image -> Voxels.Add Caves?
	for(var xg:int=0;xg<16;xg++){
		for(var yg:int=0;yg<16;yg++){
			for(var zg:int=0;zg<16;zg++){
				if(image[xg,yg]<= zg){
					Voxels[xg,yg,zg]=new DirtVoxel();
				}else{
					Voxels[xg,yg,zg]=new AirVoxel();
				}
			}
		}
	}
}

@ContextMenu("RenderMesh")
function Render(){
mesh = ChunkRenderer.Render(Voxels);
print("Verts " + mesh.vertexCount);
print("Tris " + mesh.triangles.Length);
gameObject.GetComponent(MeshFilter).mesh=mesh;
}

And here is the ChunkRenderer class:

import System.Collections.Generic;
#pragma strict

static function Render(Voxels : Voxel[,,]):Mesh
{
	var vertices : List.<Vector3> = new List.<Vector3>();
	var triangles : List.<int> = new List.<int>();
	
	for(var x:int=1; x<15; x++){
		for(var y:int=1;y<15;y++){
			for(var z:int=1;z<15;z++){
			//iterate through all voxels in the chunk and detect solidity/transparency to determine faces
			var voxel:Voxel = Voxels[x,y,z];
			var top:Voxel=Voxels[x,y+1,z];
			var bottom:Voxel=Voxels[x,y-1,z];
			var front:Voxel=Voxels[x+1,y,z];
			var back:Voxel=Voxels[x-1,y,z];
			var right:Voxel=Voxels[x,y,z+1];
			var left:Voxel=Voxels[x,y,z-1];
			var vertexIndex:int;
			if(voxel.solid){
				if(top.transparent){
						vertexIndex= vertices.Count;
						vertices.Add(new Vector3(x-0.5,y+0.5,z-0.5));
                        vertices.Add(new Vector3(x+0.5,y+0.5,z-0.5));
                        vertices.Add(new Vector3(x+0.5,y+0.5,z+0.5));
                        vertices.Add(new Vector3(x-0.5,y+0.5,z+0.5));
 
                        // first triangle for the block top
                        triangles.Add(vertexIndex);
                        triangles.Add(vertexIndex+1);
                        triangles.Add(vertexIndex+2);
                         
                        // second triangle for the block top
                        triangles.Add(vertexIndex+2);
                        triangles.Add(vertexIndex+3);
                        triangles.Add(vertexIndex);
				}
				if(bottom.transparent){			//CHECK WINDING ORDER!
						vertexIndex= vertices.Count;
						vertices.Add(new Vector3(x-0.5,y-0.5,z-0.5));
                        vertices.Add(new Vector3(x+0.5,y-0.5,z-0.5));
                        vertices.Add(new Vector3(x+0.5,y-0.5,z+0.5));
                        vertices.Add(new Vector3(x-0.5,y-0.5,z+0.5));
						
						//first triangle for the block bottom
						triangles.Add(vertexIndex);
                        triangles.Add(vertexIndex+1);
                        triangles.Add(vertexIndex+2);
                        //second triangle for the block bottom
                        triangles.Add(vertexIndex+2);
                        triangles.Add(vertexIndex+3);
                        triangles.Add(vertexIndex);
				}
				if(front.transparent){
					vertexIndex= vertices.Count;
					vertices.Add(new Vector3(x+0.5,y+0.5,z-0.5));
					vertices.Add(new Vector3(x+0.5,y-0.5,z-0.5));
					vertices.Add(new Vector3(x+0.5,y-0.5,z+0.5));
					vertices.Add(new Vector3(x+0.5,y+0.5,z+0.5));
					
					//first triangle for the block front
					triangles.Add(vertexIndex);
                    triangles.Add(vertexIndex+1);
                    triangles.Add(vertexIndex+2);
                    //second triangle for the block front
                    triangles.Add(vertexIndex+2);
                    triangles.Add(vertexIndex+3);
                    triangles.Add(vertexIndex);
				}
				if(back.transparent){
					vertexIndex= vertices.Count;
					vertices.Add(new Vector3(x-0.5,y+0.5,z-0.5));
					vertices.Add(new Vector3(x-0.5,y+0.5,z+0.5));
					vertices.Add(new Vector3(x-0.5,y-0.5,z+0.5));
					vertices.Add(new Vector3(x-0.5,y-0.5,z-0.5));
					
					//first triangle for the block back
					triangles.Add(vertexIndex);
                    triangles.Add(vertexIndex+1);
                    triangles.Add(vertexIndex+2);
                    //second triangle for the block back
                    triangles.Add(vertexIndex+2);
                    triangles.Add(vertexIndex+3);
                    triangles.Add(vertexIndex);
				}
				if(right.transparent){
					vertexIndex= vertices.Count;
					vertices.Add(new Vector3(x-0.5,y+0.5,z+0.5));
					vertices.Add(new Vector3(x+0.5,y+0.5,z+0.5));
					vertices.Add(new Vector3(x+0.5,y-0.5,z+0.5));
					
					//first triangle for the block right
					triangles.Add(vertexIndex);
                    triangles.Add(vertexIndex+1);
                    triangles.Add(vertexIndex+2);
                    //second triangle for the block right
                    triangles.Add(vertexIndex+2);
                    triangles.Add(vertexIndex+3);
                    triangles.Add(vertexIndex);
				}
				if(left.transparent){
					vertexIndex= vertices.Count;
					vertices.Add(new Vector3(x+0.5,y+0.5,z-0.5));
					vertices.Add(new Vector3(x-0.5,y+0.5,z-0.5));
					vertices.Add(new Vector3(x-0.5,y-0.5,z-0.5));
					vertices.Add(new Vector3(x+0.5,y-0.5,z-0.5));
					
					//first triangle for the block left
					triangles.Add(vertexIndex);
                    triangles.Add(vertexIndex+1);
                    triangles.Add(vertexIndex+2);
                    //second triangle for the block left
                    triangles.Add(vertexIndex+2);
                    triangles.Add(vertexIndex+3);
                    triangles.Add(vertexIndex);
				}
			}
			}
		}
	}//end loop
	//build mesh
	var mesh:Mesh = new Mesh();
	mesh.vertices = vertices.ToArray();
	mesh.triangles = triangles.ToArray();
	
	return mesh;
}

if ( top.transparent )

wouldn’t those be:

if ( NOT top.transparent ) ...

you could solve this in seconds with Debug.Log lines. Like Debug,Log("I am adding a left side, we are up to " + vertexIndex);