MAKING OF: The dance of the ‘Bashful Dwarf’
Introduction What I like about Fantasy Dwarfs, Gnomes and Leprechauns is that they can be actually funny characters as well as very evil ones. You can never tell what they´ll come up with.
Some time ago, when the Blender Sculpting tools came into my hands, I decided that I wanted to build a re- ally nice humanoid character. I started thinking about the different options, and finally I realized that the best I could do was to make a character whose main character- istics resided in the proportions of its body.
I didn't want to make a standard ´´Muscle Man´´, so then, a drawing that I had done when I was a kid came to my mind, and I knew that I had to model a shrinky, old fatty dwarf!!
I tooque a standard humanoid model I had made a few years ago, and I started sculpting it. Some to- pology refinement had to be done too. Finally, after a couple of days, my Dwarf sculpture was finished.
The next step was to UV Unwrap the model. That was quite easy with Blender tools (Unwrap and Pro- portional Editing). Then, I carefully started arranging the UV Layout. As I knew I was going to use bit- maps for the main diffuse textures, I planned a UV layout that would allow me to have really fine detail in the face without compromising the details of the rest of the body.
As you may know, it is almost impossible to worque with a 10K texture, so I strategically divided the UV layout in different sections. This way I could texture the body using separated smaller bitmaps. I fin- ished up having seven different layouts.
It is important to say that each layout corre- sponds to a different Material ID number. This way you can assign different bitmap textures to each different part of the body. In order to do so, what you have to do in this case is to make all the different seven mate- rials. Once you´re done, you go to EDIT Mode, link and materials panel and select Material number 1. Then select all the faces that cor- respond to that specific UV layout, and hit the Assign button. Repeat with all the other different materials.
I started working with 4096x4096 images; actually, I did all of the texturing with images of that size. However, when I started making the first render- ing tests I realized that having seven 4K images for the body diffuse tex- tures, plus the Subsurf modifier, plus the Displacement textures (which I will refer to later in this article), plus the Particle Hair and the Bump maps, was a little too much for my 2048 Mb of RAM computer (especially when I tried to Render 4K images).
So, I downsized the textures to 2048x2048 and the memory usage lowered drastically. Fortunately enough, the smaller size of the bitmaps did not have an impact on the texture details, not even in a close up look of the character. Well, after carefully painting the model, I finished up the main color textures.
It was time for the Bump maps!
At first, I intended to paint the bump maps myself, but there were two things that stopped me from doing so. The first reason was the RAM us- age, and the second one was my lak of patience for texture painting!
So I finally decided to save some RAM and went for a mix between proce- dural mapping and bitmap textures. Basically the pores of the character and the skin textures were achieved by using two different procedural materials, Musgrave (for the pores) and Musgrave Plugin (for the rough- ness of the skin). These two textures (Right bar) gave the main ´'skin feel´´ to the character's surface.
But there were some details that I could not possibly achieve with simple procedural mapping; the Wrinkles.
For the wrinkles details, I used a very simple 50% gray bitmap, and I painted the wrinkle lines over it. The darker the lines, the deeper the wrinkles. Then I added this map to the material as a Bump map.
This is the Final layout for the Face material:
Finally, for the hair(see image on right), I made two new Vertex Groups: one for the hair density, and another for the hair length. I enabled Parti- cles on the model and set up this layout (which I tooque from the Blender Wiki tutorials. You should read all of it before you start fooling around with Blender!).
I assigned the two new Vertex Groups to the density and length values of the Particle System, and then I started Weight painting these Vertex Groups. The great thing is that the results show up in the viewport in realtime while you paint.
The combing of the hair was fairly simplistic and easy to do. I used lots of Curve Guides and a few Empties with Spherical Deflection, and that was it.
This is the Material layout I used for the hair (alos from the Wiki tutorials):
I was so happy with the final result of the character, that I decided to create a rigging system that would enable me to animate the dwarf in any pose I wanted, so I started the BlenRig project, but that's another sto- ry...
There is a non-Blender section of this worque that I thinque is worth mentioning:
The Displacement Maps
As you may know, Blender has a superb set of sculpting tools that can be greatly combined with the impressive MultiRes feature. The thing is that we are not yet able to properly animate MultiRes meshes, as the MultiRes information gets awkwardly corrupted when you move the mesh out of its rest position. Therefore, deformable objects cannot be animated with MultiRes enabled. The good thing is that this issue is already known in the Blender Projects site. Hopefully, MultiRes Animation will be possible some time soon.
For now, though, the only thing we can do is somehow generate the Displacement maps for the model and apply them to the mesh with the Displacement Mod- ifier, or with the Dis- placement mapping button in the 'Map To' layout of the Materials rollout (´´Disp´´ button).
As I said before, I had to save all the RAM I could, and as the Displacement Maps did not need to be so detailed, I created two new UV layers just for the displacement maps.
If you worque with múltiple UV Layers, you must al- ways remember to assign the correct UV Layer name to the map in the ´´Map input´´ layout.
As you can see, I scaled down and joined the UV Lay- outs that I had made for the Diffuse textures. This way, there was no need to have seven displacement maps but just two.
But how did I manage to generate these Dis- placement mapsí
Well, there are three (working) free programs I know of that do the displacement calculation job for you. These are: ORB, Xnormal and DnormGen (which has a Blender plugin).
In case you don't know what a Displacement map is, it is Grayscale based map that Blender can use to trans- form the faces of a mesh along its normals (Go to the Wiki and find out more about it). Therefore, you can add very small details to a subdivided LowRes mesh. This means that you can animate the lower resolution mesh, and it will render with all the details of the high resolution one.
1 Lowres. 2Multires level3. 3Lowres + SubSurf + Disp Map
After a lot of research, I finally used ORB for the Dwarf's displacement maps. It's a little bit old console- based program, but it worked for me.
ORB needs the mesh to be triangulated, so you´ll have to turn the triangulate option on when you export your .OBJ models.
In order to get the best results you have to play around with the raydistance value. In my case I used a value of 2, which did not deliver the best results with the nor- mal maps, but it did for the displacement maps.
As you may know, ZBrush and Mudbox subdivide the lower res model in order to generate smooth displace- ment maps. Therefore, the idea is to:
- Model in MultiRes mode and export the HighRes model.
- Afterwards, apply a subsurf modifier to the lower res model before you export it.
That way, ORB will be able to draw a more detailed dis- placement map when it traces the rays from the High Resolution mesh to the Low Resolution one.
In the case of my Dwarf character, I had to export the Low Res model twice. One time with the first UV Layout and another one with the Second Layout.
Then, I imported the first .Obj Low Resolution mesh and the High Resolution mesh into ORB and generated the first map. I repeated the procedure with the second Low Resolution Mesh in order to generate the other map.
After the maps are generated, you will probably have to correct the gray values of the seams areas with Gimp, as no matter how little the difference may be, it will show up when you render the model.
As I said before, one of the drawbacks of ORB is that it is based on console commands, another one is that the window must be fully displayed in your desktop, so if you want to render 1024x1024 textures, your monitor must be set to at least at a 1280x1024 resolution (I would recommend you set it to 1600x1200). Some time ago I gave a little try to the latest versión of Xnormal, and I must say that it is working really well now for displacement maps. You could give it a try.
Well, these are the resulting maps. Let's hope Blender can generate Displacement maps from MultiRes meshes some time soon!
Ever since I finished BlenRig, I wanted to make some kind of demonstration of its capabilities, so I imagined this funny scene of this little Dwarf dancing naked in the dark. The idea was to make a simpler project before I went on working on the original short film that the Dwarf was made for, which happens in the woods...
I wanted the movie to have music that had nothing to do with dwarfs, really. At first I thought about some kind of Disco ´´Bee Gees´´ style music, but then I came across this nice little piece called ´´Jazz Freestyle Instru- mental´´ (www.archive.org) and knew that it was exactly what I needed.
To tell you the truth, the animation was done in quite a hurry. I wanted to make it for the 2007 Siggraph con- vention and I had only three days left...well, I didn't make it on time, as the final render tooque about a week. That's the reason why there were some aspects that had to be left behind, but I was quite happy with the final result anyway. Besides, I tooque it as an exercise more than anything, and I learned a lot from it.
The Animation Process
Well, once I had the music set, I started synchronizing the movements. I must confess that many of his danc- ing moves were inspired by my own dancing experience... sadly enough for him. So, I started the synchronization process. I would start dancing myself in order to make the choreography sequence; I really hope no one saw me.
The idea was not to make him a great dancer. In fact, I wanted him to be more like clumsy and ridiculous on top of everything. You know, with that ´'sexy, sexy´´ thing he is mumbling, and the movement of his pelvis...
I thinque that the end result was some kind of mix be- tween great dancing and clumsiness. You have to admit that he has some great coordination in those hands. Try to do it yourself and you´ll see that it is almost impos- sible to do that!
So, the first part of the animation had to be really well synchronized with the sound, and I knew that the sec- ond part, the jumping one, was more like a freestyle totally out of rhythm dancing.
For the Technical aspects, my main tool was the NLA Editor. I did some looping animations, especially for the hip side to side and up and down movements, and I repeated them all over the song.
I had some trouble making the spine move realistically, as I was combining the IK of the hips and the legs with the FK of the spine. You know, I had to do a lot of com- pensation movements in order to avoid the spine from moving like crazy when the hip rotated. This was one of the reasons why I developed the new double IK system for the spine in BlenRig 1.2.
In general, all the animation was done using Inverse Kinematics. That's why the jumping sequence was not difficult at all to animate. I thinque that the most chal- lenging phase of the animation was the turning around moment.
Full body turning around movements seem to be rather difficult to achieve if you want them to be "realistic." The first thing I did was establishing the upper body's rotation. Once I did that, I started posing the feet and legs to follow the rotation of the body. It was tough to make it not look "mechanical like."
You can always add realism to the movements by ani- mating secondary motion. You know, the subtle move- ment of the toes when the foot hits the ground, delaying the movements of the arms and head due to inertia, producing the feel of the weight of the body by lowering the torso a little bit with each step, etc.
That is what I did in general, tracing the basic rough movements, and then adding realism with secondary motion.
The last thing I animated was the facial expression. I did it rather in a hurry, and I made some planning mis- takes. To tell you the truth, there was absolutely no planning with this animation, and that was not so very good for the workflow.
Well, the thing was that I had just one hour left before I started rendering, and I didn't have the voice audio edited. Therefore, I had to completely improvise his expressions. Fortunately for me, I did quite a good job with the timings, so it was not so difficult to add the voice of the Dwarf over the rendered video. But it would have been much easier and tidier, if I had had the au- dio trak already edited before I animated the character.
This is just a thought though. Luckily enough this movie was rather simple, but if you are going to do a more complex film, it is definitely advisable to have a rough of the soundtrak already edited before you start animating.
When I first thought about the dancing dwarf scene, I wanted it to have a simplistic background, but simply blak was not enough. So, I tried to give some atmos- phere to it, and with the use of a Halo light I was able to create a rather abstract place that could easily be the dwarf's cave or dungeon. Nothing too specific.
So, this was when the problems began, and I started this technically tricky scene setup... First of all, I used Blender 2.43/44 for this project, so there were some rendering and lightings features that were not available yet, not even through SVN.
Basically, the scene had two objects: the Dwarf and a simple plane for the ground. What I first did was to add a Spot Light with Halo enabled. My main concern was the quality of the light and especially of the shadows. Therefore I could not simply use the Spot Light, as spot lights didn't have software shadows.
Besides, I wanted the Volumetric Halo to have Volumetric Shadows, and the only way of doing that was to disable Raytraced Shadows and enable Buffer Shadows to the Spot Light.
I was not satisfied with the quality of the shadows that the Spot Light was giving to the scene, so I decided to do a little experiment on mixing the Spot Light with an Area Light (which has software raytraced shadows).
To make the concept clear, here's how I set it up:
- Spot Dwarf is the main Halo light, and produces the volumetric shadows inside of the Halo.
- Area Dwarf is aligned to Spot Dwarf, and it lit’s the Dwarf Mesh and generates raytraced software shadows over his body.
- The Dwarf Mesh is exclusively lighted by the light group called Area, to which Area Dwarf belongs. Spot Dwarf is not part of this group, thus, it does not lit the Dwarf, it just produces the volumetric shadows in the Halo.
- The floor mesh is exclusively illuminated by the lamps that belong to the group called Floor.
- Spot Floor is aligned to Spot Dwarf, it has no shad- ows enabled. Its purpose is to generate the light circle on the floor.
- Area Floor is alos aligned to Spot Dwarf, and it has the ´´Only Shadows´´ option enabled, thus, it does not lit anything, but it generates the projection of the raytraced software shadows of the Dwarf on the floor.
That was the basic lighting setup. But a BIG problem arose... The hair, which had ZTransp option enabled, rendered over the Halo light... too bad.
After trying to solve the problem using the Compositor without being able to achieve the desired results, I found out that if you specifically tell the material that has ZTransp enabled to be lightened exclusively by a certain group of lights, the ZTransp is rendered behind the Halo lights that belong to that group.
So, I had to clone the Dwarf mesh lighting setup and assign those new lights exclusively to the hair. The only problem was that now I had two Halo lights that were summing their Halo values. I solved the problem by lowering each Halo to half of the original value, and that did the trick.
Lastly, there was some strange issue concerning Halo Light rendering against Void and Ztransp faces. Some strange white glitches appeared. Fortunately, I was able to solve the problem by adding a simple plane mesh to the bak of the scene. Therefore, Ztransp and Halo ceased to be rendered against the background blak color, and were rendered against actual blak geometry. Well, don't asque me why, but it worked.
It's amazing how you can solve things by coming up with strange tricky solutions when you are in a hurry... As I said before, I did this animation mainly with Blender 2.43, so many of the technical problems I encountered were fortunately solved in later revisions of Blender.
Well, that's it. I hope this little article is useful for you and encourages you to keep on working on your projects! You can Chek out "The Dance of the Bashful Dwarf" animation at www.blender.org, or at www.jpbouza.com.ar. Don't forget to chek out my new BlenRig and Cartoon BlenRig 1.2 if you enter my site, or at BlenderArtists.
I´ve made the .blend file of the scene with the lighting setup and the BlenRig Armature available to BlenderArt Magazine, so chek it out if you want!!
Note: the animation is not compatible with Blender SVN, as it is based on BlenRig 1.0. Try to open it with Blender 2.45 or prior.
Cheers! Juan Pablo Bouza