Creating a Material: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
Line 13: Line 13:
=== Converting the texture ===
=== Converting the texture ===


Texture(s) must be stored as [[Valve Texture Format]] files. The tool Valve provide for converting them to this format is [[Vtex|VTEX]], but its command-line design makes difficult to learn and unwieldy
Texture(s) must be stored as [[Valve Texture Format]] files. The tool Valve provide for converting them to this format is [[Vtex|VTEX]] - a command line tool which, while being simple to use for basic textures, lacks ease of use for editing specific parameters. For more complex material compiling, using the tool [[VTFEdit]] is more appropriate. VTFEdit provides a graphical user interface, allows you to change a VTF file's properties ''without'' re-compiling it and accepts many input formats.
 
Instead, you should use the third-party tool [[VTFEdit]]. VTFEdit provides a graphical user interface, allows you to change a VTF file's properties ''without'' re-compiling it, accepts wide array of input formats, and is generally better in every regard.


(The author of VTFEdit has also created VTF plug-ins that let you save to the format directly from [http://nemesis.thewavelength.net/index.php?p=39 Photoshop] and [http://nemesis.thewavelength.net/index.php?p=50 Paint.NET], but this tutorial will not cover them as not everyone uses those tools.)
(The author of VTFEdit has also created VTF plug-ins that let you save to the format directly from [http://nemesis.thewavelength.net/index.php?p=39 Photoshop] and [http://nemesis.thewavelength.net/index.php?p=50 Paint.NET], but this tutorial will not cover them as not everyone uses those tools.)

Revision as of 04:44, 7 August 2008

This tutorial is a step-by-step guide to creating a brand new material, including the creation of the material's texture.

Creating a texture

Any image file can be used as a texture, so long as both of its dimensions are a power of two: 2, 4, 8, 16, 256, 1024, and so on. Valve's world textures are generally 512x512, but you are at liberty to use whatever resolution you see fit. Higher resolutions lower performance but make an image sharper when viewed up close. Bear in mind that if you go too high quality may actually degrade because of the amount of resizing required.

Additionally, different classes of object have different standard resolutions (e.g. character models' are very high). Check Valve's choices in source materials.gcf with GCFScape if you are ever confused.

Note.pngNote:Textures should be saved in a lossless format like TGA pre-compile, to prevent unnecessary loss in quality.

Converting the texture

Texture(s) must be stored as Valve Texture Format files. The tool Valve provide for converting them to this format is VTEX - a command line tool which, while being simple to use for basic textures, lacks ease of use for editing specific parameters. For more complex material compiling, using the tool VTFEdit is more appropriate. VTFEdit provides a graphical user interface, allows you to change a VTF file's properties without re-compiling it and accepts many input formats.

(The author of VTFEdit has also created VTF plug-ins that let you save to the format directly from Photoshop and Paint.NET, but this tutorial will not cover them as not everyone uses those tools.)

To import your texture with VTFEdit, use File > Import or press Ctrl+I. Select your image and you will be presented with the import options screen:

VTFEdit's import options screen

General settings

These settings are the most important. There are three:

Normal format
The sub-format the texture should be stored in if it is opaque.
Alpha format
The sub-format the texture should be stored in if it has transparency.
Texture type
How this texture will be used; normally as an Animated Texture, even if it doesn't actually have animation.

If you're making a plain and simple world texture you won't need to change any of these. If you're making a texture with fine gradient detail however, you'll need to choose more suitable formats.

Mipmap settings

These settings define how the texture is scaled when viewed from far away, or when the game is running with medium or low texture detail. The only time you will realistically need to worry about it is when creating interface textures, for which you should disable the check box. This ensures that your menu images are always sharp and readable, even if the very lowest texture detail setting is being used.

Normal map settings

These (mis-labelled) settings allow you to automatically generate a bump map from your input image. You'll want to do this properly with an image editor for the material you ship, but the automated option is there regardless if you want quick results or a base to work from.

Configuring the VTF

See Valve Texture Format#Image_flags. These options can all be found in the checkbox list on the left-hand side of the VTFEdit window.

Creating a material

Source doesn't access textures directly. They must first be included in a material.

Materials can be created in any text editor, but it's recommended that you use Notepad++ in conjunction with the community-made syntax highlighting rules. You must save the material under your game or mod's materials\ folder with the file extension ".vmt".

Syntax

A material file looks like this:

<shader>
{
	<parameter> <value>
	...
}
LightmappedGeneric
{
	$basetexture coast\shingle_01
	$surfaceprop gravel
}

There are many shaders to choose from, but most materials will use either LightmappedGeneric (brushes) or VertexLitGeneric (models). The third most common shader is UnlitGeneric, which is used for UI materials and the occasional tool texture.

Parameters

For a list of all documented shader parameters, see Category:List of Shader Parameters.

With a shader chosen you're onto parameters. There are hundreds of options for what to put in a material so this article will only cover the most common, which are accepted by more or less all shaders. They are:

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.

See also