Introduction
The Dominance War is an annual game art character competition involving many different forums worldwide. This year, the choices of races you could create were Demon, Machine and Norm (basically anything NOT a machine or a demon and wielding a magical item) and then a series of classes within those races. Though my first instinct was to make the biggest, meanest demon I possibly could... I really wanted to challenge myself this year; go beyond my comfort zone and do something that wasn't a safe choice for me. So I decided on "Bishop."In this article, I will attempt to cover the various different steps of his creation, from concept to final render. I've also included three accompanying movies, which can be found at the end of the article.
Concepts
When the competition started, I had NO idea what I wanted to do. There were many different ideas floating around in my head, but nothing that really called out to me. Using the program "Alchemy" I started cranking out a bunch of different rough thumbnails that could represent the character designs I had in mind. This worked out really well because it mean that I spent very little time getting hung up on details and would know fairly quickly if a design was going to be "the one." After taking some time to consider each (and with some helpful feedback from my forum mates) I decided to take the chunky, gun wielding cleric a little further (Fig.01 & Fig.02).
Fig. 01
Fig. 02
Base Mesh
To start off, I created a basic, human, male mesh that was constructed of all quads (polygonal faces with four edges) with a moderate amount of detail. Generally, this is the resolution I strive for when creating base meshes; enough detail to show bigger shapes like the biceps and pecs, but not so much detail that it will cause problems during sculpting. In past characters I have modelled details such as nostrils, fingernails and abdominal muscles. Modelling these areas into your base mesh can cause problems down the line if you need them, because you end up with more geometry to deal with within a given area and, if you have to adjust these areas, it can make the topology of your model more complicated. ÂThere are a few reasons why I modelled my base mesh to this level:
I didn't have a full concept for Bishop, so I knew a lot of the work would be done on the fly and that I would end up "going with the flow". If the base mesh was too detailed, or if I tried to model everything out in Max right away, I would end up causing roadblocks for myself in the future. Limiting myself to a certain layout right from the beginning could have hindered possible design choices.
Speed. I work much more quickly in ZBrush than I do in Max, so it makes the most sense to me to just rough in what I need in Max, mostly just for placement, and then go crazy with pushing and pulling details in ZBrush until I'm happy with the model.
Generally for all of my modelling in Max, I use the edge extrusion method. This basically consists of creating a plane, creating an instance of that model, mirroring it in the X axis and then starting to model away. At this stage, it is all about form rather than edge flow. The purpose of this mesh is to be clean and give a solid enough base to sculpt from (Fig.03).Â
Fig. 03
As you can see in Fig.04 below, I went through various body shapes before hitting on one that I felt confident with. Originally, the body shape for Bishop was looking very "generic", like an overweight man you'd see in an everyday situation. This, however, was the Dominance War universe...pushing things to the extreme was almost mandatory! After a little more pushing and pulling in Max with soft selection and lattices, I came up with the final body shape. This made his look more dynamic, though slightly cartoony. I felt his massive upper body, offset by the undersized lower body, created a nice contrast that really pushed his heavy weight status over the top. In future stages, you'll see that I pushed the weight more towards his shoulders and trimmed down his gut even more.
Fig. 04
Sculpting
From here, I just exported the OBJ of my character and imported it into ZBrush.Using the Standard and Claytube brushes, in combination with a set of alphas that I like to use, I began roughing out the muscles and major landmarks of the character. The standard brush, as I'm sure you have noticed by now, is useful for adding a large amount of volume to your model. In some cases, however, this can become destructive and in it's place I'll switch over to the Claytubes brush (Fig.05).
Fig. 05
I try to treat sculpting as much like the traditional medium as possible, by which I mean that I build up the bigger shapes, step by step, and then move into the finer details. At this stage, I also began playing with ideas of how Bishop's face would look (Fig.06).Â
Fig. 06
As mentioned earlier, I had no official concept for Bishop and, for the
most part, just played everything by ear. I had a decent idea of the
gear that I wanted him to have, but had to build it in 3D before a
decision could be made. A nice way to go about this, I found, was to
sculpt a very rough version of it on my model in ZBrush, combined with
building objects out of very primitive models like cubes and cylinders
in Max. This helped me to block in details and know almost instantly if
an idea was going to work. The workflow for modern game art has evolved
to a stage where, even though concepts are very important in solid
character design, they are no longer tied to being in 2D. Quick "speed
sculpts" can be used as not only a concept, but even a base for your
final model to start from. At this stage I also began thinking about
what colours I would use for Bishop. This was done by bringing a
screen shot of my ZBrush model into Photoshop and simply painting over
the model. Not only does this help visualize what the final product
will be like, but it also helps break up the materials and helps your
eyes separate these different sections (Fig.07 & Fig.08).
I then began modelling out sections of the armour in Max and imported them as subtools into ZBrush. In Fig.09, you can see that I built these plates using an optimized export of my character's base as a guideline for where the plates should go. I repeated this for all of the armour plates and, practically, all of the gear on Bishop.
Fig.10 will give you a rough idea of how far I took my base mesh models. Generally, I blocked out the rough shape in Max and then brought up the details in ZBrush. Things like bolts and cloth wraps were floating subtools so that, if I were to change my mind about them, they could easily be removed.
Using the same methods as mentioned in previous steps, I began working on the details. Starting with the shoulder pad, I tested out how high frequency detail would look at this scale, attempting to give the final sculpt an embossed "death" theme (Fig.11).
I carried this style throughout all of Bishop's armour plates and touched up his under-armour by adding more detail that would be created not only by his weight and the shapes underneath, but by the armour pieces added on top. All of the armour detail was painted by hand and, other than the alphas previously mentioned, no stencils or alphas were used. The reason for this is that I really wanted to sell the idea that this armour was forged specifically for him, like a one of a kind ornate piece of work, and in order to do this I felt that the detail needed to be produced manually and not generalized by a set of skull alphas (Fig.12 - Fig.14).
Once the chain gun was completed, I began refining Bishop; adding things like the tech eye patch and reworking areas like his cape and facial detail (Fig.16 & Fig.17).
The game resolution version of Bishop wasn't necessarily animation ready, as the goal here was more or less to get a mesh that would retain the details of the high poly mesh (keeping rounded edges, same rough silhouette, etc.) and still be under the budget assigned to us for a polycount, which was 10,000 triangles.
Some rules that I did keep in mind regarding animation, mostly for the sake of being able to pose the character, were to leave enough geometry in organic joints to deform properly (basically two or three loops for the elbows and fingers, in theory weighting each edge loop to a bone so that the joint in question retains shape when it bends). For inorganic joints like the knees, I simply split the mesh in these areas and capped off the holes. This would cause the shins to basically rotate around the "kneecap", crashing through the piece of geometry that makes the upper leg. Normally, this wouldn't be ideal for organic characters, but since this character was heavily armoured and made of hard surfaces, which didn't need to deform, this approach worked fine and took up less triangles.
By keeping the legs as separate meshes, I could also benefit from having their detail mirrored without having to worry about awkward seams or obvious symmetry, since it was a minor part of the character compared to other elements (Fig.19).
In the end, with a bit of hacking away at the mesh to cut edges wherever I could, Bishop came out to be 10,000 triangles exactly (Fig.20).Â
The answer was to turn to a trusty freeware application, Xnormal. With the latest update, a feature has been added to take a lot of the guesswork out of the baking within the program. Tools> Ray Distance Calculator allows you find the Minimum and Maximum numbers you will use when baking your maps. This is very similar to setting up a cage in Max/Maya but can be less precise. That being said, it is also a lot faster and can probably bake out multiple tests in the time it would take Max/Maya to do just one.Â
Xnormal doesn't handle large, complicated meshes very well, so I split the model up into manageable pieces to get the maps baked out properly. In the end, I think my total number of pieces/bakes was around 20. Basically, I would load in a high poly model under the high poly mesh tab, load in the low poly version of the model in question under the low poly mesh tab (for example: head_hp > head_lp), go to the Calculator under the tools tab and press "Go". Giving the program about 30 seconds to calculate, I took the Minimum/Maximum numbers provided and entered them into the ray casting limits for the low poly mesh. I also made sure that the low poly mesh had "Average Normals" selected rather than "Use Exported Normals." The reason for this is that hard edges can cause lighting errors in your normal maps and, since essentially a normal map is a way to provide lighting information on top of a lower poly mesh, it is best to avoid hard edges that could kill that illusion. Average Normals basically applies, in Max terms, one smoothing group to your model or, in Maya terms, softens all of the edges. This is also ideally how you should be viewing your model in your 3D application and in game engines.Â
From there, I gave names to the textures I'd baked, such as "head_bake_" (this was very important as I was dealing with a lot of different bakes so a non-descriptive name could have ended up causing confusion) and with Normal Map and Ambient Occlusion checked, I set my output resolution to 2048x2048 (after a few smaller test bakes to make sure my raycast numbers were accurate) and clicked Generate Maps.Â
For my normal map settings, I used the default Tangent Space + XYZ as, from what I can tell, these are the usual settings for most apps and engines... or if they aren't, as in the cases of Max or Unreal, then the app or engines usually have options to invert the channels fairly quickly. Depending on your needs you can also alter the settings for your AO bake.
Once I had everything baked out, I cut and pasted areas that I would use from my various baked textures to create one normal map texture and one ambient occlusion texture. The end result, when applied to the character in Max, looked something like this (Fig.22).
From here, with the help of much welcomed feedback from friends, coworkers and forum mates, I started playing further with different base colours (Fig.23 - Fig.25).Â
Once I'd settled on one, I began refining the details of my texture by subtly painting in highlights, shadows and grime into the texture. For the dirt and grime I used a series of Photoshop brushes I have collected over time or, in the case of the brass metals, used photo overlays of metal images.
While I was texturing my diffuse (colour) texture, I was also creating my spec map. Many people will create a spec map from a desaturated version of their diffuse map; while this can work, it isn't ideal. Within your diffuse map you will have colours that aren't necessarily relevant to their material property, so if you desaturate your texture and adjust it from there, the detail will be too generalized throughout your map. For example, if you have dark green metal within your texture, and you want it to be nice and glossy, and you were to take it's section of the diffuse text and desaturate it for spec map use... it would just end up being black and flat in-game. Ideally, you should create highlights for it that will only be used within the spec map, like a nice, strong, white highlight that isn't necessarily in your diffuse texture. I tend to brighten up areas in my diffuse texture that would normal receive more light and cause sharp highlights, like the skulls on Bishop's metal plates, as I find it pops the detail off of the similar coloured background. Be careful with this though as if it is too white then it will not light properly and can end up appearing blown out or flat (Fig.26).
At the later stages of my texturing, I also began to consider different rendering solutions and how I would want to present my final image. I knew from the beginning that I wanted to be more of a purist, not relying on high end rendering software but instead, presenting my final images exactly how they would appear in game. Afterall, this was a game art competition, so I chose to use the Marmoset Engine (via the Marmoset Toolbag freely distributed by 8 Monkey Labs.)Â So, towards the end I began quickly viewing my changes in this rather than in Max as it was closer to what my final image was going to be (Fig.27 & Fig.28).
Near the end of texturing I also started to paint out obvious seams, like on top of the head. I did this by importing my mesh into ZBrush and, using the ZApplink plugin, painting out my seams through the screenshots in Photoshop that ZBrush provided. Since I had no overlapping geometry in these areas, I generally had nothing to worry about. For painting seams on areas that are overlapping, such as mirrored arms and legs, I suggest just deleting the overlapping faces on one side.Ffor this purpose, paint out the seam on just one half and everything should be fine on your original model that had mirrored elements (Fig.29).
Once my diffuse was finished, I grabbed the flattened TGA, desaturated it and ran the nVidia Photoshop filter to create a dudv map that I then set to overlap and to a low opacity. I find this helps to incorporate finer details that have been painted into the texture and that aren't in the high poly model that you baked the normal map from originally. Be careful of this, however, as much like the spec map workflow, some areas won't necessarily translate the way you want them to. Generally speaking, anything dark will appear to be sunken in and anything light will appear to be raised. You may need to manually split up certain areas for this purpose (such as nuts and bolts, perhaps) and create their normal map overlays separately or, if you feel the detail is not needed, just erase it from the overlay layer using a feathered brush to not cause awkward lines between fine detail and no fine detail.
For the cracks in the titles, I created an alpha in Photoshop using a photo of damaged stone and imported it into ZBrush. From there, under the Alpha tab, I selected "Make St" which turns the selected alpha into a stencil. I could now freely move my model around on screen and any detail that I added or subtracted would be controlled by the stencil I had created (Fig.30).Â
Once your alpha is applied as a stencil, make sure to disable the alpha on your brush as this can cause some weird results. Basically, you'd be painting detail with a tip shaped like your alpha over a stencil caused by your alpha. I get the best results by just using a standard brush with the stencil created. Also, you can move/scale/rotate your stencil around. Just press Space and follow the onscreen instructions!
Once I was done with my highpoly pedestal model, I baked down the information (normal and AO, like in previous steps) and textured it with photos of stone and mud, adding extra grime to the edges of the tiles to blend them into the ground.
I imported my model as separate pieces, basically as just one OBJ file, but split into separate meshes within Max. A trick to control alpha sorting in Marmoset is to make sure that the alpha'd image is the last object in the stack (on the right hand side of Marmoset, these objects are listed.) To do this, I would export my OBJ files separately (Bishop_body, Bishop_pedestal, Bishop_fx and Bishop_loincloth) and then import them into a fresh scene in the order previously listed. Then, with all of these OBJs imported, export them again as just one OBJ. This seems to retain the order and when imported into Marmoset, then the objects will be listed in this way; I assume there's something under the hood that I don't fully understand that cause this.
Once all of my models were imported, I created a few materials - one for the actual character textures (normal, spec, diffuse), one for the pedestal with pretty much the same properties and one for the FX - and then applied them accordingly.
To take a screenshot of my scene, I first set the screenshot resolution by pressing the ~ key to bring up the console and typed in "set screenshots #" with # being the biggest number that my video card could handle. Then I pressed F10 to drop a screenshot of my scene into Marmoset's root folder. I ran a few tests before finding a number that would work because if the number is too high, the video card won't support it and will just spit out a black image.
To get my glow FX working, it was sort of a hack, which is a known issue for Marmoset. I basically just had to apply the FX material with a custom alpha channel that culls out the non-glowing parts of my model, take a screenshot of that and apply it over the top of my original screenshot using a screen blending mode.
After I had all of my images ready, I created a fancy border to use on all of my images for consistency and saved them out (Fig.31 - Fig.36)!
Multiple style changes - Due to having no solid concept, I bounced back and forth between a few different ideas. Mainly feeling as though I wasn't pushing myself hard enough creatively, I ended up reworking major areas of the character multiple times and practically scrapping the idea of a soldier with lots of gear in favour of a more armoured soldier with moderate amounts of gear. I lost days on things like the holy hand grenade and the gauntlet. In the end, any change I decided on was for the best, but it still caused problems that could have been avoided by spending just a little more time on concept work.
Working against my budget - Even though I am very proud of the way this piece turned out, the technical side of me sees faults. Due to technical limitations, I had to cram a lot of things into the texture that would normally rely on geometry. The biggest victim of this are the bullets on the chest; basically if the torso twists at all, the bullets will stretch. In an ideal situation, these would have been handled with geometry and would have allowed me to make a more dynamic pose.
Download Movie 1 - 3 mins 17 seconds - 45mb
Download Movie 2 - 13 mins 3 seconds - 204.2mb
Download Movie 3 - 2 mins 21 seconds - 51.2mb
Subtool / Transpose Master / ZApplink (http://www.pixologic.com/zbrush/downloadcenter/zplugins/ ) - The ZBrush community has tons of plugins for you to use. These three, which are more of a formal release, made my life much easier by easily manipulating the amount of detail I had in my character.
Quicksave (http://www.zbrushcentral.com/zbc/showthread.php?t=49080) - Another ZBrush plugin. I have always been annoyed by ZBrush's prompts that it gives when saving. I assigned my save and sequential save keys to overwrite the original ZBrush hotkeys. This has actually made my workflow faster as I no longer need to dig around in folders to find where I saved, be bothered by pop-ups or misplace one of my models in a different folder (which had happened to me before!)
XNormal (http://www.xnormal.net/ ) - Â I rave about this application all the time. It's probably the best solution for baking out normal maps based on it's speed and limited stress put on your machine. Support by the developer is unbelievably quick, open and generous.
Marmoset Toolbag (www.8monkeylabs.com/toolbag/toolbag_install.exe) - The guys at 8 Monkey provided the community with access to their amazing tools and let many of us, myself included, use it freely to display our work for Dominance War and other personal efforts. Easily one of the best tools I've ever used and definitely worth checking out as an alternative to something like the Unreal Engine for viewing models.
Slickjot / Slickrun (http://www.bayden.com/SlickRun/1033/SlickRunHelp.htm ) - A handy little application for writing down quick notes. Save a tree!
Xoliul's Max Viewport Shader (http://laurenscorijn.com/projects/viewportshader/) - A nice viewport shader with many features that, I think, really helped me translate what I was creating in Max into what a game engine would produce.
Nynedown, EVIL, AcidLehmann, Wicked - J, ParoXum, ThatDon, Indian_boy, Xaltar, AimBiz, Frump, kite, killingpeople, Bobo_the_seal, Ravenslayer, binopittan, vahl, Blaizer, jox, Slipstream, PeterK, warriah, caseyjones, Aftermath, seforin, Ged, Jackablade, LoJack, Kamui, pestibug, haZe, solar, coldkodiak, r4ptur3, bounchfx, konstruct, kendo, IronHawk, Inpw, Mezz, Shagrath, kessler, DKK, Vrav, fightpunch, SupRore, Helixx, ericdigital, kary, jbrophy, StefanH, notebookguy, spacemonkey, Neox, Spark, JFletcher, morte, wicz, meshiah, nutsy, gaganjain, Slum, moose, onelung, newman3d, dur23, Davidskiwan, foreverrendering, MoP, woogity, conte, Aravindan, kipiripi, orpheus85, mifflefish, gavku, Ferg, muppet man, Beltann, The_Kozmonaut, catstyle, bahamutnemesis, kongni, Crash, TBone, Rick Stirling, Marshal Banana, 408, Bummer6, Slingshot, bilbana, Parnell, BlackNull, Cody, firebert, lupi, rv_el, HntrLuc, 8FtSpider, wassum, Pixel Masher, culpin, ScudzAlmighty, Stinger 88, Lazerus Reborn, Skiffy, Chai, crazyfingers, EricV, Marnik, Mongrelman, RITORIAN, Josh_Singh, Jeff MD, 55joe, SHEPEIRO, Kzo, NiGHTS2o06, woods, Dreamer, FeralGrin, nrek, Zatoichi, Gonzo, Demotion, frubes, Spug, polysmooth, aesir, Abe_hokage, Eclipse, EarthQuake, ghost-d, ocarian, iatriki, butt_sahib, merecraft, Diwan, StJoris, zerafian, kite212, engelik, Jeremy-S, Rens, rasmus, Kovac, mikezoo, rollin, jermey price, onionhead_o, Sephiel, Rory_M, clee101, Snefer, katzeimsack, Pussik, dehebo, Hatred, claydough, fly_soup, jocz, jim_sam, Target_Renegade, cashfire, TWilson.
Your feedback was very important to me and was a key factor in motivating me to cross the finish line. Thanks.
Fig. 07
Fig. 08
I then began modelling out sections of the armour in Max and imported them as subtools into ZBrush. In Fig.09, you can see that I built these plates using an optimized export of my character's base as a guideline for where the plates should go. I repeated this for all of the armour plates and, practically, all of the gear on Bishop.
Fig. 09
Fig.10 will give you a rough idea of how far I took my base mesh models. Generally, I blocked out the rough shape in Max and then brought up the details in ZBrush. Things like bolts and cloth wraps were floating subtools so that, if I were to change my mind about them, they could easily be removed.
Fig. 10
Using the same methods as mentioned in previous steps, I began working on the details. Starting with the shoulder pad, I tested out how high frequency detail would look at this scale, attempting to give the final sculpt an embossed "death" theme (Fig.11).
Fig. 11
I carried this style throughout all of Bishop's armour plates and touched up his under-armour by adding more detail that would be created not only by his weight and the shapes underneath, but by the armour pieces added on top. All of the armour detail was painted by hand and, other than the alphas previously mentioned, no stencils or alphas were used. The reason for this is that I really wanted to sell the idea that this armour was forged specifically for him, like a one of a kind ornate piece of work, and in order to do this I felt that the detail needed to be produced manually and not generalized by a set of skull alphas (Fig.12 - Fig.14).
Fig. 12
Fig. 13
Fig. 14
Using the same techniques, I began building Bishop's weapon: a giant chain gun (Fig.15).
Fig. 15
Once the chain gun was completed, I began refining Bishop; adding things like the tech eye patch and reworking areas like his cape and facial detail (Fig.16 & Fig.17).
Fig. 16
Fig. 17
Low Poly Modelling
Once I was happy with my high poly sculpt, I dropped down the sub division levels and brought the various pieces into Max. From here I either built an entirely new mesh around the high poly model or reduced the imported high poly model to a state that was game engine friendly (Fig.18).Â
Fig. 18
The game resolution version of Bishop wasn't necessarily animation ready, as the goal here was more or less to get a mesh that would retain the details of the high poly mesh (keeping rounded edges, same rough silhouette, etc.) and still be under the budget assigned to us for a polycount, which was 10,000 triangles.
Some rules that I did keep in mind regarding animation, mostly for the sake of being able to pose the character, were to leave enough geometry in organic joints to deform properly (basically two or three loops for the elbows and fingers, in theory weighting each edge loop to a bone so that the joint in question retains shape when it bends). For inorganic joints like the knees, I simply split the mesh in these areas and capped off the holes. This would cause the shins to basically rotate around the "kneecap", crashing through the piece of geometry that makes the upper leg. Normally, this wouldn't be ideal for organic characters, but since this character was heavily armoured and made of hard surfaces, which didn't need to deform, this approach worked fine and took up less triangles.
By keeping the legs as separate meshes, I could also benefit from having their detail mirrored without having to worry about awkward seams or obvious symmetry, since it was a minor part of the character compared to other elements (Fig.19).
Fig. 19
In the end, with a bit of hacking away at the mesh to cut edges wherever I could, Bishop came out to be 10,000 triangles exactly (Fig.20).Â
Fig. 20
Unwrapping
I really did nothing special when it came to unwrapping Bishop. I used all of the standard tools in Max with no additional plugins. Basically, using a series of projections, I laid out UV islands and stitched them together, trying to keep any seam at a natural seam within the character (for example, where the head met the collar) or in places that were fairly hidden (such as the inner legs) (Fig.21).
Fig. 21
Baking Maps (Xnormal)
I tried multiple times to import my high poly models into Max with the intent to bake out normal and ambient occlusion maps, but the files were just too heavy for my computer to handle. With all of the pieces involved it would have been a huge headache to bring all of these pieces into Max, crunched down or not, and take the time to render out the needed textures.The answer was to turn to a trusty freeware application, Xnormal. With the latest update, a feature has been added to take a lot of the guesswork out of the baking within the program. Tools> Ray Distance Calculator allows you find the Minimum and Maximum numbers you will use when baking your maps. This is very similar to setting up a cage in Max/Maya but can be less precise. That being said, it is also a lot faster and can probably bake out multiple tests in the time it would take Max/Maya to do just one.Â
Xnormal doesn't handle large, complicated meshes very well, so I split the model up into manageable pieces to get the maps baked out properly. In the end, I think my total number of pieces/bakes was around 20. Basically, I would load in a high poly model under the high poly mesh tab, load in the low poly version of the model in question under the low poly mesh tab (for example: head_hp > head_lp), go to the Calculator under the tools tab and press "Go". Giving the program about 30 seconds to calculate, I took the Minimum/Maximum numbers provided and entered them into the ray casting limits for the low poly mesh. I also made sure that the low poly mesh had "Average Normals" selected rather than "Use Exported Normals." The reason for this is that hard edges can cause lighting errors in your normal maps and, since essentially a normal map is a way to provide lighting information on top of a lower poly mesh, it is best to avoid hard edges that could kill that illusion. Average Normals basically applies, in Max terms, one smoothing group to your model or, in Maya terms, softens all of the edges. This is also ideally how you should be viewing your model in your 3D application and in game engines.Â
From there, I gave names to the textures I'd baked, such as "head_bake_" (this was very important as I was dealing with a lot of different bakes so a non-descriptive name could have ended up causing confusion) and with Normal Map and Ambient Occlusion checked, I set my output resolution to 2048x2048 (after a few smaller test bakes to make sure my raycast numbers were accurate) and clicked Generate Maps.Â
For my normal map settings, I used the default Tangent Space + XYZ as, from what I can tell, these are the usual settings for most apps and engines... or if they aren't, as in the cases of Max or Unreal, then the app or engines usually have options to invert the channels fairly quickly. Depending on your needs you can also alter the settings for your AO bake.
Once I had everything baked out, I cut and pasted areas that I would use from my various baked textures to create one normal map texture and one ambient occlusion texture. The end result, when applied to the character in Max, looked something like this (Fig.22).
Texturing
Using my UV map and AO bake as a guide, I began blocking in colours for my character. Not only did this help me realize what the character would look like with the colour schemes I had planned, it also helped me to set up easy selections for different materials that I could use later on to help speed up the texturing process (Fig.22).
Fig. 22
From here, with the help of much welcomed feedback from friends, coworkers and forum mates, I started playing further with different base colours (Fig.23 - Fig.25).Â
Fig. 23
Fig. 24
Fig. 25
Once I'd settled on one, I began refining the details of my texture by subtly painting in highlights, shadows and grime into the texture. For the dirt and grime I used a series of Photoshop brushes I have collected over time or, in the case of the brass metals, used photo overlays of metal images.
While I was texturing my diffuse (colour) texture, I was also creating my spec map. Many people will create a spec map from a desaturated version of their diffuse map; while this can work, it isn't ideal. Within your diffuse map you will have colours that aren't necessarily relevant to their material property, so if you desaturate your texture and adjust it from there, the detail will be too generalized throughout your map. For example, if you have dark green metal within your texture, and you want it to be nice and glossy, and you were to take it's section of the diffuse text and desaturate it for spec map use... it would just end up being black and flat in-game. Ideally, you should create highlights for it that will only be used within the spec map, like a nice, strong, white highlight that isn't necessarily in your diffuse texture. I tend to brighten up areas in my diffuse texture that would normal receive more light and cause sharp highlights, like the skulls on Bishop's metal plates, as I find it pops the detail off of the similar coloured background. Be careful with this though as if it is too white then it will not light properly and can end up appearing blown out or flat (Fig.26).
Fig. 26
At the later stages of my texturing, I also began to consider different rendering solutions and how I would want to present my final image. I knew from the beginning that I wanted to be more of a purist, not relying on high end rendering software but instead, presenting my final images exactly how they would appear in game. Afterall, this was a game art competition, so I chose to use the Marmoset Engine (via the Marmoset Toolbag freely distributed by 8 Monkey Labs.)Â So, towards the end I began quickly viewing my changes in this rather than in Max as it was closer to what my final image was going to be (Fig.27 & Fig.28).
Fig. 27
Fig. 28
Near the end of texturing I also started to paint out obvious seams, like on top of the head. I did this by importing my mesh into ZBrush and, using the ZApplink plugin, painting out my seams through the screenshots in Photoshop that ZBrush provided. Since I had no overlapping geometry in these areas, I generally had nothing to worry about. For painting seams on areas that are overlapping, such as mirrored arms and legs, I suggest just deleting the overlapping faces on one side.Ffor this purpose, paint out the seam on just one half and everything should be fine on your original model that had mirrored elements (Fig.29).
Fig. 29
Once my diffuse was finished, I grabbed the flattened TGA, desaturated it and ran the nVidia Photoshop filter to create a dudv map that I then set to overlap and to a low opacity. I find this helps to incorporate finer details that have been painted into the texture and that aren't in the high poly model that you baked the normal map from originally. Be careful of this, however, as much like the spec map workflow, some areas won't necessarily translate the way you want them to. Generally speaking, anything dark will appear to be sunken in and anything light will appear to be raised. You may need to manually split up certain areas for this purpose (such as nuts and bolts, perhaps) and create their normal map overlays separately or, if you feel the detail is not needed, just erase it from the overlay layer using a feathered brush to not cause awkward lines between fine detail and no fine detail.
Pedestal
Creating the pedestal, though fairly straightforward and simple, is a difficult phase. It usually comes at the end of the project when your steam is running out and you all of a sudden have to create a new asset. For Bishop I just wanted to create something basic; I didn't want a lot of colour or points of interest to distract from my character. I decided just to make a tiled floor that was fairly beat up and worn down. I created the basic shapes in Max, using the same workflow as stated above for Bishop, and brought it into ZBrush for detailing. For things like the bullets, I just manually placed them by hand in Max.For the cracks in the titles, I created an alpha in Photoshop using a photo of damaged stone and imported it into ZBrush. From there, under the Alpha tab, I selected "Make St" which turns the selected alpha into a stencil. I could now freely move my model around on screen and any detail that I added or subtracted would be controlled by the stencil I had created (Fig.30).Â
Fig. 30
Once your alpha is applied as a stencil, make sure to disable the alpha on your brush as this can cause some weird results. Basically, you'd be painting detail with a tip shaped like your alpha over a stencil caused by your alpha. I get the best results by just using a standard brush with the stencil created. Also, you can move/scale/rotate your stencil around. Just press Space and follow the onscreen instructions!
Once I was done with my highpoly pedestal model, I baked down the information (normal and AO, like in previous steps) and textured it with photos of stone and mud, adding extra grime to the edges of the tiles to blend them into the ground.
Rendering / Presentation
As mentioned earlier, I used Marmoset for my final presentation shots, which enabled post FX for the beauty renders but not for the actual "presentation image" (as post FX was banned for that image.) I used a modified post FX setting from the "next gen" preset provided by 8 Monkey. I basically added more blue to the final image, more sharpness and adjusted the shadows.I imported my model as separate pieces, basically as just one OBJ file, but split into separate meshes within Max. A trick to control alpha sorting in Marmoset is to make sure that the alpha'd image is the last object in the stack (on the right hand side of Marmoset, these objects are listed.) To do this, I would export my OBJ files separately (Bishop_body, Bishop_pedestal, Bishop_fx and Bishop_loincloth) and then import them into a fresh scene in the order previously listed. Then, with all of these OBJs imported, export them again as just one OBJ. This seems to retain the order and when imported into Marmoset, then the objects will be listed in this way; I assume there's something under the hood that I don't fully understand that cause this.
Once all of my models were imported, I created a few materials - one for the actual character textures (normal, spec, diffuse), one for the pedestal with pretty much the same properties and one for the FX - and then applied them accordingly.
To take a screenshot of my scene, I first set the screenshot resolution by pressing the ~ key to bring up the console and typed in "set screenshots #" with # being the biggest number that my video card could handle. Then I pressed F10 to drop a screenshot of my scene into Marmoset's root folder. I ran a few tests before finding a number that would work because if the number is too high, the video card won't support it and will just spit out a black image.
To get my glow FX working, it was sort of a hack, which is a known issue for Marmoset. I basically just had to apply the FX material with a custom alpha channel that culls out the non-glowing parts of my model, take a screenshot of that and apply it over the top of my original screenshot using a screen blending mode.
After I had all of my images ready, I created a fancy border to use on all of my images for consistency and saved them out (Fig.31 - Fig.36)!
Fig. 31
Fig. 32
Fig. 33
Fig. 34
Fig. 35
Fig. 36
Post Mortem
At the end of every project, I like to ask myself what I could have done better, what went wrong in the creation of the character and analyze what I could do differently in other projectsMultiple style changes - Due to having no solid concept, I bounced back and forth between a few different ideas. Mainly feeling as though I wasn't pushing myself hard enough creatively, I ended up reworking major areas of the character multiple times and practically scrapping the idea of a soldier with lots of gear in favour of a more armoured soldier with moderate amounts of gear. I lost days on things like the holy hand grenade and the gauntlet. In the end, any change I decided on was for the best, but it still caused problems that could have been avoided by spending just a little more time on concept work.
Working against my budget - Even though I am very proud of the way this piece turned out, the technical side of me sees faults. Due to technical limitations, I had to cram a lot of things into the texture that would normally rely on geometry. The biggest victim of this are the bullets on the chest; basically if the torso twists at all, the bullets will stretch. In an ideal situation, these would have been handled with geometry and would have allowed me to make a more dynamic pose.
Movies
To watch these movies we recommend that you view them with QuicktimeDownload Movie 1 - 3 mins 17 seconds - 45mb
Download Movie 2 - 13 mins 3 seconds - 204.2mb
Download Movie 3 - 2 mins 21 seconds - 51.2mb
Downloads
Here are some small tools and plugins that I used while creating Bishop and that I highly recommend:Subtool / Transpose Master / ZApplink (http://www.pixologic.com/zbrush/downloadcenter/zplugins/ ) - The ZBrush community has tons of plugins for you to use. These three, which are more of a formal release, made my life much easier by easily manipulating the amount of detail I had in my character.
Quicksave (http://www.zbrushcentral.com/zbc/showthread.php?t=49080) - Another ZBrush plugin. I have always been annoyed by ZBrush's prompts that it gives when saving. I assigned my save and sequential save keys to overwrite the original ZBrush hotkeys. This has actually made my workflow faster as I no longer need to dig around in folders to find where I saved, be bothered by pop-ups or misplace one of my models in a different folder (which had happened to me before!)
XNormal (http://www.xnormal.net/ ) - Â I rave about this application all the time. It's probably the best solution for baking out normal maps based on it's speed and limited stress put on your machine. Support by the developer is unbelievably quick, open and generous.
Marmoset Toolbag (www.8monkeylabs.com/toolbag/toolbag_install.exe) - The guys at 8 Monkey provided the community with access to their amazing tools and let many of us, myself included, use it freely to display our work for Dominance War and other personal efforts. Easily one of the best tools I've ever used and definitely worth checking out as an alternative to something like the Unreal Engine for viewing models.
Slickjot / Slickrun (http://www.bayden.com/SlickRun/1033/SlickRunHelp.htm ) - A handy little application for writing down quick notes. Save a tree!
Xoliul's Max Viewport Shader (http://laurenscorijn.com/projects/viewportshader/) - A nice viewport shader with many features that, I think, really helped me translate what I was creating in Max into what a game engine would produce.
Thanks
Throughout the creation of Bishop, I had a lot of feedback and attention from my Polycount brothers (as well as a few "traitors" from other forums who somehow made their way into our territory!) Just wanted to say thanks again to Polycount members:Nynedown, EVIL, AcidLehmann, Wicked - J, ParoXum, ThatDon, Indian_boy, Xaltar, AimBiz, Frump, kite, killingpeople, Bobo_the_seal, Ravenslayer, binopittan, vahl, Blaizer, jox, Slipstream, PeterK, warriah, caseyjones, Aftermath, seforin, Ged, Jackablade, LoJack, Kamui, pestibug, haZe, solar, coldkodiak, r4ptur3, bounchfx, konstruct, kendo, IronHawk, Inpw, Mezz, Shagrath, kessler, DKK, Vrav, fightpunch, SupRore, Helixx, ericdigital, kary, jbrophy, StefanH, notebookguy, spacemonkey, Neox, Spark, JFletcher, morte, wicz, meshiah, nutsy, gaganjain, Slum, moose, onelung, newman3d, dur23, Davidskiwan, foreverrendering, MoP, woogity, conte, Aravindan, kipiripi, orpheus85, mifflefish, gavku, Ferg, muppet man, Beltann, The_Kozmonaut, catstyle, bahamutnemesis, kongni, Crash, TBone, Rick Stirling, Marshal Banana, 408, Bummer6, Slingshot, bilbana, Parnell, BlackNull, Cody, firebert, lupi, rv_el, HntrLuc, 8FtSpider, wassum, Pixel Masher, culpin, ScudzAlmighty, Stinger 88, Lazerus Reborn, Skiffy, Chai, crazyfingers, EricV, Marnik, Mongrelman, RITORIAN, Josh_Singh, Jeff MD, 55joe, SHEPEIRO, Kzo, NiGHTS2o06, woods, Dreamer, FeralGrin, nrek, Zatoichi, Gonzo, Demotion, frubes, Spug, polysmooth, aesir, Abe_hokage, Eclipse, EarthQuake, ghost-d, ocarian, iatriki, butt_sahib, merecraft, Diwan, StJoris, zerafian, kite212, engelik, Jeremy-S, Rens, rasmus, Kovac, mikezoo, rollin, jermey price, onionhead_o, Sephiel, Rory_M, clee101, Snefer, katzeimsack, Pussik, dehebo, Hatred, claydough, fly_soup, jocz, jim_sam, Target_Renegade, cashfire, TWilson.
Your feedback was very important to me and was a key factor in motivating me to cross the finish line. Thanks.