Decals

From Valve Developer Community
Revision as of 15:19, 29 June 2005 by Charron (talk | contribs)
Jump to navigation Jump to search

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.

Fig 1a - Source color channels || Fig 1b - Source alpha channel || Fig 1c - Decal in the world

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).

Fig 2a - Source color channels || Fig 2b - Source alpha channel || Fig 2c - Decal in the world

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.