Reference mesh: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (categorise)
(cleanup the intro; some stuff was a bit off)
Line 1: Line 1:
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.
In Source, a [[Reference mesh]] (sometimes called the ''body'' or ''envelope'' or ''skin'' of the model) defines some or all of a model's rendered geometry. A model needs at least one reference mesh or it will not be visible in the world. It is [[enveloped]] to the bones of a model's [[Skeleton]] and moves with them. It is commonly replaced by lower-detail meshes at distances with <code>[[$lod]]</code>.


Mesh data is defined in an [[SMD]] and compiled to the model's [[VVD]] and [[VTX]] binaries by StudioMDL.  
A reference mesh includes:
 
;Geometry data
:Vertex Coordinates (relative to a specific [[Parentbone]]) for each triangular polygon,
;[[Smoothing group]] data
:Normal vector (relative to a specific [[Parentbone]]) at each vertex,
;[[Skinning]]
:[[UV map]] coordinates and [[Default Skinname]](s),
;[[Envelope]] data
:[[Weight map]] values and [[Parentbone]] for each vertex.


Every Mesh includes:
:* [[Geometry]] data : Vertex Coordinates (relative to a specific [[Parentbone]]) for each triangular polygon,
:* [[Smoothing group]] data : Normal vector (relative to a specific [[Parentbone]]) at each vertex,
:* [[Skinning]] data : [[UV map]] coordinates and [[Default Skinname]](s),
:* [[Envelope]] data : [[Weight map]] values and [[Parentbone]] for each vertex.
{{tip|See [[SMD file format]] for exactly how this data is stored in the <code>triangles</code> block of a "Studio Model Data" file.}}
{{tip|See [[SMD file format]] for exactly how this data is stored in the <code>triangles</code> block of a "Studio Model Data" file.}}




==== Default mesh====
== 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''.
: 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''.
:* It is defined in the [[Reference.smd]] and compiled to the [[VVD]] and [[VTX]] binaries via the [[$body]] or [[$model]] QC command.  
:* It is defined in the [[Reference.smd]] and compiled to the [[VVD]] and [[VTX]] binaries via the [[$body]] or [[$model]] QC command.  


==== Sub-mesh====
== 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.  
: '''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.  


Line 22: Line 26:
:* ({{todo|[[$model]]'s face mesh for facial animation ?}})
:* ({{todo|[[$model]]'s face mesh for facial animation ?}})


====LOD mesh====
== 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 Models|LOD_Mesh.SMD]]s 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.
: 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 Models|LOD_Mesh.SMD]]s 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.


== See also ==
*[[$body]] / [[$model]]
*[[$bodygroup]]
*[[$lod]]


[[category:Modeling]]
[[category:Modeling]]
[[category:Modelling Glossary]]
[[category:Modelling Glossary]]

Revision as of 09:04, 2 May 2008

In Source, a Reference mesh (sometimes called the body or envelope or skin of the model) defines some or all of a model's rendered geometry. A model needs at least one reference mesh or it will not be visible in the world. It is enveloped to the bones of a model's Skeleton and moves with them. It is commonly replaced by lower-detail meshes at distances with $lod.

A reference mesh includes:

Geometry data
Vertex Coordinates (relative to a specific Parentbone) for each triangular polygon,
Smoothing group data
Normal vector (relative to a specific Parentbone) at each vertex,
Skinning
UV map coordinates and Default Skinname(s),
Envelope data
Weight map values and Parentbone for each vertex.
Tip.pngTip: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-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.
  • (
    Todo: $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.

See also