Decals
When the player shoots his or her weapon into a wall, the marks left by the bullet impacts are called "decals". These are most easily thought of as materials that are applied to a surface and remain there as an indelible mark on the world. Posters, scorch marks, and stenciled letters can all be created using this type of graphic. Decals will clip their extents to whatever surface they are placed on to. For example, a decal applied to a staircase would cascade down on to each stair surface instead of hanging out into space. You can also think of this as how a stencil would apply a mark to the world.
Creating decals is fairly straightforward: they are simply materials generally having an alpha mask of some sort, and also often using the mod2x shader. Before reading this document, please refer to the Creating Materials document for the basics of material creation.
Simple Decals
The most simple type of decal is one that simply acts like a true decal or stencil: source art (See Fig 1a) is clipped and projected on to the world within some mask, specified via the materials alpha channel (See Fig 1b). The result is similar to Fig 1c.



You must also define a VMT file for the decal material, so that it can properly be interpreted by the renderer. This VMT would look like:
"Decal" { "$basetexture" "decals/mydecal.tga" "$decalscale" 0.10 }
It's important that the shader used to render this image is the "Decal" shader. Without this shader, the material will not clipped or projected onto the world properly.
In this example the key "$decalscale"
is set to a value of "0.1", meaning that the decal is rendered at 1/10th scale inside of the engine. If the source texture for this decal is 128 pixels, it will be 12.8 inches in size in the engine (or about a foot in length).
Once the VMT has been specified, the decal may be placed in Hammer via an overlay, or in code via the decal code.
Using Modulation
For decals intended to mimic the look of pock marks or dents in a surface, the mod2x
material shader is especially suitable. This shader lightens any destination pixels for every source pixel that is over mid-range gray (128). Likewise, it will darken any destination pixels for every source pixel that is below mid-range gray. This effect can be used to give the impression of depth when applied to a surface (See Fig 2c).
To begin, create a source image who's color channel will be used for the modulation's source values (See Fig 2a). Again, light values will lighten pixels they're drawn over, while dark values will darken the destination pixels. Mid-gray values will be treated as translucent.
Next, create an alpha channel that defines a mask for the decal. Because modulation cannot have an exact middle value currently, the mask is necessary to prevent "bordering" from occurring around the decal (See Fig 2b).



Finally, you must create a VMT file to properly define this material as a modulated decal:
"DecalModulate" { "$basetexture" "decals/mydecal.tga" "$decalscale" 0.10 }
Again, the decal is now ready for use within the engine.