use Vec2 for surface position