Reference model

From Valve Developer Community

Someone is currently in the process of editing this article. In order to prevent edit conflicts, please refrain from making edits until the other editor is done. This should not take more than 24 hours.

The plan is to break out this stuff when it's finished. --Beeswax 19:08, 1 May 2008 (PDT)

Table of contents

Compiling a Model

probable destination for this section is an introduction to Compiling models for Source. 3rd party MDL compilers often provide a different GUI to the QC file than StudioMDL, so a checklist of "things you should already have done" would be relevant to all MDL compiler docs. It includes model anatomy/glossary definitions for #REDIRECTs ?

Reference.smd

  • The Reference.smd is traditionally named "modelname_ref.smd".
  • It defines the model's Reference (http://en.wikipedia.org/wiki/Frame_of_reference) Skeleton and its "default" 3D Rendering Geometry:
    • The Reference Skeleton is the key for all of the model's geometry: vertex data for the render mesh, sub meshes, collisionmodel, hitboxset, attachments, animations, gibs, etc. all reference the skeleton.
    • The Reference Mesh is the "main body" (as opposed to $bodygroup sub-meshes) of the Render Model. The Reference Mesh's Skinning data also defines the filename(s) of the model's Default Skin(s).
  • Notably, the reference.smd does not contain the model's
    • Physics geometry (collision & hitboxes)
    • Skin files
    • LOD meshes & skins
    • Optional meshes & skins
    • Animations
    • Game settings (QC /StudioMDL parameters)
Tip.png Tip: See SMD file format for exactly how this data is stored in each "Studio Model Data" file.

Submesh.smd

  • "submeshname_sub1.smd", "modelname_ref_sub1.smd" or "modelname_hat_ref.smd".
  • defines a rendered submesh which may be added to the default mesh via $bodygroups. Submeshes cannot be included in the reference.smd.
  • includes: ref-skeleton, defines: mesh (ie: skinname, uvmap, envelope & weightmap data)
  • submesh.smd must be enveloped to the ref-skeleton ...

LOD.smd

  • "lod1_modelname_ref.smd", "lod1_modelname_sub1.smd".
  • LOD Models are simplified versions of renderable meshes. each requires its own smd, and are compiled into VVD/VTX of main model via the $lod configuration.
  • the convention is to prefix the modelname "lod#_". The ref and sub.smds are effectively lod0_modelname_ref.smd, lod0_modelname_sub.smd,
  • includes: ref-skeleton, defines: mesh geometry (ie: coords, smoothing, skinname, uvmap, envelope & weightmap data)

Physics.smd

  • The Physics.smd is traditionally named "bodymeshname_phy.smd". _physmodel.smd or _physbox.smd
  • defines the hull geometry, envelope and smoothing group data for the collisionmodel. incl ref-skeleton.
  • includes the ref-skeleton and defines: hull geometry(s) (ie: vertex coords, normals, & envelope data)
    • Because hulls are rigid and not rendered, they don't use any UVmap or weightmap data.
    • Each hull must be a convex shape ie somewhere between a sphere and a box. Overlapping/intersecting multiple hulls are used to create ($concave) models.
    • Rigid collisionmodels ($collisionmodel) envelope all hulls to the same bone.
    • Jointed collisionmodels ($collisionjoints) envelope some hulls to different bones.

Hitbox.smd

  • Image:Todo.png confirm: not compiled by StudioMDL, but opened in text editor for hitbox vertex coordinates?
  • not rendered, simple collision = simple box geometry

Animation.smd

  • Each Animation.smd is traditionally named "sequencename.smd".
  • includes the ref-skeleton and defines a keyframed sequence of skeletal poses.
  • $sequence "idle" "modelname_idle.smd"
  • $sequence "ragdoll" "ragdoll.smd" ACT_DIERAGDOLL 1 fps 30.00
  • $includemodel includes an AnimationLibrary.mdl