Making Of 'Leviathan'
Introduction / Concept
Soon after the Dominance War 2 competition ended over at Gameartians.org, a new competition started sponsored by Big Huge Games. The subject was to create a creature of epic proportions, something that would tower over the player in a game. I had so much fun creating Thrull, I really wanted to take part in this new challenge. I knew i wanted to create a monster but also wanted to create something different than my last character...otherwise it wouldn't be interesting.
So, I took out the sketchbook and started scribbling down some ideas. Eventually I came up with Leviathan, a giant creature that resides in the water and coastal areas. I'm not the best concept artist in the world by any means, but
it's always a good idea to have at least a rough sketch to get your ideas down and make sure everything will work.
Note : The small human model was provided to me by Big Huge Games.
Base Mesh Modeling
The fun begins. The first stage in character modeling for me is to create a base mesh that will be used as the foundation of my high poly sculpt and, once it's reduced and cleaned up, my low polygon model that will be used as an in game asset. The main thing to keep in mind for this model is to have nice, even polygon density throughout your entire mesh. This results in good subdivisions once the model is brought into ZBrush and will cause you a lot less headaches in the future. So, even though the forearm on your character wouldn't normally have a few edgeloops on it, add them for the sake of sculpting...they're easy to remove once the time comes and the benefit will show itself in the results of your high poly sculpt.
You'll also want to avoid complicate geometry that would normally be acceptable in a game model but not neccessarily in a mesh for sculpting in ZBrush. By this I mean avoid triangles and terminating edges in awkward places. Try to keep your mesh in all quads. Don't worry so much about adding definition to your model as a lot of it can be sculpted in ZBrush. Sometimes I will add geometry for things like kness or elbows but more often than not I avoid it as the effort spent on creating them usually isn't worth the trouble, especially considering how quick it is to sculpt in ZBrush. Just worry about the major forms of your model and how it will react to subdivisions in ZBrush. It's tough to say what your base mesh model's polycount will be as it really is a case by case basis. Leviathan's base mesh polycount was around 5000 quads.
The method I use to model is commonly referred to as edge extrusion modeling. Basically, I start with a cube, delete all of the faces but the one facing forward on the Y axis. I split that in half and instance it, mirroring it on the X axis. From there I grab an edge and start modeling out the forms. A lot of people will disagree that this isn't the method to use as other methods, such as box modeling, allow you to block out forms quicker. But, with enough practice you can become quick with the edge extrusion method, most workflows now for game art doesn't require you to model a high density mesh (so modeling is generally quicker anyways), tweaking proportions afterwards is easy because of the base meshes low density and you get a lot of control over edge flow with this method. That being said, different methods work for different people...I just happent to like this one.
I use this method throughout my entire model until I end up with a full model that I feel will work well for my sculpting base. Keeping the basic shapes of muscle groups and bones in mind, how the model will deform once it's reduced to it's low poly form and most importantly how it will hold up in ZBrush ones I started sculpting away. I divide up the model into seperate pieces so that ZBrush will be able to subdivide them to the level that I want. You can see where I split the mesh based on the colour differences in the example below.
After splitting the model into different pieces, I export them as OBJ files. I open up ZBrush and import the object that I want to start sculpting, usually the first part is the head. I used ZBrush 2 for this character as ZBrush 3 wasn't available at the time.
Because characters are a case by case thing, I can't really say how far to take your own project. It all depends on
how much time you have, the style you're going for, map size, etc. If you have a large normal map allowance (such
as 2048x2048), getting into the finer details may not be a bad idea. If your time is limited you have have to just focus on the bigger forms and leave the finer details for Photoshop.
My workflow is pretty straightforward. I block out the detail that I want and then up the levels of subdivision as needed to add finer detail. Using the head as an example, I roughed out bigger shapes like the brow, lips, bones around the sye and side of the head and the ribbed skin on the neck. After that I just kept refining the shapes, tightening it up and making sure that it wasn't too blobby. Towards the end I added finer details that I thought would translate very well in the normal map such as the marks on the lips, divots in the skin and scars.
You can see how far I decided to take the indivdual pieces here:
Once I called the objects finished, I went to their lowest subdivision level and exported the tool as an OBJ. If no drastic changes happened to the mesh, I ignored this step but it's always a good habit to make sure your low poly model will match as close as possible to the high poly mesh.
Low Poly Modeling
I then imported all of the OBJs, if their pivot points weren't changed they should all be placed properly. Now, depending on how you clean you built your base mesh and what you will need the model to do in game, you should easily be able to use this model to make an in game asset. I didn't have to rebuild any of my mesh, reducing it to a low poly model was fairly easy. Selecting edges that didn't add to the silhouette, weren't needed for deformations during animation and still keeping enough geometry to help maintain the illusion that the model wasn't as low poly
as it actually was. It's very important to keep in mind that even though your model is low poly, it must still hold enough shape to not give itself away. For example, make sure that things like the shape of the head and shoulders still have enough geometry to still appear rounded...otherwise it will be very obvious and all that work to make your character look "next gen" will be wasted. So, the key is to find a good balance between technical limitations and maintaining your character's original shape.
If you notice any vertices out of line that are causing the edge flow of your model to look messy, be sure to clean them up. I think usually you can just select the vertices and move them into an appropriate spot..but if the area is just too messy it may be quicker to delete the faces and just rebuild a cleaner version of the area.
After reducing my mesh and tweaking it, I wound up with this. His total triangle count was 4726. The competition limit was 5000.
I think unwrapping characters has been covered plenty of times in the past and I'm not sure if I could add much more to the subject. Things to avoid are overlapping UVs and mirrored UVs unless, of course, the engine you're using allows for this. I unwrapped Leviathan to be totally unique, that means no overlapping UVs and no mirrored sections. The reason for this is that when I generated my normal maps, I didn't want there to be any fighting. I wanted each section to have it's own normal mapped details (as there weren't many areas that could be repeated.) I had enough room to make this happen but if you find yourself restricted to a smaller budget or just want to devote a larger space to a different parts of your model, overlapping UVs will be fine. Just make sure that they are offest before you generate your normal map, otherwise the normal map for that area will look like vomit.
You can see in the image below how I laid out my UVs.
Creating The Initial Normal Map
This step should be fairly quick although it can become tedious with changing settings and doing tests. Making sure that my character model's pivot was set to 0,0,0 (the same as the exported pieces and therefore the ZBrush tools) I exported the entire model as an OBJ. In ZBrush, I opened up one of the tools that I was working on and went to it's lowest subdivision level. After that I opened up ZMapper, set the configuration to 3D Studio Max Tangent Space, opened the projection tab, set the "Raycasting Max Scan Distance" to an appropriate level and then captured the mesh.
After this, I left ZMapper, deleted the higher subdivision levels of the tool and imported my Leviathan OBJ (the one that is the entire character.) Obviously, this object is much bigger than the previous one as it contains all of the parts, but if the pivot points are the same the model should just pop right into place. I assigned a new texture to the model, one that was 2048 x 2048 and went back into ZMapper. Everything looked fine, I could see the cage of my previous model over the correct areas on the new object. If for some reason this doesn't work for you, you may need to change the pivot points of the new model or clear ones in ZBrush. With the samples set to it's lowest level, I generated the projected normal map. I had to tweak the raycasting limit a bit to make sure my normal map had all of the detail I wanted..this means that I had to go back a few steps and recampture the mesh. After everything was looking fine, I upped the sample limit and generated the normal map yet again. After all of that, I exported the texture as a PSD. I repeated this process for every individual tool I made (the head, body and legs.)
After I exported all of the different textures, I opened up Photoshop and brought all of the different PSDs into one image. I selected deleted the white areas (areas that are not actual detail used in the normal map) and then layered the images as needed. If areas overlapped in the normal map where they shouldn't, I just erased them out. For example, because I used the entire low poly model to generate the normal maps but only certain high poly areas as the target, there will be overlapping information in the textures. This will really only happen around the seams of your object where you split them for ZBrush importing. In my case it happened around the neck and legs, it was fairly easy to just erase or delete the areas that I didn't need. After all of that was done, I made a grey layer and ran the nVidia normal map filter on it. I used this as the base layer for the normal map.
After all of this, I finally saved it as my normal map in TGA format and applied it to my character in Max.
Texturing Leviathan was the biggest challenge for me as he is mostly hand painted and I usually photosource most of my textures. It was really tough to find photo examples of exactly what I wanted and I really wanted to try a different approach to texturing.
I began by creating a lightmap of my character in Max. I setup a few omni lights and baked out a map using Max's render to texture feature. Once I had a result that I liked, I saved it out as a TGA and brought it into Photoshop and
set the layer to soft light. From there I started painting the base colours of Levithan's skin colour and worked my way up from there, using the lightmap as a guide for colouring. I went with a yellow colour for his underbelly and exposed skin and painted layers of reds and purples ontop of that using a scattered brush (Unfortunately, I've forgotten the origin of this brush but have attached an image of it in the brush roll out menu to give you an idea of it's pattern.) I
kept working at that by adding different red and blue tones into the skin to give it some variation. I did the same thing for the yellow skin, just with purples and browns. I usually work with a lot of layers in my texture so that I can change them as needed, I find that it gives me more control as I'm working. Once I'm happy with the results, i just merge the layers together. Throughout the skin I added darker chunks where I thought some harder scales should be and also some lighter colours where I thought battle damage or just general wear and tear could have happened. Once I was happy with the colouring, I took a photo of snake skin, desaturated it and used it as an overlay for the yellow skin. I
set it's opacity level very low and erased areas away to break up the surface.
As I was working on the diffuse texture, I took layers that I think would benefit from being normal mapped (such as cracks and scars) and duplicated them. Once I duplicated them, I desaturated them and changed their colour to either white or black depending on if it was intended to go in or out. Afte rthis, I merged it with a neutral grey layer and ran the nVidia photoshop filter. I then set the layer to overlay and changed the opacity as needed. I would never use this filter to create a final normal map for your character as it won't give you the same results as ZBrush or a 3d application generated map could..but it's very handy for adding fine detail layers to your initial normal map.
I used this same method for creating my spec map. I began with a desaturated version of my diffuse map and played with it's brightness and contrast. Because this won't always give accurate results for the material you are working with, adjustments are usually always needed. I took the individual layers of my diffuse texture and brought it over to my spec map,desaturating it and adjusting it's brightness as needed. I find that this gives beeter results in your spec map as you have more control over every part of your texture rather than just giving it all the same level of brightness and contrast. It is common to give your spec map a colour to help emmulate the material you are trying to create. This is fine if the engine you are working with supports this but out of habit I usually use a black and white spec map as the engine that I usually work with recognizes the spec map as the normal map's alpha channel.
I usually paint all of my textures at double the resolution and scale them down to the appropriate size once I'm finished with them. The reason for this is that it is much easier to scale down art than it is to scale up. If later on down the road you need a higher resolution texture for your model due to changes in the project, you're already prepared and don't need to scale up art and try to make it look good. Of course, in a perfect world budgets are set and followed to the pixel...but the world's not perfect and it's always good to be prepared.
I only needed limited functionality for this character's right. The purpose was to create a simple pose and it wasn't neccessary to create a rig that could be animated. So, all I really needed was an easy way to smoothly move the mesh around and get it out of it's modeled pose. To do this I created a series of bones (found in 3dstudio Max in the Create> Systems> Bones) and placed them where they were needed in my character. As you can see in the picture I placed them running along the head, down the spine, clavicle, arms, fingers, legs, feet and tail. I attached each section accordingly using the spine as a base (Bone01.) I parented the clavicle bones to Bone05 in the spine, the arm bones to the clavicle and the hand bones to the forearm bone. I attached the root of the tail bone, bone20 to bone01 and the leg bones to bone01. I then set an envelope to include all of these bones and altered the weighitng as needed. Obviously this system wouldn't work for decent animations, but it was enough to manipulate the character into a different pose for rendering and was rather quick.
Originally I wanted to make the creature look as though he was swimming through the wter but, after scheduling out time and thinking about his scale, I scrapped the idea. It would have been too risky to attempt an underwater scene and also convey his scale. So, I went with an alternative idea. I decided to make a muddy pedestal for him to stand on and have the smaller human model appear as if he has just encountered him. The intention was to have the ground appear as though it were dried up land, a place where it could have once been covered in water and possibly forced Leviathan on to the land.
Creating the pedestal was fairly simple, I created the rough shape for it underneith Leviathan and marked with geometry where his footprints would be while still trying to keep the mesh as clean as possible. Once this was done, I imported it into ZBrush and went crazy with sculpting. There was no poly limit for the base so I just imported it back into max once I was done sculpting and applied a large dirt texture to it. Very quick and dirty, but I think it did the trick
Lighting Setup and Rendering
Having good lighting on your model is very important, I attempted multiple setups and final decided on this one:
Granted, this was one of the fnal attempts at different lighting setups. I've found that lighting really is a trial and error type of thing....setting the mood for your character and finding the right balance of showing enough of your detail but not blowing it out. To create this setup, I used all omni lights. I wanted to setup contrast using blue and orange lights so I created one omni light, moved it to the high left of my character, set the intensity to 0.9 gave it a white colour and enabled the shadows. I created another omni light, put it to the righ tof my character, set the intensit to 1.307 and gave it an orange colour. To create the blue contrast I created another light, gave it a blue colour and set the intensity to 0.4. I created the final light, put it to the back of my character, gave it a bright blue colour, a higher intensity (1.5) and enabled it's shadows.
After I was happy with my lighting setup, I rendered off my image as a PNG file and placed it overtop of the template I had created in Photoshop.
I had a lot of fun making this character and hope that this Making Of article helps you out at least a little bit. If you have any questions or comments please feel free to fire off an e-mail to me.
Click Here To Download High Resolution Image
To see more by Gavin Goulden, check out 3D Masterclass: The Swordmaster in 3ds Max and ZBrush