Model Creation Overview
From Valve Developer Community
This article is an introduction to modeling characters, weapons, vehicles and props for the Source Engine. Other articles in Category:Modeling cover the process of creating, rigging, animating, compiling, and defining physics interactions in more depth.
Basic files and tools
All of the models in Half-Life 2 were created with Softimage|XSI. A free version Softimage|XSI, called XSI Mod Tool is especially tailored for prop and character creation by modders and is available at Autodesk's site. Version 6 includes the Valve Source plug-in (essential when you create contents for Source Engine), tutorials, forums, and other resources for getting started with the Softimage|XSI Mod Tool. Unfortunately Softimage's new owners do not package the Valve Source plug-in any longer! However the gods have smiled upon us and provided a link, resurrecting the Valve Source Plug-in from the 99th level of the abyss! Rejoice!
.SMD files are exported from XSI through the file/export menu. They come in three "flavors":
- The reference SMD file is a complete snapshot of the model, including its geometry, its skeletal structure, its texture, and the links between its mesh vertices and its skeleton. Reference .SMDs do not contain any animation data -- they produce only a static image of the complete model at one point in time.
- The physbox .SMD file is the volumes that the physics engine used to calculate collisions and any links between its vertices and the skeleton.
- The animation .SMD files contain only animation data and enough skeletal information for the StudioMdl program to be sure that the animation data matches the skeleton of the reference model.
As you can see any animated model will require at least two .SMDs – and a glance at the Half-Life source files in the SDK will show you that most models include a very large number of animation files. Most models however will use only a single reference .SMD.
It may be helpful to think of the .QC files as a kind of table of contents for model projects: the .QC provides a complete list of all the assets which will be included in a finished model. The primary function of the .QC is to tell the StudioMdl compile program where to find textures and SMD files.
The .QC is also the place where game-engine data is specified. For example, the .QC file tells the engine where to place effects like glow sprites or smoke, what animations correspond to the various AI activities, and when certain sounds should be played.
Studiomdl.exe is the command-line program that actually creates the Half-Life model files. It takes the name of a .QC file as a command parameter and uses the .QC to find the relevant .SMD (model) files. The program also provides feedback on the amount of memory used for the completed model's geometry, textures, and animation data, which can be useful in debugging and optimizing your models. See Compiling Models Basics for information on how to compile models with
The final output of Studiomdl for each Half-Life model is a group of files in the
gamedirectory/models folder ready to be used by the Game Engine:
- an .MDL file which defines the structure of the model along with animation, bounding box, hit box, material, mesh and LOD information,
- a .VVD file which stores position independent flat data for the bone weights, normals, vertices, tangents and texture coordinates used by the MDL,
- currently three separate types of VTX file: .sw.vtx (Software), .dx80.vtx (DirectX 8.0) and .dx90.vtx (DirectX 9.0) which store hardware optimized material, skinning and triangle strip/fan information for each LOD of each mesh in the MDL,
- often a .PHY file containing a rigid or jointed (ragdoll) collision model,
- and sometimes a .ANI file for on-demand loading of animation sequences created using QC command $animblocksize. This is ideal for "cinematic physics".
- Several NPCs also make use of additional .MDL files to hold animation data. Usually the NPC classname is appended with a descriptive label, such as:
- _animations.mdl, _gestures.mdl, _postures.mdl
.VTF & .VMT files
In order to work in game, all world models must have a 'material' and at least one 'skin' as well as mesh geometry.
- The skin begins life as a targa (TGA) image file which must be mapped to the mesh geometry in XSI's Render Mode before exporting the SMD.
- Prior to compiling the MDL, you must compile the TGA to a VTF (skin data) file (using Vtex or studiocompiler) and create a VMT (material data) file (using Notepad or studiocompiler). Both VMT and VTF files must be placed in the
gamedirectory/materials/modelsfolder so that the MDL file knows where to find the right material and textures to apply to the model.
- You can include additional skins, such as normalmaps, by referencing them in the .VMT file. Because the VMT file is external to the MDL, you can tweak its contents (but not its name or location) without recompiling the MDL. Also, the VTF is external to the VMT, so you can tweak (and recompile) the skin without changing the VMT or MDL.
Before starting any sort of modeling, you should have a clear drawing, much like a blueprint, for your character, vehicle or prop. Once you've designed the character, you can create your geometry, edit the hard edges so it lights properly, add UV coordinates for the texture, envelope the mesh to your skeleton, add any facial expressions.
Character Modeling Considerations
Before you start designing your model, you may want to consider a few things like, performance, in game usage, budgets, animation concerns, and naming conventions. The biggest thing you need to consider before you start planning your model is the role this model has in your Mod.
How is this character going to be used?
Is this a character that's always going to be attacking from far away, or fighting up close? Is this character going to appear in dark spaces or in daylight, or both? What's the overall color of the backgrounds this character is going to appear against? How important or central is this character to your mod, is it a main character, or a seldom seen prop? The best thing you can do for your design, overall, is decide what the most likely distance, pose and environment this character is going to appear in during play, then make sure the character works best in that situation.
Most of the time, you should start your model with a piece of concept art that solves most of the design issues at hand, this is where you decide what your character is, what shape it has, what the materials should look like and even what some of the basic poses for the animation set might be. This is also a relatively painless way to test out ideas with your team without spending the time required to build, texture and animate a character. Before you go any further, you should try and get as much feedback on your design as possible. All of the characters in Half-Life 2 went through multiple versions and refinements before they were finalized.
The Model Sheet
Concept art usually shows a character posed and shown from an angle that may make it difficult to use as reference in modeling, so as your next step, you should make a model sheet. The model sheet is a view of the character from the front and the side, drawn straight on without any perspective, and in a neutral pose. The model sheet is a blueprint of your geometry, where you make decisions about proportions, silhouette, and form. Usually, you'll want to use the model sheet as the background image in your viewports in XSI while modeling, (sometimes referred to as Rotoscopy, see the XSI documentation)This model sheet shows the front and side views of the male and female resistance fighters from Half-Life 2.
Performance and Budgets
Polygons counts for some of the Half-Life 2 characters:
- Soldiers: 4,682
- Police: 3,852
- Resistance: 4,976
- Zombie: 4,290
- Helicopter: 6,415
- Strider: 6,444
- Alyx: 8,323
- Buggy: 5,824
- Jalopy: 16,536
- Mil Mi-8: 25,024
There are no fixed rules in determining how many polygons you use in your model, or how much texture resolution you'll use in your materials. There are upper limits of engine capability, (10,000 polygons/model, 17,433 vertices and 2048 texture size) but these aren't usually going to be what you're shooting for. You'll need to consider how many of the character, vehicle, or prop you're making will be on screen. If you'd like dozens of them on screen at any given time, you'll have a different budget than if you'd only like to see one of them ever on screen at a time. With humanoid characters, especially for multiplayer use, you shouldn't need to go over 4000 polygons to get a character that has enough detail to accurately describe the form, bend properly at the joints, and have enough edges to light properly. Of course you can have more than that, but with normal mapping, and high res textures, you shouldn't really need to.
One good thing about working in XSI is that you can keep your model as quads and have clearly organized edges (edge loops) that define the shape, with this sort of a model, it is easy to add and dissolve edges, especially since the UV coordinates are preserved and you can easily re-envelope your mesh with saved vertex weights. Discrete levels of detail are supported in the Source engine and can drastically improve scene rendering speed.
By now you have a rough idea of how your character model is going to be used, what sort of a design you're creating, the specifics of the geometry from front and side, and what your triangle budget looks like. Now it's time to start creating your geometry. How to create geometry isn't specific to creating models for the Source engine, so we won't cover it in depth here, we'll just talk about some basic guidelines that may smoothe the process.
Approaches to Modeling
There are a number of ways to start creating a model, but the defacto industry standard is subdivision surfaces. When creating content for the Source engine, you'll most likely be using only one or two levels of subdivision, but this is still a good way to get organic shapes from low poly control cages. Using this method, you'll be doing most of your work by extruding geometry, and moving the resulting vertices and edges around until they match the model sheet you have in your viewport background. One common mistake made by beginning modelers is not taking advantage of the vertex weight influence on the resulting subdivision, please refer to the XSI documentation for more info on working with subdivision surfaces. At a certain point in the process, you will have to take direct control of the resulting mesh to do your final, small scale detailing.
Learning to identify areas of symmetry in your model can help to save time in the modeling, UV creation and Texturing process. Also repeating elements in your design should only have to be created once, then cloned around the model as needed. There are various tools for modeling symmetrically, but using Symmetrize Polygons is by far the most effective. With this XSI tool (Model>Modify>Poly. Mesh>Symmetrize Polygons) you can duplicate areas of your mesh with a specified transform while preserving the UV coordinates and any other properties you may have defined.
Edgeloops and Animation
One thing that is required when creating your model is a good arrangement of edges around joints so that they deform accurately, with proper edge loops and enveloping, you can even have shoulders that work in most all positions. The position and envelope weight of the Edgeloops will almost always need tuning after you've enveloped your mesh to the skeleton and test a few poses.
Editing Hard/Soft Edges
After you've carefully constructed the geometry that makes up your model, you'll need to define which edges on the model should be creases. You can use the automatic smoothing option, but this usually yields less than ideal results. Choosing where hard edges go isn't a simple task. Hard edges are usually used to define creases, cracks, boundaries between materials, areas where the geometry has large angles between faces, (more than around 75 degrees). In general, all edges that have more than 90 degrees between polygons should be a hard edge, so you may want to start with that as an automatic hard edge setting. To edit hard edges, enter into an edge select mode (hotkey "i" for example) select some edges, then right click on the selection and choose Mark hard edge/vertex. Selecting those edges again, and choosing the same command act to toggle the hard edge property. You may also remove hard edge properties by deleting the edge node in the explorer.
Defining your UV coordinate space
The next step in the modeling process is editing your UV coordinates. For basic information on editing UV coordinates, Please refer to the XSI documentation, (section Shaders, Lights and Cameras. Section: Texturing Basics). One common pitfall when starting to use the texture editor in XSI is ending up with multiple UV sets, You'll want to only have one UV set per model. In this figure, you can see how in one Texture coordinates node, you can inadvertently end up with multiple UV sets.
For the beginner, this is generally to be avoided. If you have good information in both sets, use the copy and paste UV functionality in the Texture Editor to consolidate your UV sets.
As a starting point, Try using the Get>Property>Texture Projection>Cubic mapping type, this will give you a series of good UV Islands. You can then use the Island Heal tool in the texture editor to quickly merge these pieces and correct for transform and scale. Again, refer to the XSI Documentation section The Texture Editor, Healing Polygon Islands.After some careful healing and arranging, you should have a set of UVs with little distortion or streaking. Using this Checkerboard Starter Texture (right-click Save As...) as your starting material can help you evaluate your UVs. If you see an area with unacceptable distortion, liberal use of the Relax UV tool can solve most problems. In cases where this won't work, just use a Subprojection from the Texture Editor to reapply the UVs in that space.
Enveloping the mesh to your skeleton
When you've got a good first pass on your geometry, UVs are set, and you have a skeleton that's acceptable, it's time to envelope your mesh to the bones. You access this through the animation command panel, pressing 2 will switch the toolbar to animate mode. With your mesh selected, choose Deform>Envelope>Set envelope, then select the bones you'd like to include. To edit the resulting envelopes, use the weight panel, accessed through the brush icon near the bottom left corner of the UI. On this panel, you can also access the weight editor, where you can save and load envelope weights. For an in depth explanation of the Enveloping process, refer to the XSI documentation section: Envelopes.
Tuning your envelopes and geometry for animation
Usually, the first pass on an envelope is done in the skeleton's reference position, but this won't tell you how the envelope is really working, to see the envelope in action, you need go through a back and forth process of editing the envelopes, moving the skeleton around, then correcting the deformation by tuning your envelopes. At this point, it may be necessary to add edgeloops to joints, if you can't get good deformation through envelope tuning alone. XSI is ideally suited to this process though, since it's non linear, you can adjust your geometry without reapplying your envelope operator again and again.
Directories and Workspace Setup
See Source SDK Files and Directory Structure for information on the location of the compiled models and source files. See Compiling Models for information on how to compile models using this structure.
In windows explorer, open the Tools > Folder Options > File Types menu. Associate .MDL files with
HLMV.exe, double clicking on a .mdl file with automatically preview it in the modelviewer. Associate .QC files with the
studiomdl.exe, so that you can compile the model simply by double clicking the .QC file. You can always use the Open With... command to edit it in a text editor such as notepad, or you can add entry in the right-click menu named Edit, which will open the .QC file in the text editor. You can also create an entry in the right-click menu for compiling .TGA files with Vtex.
As an alternative (or in addition to the above techniques), create desktop shortcuts to
vtex.exe. You can then drag-and-drop .QC files onto the StudioMdl shortcut and .TGA files onto the Vtex shortcut to compile them.