Materials and Textures
<!-- This page is WIP --> Textures and Materials are an important integral features of the Source engine. However, they can be very confusing and intimidating for anyone not familiar with them. This article will attempt to explain what they are and how to use them.
<!-- See Also: Valve Developers Wiki links -->
A texture is a , meaning it has a concrete width and height in pixels, and each pixel has a certain color (and in some cases, an ). Textures are used for various purposes. The most obvious use for them is to define what an object should look like, in color, but a texture can also be used as a bumpmaps - where the red, green and blue values of each pixel are creatively used to specify its 3D direction. There are other ways that textures are used, but the way a texture is
used doesn't change how the texture is
stored - it is always a bitmap image.
<!-- to do: discuss different texture formats and flags -->
In Lua, a texture is represented with ITexture
A material is a collection of one and any number of parameters. In almost all cases, at least one of the parameters will refer to a texture.
Materials are used
mostly for rendering, but also have other effects - for example, the material will decide what sound a surface should make when it is hit.
Perhaps the easiest way to understand this is through example. In Garry's Mod, the material "phoenix_storms/plastic" is saved as "phoenix_storms/plastic.vmt", and contains:
Here, the shader is VertexLitGeneric and there are 8 parameters. The "$basetexture" parameter "phoenix_storms/plastic" is a texture's name (garrysmod/materials/phoenix_storms/plastic.vtf), and defines the visual look of the material. The "$bumpmap" parameter also refers to a texture, but this one defines the "3D effect" applied to the otherwise flat texture. The "$surfaceprop" parameter affects various things, for example the sound the surface makes when it's hit or the sound of the footsteps when walked on.
The other parameters further affect the way it is rendered - mostly how lighting should affect it.
<!-- to do: pictures here of the textures involved, plus the in-game result -->