VMT: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (Setting bug notice hidetested=1 param on page where the bug might not need tested in param specified)
 
(15 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{langsp}}
{{LanguageBar}}
 
{{todo|Move engine-agnostic stuff to [[material]].}}
{{todo|Move engine-agnostic stuff to [[material]].}}
A '''VMT''' ("Valve Material") file defines the [[material]] used by a two-dimensional surface. It contains all of the information needed for {{src|4}} to simulate the surface visually, aurally, and physically.
A '''VMT''' ("Valve Material") file defines the [[material]] used by a two-dimensional surface. It contains all of the information needed for {{src|4}} to simulate the surface visually, aurally, and physically.<br>If a material is missing, it will produce the infamous Source pink and black checkered pattern. A white wireframe is not a missing material, but instead a missing [[shader]].


__TOC__
__TOC__
Line 18: Line 19:
{{CodeBlock|<nowiki>LightmappedGeneric
{{CodeBlock|<nowiki>LightmappedGeneric
{
{
$basetexture coast\shingle_01
$basetexture "coast/shingle_01"
$surfaceprop gravel
$surfaceprop gravel
}</nowiki>}}
}</nowiki>}}
Line 24: Line 25:


#The <code>[[LightmappedGeneric]]</code> shader is used, which means that the material is for use on surfaces with [[lightmap]]s (i.e. [[brush]]es).
#The <code>[[LightmappedGeneric]]</code> shader is used, which means that the material is for use on surfaces with [[lightmap]]s (i.e. [[brush]]es).
#''The {{Code|<nowiki>{</nowiki>}} character opens a set of parameters''
#''The opening curly brace ({{Code|<nowiki>{</nowiki>}}) opens a set of parameters''
#The <code>[[$basetexture]]</code> parameter is given with <code>coast\shingle_01</code>, which is the location of a texture. This is what will be drawn on the screen.
#The <code>[[$basetexture]]</code> parameter is given with <code>coast\shingle_01</code>, which is the location of a texture. This is what will be drawn on the screen.
#<code>[[$surfaceprop]]</code> gives the material the physical properties of gravel.
#<code>[[$surfaceprop]]</code> gives the material the physical properties of gravel.
#''The {{Code|<nowiki>}</nowiki>}} character closes a set of parameters''
#''The closing curly brace ({{Code|<nowiki>}</nowiki>}}) 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 [[model]]s, for instance, another version would need to be created using the {{Shader Name|VertexLitGeneric}} shader.
It's important to remember that this material can only be used on brushes. If it needed to be used on [[model]]s, for instance, another version would need to be created using the {{code|[[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 {{Shader Name|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.
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 {{code|[[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|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.}}
{{tip|If you ever need to use a space, tab, or curly brace 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.}}
{{bug|hidetested=1|Sometimes{{when}}, the first parameter defined in the VMT will fail to load. If this happens, a dummy parameter such as {{code|$bug}} can be used.}}


== Finding materials ==
== Finding materials ==
Line 39: Line 41:
=== SteamPipe ===
=== SteamPipe ===


When Valve updated some games to [[SteamPipe]], the materials were moved from [[GCF]] into [[VPK]] files. VPK Files work with {{gcfscape|4}}.
When Valve updated all {{src|4}} games to [[SteamPipe]], all materials were moved from [[GCF]] into [[VPK]] files. Third-party games (running on {{src04|1}} - {{src09|1}}) that previously used [[GCF]] files are also having it's materials moved to depot [[VPK]] files. VPK Files work with {{gcfscape|4}} and {{vpkedit|4}}.


More info on SteamPipe [https://support.steampowered.com/kb_article.php?ref=7388-QPFN-2491 here]
More info on SteamPipe [https://support.steampowered.com/kb_article.php?ref=7388-QPFN-2491 here]
=== Non-SteamPipe Games ===
=== Non-SteamPipe Games ===


in non [[SteamPipe]] source games, Materials are stored in the {{Path|materials\}} folder of your game or mod. The best way to browse them is from {{hammer|4}}'s texture selection screen.
In non [[SteamPipe]] {{src|4}} games, Materials are stored in the {{Path|materials\}} folder of your game or mod. The best way to browse them is from {{hammer|4}}'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|4}}. They tend to be stored in GCFs with 'materials' in their name.
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|4}}. They tend to be stored in GCFs with 'materials' in their name.
== Creating materials with XBLAH's Modding Tool ==
[[File:XBLAH's Modding Tool v1.18.1.1 - Material Editor.png|thumb|320px]]
{{Xblahmt|4}} can be used to create some types of materials.
<br/><span style="color: #FFFFFF; font-weight: bold">Where to find it</span><br/>
This can be accessed within the tool through '''Materials > Material Editor'''.
<br/><span style="color: #FFFFFF; font-weight: bold">How to use it</span><br/>
When you are creating the material, the tool will create all the necessary files after the user selects the desired source images, either from a local bitmap resource or from a mounted vtf.
==== Selecting the Shader ====
Currently, the following [[Shader|shaders]] are supported:
* [[UnlitGeneric]]
* [[LightmappedGeneric]]
* [[VertexLitGeneric]]
If the mod runs on Mapbase branch, when saving the material, it will automatically add sdk_ to the shader name.
==== Selecting textures ====
When creating a new material, you can use existing textures, or use directly image files, without any prior conversion. Once you save the material, the tool will automatically compile the materials to the required format.
To load a texture, right click the image preview of the desired texture, and click '''Open Texture''' to select an existing texture, or '''Import''' to load an image file. You can also export the current texture to an image format by right clicking the image preview, and clicking '''Export'''.
==== Generating Normal Maps ====
If the base texture has a bland color and dark and bright spots represent bevels, you can use the Generate Normal Map button to automatically create a normal map. This works for most cases.


== See also ==
== See also ==

Latest revision as of 07:07, 20 May 2025

English (en)Deutsch (de)Español (es)Français (fr)한국어 (ko)Русский (ru)Translate (Translate)
Todo: Move engine-agnostic stuff to material.

A VMT ("Valve Material") file defines the material used by a two-dimensional surface. It contains all of the information needed for Source Source to simulate the surface visually, aurally, and physically.
If a material is missing, it will produce the infamous Source pink and black checkered pattern. A white wireframe is not a missing material, but instead a missing shader.


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 opening curly brace ({) 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 closing curly brace (}) 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, tab, or curly brace 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.
Icon-Bug.pngBug:Sometimes[When?], the first parameter defined in the VMT will fail to load. If this happens, a dummy parameter such as $bug can be used.

Finding materials

SteamPipe

When Valve updated all Source Source games to SteamPipe, all materials were moved from GCF into VPK files. Third-party games (running on Source 2004 - Source 2009) that previously used GCF files are also having it's materials moved to depot VPK files. VPK Files work with GCFScape GCFScape and VPKEdit VPKEdit.

More info on SteamPipe here

Non-SteamPipe Games

In non SteamPipe Source Source games, Materials are stored in the 🖿materials\ folder of your game or mod. The best way to browse them is from Hammer 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 GCFScape. They tend to be stored in GCFs with 'materials' in their name.

See also