public SurfaceNetCube[,,] GenerateSurfaceNetCubes(BufferedWorld world, TilePos pos, LevelOfDetail lod)
        {
//            var snNets = new SurfaceNetCube[14, 14, 14];
            var lodFactor = 16 / lod.Skip;
            var snNets    = new SurfaceNetCube[lodFactor, lodFactor, lodFactor];
            var tile      = world.GetTileAt(pos);

            Contracts.Asserts(tile != null);
            for (var x = tile.StartPos.X; x < tile.EndPos.X; x += lod.Skip)
            {
                for (var y = tile.StartPos.Y; y < tile.EndPos.Y; x += lod.Skip)
                {
                    for (var z = tile.StartPos.Z; z < tile.EndPos.Z; x += lod.Skip)
                    {
                        var sample   = new float[8];
                        var voxelPos = new VoxelPos(x, y, z);

                        for (var i = 0; i < 8; i++)
                        {
                            var offset = SurfaceNetUtil.GetVoxelOffset(i).Multiply(lod.Skip);
                            sample[i] = world.GetVoxelAt(offset.Add(x, y, z)).Density;
                        }

                        var snNet = SurfaceNetUtil.CalculateSurfaceNetCube(sample, world.GetVoxelAt(voxelPos));
                        snNet.Position = new Vector3(snNet.Position.x + x, snNet.Position.y + y,
                                                     snNet.Position.z + z);
                        snNets[x / lod.Skip, y / lod.Skip, z / lod.Skip] = snNet;
                    }
                }
            }

//            foreach (var voxelPos in tile) {
////                if (voxelPos.X <= 0 || voxelPos.Y <= 0 || voxelPos.Z <= 0) {
////                    continue;
////                }
////
////                if (voxelPos.X >= 15 || voxelPos.Y >= 15 || voxelPos.Z >= 15) {
////                    continue;
////                }
//
//                var sample = new float[8];
//
//                for (var i = 0; i < 8; i++) {
//                    var offset = SurfaceNetUtil.GetVoxelCornerOffset (i);
//                    sample[i] = world.GetVoxelAt (voxelPos.Add ((int) offset.x, (int) offset.y, (int) offset.z))
//                        .Density;
//                }
//
//                var snNet = SurfaceNetUtil.CalculateSurfaceNetCube (sample, world.GetVoxelAt (voxelPos));
//                snNet.Position = new Vector3 (snNet.Position.x + voxelPos.X, snNet.Position.y + voxelPos.Y,
//                    snNet.Position.z + voxelPos.Z);
//                snNets[voxelPos.X, voxelPos.Y, voxelPos.Z] = snNet;
//            }

            return(snNets);
        }