Reference mesh

From Valve Developer Community
Revision as of 15:43, 2 May 2008 by Beeswax (talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

In Source, the Mesh (sometimes called the body or envelope or skin of the model) defines the model's deformable 3D surface geometry. The Mesh is enveloped to the Skeleton and the Skin is rendered over the Mesh. Each model requires at least one mesh (the default mesh) but may also have several distinct sub-meshes. Each mesh may also have a number of versions optimised for LOD-substitution.

Mesh data is defined in an SMD and compiled to the model's VVD and VTX binaries by StudioMDL.

Every Mesh includes:

Tip:See SMD file format for exactly how this data is stored in the triangles block of a "Studio Model Data" file.

Default mesh

The Default mesh is the Mesh that will be rendered unless substituted by a specific LOD mesh, and/or modified by a specific Sub-mesh.


Sub-meshes can be switched on and off at runtime. Like the Default mesh, they are enveloped to the model's Skeleton, and will deform (stretch and bend) as if part of the Default mesh. Specific pieces of clothing are good candidates for switchable sub-meshes; eg different types of body armor or headgear. By contrast Sub-models (eg weapons) can be attached to specific $attachment points on this skeleton, but they remain enveloped to their own skeleton; they will move with this skeleton but will not be deform by it.
  • The $bodygroup configuration allows any number of sub-meshes (SMDs) to be added to the Default mesh. Setting up multiple $bodygroups allows sub-mesh switching to be triggered by (code-level) events.
  • Sub-meshes do not affect the model's collision model.
  • (To do: $model's face mesh for facial animation ?)

LOD mesh

Source's LOD system allows a "cheaper" (simplified) version of the Mesh(es) to be rendered at a distance where the loss of "expensive" detail is not noticeable to the Viewer. Any number of replacement LOD_Mesh.SMDs are usually created from pared-down versions of the Default Mesh and Sub-Meshes, but they are compiled into the main MDL's VVD and VTX files via the QC $lod configuration. The Default Mesh (including Sub-Meshes) is used when no LOD Mesh is active, we could say it amounts to an "lod0" Mesh.