VMT: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (Added compile flags, added material surface property list. Hopefully centralising everything a new reader would want to know, and also making it easier for finding this articles as an experienced reader.)
m (More useful linking, more complete linking, more better-rer linking. No reason to be a maze-like challenge to find appropriate and relevant articles.)
Line 7: Line 7:
# [[Texture]] names
# [[Texture]] names
# [[$surfaceprop|Physical surface]] [[Material surface properties|types]]
# [[$surfaceprop|Physical surface]] [[Material surface properties|types]]
# [[Shader]] [[:Category:List of Shader Parameters|parameters]]
# [[:Category:Shaders|Shader]] [[:Category:List of Shader Parameters|parameters]]
# [[Material Map Compile Flags|Special compile properties]]
# [[Material Map Compile Flags|Special compile properties]]
# [[Material optimization|Fallbacks]]
# [[Material optimization|Fallbacks]]
Line 52: Line 52:
* [[Notepad++ VDF languages|Notepad++ syntax highlighting for materials]]
* [[Notepad++ VDF languages|Notepad++ syntax highlighting for materials]]
* [[Valve Texture Format]]
* [[Valve Texture Format]]
* [[Shader]]
* [[:Category:List of Shader Parameters|List of Shader Parameters]]
* [[:Category:List of Shader Parameters|List of Shader Parameters]]
* [[Material Editor]]
* [[Material Editor]]

Revision as of 20:59, 8 August 2022

English (en)Deutsch (de)Español (es)Français (fr)한국어 (ko)Русский (ru)Translate (Translate)

A material is a .vmt ("Valve Material Type") text file that defines a two-dimensional surface. It contains all of the information needed for Source to simulate the surface visually, aurally, and physically.

The contents of a material will fall into some or all of these categories:

  1. Texture names
  2. Physical surface types
  3. Shader parameters
  4. Special compile properties
  5. Fallbacks
  6. Proxies

A simple example

LightmappedGeneric
{
	$basetexture coast\shingle_01
	$surfaceprop gravel
}

This is a very basic shingle beach material.

  1. The LightmappedGeneric shader is used, which means that the material is for use on surfaces with lightmaps (i.e. brushes).
  2. The { character opens a set of parameters
  3. The $basetexture parameter is given with coast\shingle_01, which is the location of a texture. This is what will be drawn on the screen.
  4. $surfaceprop gives the material the physical properties of gravel.
  5. The } character closes a set of parameters

It's important to remember that this material can only be used on brushes. If it needed to be used on models, for instance, another version would need to be created using the VertexLitGeneric shader.

Most of the time switching materials from one shader to another is as simple as changing their first line, since a great number of parameters are shared between them. Some params only work with certain shaders, like Phong effects, which are only available with VertexLitGeneric, but unfortunately you won't encounter any critical errors if a param isn't understood by the shader. It just won't have any effect.

Tip.pngTip:If you ever need to use a space or tab character in a parameter value, you must wrap the whole value with "quote marks". You'll often see absolutely everything wrapped like this - save yourself some typing, as that's unnecessary.

Finding materials

SteamPipe

When Valve updated some games to SteamPipe, the materials were moved from GCF into VPK files. VPK Files work with GCFScape.

More info on SteamPipe here

Non-SteamPipe Games

in non SteamPipe source games, Materials are stored in the materials\ folder of your game or mod. The best way to browse them is from Hammer's texture selection screen.

If you want to edit or view the code of Valve's material files you will first need to extract them from their GCF package with GCFScape. They tend to be stored in GCFs with 'materials' in their name.

See also