static int FindVertGrid(Vector3 p, Vector3 n, Vector2 uv, Color col)
    {
        int sd = subdivs - 1;

        int gx = 0;
        int gy = 0;
        int gz = 0;

        if (size.x > 0.0f)
        {
            gx = (int)(sd * ((p.x - min.x) / size.x));
        }

        if (size.y > 0.0f)
        {
            gy = (int)(sd * ((p.y - min.y) / size.y));
        }

        if (size.z > 0.0f)
        {
            gz = (int)(sd * ((p.z - min.z) / size.z));
        }

        MegaCacheFaceGrid fg = checkgrid[gx, gy, gz];

        if (fg == null)
        {
            fg = new MegaCacheFaceGrid();
            checkgrid[gx, gy, gz] = fg;
        }

        for (int i = 0; i < fg.verts.Count; i++)
        {
            int ix = fg.verts[i];
            if (verts[ix].x == p.x && verts[ix].y == p.y && verts[ix].z == p.z)
            {
                if (norms[ix].x == n.x && norms[ix].y == n.y && norms[ix].z == n.z)
                {
                    if (uvs[ix].x == uv.x && uvs[ix].y == uv.y)
                    {
                        if (cols[ix].r == col.r && cols[ix].g == col.g && cols[ix].b == col.b)
                        {
                            return(ix);
                        }
                    }
                }
            }
        }

        fg.verts.Add(verts.Count);

        verts.Add(p);
        norms.Add(n);
        uvs.Add(uv);
        col.a = 1.0f;
        cols.Add(col);

        return(verts.Count - 1);
    }
    static int FindVertGrid(Vector3 p, Vector3 n)
    {
        int sd = subdivs - 1;

        int gx = 0;
        int gy = 0;
        int gz = 0;

        if ( size.x > 0.0f )
            gx = (int)(sd * ((p.x - min.x) / size.x));

        if ( size.y > 0.0f )
            gy = (int)(sd * ((p.y - min.y) / size.y));

        if ( size.z > 0.0f )
            gz = (int)(sd * ((p.z - min.z) / size.z));

        MegaCacheFaceGrid fg = checkgrid[gx, gy, gz];

        if ( fg == null )
        {
            fg = new MegaCacheFaceGrid();
            checkgrid[gx, gy, gz] = fg;
        }

        for ( int i = 0; i < fg.verts.Count; i++ )
        {
            int ix = fg.verts[i];
            if ( verts[ix].x == p.x && verts[ix].y == p.y && verts[ix].z == p.z )
            {
                if ( norms[ix].x == n.x && norms[ix].y == n.y && norms[ix].z == n.z )
                    return ix;
            }
        }

        fg.verts.Add(verts.Count);

        verts.Add(p);
        norms.Add(n);

        return verts.Count - 1;
    }