More Techniques to Make Hands
I've experimented with a lot of different ways to make hands, but I used a new technique on a recent model (a creepy demon) that I'm really happy with. I basically used my normal whole-body object posing technique, but on the hand scale, and it worked really well!
So, I made my hand out of 16 different objects (and eventually added claws to the finger-tips). Each finger was 3 elongated and subdivided cubes. The thumb was two such cubes, and the palm was another two cubes (but shaped a bit to create a more palm-like shape). I decided to use two separate objects for the palm because so much of the palm shape changes based on thumb movement (I guess, technically, that second half of the palm is basically the first segment of the three-part digit that makes up the thumb, but whatever).
When I made those cubes though, I changed things up slightly from my normal technique. Typically, I would resize and tweak the cubes in Edit Mode in order to change the length of the individual body parts (mainly because sculpting with non-uniform scale can get weird). In this case, I avoided making any changes to the actual geometry wherever possible and really took advantage of object scaling to let my finger segments get generally smaller towards the tips of the fingers. I positioned each finger segment so that the natural open/close of that joint would be along the object's X axis and the "splay" of the fingers would be along the Y axis.
With my finger segments built and positioned, I needed to parent them together to make them easier to pose. So, I selected the tip segment of the index finger, then shift-clicked to also select the middle segment, and hit ctrl-p to parent the tip to the middle segment. This makes it so that whenever the middle segment is moved, the tip of the finger is moved as well to maintain their relative positions. I repeated this process for each finger segment, eventually parenting the "base" segments of all of the fingers to the main palm segment itself. This let me move the whole hand around by moving the main palm segment, and pose the individual fingers by rotating the appropriate joints (so, to make a fist, I would rotate the base segment, then the middle segment, then the tip segment, and the parenting makes it so that I don't have to worry about repositioning the outer segments based on the changes of the base ones).
So, that's all well and good for posing my hands. And after they're in a decent pose, the next step would be to Boolean Union the various parts together and then sculpt on some details, right? Well, here's where this technique was really exciting. Instead of jamming that whole thing together into a single object, I kept the finger joints discreet for sculpting and I made them linked objects. This meant that when I sculpted details onto one finger segment, those details were replicated to all of the finger segments, which both saved me a ton of sculpting time and gave my fingers some excellent consistency (not that that level of detail is even visible on a 3D print at these scales, but whatever).
So, I proceeded to sculpt my finger segments, making them extra knobby at the knuckle (both because they're creepy demon hands and to give the objects more overlap and make positing easier) and more tapered towards the tip. Because I had scaled the actual objects for the tip segments, those segments were just naturally shorter and thinner than the base segments of each finger. I made the length variation between the fingers in the same way; those are all the exact same geometry, just scaled differently to create different finger lengths.
After I sculpted the fingers, I was able to easily tweak the hand's pose because they were all still separate objects... so I continued to poke and prod at it until I was happy with the pose! I changed the finger positioning for two reasons. Firstly, I did it because I thought it looked better having the fingers curling in a little bit. Secondly, after I had the body pose figured out, I wanted to make sure that all of my fingers were pointing upwards to make printing easier, so I just modified the pose slightly until it was all good!
After I got the pose to a point that I liked, I had the option to Boolean Union the hand parts together. If I were making a human hand where I didn't want the knuckles to be quite so protruding, I might have done that... but, let's also remember what we're doing here. This hand is being designed to be 3D printed. The whole hand on the printed model is only about 5 mm long, so the detail on the knuckles isn't going to be visible anyway.
That actually reminds me; when I first exported this model as an STL it was 1.5 GB! Most of my models, before I decimate them to post them on Thingiverse, clock in between 40 and 75 MB, so this was quite the outlier. This model had 3 more complex pairs of limbs than my average model (and a fairly long tail), but that still seemed like an odd jump in file size. Also, when I was sculpting the details onto the finger sections, my whole PC bogged down unusably. I actually had to unlink them all, do the sculpting, then re-link them to get the changes to propagate.
Both of these things were weird, so I looked more carefully at my finger segments and eventually figured out what was going on. When I linked my various finger segments, it only shared model geometry between them. I was taking advantage of this fact, as it's what allowed me to have different location/rotation/scale settings for each different finger segment.
What I forgot to take into consideration was that the modifier stack for each finger segment was uniquely preserved as well. When I did my original hand-pose-sketch, I did it with a bunch of elongated cubes that each had 3 or 4 levels of Subdivision Surface modifier on them. I applied that modifier to the finger segment that I wanted to sculpt, then I began work on the sculpting. What I failed to consider was that those Subdivision Surface modifiers were still present on the 13 other finger segment instances, and so every time I made a change to the mesh (basically, every time I clicked the mouse while sculpting), it had to recalculate those 3 levels of subdivision across those 13 other objects. And I was sculpting with Dynamic Topology enabled, which means that each sculpting move basically recreated whole swathes of the mesh, at incredibly high detail... which was amplified *2^3 because of the subdivs... well, long story short, I was forcing the computer to calculate as lot of triangles in those fingers. Like 1.4 GB of triangles.
So, once I realized what I'd done, I just removed those modifiers from all of the finger segments. Then, lo-and-behold, the final .stl was back to my regular ~75 MB range! I just looked it up, and the STL file format uses 48 bytes per triangle. So, given my prior file size of 1.5 GB, I must've had about 31 million triangles in that model! The whole model after fixing the hands is about 600 thousand triangles, so I had about 30.4 million triangles in just the model's fingers. Whoops, I'm glad I figured that one out!
So, I made my hand out of 16 different objects (and eventually added claws to the finger-tips). Each finger was 3 elongated and subdivided cubes. The thumb was two such cubes, and the palm was another two cubes (but shaped a bit to create a more palm-like shape). I decided to use two separate objects for the palm because so much of the palm shape changes based on thumb movement (I guess, technically, that second half of the palm is basically the first segment of the three-part digit that makes up the thumb, but whatever).
When I made those cubes though, I changed things up slightly from my normal technique. Typically, I would resize and tweak the cubes in Edit Mode in order to change the length of the individual body parts (mainly because sculpting with non-uniform scale can get weird). In this case, I avoided making any changes to the actual geometry wherever possible and really took advantage of object scaling to let my finger segments get generally smaller towards the tips of the fingers. I positioned each finger segment so that the natural open/close of that joint would be along the object's X axis and the "splay" of the fingers would be along the Y axis.
With my finger segments built and positioned, I needed to parent them together to make them easier to pose. So, I selected the tip segment of the index finger, then shift-clicked to also select the middle segment, and hit ctrl-p to parent the tip to the middle segment. This makes it so that whenever the middle segment is moved, the tip of the finger is moved as well to maintain their relative positions. I repeated this process for each finger segment, eventually parenting the "base" segments of all of the fingers to the main palm segment itself. This let me move the whole hand around by moving the main palm segment, and pose the individual fingers by rotating the appropriate joints (so, to make a fist, I would rotate the base segment, then the middle segment, then the tip segment, and the parenting makes it so that I don't have to worry about repositioning the outer segments based on the changes of the base ones).
So, that's all well and good for posing my hands. And after they're in a decent pose, the next step would be to Boolean Union the various parts together and then sculpt on some details, right? Well, here's where this technique was really exciting. Instead of jamming that whole thing together into a single object, I kept the finger joints discreet for sculpting and I made them linked objects. This meant that when I sculpted details onto one finger segment, those details were replicated to all of the finger segments, which both saved me a ton of sculpting time and gave my fingers some excellent consistency (not that that level of detail is even visible on a 3D print at these scales, but whatever).
So, I proceeded to sculpt my finger segments, making them extra knobby at the knuckle (both because they're creepy demon hands and to give the objects more overlap and make positing easier) and more tapered towards the tip. Because I had scaled the actual objects for the tip segments, those segments were just naturally shorter and thinner than the base segments of each finger. I made the length variation between the fingers in the same way; those are all the exact same geometry, just scaled differently to create different finger lengths.
After I sculpted the fingers, I was able to easily tweak the hand's pose because they were all still separate objects... so I continued to poke and prod at it until I was happy with the pose! I changed the finger positioning for two reasons. Firstly, I did it because I thought it looked better having the fingers curling in a little bit. Secondly, after I had the body pose figured out, I wanted to make sure that all of my fingers were pointing upwards to make printing easier, so I just modified the pose slightly until it was all good!
After I got the pose to a point that I liked, I had the option to Boolean Union the hand parts together. If I were making a human hand where I didn't want the knuckles to be quite so protruding, I might have done that... but, let's also remember what we're doing here. This hand is being designed to be 3D printed. The whole hand on the printed model is only about 5 mm long, so the detail on the knuckles isn't going to be visible anyway.
That actually reminds me; when I first exported this model as an STL it was 1.5 GB! Most of my models, before I decimate them to post them on Thingiverse, clock in between 40 and 75 MB, so this was quite the outlier. This model had 3 more complex pairs of limbs than my average model (and a fairly long tail), but that still seemed like an odd jump in file size. Also, when I was sculpting the details onto the finger sections, my whole PC bogged down unusably. I actually had to unlink them all, do the sculpting, then re-link them to get the changes to propagate.
Both of these things were weird, so I looked more carefully at my finger segments and eventually figured out what was going on. When I linked my various finger segments, it only shared model geometry between them. I was taking advantage of this fact, as it's what allowed me to have different location/rotation/scale settings for each different finger segment.
What I forgot to take into consideration was that the modifier stack for each finger segment was uniquely preserved as well. When I did my original hand-pose-sketch, I did it with a bunch of elongated cubes that each had 3 or 4 levels of Subdivision Surface modifier on them. I applied that modifier to the finger segment that I wanted to sculpt, then I began work on the sculpting. What I failed to consider was that those Subdivision Surface modifiers were still present on the 13 other finger segment instances, and so every time I made a change to the mesh (basically, every time I clicked the mouse while sculpting), it had to recalculate those 3 levels of subdivision across those 13 other objects. And I was sculpting with Dynamic Topology enabled, which means that each sculpting move basically recreated whole swathes of the mesh, at incredibly high detail... which was amplified *2^3 because of the subdivs... well, long story short, I was forcing the computer to calculate as lot of triangles in those fingers. Like 1.4 GB of triangles.
So, once I realized what I'd done, I just removed those modifiers from all of the finger segments. Then, lo-and-behold, the final .stl was back to my regular ~75 MB range! I just looked it up, and the STL file format uses 48 bytes per triangle. So, given my prior file size of 1.5 GB, I must've had about 31 million triangles in that model! The whole model after fixing the hands is about 600 thousand triangles, so I had about 30.4 million triangles in just the model's fingers. Whoops, I'm glad I figured that one out!
Comments
Post a Comment