Since unwrapping is mapping a 3d surface onto a 2d plane, there are a limited number of ways to avoid stretching.
In general the more you avoid stretching, the more seams you will get.
Note that stretching is not necessarily so bad as to attempt to avoid it entirely, while good to avoid extreme cases - baking, texture painting - etc, will compensate for subtle stretching so that its not such a problem. Unless you're painting onto the 2D image directly.
In the example of a 'vase' like object, (lathed 2d shape), you're likely be better off accepting some so pixels are aligned with the UV's (the third one, in your question). ... and not diagonally shared across faces which may look odd at low resolution/mipmaps).
UV unwrapping for games/realtime-engines is typically a trade-off between:
- number of seams
- distortion
- maximum texture usage
- avoid bleeding with low mipmaps
- ... and the time it takes you to create.
Whats good or not depends on your project.
Some ways to avoid stretching include:
- Use Blenders Unwrap tool (and do some manual pinning of UV's).
- Create a mesh out of flat surfaces and project each surface separately,
see: Smart Project which automates this.
- For quad-dominant meshes a grid can unwrap neatly to UV space.
See Blender's Grid Unwrap tool (called Follow Active Quads in Blender).
The amount of stretching depends on how regular the surface is.
- Unfold the mesh into UV-space (think of unfolding a paper-model), See the addon referenced here.
Note that unfolding may only be of limited use for UV-mapping since it tends to create a lot of seams and overlapping regions.
Its best suited to low-poly meshes.