Template:Archived page history/VMT
kids tennis racquets spanish for police officers discount ephedrine paint colour charts australia annuity florida private trust free retro ringtones christian ringtones samsung sph ocean city new jersey beach front rental ragnorak online characters what to do in a blizzard buy viagra download latin ringtones professional credit counselor the male g spot european cycling holidays toronto fitness clubs web translator 2005 films light heavyweight champion accountable held mistake people their who judges commissions keynote speaker orlando country ringtones professional english training matrix mechanics tco 99 expensive jewelry designers mobile ringtones poop comes out discount carisoprodol elevated creatine level this is the moment that you know that you sports drink comparisons indiana realistate free tmobile ringtones recycling uk search aol members profiles laundromat or full or service free voice ringtones engine makes noise at the end of saw 2 no warning ben cook men only magazine website sean taylor pic memory stick duo 512mb maledetto phone from morocco electrical workbenches english name into chinese sex uma rolling stone covers posters phillies logo outrageous video on a day like today chords need for speed ii mp3 list of different types of doctors advanced computer architecture lecture notes legal provider service 7th grade science experiments string bikini stories metformin online artificial plants australia pageant makeup rosmalen atl credit movie people talk to themselves jack london square berkely supermarket delivery ny toddler baseball jersey window server 2003 hardware requirement sonyericsson ringtone xerox printer cartridge free phone ringtones losing a father at a young age song lyrics have you ever seen the rain 171 form standard illinois senate district map engine maryland performance john lewis complaints 10 most reliable cars celebrex online 3 manual mazda service shake speare poems live nude toons ncaa coaches poll pocket polly search white zombie shirt ap world history tests vicodin online alberta edmonton journal isuzu dealer austin academy award winning documentaries 2 corel drawing off site backup storage ohio state football flag pci express video cards nvidia auto body salvage yards university of iowa job net free music ringtones VMT (Valve Material Type) file tells the Source 'Graphics Rendering Engine' how the surface of a brush or model should appear in game.
- The Source Material System is built on VMT files.
- VMT files are all kept in the
game_directory/materials
folder (or sub-folders thereof) and use the.vmt
extension so that the Source Engine knows where to find them. - The contents of a (text-based) VMT file specify which Shaders should be used to render the surface, and define a configuration of the various Shader Parameters for a particular material type surface. For specifics, please see the List of Shaders and the List of Shader Parameters
Probably the most important Shader Parameter, $basetexture, defines which VTF (Valve Texture File) texture to use on that surface.
Almost all Shader Parameters define 'visual' properties of a surface, with the notable exception of $surfaceprop ('surface properties') which affects such things as the sound made when an object collides with the surface. The more sophisticated 'Physics Interaction' characteristics of a world object (which apply to models but not brushes) are specified within the object's QC file.
An example of the one of the simplest VMT files:
"LightmappedGeneric" { "$basetexture" "Coast/Shingle_01" "$surfaceprop" "gravel" }
Here the VMT simply says that the "LightmappedGeneric" shader should be used to render this material type, and it should apply it to the Shingle_01.vtf (its $basetexture) which can be found inside the game_directory/materials/Coast
directory. (Note that the $basetexture path is always relative to the game_directory/materials
folder and the .vtf
file extension is not necessary.) The second parameter ($surfaceprop) tells it to use the sound effects, etc associated with 'gravel' materials.
Creating a Valve Material (.vmt) file
There are many shaders that can be used to render a texture. To begin with, we'll use a simple shader: LightmappedGeneric
. This shader is used for world surfaces that should receive lightmaps.
The simplest definition of this shader is:
"LightmappedGeneric" { "$basetexture" "test/MyTexture" }
This will render the "test/MyTexture"
texture file (.vtf) opaquely and with lightmaps applied to it. This is most generally used for textures applied to brush surfaces (like walls).
One of the easiest methods of creating new .vmt files is to open an existing .vmt that has similar properties to the material you are creating. Edit the contents of the file and save it with a different name to create a new material.
More about material files
LetâÂÂs start by looking at an example of a material file:
"LightmappedGeneric" { // String values are quoted "$basetexture" "shadertest/LightmappedTexture" "$envmap" "shadertest/LightmappedTexture_envmap" // Vector values are quoted "$color" "[1 0 0]" // Float and integer values are *not* quoted "$alpha" 0.5 "$nocull" 1 }
The first line of the material file is the name of the shader to be used. The material variables for the shader are defined inside the curly braces. Note that you should not have '=' between the material variable name and its value. Also note that comment lines use '//'. Any text after the '//' on the same line will be ignored when the material is loaded.
If the shader needs to fallback to a simpler shader because it's running on a lower-end system, you can optionally specify an additional block to override material variable values specified in the original block.
Here's an example:
"LightmappedGeneric" { "$basetexture" "shadertest/LightmappedTexture" "$envmap" "shadertest/LightmappedTexture_envmap" // If the shader falls back to shader "LightmappedGeneric_DX7", // then the environment map defined in this block will be used instead of the // one defined above. Since $basetexture isn't defined in this block, // the original one will be used. "LightmappedGeneric_DX7" { "$envmap" "shadertest/OverrideEnvMap" } // If the shader falls back to shader "LightmappedGeneric_DX6", // then the base texture defined in this block will be used instead of the // one defined above. Since $envmap isn't defined in this block, the original // one will be used. "LightmappedGeneric_DX6" { "$basetexture" "shadertest/OverrideTexture" } }
For information on shader fallbacks, see Material choices and rendering performance in Controlling Geometry Visibility and Compile Times and Half-Life 2 Shader Fallbacks.
One other thing you'll see in Valve Material files is the occasional variable starting with a '%'.
For example:
"UnlitGeneric" { $envmap" "shadertest/shadertest_envmap" %tooltexture" "shadertest/shadertest_envmap" }
This simply means that the variable is used by tools only and won't be loaded by the engine. The only variables that need '%' are '%tooltexture"
, "%keywords"
, "%detailtype"
, and all of the compile variables like "%compileWater"
or "%compileHint"
.