MDL (GoldSrc): Difference between revisions
Jump to navigation
Jump to search

Important:Older versions of StudioMDL, including the version found in the
Half-Life SDK on Steam, do not support tiling UVs, clamping them to the edge of the texture. This is not a limitation of the HLMDL file format; the Sven Co-op StudioMDL can create MDLs compatible with vanilla
GoldSrc which have tiled UVs.
Bug:The latest version of the Sven Co-op StudioMDL (from December 2020), as found in the Sven Co-op SDK, has some bugs with bounding boxes; use the version linked above instead (from November 2018). [todo tested in ?]
Tip:To create a model or submodel with more than 4080 tris, split the model into multiple SMD meshes, with a separate
Warning:Avoid going over 9000 tris!
While the HLMDL format can handle over 100K tris, the old OpenGL renderer struggles with such "high-poly" models, even on high-end GPUs.[1]
Note:Third party games that upgrade the renderer (ex:
,
or
) can handle higher polygon MDLs better. This does not include
Sven Co-op, which uses a mostly vanilla renderer.
This is obviously not a problem for games on engines much newer than
GoldSrc that use the HLMDL format, such as
Codename: Loop (
) or
FreeCS (
).
Confirm:Is this soft limit 9000 total, or 9000 being displayed simultaneously?
Confirm:Can custom renderers without engine access, such as Trinity Engine, improve performance for higher-poly MDLs?
Code:While MDL does not natively support animated textures, a model's skin can be quickly switched between in game code to animate between them. For example, monster_houndeye uses skin switching to blink.
Confirm:Max textures, max skins, and other limits?
m (replace old ref templates.) |
m (→References) |
||
| Line 106: | Line 106: | ||
* [https://github.com/malortie/assimp/wiki/MDL:-Half-Life-1-file-format Assimp documentation for HLMDL] | * [https://github.com/malortie/assimp/wiki/MDL:-Half-Life-1-file-format Assimp documentation for HLMDL] | ||
{{references|1= | {{references|1= | ||
{{ref2|cite id=1|From the [https://www.the303.org/tutorials/gold_mdl.htm GoldSrc Model Export Tutorial by The303]: | {{ref2|cite id=1|From the [https://www.the303.org/tutorials/gold_mdl.htm GoldSrc Model Export Tutorial by The303]: | ||
Revision as of 22:17, 11 April 2025
MDL (sometimes referred to as Half-Life MDL or HLMDL) is a model format used by
GoldSrc to store dynamically lit models which can be animated using skeletal animation, along with their associated textures. It is a heavily modified version of the Quake MDL format.
Overview
Limits
HLMDL has the following limits per input SMD:
- 1 mesh
- 2048 vertices (and vertex normals) per mesh
- 4080 triangles per mesh
- 1 animation sequence
- 512 keyframes per sequence
- 128 bones
Additionally, the following limits apply to the whole MDL:
- 4 bone attachments
- 8 bone controllers
- 32 meshes across all submodels
- 256 animation sequences.
Textures must:
- Be 8-bit uncompressed BMP files.
- Have a resolution which is a multiple of 8 (multiples of 16 are preferred).
- Have a resolution which does not exceed 512x512 (soft limit; raised to 1024x1024 in
Sven Co-op and other engines like
FTE). - Have a file name which is not longer than 64 characters (including the
.bmpextension).
$body or $bodygroup entry for each mesh in the QC file.
While the HLMDL format can handle over 100K tris, the old OpenGL renderer struggles with such "high-poly" models, even on high-end GPUs.[1]
This is obviously not a problem for games on engines much newer than
Flags
Model flags
Particle effects cannot be combined, but all others can.[Clarify]
| Bit | Flag name | Particle effect? | Description |
|---|---|---|---|
| 1 | EF_ROCKET | Yes | |
| 2 | EF_GRENADE | Yes | |
| 4 | EF_GIB | Yes | |
| 8 | EF_ROTATE | No | Rotate this model around its origin, like the weapon pickups in |
| 16 | EF_TRACER | Yes | |
| 32 | EF_ZOMGIB | Yes | |
| 64 | EF_TRACER2 | Yes | |
| 128 | EF_TRACER3 | Yes | Like EF_GRENADE, but only has one trail |
| 256 | EF_NOSHADELIGHT | No | Reduces intensity of shadows on the model, without making the model flat |
| 512 | EF_HITBOXCOLLISIONS | No | Use hitbox for collision instead of bounding box |
| 1024 | EF_FORCESKYLIGHT | No | Always use skybox lighting, regardless of model location |
Texture flags
| Bit | Flag name | Description |
|---|---|---|
| 1 | STUDIO_NF_FLATSHADE | Shade the model a single tint, without any shadowing, resulting in the model looking "flat" like a cartoon character. |
| 2 | STUDIO_NF_CHROME | Use matcap environment mapping to render the texture as a sphere map.
chrome somewhere in their name. |
| 4 | STUDIO_NF_FULLBRIGHT | Display texture at maximum brightness, ignoring lighting.
|
| 8 | STUDIO_NF_MIPMAPS | Generates mipmaps for the texture, greatly reducing texture aliasing at a distance. No effect in |
| 16 | STUDIO_NF_ALPHA | Unused? |
| 32 | STUDIO_NF_ADDITIVE | Use additive translucency. Still affected by entity lighting; use the Additive rendermode on an entity to ignore lighting.
|
| 64 | STUDIO_NF_MASKED | Use binary alphatest transparency, wherein the last palette entry of the texture is transparent. |
In other engines
Half-Life MDLs are supported by
FTE and the
Unity game
Codename: Loop.
External links
References
| References | ||
|---|---|---|
|