NodeGraph BakeVoxelAirNodes(Transform world, List <NavMeshBuildSource> sources) { var colliders = new Collider[128]; var mesh = new Mesh(); var nodeMap = new Dictionary <uint3, (Voxel_t, Node)>(); var meshFilters = world.GetComponentsInChildren <MeshFilter>().Where(mf => mf.gameObject.layer == LayerIndex.world.intVal).ToArray(); Log("Mesh location"); var combine = new CombineInstance[meshFilters.Length]; for (int i = 0; i < meshFilters.Length; i++) { combine[i].mesh = meshFilters[i].sharedMesh; combine[i].transform = meshFilters[i].transform.localToWorldMatrix; } mesh.CombineMeshes(combine); mesh.RecalculateBounds(); Log("Mesh combination"); var gpuVoxelData = GPUVoxelizer.Voxelize(VoxelizerShader, mesh, (int)Resolution, true); GPUVoxelizer.BuildBetterVoxels(VoxelizerShader, gpuVoxelData); var voxels = gpuVoxelData.GetData(); Log("Voxelization"); DestroyImmediate(mesh); CollectNodes(colliders, nodeMap, voxels); var nodeNeighbors = new Dictionary <uint3, List <uint3> >(); var removedIds = new List <uint3>(); var remapIds = new Dictionary <uint3, uint3>(); (Voxel_t voxel, Node node)[] pairs = nodeMap.Values.ToArray();