public void UpdateExposedVoxels()
    {
        NumVerts = 0;
        NumInds  = 0;

        for (int x = 0; x < Width; ++x)
        {
            for (int y = 0; y < Height; ++y)
            {
                for (int z = 0; z < Depth; ++z)
                {
                    Voxel voxel = Voxels[x, y, z];

                    voxel.Exposed      = false;
                    voxel.ExposedSides = VoxelSide.None;

                    if (voxel.CanBeSeen())
                    {
                        Voxel top    = voxel.NeighborOrNull(VoxelDirection.Top);
                        Voxel north  = voxel.NeighborOrNull(VoxelDirection.North);
                        Voxel east   = voxel.NeighborOrNull(VoxelDirection.East);
                        Voxel south  = voxel.NeighborOrNull(VoxelDirection.South);
                        Voxel west   = voxel.NeighborOrNull(VoxelDirection.West);
                        Voxel bottom = voxel.NeighborOrNull(VoxelDirection.Bottom);

                        if (Voxel.IsSolid(top) == false)
                        {
                            // Exposed Top
                            voxel.Exposed       = true;
                            voxel.ExposedSides |= VoxelSide.Top;
                            NumVerts           += 4;
                            NumInds            += 6;
                        }
                        if (Voxel.IsSolid(north) == false)
                        {
                            // Exposed North
                            voxel.Exposed       = true;
                            voxel.ExposedSides |= VoxelSide.North;
                            NumVerts           += 4;
                            NumInds            += 6;
                        }
                        if (Voxel.IsSolid(east) == false)
                        {
                            // Exposed East
                            voxel.Exposed       = true;
                            voxel.ExposedSides |= VoxelSide.East;
                            NumVerts           += 4;
                            NumInds            += 6;
                        }
                        if (Voxel.IsSolid(south) == false)
                        {
                            // Exposed South
                            voxel.Exposed       = true;
                            voxel.ExposedSides |= VoxelSide.South;
                            NumVerts           += 4;
                            NumInds            += 6;
                        }
                        if (Voxel.IsSolid(west) == false)
                        {
                            // Exposed West
                            voxel.Exposed       = true;
                            voxel.ExposedSides |= VoxelSide.West;
                            NumVerts           += 4;
                            NumInds            += 6;
                        }
                        if (Voxel.IsSolid(bottom) == false)
                        {
                            // Exposed Bottom
                            voxel.Exposed       = true;
                            voxel.ExposedSides |= VoxelSide.Bottom;
                            NumVerts           += 4;
                            NumInds            += 6;
                        }
                    }

                    voxel.Collider.enabled = voxel.Exposed;
                }
            }
        }
    }