Unwrapping gives me weird shapes. I don't get it.

I have a simple mesh that I want to texture (the one that is selected in the image).

I’m trying to learn how to use UV mapping. So I’m trying to keep it simple and I mark all of the edges as seams. I press U and select Unwrap and I expect to get the faces from the mesh nicely stacked together in the UV Editor. What I get is this:

Now everything seems fine, but note that the faces are misshapen. I can make this more obvious by selecting a face that is clearly a rectangle…

… and I see it has been unwrapped as a square.

I have no idea if this is supposed to be this was or not, but it clearly doesn’t work for me and I hope it makes perfect sense why that is. I want the shapes of the individual faces to be identical to those in the UV editor.
What am I missing here?

Your object scale is not 1 like it should. In object mode, ctrl+a -> scale.

Marking every edge as seam is not a good idea. You can get similar result with smart uv project, without the seams.

Here’s one example on where to place the seams on that kind of object. It’s often good to place the seams where they are not seen but this being an example, I placed them such that the edges connecting largest areas are seamless.

So doing the ctrl+A and checking ‘scale’ worked, but I have no idea what that does and why, especially because when I marked it, nothing changed, except that the unwrapping was now correct. Care to explain what exactly that is?

Edit: Actually I think I have an idea of what it might be. When you scale an object it has a scale different than 1. And when you ‘scale’ it with ctrl+a you set the scale back to 1 but keeping the current size? Is that what it does?

… JA12 well said, think of the unwrapping procedure as chopping the mesh, in order to unfold it… you COULD separate EVERY face, but this would not give a useful result and may lead to problems later… whereas strategically cutting it(with seams) and using the newly unfolded or “uwrapped” mesh would mean less visible texture creases, and a much easier job of texturing…

imagine you are trying to peel an orange , and keep the skin in one piece… you would have to carefully tear the skin in a few places, not just dice up the skin into a million tiny squares. lol

for some purposes though (such as making the texture by using blenders texture paint mode) you COULD simply use smart unwrapping, to separate the mesh into islands, this can offer a faster alternative for some quick texturing jobs. but would probably make it much harder for you to edit the texture in photoshop or gimp

applying scale has many functions in blender… when you scale an object, USUALLY it is just modifying the scale of an object , so twice as big, makes the scale read 2… of halving the size makes it 0.5…
but if you scale an object THEN apply it. the objects scale is reset, meaning the object stays the same size, but blender sees the scale of the object as “1”… this allows blender to use the mesh with a neutral scale, for things like collisions modifiers and particles, it is vital to have a scale of “1”

A bit of technicality: Location, Rotation and Scale are actually transforms (or transformations) in 3D space. Normally in games and 3D software (i.e. Blender) these transforms are applied to the whole objects. They are needed to actually render object (in viewport and rendering engine) and to perform various calculations on the geometry (i.e. simulations, collision detection).
Simply put, these transforms are multiplication of matrices. To represent a vertex in a world, coordinates of that vertex are multiplied with the combination of these transforms. If an object has parent, they are then multiplied with parent’s transforms and so on.

What that means is that “physical” mesh dimensions may differ from its final dimensions in world space. In your case, Wargasm, in local coordinates that face stayed square, but it was being represented as a rectangle in world space due to object’s changed scale.
Applying transforms (i.e. applying scale) premultiplies all vertices with that transform and resets it for an object.

Thanks guys.