This article's documentation is for anything that uses the Source engine. Click here for more information.

$detail

From Valve Developer Community
Jump to: navigation, search

English (en)français (fr)
Edit
For detail textures as used in GoldSrc GoldSrc, see Detail textures (GoldSrc).
A detail texture (noise_detail_01), and its effect when applied to a material (brickwall031a).

$detail is a material shader parameter available in all Source Source games. It specifies a texture which Source will use to add high-resolution detail to a material when it is viewed up close, by darkening or lightening the albedo appropriately, depending on the $detailblendmode. You can also use a full color (as opposed to grayscale) image and blend it using $detailblendmode 2. It is very effective for increasing the apparent resolution of a texture, and was used extensively in Half-Life 2: Episode Two Half-Life 2: Episode Two, as well as Portal 2 Portal 2 for the white tile textures's bumps.

Icon-Bug.pngBug:$detail textures do not work in conjunction with some parameters:
Note.pngNote:
Blank image.pngTodo: Document issues from other branches of source.
Confirm.pngConfirm: Things that don't work in Alien Swarm, usually don't work in Left 4 Dead either. And vice versa. But it'd be better if someone could confirm this.
Note.pngNote: Using $detail with $blendmodulatetexture will cause a graphical issue (stripes over the surface), only works correctly in Counter-Strike: Global Offensive.

Syntax

$detail <texture>

You will probably want to use at least $detailscale (see below) as well.

Parameters and Effects

Rotates, scales, etc. the detail texture.
The default position is center .5 .5 scale 1 1 rotate 0 translate 0 0.
  1. center defines the point of rotation. Only useful if rotate is being used.
  2. scale fits the texture into the material the given number of times. 2 1 is a 50% scale in the horizontal X axis while the vertical Y axis is still at original scale.
  3. rotate rotates the texture counter-clockwise in degrees. Accepts any number, including negatives.
  4. translate shifts the texture by the given numbers. .5 will shift it half-way. 1 will shift it once completely over, which is the same as not moving it at all.
Note.pngNote:All values must be included!
Icon-Bug.pngBug:Scaling the texture may cause odd issues where the Texture Lock tool in Hammer will not actually lock the texture in place.
Icon-Bug.pngBug:Rotating textures applied on brushes will rotate around the map origin (confirm: Orangebox engine only?). A fix for this is to change the center position in the VMT to the brush's origin.
Icon-Bug.pngBug:This parameter does not exist for LightmappedGeneric, WorldVertexTransition and (only in Counter-Strike: Global Offensive) Lightmapped_4WayBlend.
Icon-Bug.pngBug:Does not work with $treesway.
Fits the detail texture onto the material the given number of times (default = 4). Generally used instead of $detailtexturetransform with a value of around 7 or 8 for a 128px detail texture. To independently scale the X and Y coordinates, place your values in brackets: $detailscale "[ 4 8 ]"

Controls the amount that the detail texture affects the base texture. The precise use of this depends on the blend factor; in most cases it acts similarly to $alpha. A value of 0 usually makes the detail texture have no effect, whilst a value of 1 applies the full effect.

How to combine the detail material with the albedo.
There are 12 different detail blend methods that can be used.
The blend modes are implemented in 🖿stdshaders/common_ps_fxc.h.
Blend modes in L4D2, factor .8 (Left to right modes 0 to 11, base texture only and detail only. Top row detail opacity 100%, bottom 50%).
Icon-Important.pngImportant:Listed below are limitations which apply to the various modes for specific games and shaders. Using a non-supported Blendmode can/will result in "Missing Shader Combo" errors flooding the console. The material will not render!
Color tint of the detail texture.
Icon-Bug.pngBug:In Source 2013 Team Fortress 2 Alien Swarm Counter-Strike: Global Offensive On VertexLitGeneric. Does not work with $bumpmap or $phong
Icon-Bug.pngBug:Does not work with $blendtintbybasealpha
Blank image.pngTodo: Verify which games this is broken in ( Works in Left 4 Dead 2 Team Fortress 2 Portal 2 Counter-Strike: Global Offensive Alien Swarm and Source 2013 ).
$detailframe <integer> (DX9+)
The frame to start an animated $detail texture on.
WorldVertexTransition only. When enabled, causes the level of detail alpha to determine "base texture blending."
Icon-Important.pngImportant:Since at minimum Source 2013 this parameter does not actually do anything!


Counter-Strike: Global Offensive WorldVertexTransition Parameters

Confirm:are these limited to Counter-Strike: Global Offensive, or are they in some/all CS:GO engine branch–branch games?
$detail2 <texture> (only in Counter-Strike: Global Offensive)
Shader(s): WorldVertexTransition

Detail texture for WorldVertexTransition's second layer.

Note.pngNote:LightmappedGeneric technically has support for these parameters and other WorldVertexTransition parameters, but they may not work as expected.
Note.pngNote:There is no $detailtransform2, the Shader will use $basetexturetransform2 instead!
Icon-Important.pngImportant:Requires both $detail and $basetexture2 to be present!
Icon-Bug.pngBug:Cannot be used with $detailblendmode "9".
$detailscale2 <float> (only in Counter-Strike: Global Offensive)
Shader(s): WorldVertexTransition
Detail scale for $detail2.
$detailblendfactor2 <normal> (only in Counter-Strike: Global Offensive)
Shader(s): WorldVertexTransition
Detail blend factor for $detail2.
Note.pngNote:$detailblendfactor and $detailblendfactor2 are blended together before combining with the basetexture.
$detailframe2 <integer> (only in Counter-Strike: Global Offensive)
Shader(s): WorldVertexTransition
The frame to start an animated $detail2 texture on.
$detailtint2 <RGB matrix> (only in Counter-Strike: Global Offensive)
Shader(s): WorldVertexTransition
Color tint for $detail2.


Counter-Strike: Global OffensivePortal 2 SolidEnergy Parameters

Blank image.pngTodo: Confirm if all of this information is actually true for Portal 2
Confirm.pngConfirm: Is SolidEnergy available in CS:GO engine branch–branch games?
Note.pngNote:$detail1tint and $detail2tint do not exist on this Shader, they are missing in this list intentionally!
Icon-Important.pngImportant:$detail has very similar parameter names, but they are not the same!
$detail1 <texture> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy
Detail texture for SolidEnergy's second layer.
$detail1blendmode <integer> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy

How to combine the detail material with the albedo. There are 2 different detail blend methods that can be used.

$detail1scale <float> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy
Detail scale for $detail2.
Note.pngNote: Does not appear to do anything.
$detail1blendfactor <float> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy
Detail blend factor for $detail2.
Note.pngNote: Does not appear to do anything.
$detail1frame <integer> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy
The frame to start an animated $detail1 texture on.
Icon-Important.pngImportant:Counter-Strike: Global Offensives WorldVertexTransition Shader has very similar $detail2 parameter names, but they are not the same!
$detail2 <texture> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy
Detail texture for SolidEnergy's third layer.
$detail2blendmode <integer> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy

How to combine the detail material with the albedo.

There are 2 different detail blend methods that can be used.
$detail2scale <float> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy
Detail scale for $detail2.
Note.pngNote: Does not appear to do anything.
$detail2blendfactor <float> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy
Detail blend factor for $detail2.
Note.pngNote: Does not appear to do anything.
$detail2frame <integer> (only in Counter-Strike: Global OffensivePortal 2)
Shader(s): SolidEnergy
The frame to start an animated $detail2 texture on.

Valve's Detail Textures

Valve's stock detail textures (available in OB only) are best used with the following pre-configured values:

$detail detail\noise_detail_01 // e.g. for brickwork, concrete...
$detailscale 7.74
$detailblendfactor 0.8
$detailblendmode 0
$detail detail\metal_detail_01
$detailscale 4.283
$detailblendfactor .65
$detailblendmode 0
$detail detail\rock_detail_01
$detailscale 11
$detailblendfactor 1
$detailblendmode 0
$detail detail\plaster_detail_01
$detailscale 6.783
$detailblendfactor .8
$detailblendmode 0

The below parameters come from models\props_forest\LadderWood.vmt. It is the only Valve Stock texture VMT file to use this particular detail texture. Because the detail texture (detail\wood_detail_01) is a high resolution (1024×1024), the $detailscale is lower than the others, with the exception of rock_detail_01.

$detail detail\wood_detail_01
$detailscale 2.563
$detailblendfactor .8
$detailblendmode 0

Additionally, there are 2 other stock detail textures. detail\detailash001a and detail\detaildirt001a. These files were used in the "leaked" version of Half-Life 2 Half-Life 2 and in Half-Life 2: Episode One Half-Life 2: Episode One using the following parameters.

Concrete/concretefloor009a in Episode One materials:

$detail detail/detaildirt001a
$detailscale 0.27

Metal/metalfloor005a in Episode One materials:

$detail detail/detailash001a
$detailscale 0.50

See also

Hiding large-scale tiling with detail textures - How to make texture repeating less noticeable using $detail