Vtex CLI use

From Valve Developer Community
Jump to navigation Jump to search

Apart from the drag-and-drop method, Vtex can also be executed via the command prompt in the Command Line Interface (MS-DOS). This will allow you to use its more advanced features. You can provide additional parameters to create a basic .vmt file when the texture is compiled, as well as other options.

The syntax for vtex.exe is as follows:

vtex [-quiet] [-nopause] [-mkdir] [-shader ShaderName] [-vmtparam Param Value] texture1 texture2 ...

Any file extentions are ignored. (You can refer to the non-existant texture1.asd without problems, as long as the tga image is still present.)


Basic Vtex usage

Command-line may explain this better.

The Windows environment variable "%sourcesdk%" can be utilized to locate vtex.exe easily in a command-line statement. This variable contains the location of the Source SDK installation directory.

For example, to compile a Half-Life 2 material called "sample_material.tga" in the directory "sourcesdk_content/hl2/materialsrc/metal", you would open a command prompt, change to the directory to "sourcesdk_content/hl2/materialsrc/metal" and type this at the command-line:

"%sourcesdk%\bin\vtex" sample_material.tga

The compiled .vtf file would be compiled to this folder (assuming you had set Half-Life 2 as your current game directory):

SteamApps\username\half-life 2\hl2\materials\metal
Note.pngNote:It is very important that you set the Current Game in either the SDK Launcher or VConfig to the correct game directory before you open a command prompt to compile textures. Changing the Current Game will not affect any command prompt windows that are already open. This is due to how Windows uses environment variables.

Vtex commands

-mkdir

You can add the -mkdir command to vtex, and it will add the destination directory if it does not exist. For example, if you had a .tga at /sourcesdk_content/hl2/materialsrc/sample/sample_material.tga you would type this at the command-line:

"%sourcesdk%\bin\vtex" -mkdir sample_material.tga

This would create a new directory called "sample" in your Half-Life 2/hl2/materials directory, if it didn't already exist, and then place the compiled .VTF file in that new location. If the directory already exists, the -mkdir parameter is ignored.

Confirm:(in all games since Source 2013) This seems to be default behavior.

-shader

You can use the -shader <shadername> command to have Vtex create a .VMT for the new material with the shader specified. For example, to create a basic LightmappedGeneric material, use the -shader command like this:

"%sourcesdk%\bin\vtex" -shader LightmappedGeneric sample_material.tga

This would compile the material sample_material.vtf in half-life 2/hl2/materials/metal as well as create a new material file sample_material.vmt in the same location, using the LightmappedGeneric shader, like this:

"LightmappedGeneric"
{
	"$baseTexture" "sample/lightmappedgeneric"
}


-vmtparam

The -vmtparam <parameter> <value> command can be used to add additional material parameters to the created .vmt file. If a .vmt already exists in the same location, any new parameters will not be added. For example, to make a material translucent, type the following:

"%sourcesdk%\bin\vtex" -shader LightmappedGeneric -vmtparam $translucent 1 sample_material.tga

Which would create the following sample_material.vmt:

"LightmappedGeneric"
{
	"$baseTexture" "sample/lightmappedgeneric"
	"$translucent" 1
}

Multiple -vmtparam statements can be added in the same Vtex command, like this:

"%sourcesdk%\bin\vtex" -shader LightmappedGeneric -vmtparam "$bumpmap" "sdk/bumpspecular_normal" -vmtparam "$envmap" "env_cubemap" sample_material.tga
Note.pngNote:Up to 16 parameters can be added.

This would create the following sample_material.vmt specifying parameters for a bumpmapped specular material:

 "LightmappedGeneric"
 {
 	"$baseTexture" "sample/sample_material"
 	"$bumpmap" "sdk/bumpspecular_normal"
 	"$envmap" "env_cubemap"
 }

-quiet

When added, this commands will cause Vtex to do its work without producing any output to the console and will not pause when finished.


-nopause

Removes the "Hit a key to continue" message that appears when Vtex has finished working.


-outdir

You can use the -outdir <parameter> <value> command to override the output directory out the VTF file.


-quickconvert

Used to quickly convert an older VTF file format to a newer VTF file format.

-dontusegamedir

Puts output files in same folder as input files. Best used with -quickconvert


Wildcards

Command-line wildcards can also be used with Vtex. This command-line would compile all .tga files in the current directory:

"%sourcesdk%\bin\vtex" *.tga

This command-line would compile all .tga files in the current directory with names than begin with "sample":

"%sourcesdk%\bin\vtex" sample*.tga

In this case, the files "sample_metal" and "sample3" would be compiled, but not "samp_metal" or "sampl_2".


Chaining

Vtex can compile multiple materials from the same command-line. Simply add the name of each .tga after the first, like this:

"%sourcesdk%\bin\vtex" sample_material1.tga sample_material2.tga sample_material3.tga

If a .vmt is generated on the command-line using the -shader command, a unique .vmt will be created for each .tga in the chain, all with the same parameters specified by the -shader and -vmtparam commands. If you need more individual control of the shader parameters of each .tga, use a batch (.bat) file to run vtex multiple times instead.


See also