int[] propagateNeighborPointIndexes(int x, int y, int z, int[][] isoPointIndexes) {
		/*
		 * Y 4 --------4--------- 5 /| /| / | / | / | / | 7 8 5 | / | / 9 / | / | 7 --------6--------- 6 | | | | | | 0
		 * ---------0--|----- 1 X | / | / 11 / 10 / | 3 | 1 | / | / | / | / 3 ---------2-------- 2 Z
		 * 
		 */
		int cellIndex = y * cubeCountZ + z;
		int[] voxelPointIndexes = isoPointIndexes[cellIndex];

		boolean noXNeighbor = (x == cubeCountX - 1);
		// the x neighbor is myself from my last pass through here
		if (noXNeighbor) {
			voxelPointIndexes[1] = -1;
			voxelPointIndexes[9] = -1;
			voxelPointIndexes[5] = -1;
			voxelPointIndexes[10] = -1;
		}
		else {
			voxelPointIndexes[1] = voxelPointIndexes[3];
			voxelPointIndexes[9] = voxelPointIndexes[8];
			voxelPointIndexes[5] = voxelPointIndexes[7];
			voxelPointIndexes[10] = voxelPointIndexes[11];
		}

		// from the y neighbor pick up the top
		boolean noYNeighbor = (y == cubeCountY - 1);
		int[] yNeighbor = noYNeighbor ? nullNeighbor : isoPointIndexes[cellIndex + cubeCountZ];

		voxelPointIndexes[6] = yNeighbor[2];
		voxelPointIndexes[7] = yNeighbor[3];
		voxelPointIndexes[4] = yNeighbor[0];
		if (noXNeighbor)
			voxelPointIndexes[5] = yNeighbor[1];

		// from my z neighbor
		boolean noZNeighbor = (z == cubeCountZ - 1);
		int[] zNeighbor = noZNeighbor ? nullNeighbor : isoPointIndexes[cellIndex + 1];

		voxelPointIndexes[2] = zNeighbor[0];
		voxelPointIndexes[11] = zNeighbor[8];
		if (noYNeighbor)
			voxelPointIndexes[6] = zNeighbor[4];
		if (noXNeighbor)
			voxelPointIndexes[10] = zNeighbor[9];

		// these must always be calculated
		voxelPointIndexes[0] = -1;
		voxelPointIndexes[3] = -1;
		voxelPointIndexes[8] = -1;

		return voxelPointIndexes;
	}