HowTo:FullUnwrapBlender

From VsWiki
Jump to: navigation, search


More cleaning up

Watch for pairs of triangles that can be turned into quads and do it; and merge unnecessary vertices. Don't forget to go into line selection mode and menu Select -> Non Manifold, from time to time, watching for lines appearing in the middle of a smooth surface where they shouldn't appear, or missing from sharp edges --where they should always appear. This is the most efficient way to find cracks, internal triangles, blotched smoothing groups and missing facets. I write this because I thought I was done with this mesh, but I'm still finding a lot of areas needing fixes and improvements; --which is why this tutorial is going so slowly.

Also, it's extremely important to minimize the amount of hidden, invisible surface areas. There's many reasons for this; but first of all, what do I mean? I mean, for example, those three square boxes I have at the top, and then again at the bottom of the ship. Originally I put them in as vertical boxes that crossed the whole ship, top to bottom. Later, I cut the boxes so that they barely penetrated the skin. But before finalizing the mesh, one has to cut the skin to elliminate the squares covered by those boxes. Small boxes and things, like the little clamps, though, can just float and cover; but those six boxes are just too big for that. Now, the two main reasons why...

  1. The GPU (Graphics Processing Unit; the brains of your videocard) has no way to know that a portion of surface is not visible and disregard it altogether. It does display correctly but by brute force: It checks as it draws each pixel that something isn't drawn in that pixel already that is closer to the camera than what it is currently drawing (AKA "Z-testing). But even if it decides not to *draw* that pixel of the skin (because a pixel of the box was drawn earlier, and is closer to the camera), it still ended up having *read* that pixel --in order to find out; which is a memory access all the same. If in one area of the screen you have 17 polygons, at best, the GPU will write the pixel only once; but it will end up having read it all 17 times. This is called "overdraw", and is one of the prime factors limiting performance in games. Hidden surfaces aren't just wasted; they slow down refresh rate.
  2. Hidden surfaces waste texture texels: The larger the hidden surfaces, the more texels are wasted on them. To get the best results and highest detail out of the smallest texture, you need to up the efficiency; so hidden surfaces are out. And, before you ask, no, you cannot place something else over a hidden area, because we'll need an "ambient occlusion baking" that Blender will make for us, but you cannot have overlapping UV islands, or else the occlusion baking will be incorrect. There's really no other solution than to cut off covered/hidden surfaces.

One good way to find hidden surfaces and elliminate them is to take a look at the inside of the ship. In the pic below, we're inside the hull, looking towards the back. You see rectangular depressions at the top and bottom, where those boxes are. You also see horizontal slots to the left and right, near the back. Those are the interiors of the "wings". And inside the slot on the left, you see these bright lines along its "floor" and "ceiling". Those are the edges of the walls of the inner rooms in the dockings, penetrating the wings. I feel they are penetrating too much, and will waste too many pixels...


Cutter32.jpg


So, I decide to do something about it:


Cutter33.jpg


What I did was push the edges, up and down respectively, until they barely penetrated the surface of the wing.

And sorry if I'm repeating myself, but flipped normals... You need to find them all. I just went into a major hunt for flipped normals and found probably 200 of them. Does it, or does it not look "cleaner" now?


Cutter34.jpg


Speaking of normals, you can save yourself major pain by NOT using "Ctrl-N Normals Outside" once you've done your smoothing groups. Blender's algorithm for telling inside from outside is not too smart; and while it works well with closed meshes, it does a disaster once you've split smoothing groups, because, when in doubt, Blender looks at the normals of neighboring polygons; but it won't find neigboring polygons that have been split.

To find blotched normals, one trick I've found is to flip flop the Double-sided button. Turn the ship to get a close view of one area at a time, then press F9 and you'll see the Double Sided button there. It should be off. Turn it on and off repeatedly. Nothing should change in the picture if all the normals are right within that view. If anything changes color, there's a blotched normal there. Make sure you have the Show Normals button, and adjust their length. Faces whose normals are reversed will have just a tiny blue dot in the middle. Highlight them and go W -> Flip Normals.

And then I followed my own advice and did the above systematically, and found another hundred or so blotched normals...

I've also finished a few details inside the front docking area:


Cutter35.jpg

Cutter36.jpg


And I keep on following my own advice and trying different paint schemes, because I know it will be much more problematic to change my mind later. I'm not even putting half the picture story here; I only make renders when I believe I'm done, which is often after several major changes. Here are my latests "finals" :) ...


Cutter37.jpg

Cutter38.jpg

Cutter39.jpg


And be sure to post a lot of pics of your work in progress. Nothing keeps you more true than putting your work up for others to see. You won't be able to please everyone. Don't even try. But sometimes, a few changes can help a model look "acceptable" to some. Besides, just the anticipation of feedback will encourage you to look for details you may not be totally happy about yourself. Someone was displeased about front-to-back balance of green paint, or the lack thereof, rather. So I added a bit of greenness at the front, and made the wings bare metal. BINGO! Looks much better in my eyes...


Cutter40.jpg

Cutter41.jpg

Cutter42.jpg


IMPORTANT NOTE:

All of the polygons in your ship should be smooth-shaded. If you've read the Smooth Groups tutorial you know why, but it won't hurt to reiterate: Flat shaded polygons have all their vertices split as they go into the videocard. Your mesh file may say you have 20,000 vertices, but as they enter the videocard the may multiply to 120,000 vertices. Flat shading is for the lazy. In face selection mode, hit A to highlight all, then W -> Set Smooth. Then flatten whatever needs to look flat by selecting faces in that smooth group (Shift-Ctrl-Alt-F -> 145 helps a lot), and split them with Y. That's what "splitting the smooth groups" is, by the way.

/IMPORTANT NOTICE


Yes, modelling is a lot of work, indeed; but very rewarding. Okay, time to start placing seams... No, before that a bit of theory about where do we place the seams, and why.

Think Hard First

Here's a list of constraints and requirements to get a "good unwrap" going:

The goals are:

  1. To have the least amount of stretching and deformations
  2. To have consistent scaling of the texture across the whole ship
  3. To minimize the number of seams and islands
  4. To have the arrangement of the islands so that locating a part of the ship in the textrure is intuitive, rather than requiring a throrough search.
  5. To have front and back view unwraps all together in one area of the texture, and all side views in another. The two areas of the texture should be well separated, hopefully across a single, horizontal line.
  6. To have all "side views" (including top and bottom) as a series of rotations, sort of like a cylindrical unwrap unrolling vertically.
  7. To align the front-to-back direction (z axis) horizontally on the texture (u-axis).
  8. To orient the front of the ship (positive z-axis) towards the left on the texture. This is so that, to produce dirt trails and scratches that should have front to back fading, we can do it in Gimp using horizontal motion blurs globally, rather than have to do laborious, region by region blurs, depending on the orientation of each island. Also, my texturizer software, when it's done, will assume that the front of the ship faces to the left on the texture, and produce dirt smears and scrathches by smudging dirt spots and impacts towards the right.
  9. To avoid "flipping" islands or polygons. A flipped island on the texture results in the polarity of the bumps on the normal map being reversed.
  10. To avoid overlapping or re-using islands (unless using dual UV-layouts) because radiosity baking and PRT bakings cannot work with overlaps.
  11. To avoid Islands touching, or even coming too close to each other; --except along an edge that they share on the model itself; --in which case they could (or rather should) be "stitched" together.
  12. To try to group islands by color or material, so that color "leakage" between islands due to gpu anisotropic filtering is of a similar color, and therefore less noticeable.
  13. To try to keep islands housed in rectangular areas, power-of-two pixels sized; and to ensure these areas have their starting x and y coords at an integer multiple of their x or y size respectively. I.e.: If a long strip island has a size of 64 pixels in x and 16 pixels in y, good placements for the rectangle in x, in the texture, ar at x=0, x = 64, x=128, x=192, etceteras. That is, 0, 1, 2, 3, etceteras, times its x-size, 64. Good placemtents in y are 0, 16, 32, 48 .... same idea. Why? To avoid, or rather minimize, mipmap color leakage between islands. Mipmaps are recursive reductions of a texture by powers of two, using block averaging (4 pixels are averaged into 1). So, if two islands are separated by a row of pixels at x or y = 77, mipmap leakage will start much earlier than if the boundary between them is at x/y = 64, for example.
  14. Finally, to, --as much as possible--, make efficient use of the texture, while upholding the previous standards.

Easier said than done, let me say it :) The day someone comes up with an automatic UV-unwrapper that takes all the above into consideration, that will be the day...

But anyhow, read and re-read the above list until you wake up in the morning thinking about it, and next we'll start placing seams, while thinking about all that...

Placing Seams

It's always easier to start planning from the biggest parts to the smallest. Our biggest part is the fat fuselage. The fact that it is almost round, tells me that the best way to go with it will be using "Cylindrical Unwrap. That is, once we get to UV unwrapping, we'll look at it from the front, and from the Unwrap menu choose Cylindrical. This will roll the hull out like a tape. Of course, this wouldn't work too well for the tower and the wings, so we're going to "cut them off", texturing-wise, by placing seams right along their welds. To place a seam, you have to be in Edit mode, Line Select; so you select a line along edges (Alt-right-click and Shift-Alt-right-click are often useful here) and Ctrl-E -> Mark Seam. By default, seams look brown in the edit window.

Note that you don't need to place seams along split edges. Split edges already "imply" a seam. So, if you did a thorough job of splitting your smooth groups, you won't need too many seams.

So, let's start by splitting off the wing. (Note: I'm assuming you know about the Mirror attribute, and that your model is mirrored in X so that you only have to work on one side of the ship, and the other side automatically mirrors what you do. If you don't know what I'm talking about, you really need to do a bunch of beginners' Blender tutorials first...). Okay, let's see... Problem! The engines are in the way! How are we going to draw the seam?


blender_shot_3.jpg


If the engines were a separate object, we could move them to another layer, but now the whole ship is one object! Well, there are other ways. This should be obvious, but I'll spell it out just in case. We made the material of our engines "Stainless", so we can just do a selection by material...


blender_shot_4.jpg

blender_shot_5.jpg


... and press H to Hide it...


blender_shot_6.jpg


Avra Kadavra! The way to Reveal things we hide will be the subject of a future tutorial... :D

Allright, so let's get started: Top edge of the wing's weld:


blender_shot_7.jpg


You might ask "why do we pick *that* line, and not, say, the one below?". Well, there's a reason: the strip of quads below the line is the actual 45 degree bevel strip. I prefer to leave that bevel strip as part of the wing, rather than as part of the hull. Why? Because, either way, we'll have to LSCM the strip so its projection doesn't get compressed. So the narrow projection of the strip will kind of flare out a bit as we flatten it. But while this is okay to do at the edge of the wing's unwrap; it's not so clean if it's part of the hull, because when we take the wing out of the hull it leaves a rectangular hole; but if we have bent edges around the hole that need to stretch out, they'll actually stretche "in" --into the hole in the hull, which means that their lengths will have to decrease for their widths to increase. Often LSCM goes nuts when you try to make it do that. So, try to only catch polys that will map fairly straight, when you're seaming the boundaries of a big piece by cutting smaller parts out of it. Leave the troublesome parts for later. Procrastinate.

Here's my cut at the front end of the wing:


blender_shot_8.jpg


And NOW I realise I have too many bloody polygons around this area... We'll place the seams first; I'll come back to this later...

Here's my cut under the wing:


blender_shot_9.jpg


And here's my cut at the back of the wing:


blender_shot10.jpg


Now, verify in transparent mode that the loop is closed, then Ctrl-E -> Mark Seam:


blender_shot11.jpg


Same thing for the tower:


blender_shot12.jpg


Now we cut out the front-facing part of the hull:


blender_shot13.jpg


We have to, as a cylindrical unwrap of the main hull would miss a front-facing plane entirely. But you might ask, didn't I say I didn't want to catch 45 degree strips into the main hull? Well, in the case of the wings and the towers that is so, because when we cut them out, we leave holes in the hull unwrap. But in the case of the front plane we don't have to worry about strips flaring inwards into a hole, because the edges adjacent to the front plane will all be on the left side of the texture, lining up vertically. And I'd rather have those 45 degree strips with the hull, because I will probably put impacts and scraches there that should smear or fudge or fade backwards along the sides of the hull; and if I put those bevels elsewhere in the texture it would be pretty hard to match a scratch begining in one island and continuing in another.

Additionally, if you look at the paint, you'll see that my seam goes along the edges of the paint. This will allow me to better separate and group islands by material.

And what are those extra seams making V-signs at the corners?

Those are there so that when the bevel strips flare out they don't have to stretch like contortionists. They are "relief cuts".

Let's do the bottom tower:


blender_shot14.jpg


Note that the towers and the front, not to speak of the wings, will need further seams. We'll add more seams when we get to them; right now we're not working on the towers or wings or anything other than the main hull. One thing at a time... Now the back:


blender_shot15.jpg


Done with the main hull. What?! Yes; we don't need to put seams for the boxes at the top and bottom because they are already split. We don't need seams for the inside surfaces of the intakes, because they are also split already. Smooth groups, remember? Ahh, but we do need a couple more seams; hold on... Here:


blender_shot16.jpg


The reason we need those there is that the surface going in there is continuous with the hull. Only the upside-down surfaces are split. So, those parts inside the "vents" need to be put elsewhere on the texture; otherwise they'd overlap with the outside of the vent, in the cylindrical unwrap.

Now we're really done with the hull. What's next? We said we'd start with the biggest parts first. I'm not sure what's the next-biggest part... Probably the wings.

Different people have different ways of doing things. Most Blenderheads swear by LSCM. Me, I don't like LSCM, --at all. Why? Because I like my things aligned, sort of. Specially the front-to-back direction on the ship, I want it to align horizontally in the texture. LSCM is an "obsessed algorithm", IMO; that only cares for surface equalization, and for which everything else is secondary. For me, front-back alignment is a primary concern; and surface area equalization is kind of the last item in my long list of priorities. The way I work is I use Unwrap -> From View. Naturally, therefore, that's how we'll do this tutorial. If I tried to teach the way someone else works, I probably wouldn't do it right, anyways.

There are 6 views that interest us: Front, back, top, bottom, left and right. As such, prepairing the seams is easy. Here I've seamed up the wing:


blender_shot17.jpg


Ehmm... Yes, if it looks like I've made a major clean-up of the mesh, it's because I have; and I'm not quite done with it either. Expect to see more polygon reduction crackdowns as we proceed... And, by the way, what I did to display titanium parts only, was to select them (by material), then menu Select -> Inverse, so that everything that's NOT made of titanium is selected, and then H to hide. And as I did that I discovered many little polygons floating in the middle of nowhere... Facets that I meant to assign a different material to them, bot missed them. Cleaning up the mesh is a job that's never done... I'll fix that next, won't re-upload the pic above; better for the garbage to show there, for the record. So, I realize now that this is something that should be done in a systematic way. Select one material at a time, inverse selection, hide; and then visually verify that everything that's there should be there. Otherwise select the mis-materialized pieces, assign the correct materia to them, and hide them. Then Reveal everything, and do the same in the next material in the list. Alright, let me do just that...


blender_shot18.jpg


Okay, done cleaning up the titanium family. I even found floating edges without faces "made of titanium". Meshes are like white socks; --never perfectly clean. I'll do the other materials later.

Anyways, back to the seams in the wing: There's always the question of which view gets the bevel strips. I gave the top-bottom views the top priority; side-view second; and front/back views last. Why? Front and back views should always have the last priority, for the reason I stated earlier: Part of the texturing will be to represent impacts and scrathes. Some of those impacts should begin at a partially front-facing bevel and then fade towards the back. To represent the fading of such impacts, we can use linear blurs in Gimp, but Gimp knows nothing about the UV-mapping; --i.e.: it couldn't begin a blur in one island and continue it on another. So what we want is for such bevels to be already on the left edge, and part of, an island in the texture. Then an impact is basically a dot within the bevel strip, in the texture, and we can just motion-blur or smudge the dot towards the right, and the smudge will proceed towards the right in the texture; --over polys that follow behind, in the mesh. As for whether the top/bottom views should get priority vis a vis the side view, or viceversa, over which gets the longitudinal bevel strips, this is a matter of taste. I usually give that priority to whichever are the larger pieces, but it's just a matter of personal preference, and more for the sake of having a rule I follow, than any technical consideration.

Still proceeding from largest to smallest pieces, next in the list would be the dockings. Here we have a bit of descision to make: What do we do with the inclined surfaces facing towards the engines? If we unwrap them from top or bottom view, the rectangles for those areas in the UV-map will be compressed. If we unwrap them from side-views, the'll be compressed also. If we LSCM them, they will get deformed, like parallelograms probably; and we'll have to fix them by hand. Or else we could turn the view until we see them flat, and unwrap them from that view... I'm going to unwrap them from top and bottom views; because, in this case at least, I don't care about a texture stretch at a place that's so hidden from view and probably featureless anyhow. So, same general method as with the wing:


blender_shot19.jpg


And as with titanium, selecting the green paint parts uncovered things that were green that shouldn't be, and another clean-up took place. I've been fixing so many things, from blotched normals to unneeded vertices to wrong material assignments, that I couldn't hel make a new render to see how those fixes so far affect the final result...


Cutter43.jpg

Cutter44.jpg


Looking nicer and cleaner, as expected.


Proceeding from largest to smallest parts, I think what comes next is the front and back facing sections of the hull.

The front is just a matter of separating the battering ram. I ate my words and jumped to the occasion to seam up the ram itself. No seams are needed around the opening because that edge is already split.


blender_shot20.jpg


The back actually doesn't need almost anything done to it, because it's already all split up by smooth-grouping, including the Apollo/Soyuz dock. All that needs to be done to it is a few cuts to be able to unroll the cylindrical items...


...

(Last step: Align vertices near x=0 to x=0, apply X-axis mirroring, and place the central seam.)

Optimizing ship orientation for UV unwrapping

(Z is "up", Y is "forward"? Got to experiment first...).

Worry not, though; we'll put it back to "Z is forward" after the unwrap. It's just that Blender shows the top, bottom, and side views vertically, when your forward axis is z, which is too bad if you're unwrapping "from view"... because we want the forward axis horizontal and pointing to the left in the texture...

"Starting Big" in Potato Mode

Do the biggest parts first.


(2 be continued; this is a WIP --Work in Progress)