Hi everyone! Welcome to my blog post on my games project, which is now called Spell Sisters rather than BOUND. I already outlined the changes to the game itself in my previous post, so I won’t be covering that. This post is all about the UV Unwrapping and Map Baking I did for the game assets. While another team member unwrapped the Ghost Girl and the Environmental Asset, I unwrapped her Older Sister, so I will be covering the process I used for her. I baked maps for all the assets, so that will be the longest section I will be discussing. So without further ado, let’s get into the Unwrapping and Map Baking stage of the games pipeline!
UV Unwrapping the Older Sister
After finishing the sculpting for the older sister and retopologizing the low poly model to conform to the high poly, the Older Sister character was ready to be unwrapped. As always, before UV Unwrapping, it’s vital that the model is thoroughly checked for any errors. I collapsed the symmetry modifier and from there I did an STL check to see if there were any errors – there were a few N-Gons caused by the symmetry modifier which were easily fixed, and an unwelded vert on the hand. Catching these early is important, as it can create many problems with distortion in the unwrap and errors in the texture. After thoroughly checking the model over and seeing if I was completely happy with the mesh, I was now safe to go ahead with the Unwrap. Preparation is key with UV Mapping! It’s always better to check your model obsessively rather than leave errors unchecked because you didn’t look properly. Before unwrapping I also put a checker pattern on the model so I can see the texture quality as I unwrap.
Unwrapping an organic model is always a bit more difficult than a hard-surfaced asset, as surfaces are not planar and don’t have as many areas where seams can be hidden easily. I started with unwrapping the head, which was actually quite a lot easier than I thought it would be. Instead of using the Quick Peel tool like I usually do for most of the unwrapping process, I used Peel Mode. Peel mode allows you to pin certain vertices and move the verts around without sacrificing the quality of the unwrap, or creating any distortion. I needed to use this mode because Quick Peel gave me overlapping vertices in the nose and the lips, areas which contain a lot more detail and as a result are more difficult to unwrap nicely.
For most of the model, though, I used the Quick Peel and Quick Planar map function to get the best results. The relax tool was a must for an organic model, so after every unwrap I relaxed by polygon angles to get rid of distortion and improve the texel density. I tried to hide seams in places which were not easily visible – for example, I placed seams under the arms and used them to my advantage on the dress. I find marking seams on clothes to be a lot more simple, as you can use real life reference for where the seams would be placed on the item of clothing, therefore making the seam appear far less obvious and more natural looking.
I also used Peel Mode on the hands, which I believe are probably the most difficult area to unwrap (along with the ears). I am very thankful for existence of Peel Mode – it makes Unwrapping these high poly areas a lot easier!
When I had unwrapped everything, it was now time to place all the UV islands within the UV space. Getting everything to fit nicely with minimal empty space is always a challenge, but I find it enjoyable. I made the face area quite large on the map, as this is the most important area which will contain a lot of high detail. A character’s face is always going to be the first place the viewer will look. The eyes were also allocated a nice chunk of UV space, as they are usually the most engaging and dynamic part of a character. Areas which were going to be rarely seen or very small (like the ear or the underside of her shoe), were made quite small in the UV space. It’s important that even texel density is maintained where necessary, but many areas will require a lot more to allow for higher detailed map bakes or textures.
Below you can see the checker pattern applied to the model, and how it looks after the unwrap is finished.
My finished UV Layout! I was quite happy with how it turned out. As you can see, I overlapped the UV islands for the arms, feet, hands, legs, shoes, neck and eyes to optimize the texturing process and allow for more texel density. After setting out the UV space correctly, I rendered a UVW template out at 1024×1024, which is the size constraints we were given for the game.
Surprisingly, this model didn’t take long to unwrap at all! I unwrapped her in the space of a few hours, simply using all the functions I mentioned and relaxing by polygon angles accordingly. Everything ran very smoothly, and I found that I actually enjoyed the UV Unwrapping process. I’ve come quite a long way from disliking this process and finding it difficult to actually finding the fun in it! I seem to be much more efficient in my workflow during the UV unwrapping process now, and intuitively know where to place seams and what Unwrap method will work best. Of course I am always still learning and improving in this process, but I feel much more confident with it now after having done it quite a few times. Practice makes perfect! What once seemed a daunting process is now really quite enjoyable.
Baking the Normal Maps
Now comes a process which I have a love and hate relationship with – baking normal maps. I have had a lot of problems with this in the past, but I finally found a really nice way to do it within 3DS Max – so I’ll start by telling you how I problem solved to fix the issues I had come across previously. (This problem solving process is focused on the Ghost Girl Model, who I experienced this trial and error with first.)
For my normal maps, I am using the Render to Texture option within 3DS Max. A lot of the problems with baking normal maps should be fixed by having a low poly that directly conforms to the high poly mesh. Minimizing the amount of areas where the high poly and low poly intersect will really help in creating a nice, clean bake. Setting up an appropriate cage on the low poly to allow for accurate projection from the high poly is another vital aspect of this process. But before you set up a cage, the most important part of normal map baking (something which I had previously overlooked) is exploding the mesh. Exploding the mesh means you separate all the pieces of geometry and bake their normals out separately. You do this so there is no overlapping information from the normals on the other parts of the mesh. For example, if I were to attempt to bake out a normal map using a cage on the whole mesh of the character, the normal information from her dress would interfere with her body, and similarly with her shoes. Her hair would also create errors on the normals near her face. We don’t want this! The normal map is one of the most vital aspects of making the model’s textures look fantastic, and we need a good bake to make this so.
So what went wrong with my first bake? Well for starters, the projection cage I set up on my low poly model had some areas which were intersecting with the mesh. When this happens, there are usually errors in the bake which are highlighted red within the 3DS Max map viewer. These are areas where a ray has missed and is not finding any information from the high poly to bake onto the low poly. (This can also be caused from bad retoplogy, but this wasn’t the case here.) To fix this, I found it was easy to simply return to the projection cage and tweak it to fit perfectly outside the low poly mesh. While editing the cage is a bit tedious and a little irritating, it’s a very important part of getting a good normal map.
After this, I tried render to texture again – but the normal map just looked simply awful! There were a lot of errors and areas where the detail had been baked very poorly. At this stage, I was getting very anxious about the normal map baking – such an important stage going wrong was throwing my confidence, and also making me worry about the deadline for the assets. If I took much longer with the map baking, I wouldn’t have long to texture, and I wanted to make sure I had ample amount of time for that stage of the pipeline. While everything was looking down, I wouldn’t give up!
I tried many different solutions here – first I tried making the projection cage even larger, but that seemed to have no effect, and just made the bake worse. I researched quite a bit and turned up with only very complicated solutions which I had no time to dabble in. I tried baking the normals in Xnormal to no avail. Nothing seemed to be making a difference! Time was running low an the pressure was on – I had to find a quick, effective solution so I could move on to the texturing stage. The internet really wasn’t helping me at that moment, so I decided to rely on my own wits to get me through. Suddenly, I had an excellent idea!
I had a thought that the default scanline renderer with the buggy viewport lighting may have been causing a bit of a problem. As my last hopeful solution, I added in three omni lights and placed them around the geometry I was baking. Making sure the lighting was even and there were nice shadows on the model, I baked out a normal map and amazingly, my problems were solved! The lighting worked wonders for the normal map – all the detail was crisp and clear, and there were minimal errors with the detail. I didn’t even know previously that lights affected the normal map baking process within max, but after seeing how easy it was to achieve a nice bake with the lights, I’ll definitely be using them next time around! I’m really glad I went through this torturous process of trial and error, because next time when I get to this stage of the pipeline, I’ll be much more well equipped with the knowledge of how to complete the normal baking efficiently.
I used the same lighting setup for all the exploded parts of the mesh for the bake, then once I had all normal maps baked out, I went into Photoshop to clean up any remaining errors and to composite them all into one map. It was a relief to see the map finally put together.
Here’s the normal map for the Ghost Girl. I went through this trial and error process with her model first, as she was the first one unwrapped. Another team member did the UV’s for her, so I didn’t cover that section for her character.
The payoff of seeing the map applied to the actual model was gratifying to say the least! Check out the Ghost Girl and her Older Sister now:
I learned so much from the process of UV unwrapping and baking maps for these characters. It was an awesome experience to work in a high pressure environment to an ever-changing pipeline. I think the problem-solving workflow I used with the map baking section actually worked really well, and learning to rely on my own initiative with the help of research is going to help me when I’m out in the industry. This blog post is becoming far too lengthy for me to discuss texturing, so I’ll leave that for the next post. Thanks for reading!