Making a Snow Owl
From NWN1 Custom Content Guide
Contents |
[edit] Introduction
So, NexusJnr slept through the first seminar for NWCon 2k3 (the DLA/CODI panel). Not wanting to miss out on being in the spotlight, he arranged with the con organizers about holding a seminar of his own on 3 methods of making a creature (reskin, adjusting existing model, and supermodel).
Then he drafted me to help his CC seminar for NWCon (curse you!).
So we discussed what sort of creature we could quickly make for the 3rd lesson to show the process from start to finish. We decided on making an owl and [supermodeling|SuperModel] it to the NWN bat. The decision was based on the bat because the wing flapping animations of the bat were better compared to the raven. An owl was chosen because it would work well as a [Familiar] for wizards - in fact, Steel_Wind had the idea that we can have the owl's flying height adjusted so it would fly higher than normal, to act like a scout for the wizard (you know, sort of what one usually imagines familiars for, not as a combat henchmen summon). But that's for the next section on modifying creature animations. Anyway, I did the modeling, making screenshots of my progress, and handed the texture work to NexusJnr. These pages record our process.
| Note: | While I primarily do my modeling in Maya, the 3D modeling concepts can be applied to 3D Studio Max and gMax as well. I'll try to make my terminology as general as possible. At the moment, I'll make the assumption you know enough about your 3D modeling program of choice to at least be able to edit a mesh, but I'll put up a section on the basics later. As well as instructions on converting back and forth from various 3D modeling applications (Maya, Lightwave, etc.). |
| Another Note: | Yes my writing sucks. Live with it. |
[edit] Modeling the owl
First off, we extract the NWN bat and its texture from the NWN bifs and import it into our 3D modeling program of choice:
Fig. 0
The snow owl's head tends to be spherical, so we'll start with a sphere primitive. Set the count for the height and segments to a value you think you'll need to work from (you can always reduce or add more later, but a decent count on the initial creation saves a lot of trouble, in this case, I used 8 and 8). Then we scale and move the sphere to roughly match the bat's head size and location:
Fig. 1
Now, since we're making a symmetrical model (same on both sides), I'll delete the right half of the sphere and create a duplicate that is an instance of the original (that is, points to the same shape so anything you do to one side, is mirrored on the other). Then I set the scale of the instance sphere to X=-1, so it is flipped (in this shot, the sphere is moved up so you can see it):
Fig. 2
Then we start on the mesh editing - Deleted the bottom faces of the sphere and extend the edges it so it looks like a Pac-Mac ghost, so it roughly equals the shape of the owl's head. For this shot I backface culled the faces on the otherside of the mesh to make it easier to see the wires:
Fig. 3
Reference pictures are your friends! If you can't visualize the model, use reference pics available on the Internet, or make your own with a camera (digital or otherwise) or a sketch. They come in VERY handy. In this case, I used the owl pic to guage out where the eyes and beaks are in relation to each other:
Fig. 4
Some vertex pushing and adding later, I end up with a decent owl head, and even started on the body, modified from a 5 sided cylinder. (Yes I know I need to elaborate in this section):
Fig. 5
But wait, this is a low poly game! There's little reason for the eye sockets to be modeled out, since at the size the owl will be, not a lot of people are going to notice it - so we'll remove it and rely on the texture to show the eye for us. Some mesh optimization and the poly count for the head ends up dropping dramatically.
Fig. 6
Then on to the legs, starting from a block:
Fig. 7
To ease the modeling, we make a mirrored instance of the legs (and wings) to save time on the modeling. When we finalize the owl and output it to NWN, that's when we separate the instance from the original.
Fig. 8
And tail modified from a plane:
Fig. 9
NWN, like most 3D engines, BackfaceCull the meshes for faster rendering, so for the tail to be visible from both sides, we'll have to duplicate the mesh and flip the normals (the direction the surface is pointing at) around:
Fig. 10
And onto the wings - we should stop here for a second and note that since the owl is going to be based on the bat's animations, we should note the pivots of the wing segments, and be careful to match the shape and starting pose of the wings themselves:
Fig. 11
Now, if I can remember my biology, the average owl has a huge wingspan (in relation to its body, compared to say the bat's), and really long feathers, specially large, soft ones on the wing edge to soften the noise of the wing flaps as they dive to catch their prey. Unfortunately due to us reusing the bat's animations, we're restricted in the size of the wings because modifying them too much from the original might lead to whacked out motion - we'll make due with what we can, and adjust the animations and make the wings larger in a future tutorial:
Fig. 12
Ta-da, one owl for the game! Also, when finalizing, in the case of the head, remember to delete any instances and reduplicate the body part as a full object (instead of having it refer to the original). Merge the two sides and weld the verticies.
Image:Wl13.jpg
Fig. 13
Now before we finish, do a once over of the model and optimize any sections, like take for instance, the back of the owl's head. Having been modelled as a mirrored half, we naturally have a split down the middle of the head. Since we have merged the head together, some of these faces could be removed to save on the poly counts.
Fig. 14
As you can see, with the merging we drop the poly count from 76 to 70. Low poly modeling is not learned easily, it takes a lot of trial and error to guage what can be optimized and what is better off staying the way it is - it's all about balance. Naturally, a good texture can mask some low poly modeling, giving it the look of high poly. But other times you have to keep it at a higher poly count when textures alone will not do.
Fig. 15
Another thing you can watch out for reducing the poly counts are the caps of body parts - like the neck area, or the tops of the legs. But since this is a segmented model, we'll retain the caps for future animations (if it happens), and avoid the broken mesh look.
Fig. 16
| Important: | While working on the animation section, I discovered I imported the *wrong* bat model from the game - I used c_bat.mdl instead of c_a_bat.mdl. I should have verified the proper model was being used in the appearance.2da file. At any rate, the only major difference was a different starting pose as seen here:
|
[edit] UV Mapping a Snow Owl
What are UV's? They're an additional attribute for a polygon that tells which sections of a texture map should be displayed. Another way of thinking of it is cutting out sections of the 2D texture map, to glue onto the 3D model. Through making UV 'projections' from the model, you can arrange the layouts that utilize every pixel of a texture map, to save space and make the model efficient. This is a technique called 'stenciling'.
| Note: | Need to add in the (g)Max and Maya specific commands for the UV editor, with associating icons to help people. |
| Note: | A big difference in the UV editors between Maya and Max is that Maya allows you to select multiple meshes at a time, making it very easy to lay the UVs out. Max, AFAIK, unfortunately, only lets you edit the UVs from one mesh at a time using the Unwrap UWV modifier. A possible solution around this would be to use the Edit Mesh and attach all the meshes into one object, do the UV editing, then separate the body parts after you're done. |
![]() Fig. 17 | gMax |
|
| Maya |
|
![]() Fig. 18 | gMax |
|
| Maya |
Then we start arranging the UV's to fit onto the texture map:
Fig. 19
Sew (tape) some of the edges together so there would be a seamless transition from one side to another.
Fig. 21
At this point, I applied this checkered grid texture map to the owl. It helps when visualizing the layout of the texture map onto the mesh, as well as lining up on the UV editor.
Fig. 22
Split the back of the head up and align it on either side of the owl's head:
Fig. 23
Since I have the sides of the back of the head split, you have to be careful about making sure the textures line up.
Fig. 24
I decided my current UV layout didn't work out that well, so I decided to go for another approach. I opted for a spherical mapping from the top instead of the cylindrical across the head. This happens a lot as you do the layout, as it's difficult to figure out an efficient layout until you actually start doing it.
Fig. 25
And onto the body and tail. Since the tail will just be a duplicate on both sides, we won't bother with a top and bottom version. We also arranged the UV's so all the owl's pieces will all fit in one texture. For a creature as simple as the owl, I figured we can do the texture map in one 512x512 image., so there isn't a need to separate the pieces for two textures. Obviously we'd go higher for larger ones, like dragons (which use 3).
Fig. 26
Our final UV layout for the owl. You will notice that I left some space at the tip of the wings - again, this is intentional, for later when we extend the wings:
Fig. 27
One owl, ready to be mapped!
Fig. 28
[edit] Making the Texture
Nexus, fill it in already!
[edit] Getting it into the game
Now, we have one owl with a texture map, how do we get it into Neverwinter Nights?
[edit] With Bioware Aura Tools
[edit] With NWmax
Go to the Create menu and under Helpers, you will see a button for AuroraBase. A dummy object will be created with the necessary information that's needed for the model. It will also have a triangle used to indicate the orientation of the model. It usually should face the positive Y axis (the same direction the little axis on the corner is showing).
Fig. 60
Set up dummy objects, name them head, impact, headconjure and handconjure - these dummy objects are used to tell the game where certain effects are centered:
- impact should be somewhere in the chest area, where melee weapons would hit.
- head is for where the PC will look when you are facing the creature (so you will look up for a giant, and down for a rat). It is also used for some spell effects, where the effect should target.
- handconjure is for when the creature casts spells, where the magical effects are.
- And lastly, headconjure is for the location of the various mind related effects, like Mind Blank or when you're dizzy or drunk.
If the creature has hands, you'll need a lhand and rhand dummy object in the right spot, for wielded weapons. And another called lforearm for shields.
Fig. 61
Also, set up a root dummy and link the creature's root (pelvis and/or torso) to it. The rootdummy acts like a central pivot point or center of gravity for the creature, sort of like the pelvis/waist of a human. It is used instead of using the creature geometry because it's much easier to animate compared to say, having the torso parented to the pelvis. With that sort of setup, you have to rotate the torso whenever you move the pelvis around to counter the whole body tilting when you only want to affect the pelvis and below. It's one of those you'd have to have been animating to understand things, but just trust me on this.
[[[Image:owl62.jpg]]Fig. 62
[edit] SuperModel Animations
Now, since we are basing the owl off the bat's animations, it's very important that the hierarchy is the same, as well as the names. Take note that the bat's RIGHT wing parts are called Lbasewing01 and Lwingtip01, as in the modeler duplicated the parts but didn't rename them. We have to mirror the naming scheme.
Fig. 63
Then in the model base rollout panel, we set the supermodel to point to the bat:
Fig. 64
Export the model - remember to note the path!
Now, you may get some sanity check errors when exporting. In the case of NWMax, the most common one is probably unwelded verticies within the nearest centimeter. Press F11 to get the Max Listener window to see which objects are reporting the error. You'll have to go back to the mesh and weld the verticies. After you're done, reexport. In the case of the owl, even though all the verticies are welded, because of its small size some wing and head parts confuse the sanity checker, so we'll toggle it off.
Fig. 66
[edit] Editing the 2DA
Now, you should have c_owl.mdl and c_owl.tga in your override directory (since we're testing it).
Now, we have to add the owl's data to the appearance.2da file. Open up NWN Explorer and extract the appearance.2da file into your override directory. Since it's based on the bat, we can just copy the bat's line and modify to suit the owl. We add the owl's line to the end of the list (becareful of SoU or HotU or other hak's using the same line!), and modify the necessary entries to reflect the owl's. In this case, the name of the creature, the model file to use, the portrait (which we didn't touch on here, but you can look to the Portraits section on how to make one). Also note for the STRING_REF column, since we don't have a line in the dialog.tlk for the Owl, we'll leave it blank.
| Line# | LABEL | STRING_REF | NAME | RACE | ENVMAP | BLOODCOLR | MODELTYPE | WEAPONSCALE | WING_TAIL_SCALE | HELMET_SCALE_M | HELMET_SCALE_F | MOVERATE | WALKDIST | RUNDIST | PERSPACE | CREPERSPACE | HEIGHT | HITDIST | PREFATCKDIST | TARGETHEIGHT | ABORTONPARRY | RACIALTYPE | HASLEGS | HASARMS | PORTRAIT | SIZECATEGORY | PERCEPTIONDIST | FOOTSTEPTYPE | SOUNDAPPTYPE | HEADTRACK | HEAD_ARC_H | HEAD_ARC_V | HEAD_NAME | BODY_BAG | TARGETABLE |
| 10 | Bat | 1995 | BASE | c_a_bat | **** | R | S | **** | 1 | 1 | 1 | VFAST | 2.75 | 5.5 | 0.2 | 0.2 | 1 | 0.2 | 1.7 | H | 1 | 2 | 1 | 1 | po_Bat | 1 | 9 | 9 | 5 | 1 | 60 | 30 | Bat_head | 0 | 1 |
| 300 | Owl | **** | BASE | c_owl | **** | R | S | **** | 1 | 1 | 1 | VFAST | 2.75 | 5.5 | 0.2 | 0.2 | 1 | 0.2 | 1.7 | H | 1 | 2 | 1 | 1 | po_Owl | 1 | 9 | 9 | 5 | 1 | 60 | 30 | Bat_head | 0 | 1 |
[edit] Toolset
Go into the toolset and use the Creature Wizard to make a new creature. You should now have the owl appear as a valid creature type:
Fig. 67
(need to add more steps on using the toolset to add a creature)
[edit] Conclusion
Voila, one fancy schmancy owl!
Fig. 68
| Note: | Fig. 69Creature alphas have been fixed, so the feathers actually show up now! I've since fixed the misalignment on the wings however. |
Main_Page | Making a Snow Owl






