private void AddVoxelIJL(IJL ijl)
    {
        if (!_sampleset.Add(ijl))
        {
            return;
        }
        IJL chunk = Vx.ChunkIJL(ijl, chunk_radius);

        if (!_chunkmap.ContainsKey(chunk))
        {
            _chunkmap.Add(chunk, new List <IJL>());
            _chunklist.Add(chunk);
        }
        _chunkmap[chunk].Add(ijl - Vx.ChunkVoxelIJL(chunk, chunk_radius));
    }
    private void InitializeChunkObject(int index)
    {
        if (index < 0 || index >= _chunkobjs.Count || _chunkobjs[index] != null)
        {
            return;
        }
        IJL chunk = _chunksobj_ijls[index];

        _chunkobjs[index] = new GameObject("Chunk " + chunk.ToString());
        _chunkobjs[index].transform.localPosition = VMD.VoxelVertex(Vx.ChunkVoxelIJL(chunk, chunk_radius));

        _chunkobjs[index].AddComponent <MeshFilter>();
        MeshRenderer renderer = _chunkobjs[index].AddComponent <MeshRenderer>();

        renderer.sharedMaterial = material;
    }
    private void UpdateChunkMesh(IJL chunk)
    {
        if (!_chunkobjmap.ContainsKey(chunk) || !_chunkmap.ContainsKey(chunk))
        {
            return;
        }
        _data.Clear();
        _data.flat_shaded = flat_shaded;
        _data.map         = voxelstyle;
        int        cnt        = Vx.AdjBlockIJL.Length;
        IJL        chunkvoxel = Vx.ChunkVoxelIJL(chunk, chunk_radius);
        List <IJL> voxels     = _chunkmap[chunk];

        for (int k = 0; k < voxels.Count; k++)
        {
            _data.UpdateVoxelData(voxels[k], new Voxel(1), true);
            IJL voxelijl = chunkvoxel + voxels[k];
            for (int cell_index = 0; cell_index < cnt; cell_index++)
            {
                IJL adjvoxel = voxelijl + Vx.AdjBlockIJL[cell_index];
                if (Vx.ChunkIJL(adjvoxel, chunk_radius) == chunk)
                {
                    continue;
                }
                if (!_sampleset.Contains(adjvoxel))
                {
                    continue;
                }
                _data.UpdateVoxelData(voxels[k] + Vx.AdjBlockIJL[cell_index], new Voxel(1), false);
            }
        }
        _data.UpdateDirtyComponents();
        _data.GenerateMesh();

        MeshFilter filter = _chunkobjmap[chunk].GetComponent <MeshFilter>();

        if (filter.mesh == null)
        {
            filter.mesh = new Mesh();
        }
        filter.mesh.SetVertices(_data.vertices);
        filter.mesh.SetNormals(_data.normals);
        filter.mesh.SetTriangles(_data.triangles, 0);
        filter.mesh.RecalculateBounds();
        filter.mesh.RecalculateTangents();
        filter.mesh.UploadMeshData(false);
    }