Quick list of pros and cons.
Surface good:
- Analytically defined geometry (it’s smooth no matter how far you zoom in).
- Small memory/file footprint (you do not need many points to define a curvy surface, however the benefits are somewhat mitigated by the fact that every surface carries around a display mesh used for shading).
- Simple topology (a surface is always a finite uv patch topologically speaking, makes it easier to develop algorithms for them).
- Accuracy (because surfaces are analytical, things like intersections yield accurate results).
Surface bad:
- The maths involved is difficult.
- It’s difficult if not impossible to exchange surface data with other 3D applications.
- Topologically limited (sort of the flip-side of the topological simplicity argument. Sometimes you need a higher genus shape and then a single surface will no longer cut the mustard).
Mesh good:
- Simple definition (points, polygons connecting those points, there done).
- Highly exchangeable with other apps.
- Modern graphics hardware is really good at displaying meshes fast.
- No topological constraints.
- Lots of published research and algorithms for meshes, not so much for nurbs surfaces.
- You can associate specific colours with specific points on the mesh.
Mesh bad:
- It’s not smooth, it’s discrete.
- It can be really difficult to perform operations on the mesh shape, because there is no intrinsic parameterisation.
- There’s lots of ways in which a mesh can be invalid.