$detail: Difference between revisions
JarateIsCool (talk | contribs) mNo edit summary |
|||
(159 intermediate revisions by 30 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{Source topicon}} | ||
}} | |||
{{LanguageBar}} | |||
{{tabsBar|main=detail textures}} | |||
{{ | {{clr}} | ||
{{ | {{toc-right}} | ||
[[File:Detail.jpg|frame|right|A detail texture (noise_detail_01), and its effect when applied to a material (brickwall031a).]] | |||
{{this is a|shader parameter|name=$detail}} 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 [[diffuse]] appropriately, depending on the <tt>$detailblendmode</tt>. You can also use a full color (as opposed to grayscale) image and blend it using {{Code|$detailblendmode 2}}. It is very effective for increasing the apparent resolution of a texture, and was used extensively in {{hl2ep2|4}}, as well as {{portal2|4}} for the white tile textures's bumps. | |||
{{Bug| {{Code|$detail}} textures do not work in conjunction with some parameters: | |||
* In {{as}}{{csgo}}{{src13}} on {{ent|LightmappedGeneric}}, Does not work with {{ent|$seamless_scale}}. | |||
* In {{as}}{{csgo}}{{src13}} on {{ent|VertexLitGeneric}}. Does not work with {{ent|$selfillumfresnel}}, if {{ent|$bumpmap}} is used. {{confirm|Fixed in {{tf2branch}}?}} | |||
* In {{as}}{{src13}} on {{ent|LightmappedGeneric}}, Does not work with {{ent|$lightwarptexture}} | |||
}} | |||
: {{Note|<span><!-- This fixes the list --></span> | |||
:* In {{csgo}}, {{ent|LightmappedGeneric}} does not appear to even have {{ent|$lightwarptexture}} as a parameter... So it cannot "not work". | |||
:* In {{as}}{{csgo}} on {{ent|VertexLitGeneric}}, Does not work with {{ent|$desaturatewithbasealpha}} | |||
:* In {{as}}, Does not work with {{ent|$blendmodulatetexture}} '''and''' {{ent|$bumpmap}} | |||
}} | |||
: {{Todo| Document issues from other branches of source.}} | |||
: | : {{ModernConfirm| Things that don't work in {{as}}, usually don't work in {{l4d}} either. And vice versa. But it'd be better if someone could confirm this. }} | ||
: | : {{bug|tested={{tf2}}|Using {{Code|$detail}} with {{ent|$blendmodulatetexture}} will cause a graphical issue (stripes over the surface), only works correctly in {{csgo}} and {{GMOD}}. }} | ||
== Syntax == | |||
$detail <texture> | |||
You will probably want to use at least <code>$detailscale</code> (see below) as well. | |||
== Parameters and Effects == | |||
{{MatParamDef | |||
| $detailtexturetransform|matrix|dx9 = 1 | |||
| Rotates, scales, etc. the detail texture. {{VMT UVtransform}} | |||
{{Bug|This parameter does not exist for {{ent|LightmappedGeneric}}, {{ent|WorldVertexTransition}}, {{ent|LightmappedTwoTexture}}, {{ent|WorldTwoTextureBlend}}, and {{only|{{csgo}}}} {{ent|Lightmapped_4WayBlend}}.}} | |||
{{Bug|Does not work with {{ent|$treesway}}.}} | |||
{{Note|{{strata|only}} For the {{ent|PBR (Strata shader)}}, this parameter is called {{code|$detailtransform}}.}} | |||
}} | |||
{{MatParamDef | |||
|$detailscale| float | |||
| Fits the detail texture onto the material the given number of times (default {{=}} 4). Generally used instead of <code>$detailtexturetransform</code> 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: <code>$detailscale "[ 4 8 ]"</code> | |||
}} | |||
{{MatParamDef | |||
|$detailblendfactor|normal| | |||
Controls the amount that the detail texture affects the base texture. The precise use of this depends on the blend mode; 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. | |||
{{bug|Nonfunctional for <code>$detailblendmode</code>s 1 or 5 on [[UnlitGeneric]]|tested={{dods}}}} | |||
}} | |||
: | {{MatParamDef | ||
|$detailblendmode| int | |||
| How to combine the detail material with the diffuse or albedo. | |||
: There are 12 different detail blend methods that can be used, although not all modes are available with all shaders (see below). | |||
: The blend modes are implemented in {{Path|stdshaders/common_ps_fxc|h}}. | |||
: | [[File:Detail_blend_modes_l4d2.jpg||320px|thumb|right|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%).]] | ||
{{Table | |||
| {{tr | |||
| {{th| Mode }} {{th| Effect |width=180px}} {{th| Description }} | |||
}} | |||
{{tr | |||
| {{td| 0 |dark=1}} | |||
{{td| DecalModulate }} | |||
{{td| This functions the same as the {{ent|DecalModulate}} shader—colors below 128 darken the image, colors above lighten the image. | |||
{{tip|Use {{vtex|2}}'s {{mono|mipblend}} option to have detail textures which use this blend mode "fade out" when at a distance, reducing aliasing.}} }} | |||
}} | |||
{{tr | |||
| {{td| 1 |dark=1}} | |||
{{td| Additive }} | |||
{{td| The color of the detail texture is added to the base texture. This is similar to {{ent|$additive}}, except it is affected by lighting (see blend mode 5). }} | |||
}} | |||
{{tr | |||
| {{td| 2 |dark=1}} | |||
{{td| Translucent Detail }} | |||
{{td| The detail texture is applied as a translucent overlay on top of the base texture. }} | |||
}} | |||
{{tr | |||
| {{td| 3 |dark=1}} | |||
{{td| Blend Factor Fade }} | |||
{{td| The detail texture is applied as a translucent overlay, but ignoring its alpha channel. Instead, the blend factor is used to determine how much of the base texture shows through underneath. }} | |||
}} | |||
{{tr | |||
| {{td| 4 |dark=1}} | |||
{{td| Translucent Base }} | |||
{{td| This effectively flips the normal layering of the two textures. The detail texture appears "below," with the base alpha channel controlling it as a translucent overlay. The detail alpha channel controls the overall material alpha—for translucency, masking, or other uses. {{note|Incompatible with [[VRAD]] texture shadows, which explicitly look for {{cmd|$basetexture}}{{workaround|If using {{gmod}} or {{mapbase}} VRAD, assign the detail as a {{cmd|%alphatexture}}.}} }} | |||
}} | |||
{{tr | |||
| {{td| 5 |dark=1}} | |||
{{td| Unlit Additive }} | |||
{{td| The color of the detail texture is added to the base texture identically to mode 1, but this color is unaffected by lighting and therefore appears to glow. }} | |||
}} | |||
{{tr | |||
| {{td| 6 |dark=1}} | |||
{{td| Unlit Additive Threshold Fade }} | |||
{{td| This adds color unaffected by lighting like mode 5, but first modifies the color added in two modes, depending on if the blend factor is above or below 0.5.{{clarify|Modifies how?}} }} | |||
}} | |||
{{tr | |||
| {{td| 7 |dark=1}} | |||
{{td| Two-Pattern DecalModulate }} | |||
{{td| Only the red and alpha channels of the detail texture are used. This operates like the {{ent|DecalModulate}} shader or blend mode 0, but the base alpha channel fades between using the red (0) or alpha (255) detail channel as the modulation source. This effectively allows two detail materials, although both are greyscale. | |||
{{tip|If this a detail texture using this blend mode should need to be stored in an uncompressed format, consider using [[VTF_(Valve_Texture_Format)#Image_data_formats|IA88 instead of BGRA8888]], for half the file size at no quality loss.}} }} | |||
}} | |||
{{tr | |||
| {{td| 8 |dark=1}} | |||
{{td| Multiply }} | |||
{{td| The color of the base channel is multiplied by that of the detail texture. Effectively makes $detail an ambient occlusion texture. }} | |||
}} | |||
{{tr | |||
| {{td| 9 |dark=1}} | |||
{{td| Base Mask via Detail Alpha }} | |||
{{td| Only the detail alpha channel is used. It is multiplied with the base texture's alpha channel to produce the final alpha value. {{tip|Use [[VTF_(Valve_Texture_Format)#Image_data_formats|A8 instead of DXT5]], for increased quality at the same file size.}} }} | |||
}} | |||
{{tr | |||
| {{td| 10 |dark=1}} | |||
{{td| Self-Shadowed Bumpmap }} | |||
{{td| The detail texture is used as a (possibly additional) {{ent|$ssbump}} bumpmap. The blend factor is ignored. | |||
{{Note|You can use this to get a standard bumpmap and a self-shadowing bumpmap on the same material. However, this is expensive and should be used very sparingly.}} | |||
{{ModernImportant|This requires a $bumpmap! If the Detailtexture VTF is flagged with the SSBump Flag, this mode will be used automatically IF there is a $bumpmap present!}} }} | |||
}} | |||
{{tr | |||
| {{td| 11 |dark=1}} | |||
{{td| SSBump Albedo }} | |||
{{td| Utilises a SSBump Texture like an Ambient Occlusion Texture. This is done by calculating the above-average 'Luminance' of the SSBump. | |||
Calculated as <code>Basetexture * (DetailTexture.r * (2/3) + DetailTexture.g * (2/3) + DetailTexture.b * (2/3))</code> | |||
{{ModernImportant|This cannot be used with $bumpmap. If the Detailtexture VTF is flagged with the SSBump flag, this mode will be used automatically IF $bumpmap is absent!}} }} | |||
}} | |||
}} | |||
{{ModernImportant|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! | |||
{{Table | |||
| {{tr | |||
| {{th| Branch |bgcolor=#373527 |color=#eeba00 }} {{th| Shader |bgcolor=#373527 |color=#eeba00}} {{th| Limitation |bgcolor=#373527 |color=#eeba00 }} | |||
}} | |||
{{tr | |||
| {{td| {{csgo}} |dark=1}} | |||
{{td| {{ent|LightmappedGeneric}} }} | |||
{{td| Modes 1-6 and 8 are not supported.<br> | |||
Mode 9 does not work with {{ent|$bumpmap}}, {{ent|$envmap}}, {{ent|$selfillum}}.}} | |||
}} | |||
{{tr | |||
| {{td| {{csgo}} |dark=1}} | |||
{{td| {{ent|WorldVertexTransition}} }} | |||
{{td| Modes 1-6, 8-9 are not supported.<br> | |||
Mode 7 does not work with {{ent|$blendmodulatetexture}}.}} | |||
}} | |||
{{tr | |||
| {{td| {{csgo}} |dark=1}} | |||
{{td| {{ent|VertexLitGeneric}} }} | |||
{{td| Modes 10+11 are not supported.<br>0-4 and 7 always work (with or without {{ent|$bumpmap}})<br>5+6 only work with {{ent|$phong}} or without {{ent|$bumpmap}}.<br>8+9 only work without {{ent|$bumpmap}}. }} | |||
}} | |||
{{tr | |||
| {{td| {{csgo}} |dark=1}} | |||
{{td| {{ent|Lightmapped_4WayBlend}} }} | |||
{{td| Modes 1-6 are not supported. }} | |||
}} | |||
{{tr | |||
| {{td| {{src13}}<br>{{tf2branch}} |dark=1}} | |||
{{td| {{ent|LightmappedGeneric}}<br>{{ent|WorldVertexTransition}} }} | |||
{{td| Modes 2-9 are not supported.<br>Modes 0+1 always work.<br>Mode 10 does not work with {{ent|$ssbump}}.<br>Workarounds:<br> For mode 2, use {{ent|WorldTwoTextureBlend}}.<br> For mode 8, use {{ent|LightmappedTwoTexture}}. }} | |||
}} | |||
{{tr | |||
| {{td| {{src13}}<br>{{tf2branch}}<br>{{as}} |dark=1}} | |||
{{td| {{ent|VertexLitGeneric}} }} | |||
{{td| Modes 10+11 are not supported.<br>0-4 always work (with or without {{ent|$bumpmap}})<br>5+6 only work with {{ent|$phong}} or without {{ent|$bumpmap}}.<br>7-9 only work without {{ent|$bumpmap}}. }} | |||
}} | |||
{{tr | |||
| {{td| {{as}} |dark=1}} | |||
{{td| {{ent|LightmappedGeneric}}<br>{{ent|WorldVertexTransition}} }} | |||
{{td| Mode 6 is not supported.<br> | |||
Mode 7 does not work with {{ent|$bumpmap2}}, {{ent|$softedges}} and {{ent|$blendmodulatetexture}}. }} | |||
}} | |||
{{tr | |||
| {{td| {{l4d2}} |dark=1}} | |||
{{td| All shaders }} | |||
{{td| Modes 1, 4, 6, 9, and 10 are not supported. }} | |||
}} | |||
}} | |||
{{note|Blend modes 5 and 6 are applied after lighting. Blend mode 10 is applied during lighting. All other blend modes are applied before lighting.}} | |||
}} | |||
}} | |||
}} | |||
{{MatParamDef|$detailtint|RGB matrix|Color tint of the detail texture. | |||
{{Bug | |||
| In {{src13}} {{tf2}} {{as}} {{csgo}} On {{ent|VertexLitGeneric}}. Does not work with {{ent|$bumpmap}} or {{ent|$phong}}}} | |||
{{Bug|Does not work with {{ent|$blendtintbybasealpha}}<br> | |||
{{Todo|Verify which games this is broken in ( Works in {{l4d2}} {{tf2}} {{portal2}} {{csgo}} {{as}} and {{src13}} ).}} | |||
}} | |||
}} | |||
{{MatParamDef|$detailframe|int|dx9=1|The frame to start an animated <code>$detail</code> texture on.}} | |||
{{MatParamDef|$detail_alpha_mask_base_texture|bool|removed={{csgo}}|{{ent|WorldVertexTransition}} only. When enabled, causes the level of detail alpha to determine "base texture blending."{{ModernImportant|Since '''at minimum''' {{src13}} this parameter does not actually do anything!}}}} | |||
<br> | |||
=== {{csgo}} <tt>WorldVertexTransition</tt> Parameters === | |||
{{Confirm|are these limited to {{csgo}}, or are they in some/all {{csgobranch}}–branch games?}} | |||
{{MatParamDef|$detail2|texture|only={{csgo}}|shaders=WorldVertexTransition| | |||
Detail texture for {{ent|WorldVertexTransition}}'s second layer. | |||
{{Note|{{ent|LightmappedGeneric}} technically has support for these parameters and other <code>WorldVertexTransition</code> parameters, but they may not work as expected.}} | |||
{{Note|There is no <code>$detailtransform2</code>, the Shader will use {{ent|$basetexturetransform2}} instead! }} | |||
{{ModernImportant|Requires both <code>$detail</code> and <code>$basetexture2</code> to be present!}} | |||
{{Bug|Cannot be used with <code>$detailblendmode "9"</code>.}} | |||
}} | |||
{{MatParamDef|$detailscale2|float|Detail scale for <tt>$detail2</tt>.|only={{csgo}}|shaders=WorldVertexTransition}} | |||
{{MatParamDef|$detailblendfactor2|normal|Detail blend factor for <tt>$detail2</tt>. {{Note|<code>$detailblendfactor</code> and <code>$detailblendfactor2</code> are blended together before combining with the basetexture.}}|only={{csgo}}|shaders=WorldVertexTransition}} | |||
{{MatParamDef|$detailframe2|int|The frame to start an animated <code>$detail2</code> texture on.|only={{csgo}}|shaders=WorldVertexTransition}} | |||
{{MatParamDef|$detailtint2|RGB matrix|Color tint for <tt>$detail2</tt>.|only={{csgo}}|shaders=WorldVertexTransition}} | |||
<br> | |||
=== {{csgo}}{{portal2}} <tt>SolidEnergy</tt> Parameters === | |||
{{Todo|Confirm if all of this information is actually true for {{portal2}}}} | |||
{{ModernConfirm|Is {{ent|SolidEnergy}} available in {{csgobranch}}–branch games?}} | |||
{{Note|$detail1tint and $detail2tint do not exist on this Shader, they are missing in this list intentionally!}} | |||
{{ModernImportant|<code>$detail</code> has very similar parameter names, but they are not the same! }} | |||
{{MatParamDef|$detail1|texture|only={{csgo}}{{portal2}}|shaders=SolidEnergy|Detail texture for {{ent|SolidEnergy}}'s second layer.}} | |||
{{MatParamDef|$detail1blendmode|int|only={{csgo}}{{portal2}}|shaders=SolidEnergy| | |||
How to combine the detail material with the albedo. | |||
There are 2 different detail blend methods that can be used. | |||
{{Table | |||
| {{tr | |||
| {{th|Mode}} {{th|Effect}} {{th|Description}} | |||
}} | |||
{{tr | |||
== < | | {{td|0|align=center|dark=1}} | ||
{{td|DecalModulate}} | |||
{{td|This functions the same as the {{ent|DecalModulate}} shader—colors below 128 darken the image, colors above lighten the image.}} | |||
}} | |||
== <code>$ | {{tr | ||
| {{td|1|align=center|dark=1}} | |||
: | {{td|Multiply}} | ||
{{td|$basetexture is multiplied by $detail1, Alpha of the $basetexture controls the strength of the effect. Black parts have full multiplication, White parts have no multiplication.}} | |||
== < | }} | ||
}} | |||
}} | |||
{{MatParamDef|$detail1scale|float|Detail scale for <tt>$detail2</tt>. {{Note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}} | |||
{{MatParamDef|$detail1blendfactor|float|Detail blend factor for <tt>$detail2</tt>. {{Note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}} | |||
{{MatParamDef|$detail1frame|int|only={{csgo}}{{portal2}}|shaders=SolidEnergy|The frame to start an animated <code>$detail1</code> texture on. | |||
{{ModernImportant|{{csgo}}s {{ent|WorldVertexTransition}} Shader has very similar <code>$detail2</code> parameter names, but they are not the same!}}}} | |||
{{MatParamDef|$detail2|texture|only={{csgo}}{{portal2}}|shaders=SolidEnergy|Detail texture for {{ent|SolidEnergy}}'s third layer.}} | |||
{{MatParamDef|$detail2blendmode|int|only={{csgo}}{{portal2}}|shaders=SolidEnergy| | |||
How to combine the detail material with the albedo. | |||
:There are 2 different detail blend methods that can be used. | |||
{{Table | |||
| {{tr | |||
| {{th|Mode}} {{th|Effect}} {{th|Description}} | |||
}} | |||
{{tr | |||
| {{td|0|align=center|dark=1}} | |||
{{td|Additive}} | |||
{{td|Adds $detail2 onto the $basetexture. {{Note|When using a $detail1, $detail2 will first be multiplied by $detail2!}}}} | |||
}} | |||
{{tr | |||
| {{td|1|align=center|dark=1}} | |||
{{td|Multiply}} | |||
{{td|$basetexture is multiplied by $detail2. {{Note|There is no way to control the strength of the effect.}}}} | |||
}} | |||
}} | |||
}} | |||
{{MatParamDef|$detail2scale|float|Detail scale for <tt>$detail2</tt>. {{Note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}} | |||
{{MatParamDef|$detail2blendfactor|float|Detail blend factor for <tt>$detail2</tt>. {{Note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}} | |||
{{MatParamDef|$detail2frame|int|The frame to start an animated <code>$detail2</code> texture on.|only={{csgo}}{{portal2}}|shaders=SolidEnergy}} | |||
== Valve's Detail Textures == | |||
Valve's stock detail textures (available in OB only) are best used with the following pre-configured values: | Valve's stock detail textures (available in OB only) are best used with the following pre-configured values: | ||
Line 106: | Line 296: | ||
$detailblendmode 0 | $detailblendmode 0 | ||
The below parameters come from < | The below parameters come from <tt>models\props_forest\LadderWood.vmt</tt>. It is the '''only''' Valve Stock texture VMT file to use this particular detail texture. Because the detail texture (<tt>detail\wood_detail_01</tt>) is a high resolution (1024×1024), the <code>$detailscale</code> is lower than the others, with the exception of <tt>rock_detail_01</tt>. | ||
It is the | |||
Because the detail texture (< | |||
$detail detail\'''wood_detail_01''' | $detail detail\'''wood_detail_01''' | ||
Line 115: | Line 303: | ||
$detailblendmode 0 | $detailblendmode 0 | ||
Additionally, there are 2 other stock detail textures. | Additionally, there are 2 other stock detail textures. {{Code|detail\detailash001a}} and {{Code|detail\detaildirt001a}}. These files were used in the "leaked" version of {{hl2|2}} and in {{hl2ep1|2}} using the following parameters. | ||
These files were used in the "leaked" version of | |||
{{Code|Concrete/concretefloor009a}} in ''Episode One'' materials: | |||
$detail detail/'''detaildirt001a''' | $detail detail/'''detaildirt001a''' | ||
$detailscale 0.27 | $detailscale 0.27 | ||
{{Code|Metal/metalfloor005a}} in ''Episode One'' materials: | |||
$detail detail/'''detailash001a''' | $detail detail/'''detailash001a''' | ||
$detailscale 0.50 | $detailscale 0.50 | ||
[[Category: | == See also == | ||
[https://web.archive.org/web/20191215081655/https://blog.maxofs2d.net/post/83154062767/hiding-large-scale-tiling-with-detail-textures Hiding large-scale tiling with detail textures] - How to make texture repeating less noticeable using $detail | |||
[[Category:Shader parameters|d]] |
Latest revision as of 07:10, 3 September 2025
$detail
is a material shader parameter available in all 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 diffuse 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, as well as
Portal 2 for the white tile textures's bumps.

- In
on LightmappedGeneric, Does not work with $seamless_scale.
- In
on VertexLitGeneric. Does not work with $selfillumfresnel, if $bumpmap is used.
- In
on LightmappedGeneric, Does not work with $lightwarptexture
Note:
- In
, LightmappedGeneric does not appear to even have $lightwarptexture as a parameter... So it cannot "not work".
- In
on VertexLitGeneric, Does not work with $desaturatewithbasealpha
- In
, Does not work with $blendmodulatetexture and $bumpmap
- In
- Todo: Document issues from other branches of source.
Bug:Using $detail with $blendmodulatetexture will cause a graphical issue (stripes over the surface), only works correctly in
and
. (tested in:
)
Syntax
$detail <texture>
You will probably want to use at least $detailscale
(see below) as well.
Parameters and Effects
- The default position is center .5 .5 scale 1 1 rotate 0 translate 0 0.
- center defines the point of rotation. Only useful if rotate is being used.
- 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.
- rotate rotates the texture counter-clockwise in degrees. Accepts any number, including negatives.
- 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:All values must be included!
Bug:Scaling the texture may cause odd issues where the Texture Lock tool in Hammer will not actually lock the texture in place. [todo tested in ?]
Bug: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. [todo tested in ?]




$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 ]"

$detailblendmode
s 1 or 5 on UnlitGeneric (tested in: 
- There are 12 different detail blend methods that can be used, although not all modes are available with all shaders (see below).
- The blend modes are implemented in
stdshaders/common_ps_fxc.h
.

Mode | Effect | Description |
---|---|---|
0 | DecalModulate | This functions the same as the DecalModulate shader—colors below 128 darken the image, colors above lighten the image.
![]() ![]() |
1 | Additive | The color of the detail texture is added to the base texture. This is similar to $additive, except it is affected by lighting (see blend mode 5). |
2 | Translucent Detail | The detail texture is applied as a translucent overlay on top of the base texture. |
3 | Blend Factor Fade | The detail texture is applied as a translucent overlay, but ignoring its alpha channel. Instead, the blend factor is used to determine how much of the base texture shows through underneath. |
4 | Translucent Base | This effectively flips the normal layering of the two textures. The detail texture appears "below," with the base alpha channel controlling it as a translucent overlay. The detail alpha channel controls the overall material alpha—for translucency, masking, or other uses. ![]() ![]() ![]() ![]() |
5 | Unlit Additive | The color of the detail texture is added to the base texture identically to mode 1, but this color is unaffected by lighting and therefore appears to glow. |
6 | Unlit Additive Threshold Fade | This adds color unaffected by lighting like mode 5, but first modifies the color added in two modes, depending on if the blend factor is above or below 0.5. Clarify: Modifies how? |
7 | Two-Pattern DecalModulate | Only the red and alpha channels of the detail texture are used. This operates like the DecalModulate shader or blend mode 0, but the base alpha channel fades between using the red (0) or alpha (255) detail channel as the modulation source. This effectively allows two detail materials, although both are greyscale.
![]() |
8 | Multiply | The color of the base channel is multiplied by that of the detail texture. Effectively makes $detail an ambient occlusion texture. |
9 | Base Mask via Detail Alpha | Only the detail alpha channel is used. It is multiplied with the base texture's alpha channel to produce the final alpha value. ![]() |
10 | Self-Shadowed Bumpmap | The detail texture is used as a (possibly additional) $ssbump bumpmap. The blend factor is ignored.
![]() ![]() |
11 | SSBump Albedo | Utilises a SSBump Texture like an Ambient Occlusion Texture. This is done by calculating the above-average 'Luminance' of the SSBump.
Calculated as ![]() |
Branch | Shader | Limitation |
---|---|---|
![]() |
LightmappedGeneric | Modes 1-6 and 8 are not supported. Mode 9 does not work with $bumpmap, $envmap, $selfillum. |
![]() |
WorldVertexTransition | Modes 1-6, 8-9 are not supported. Mode 7 does not work with $blendmodulatetexture. |
![]() |
VertexLitGeneric | Modes 10+11 are not supported. 0-4 and 7 always work (with or without $bumpmap) 5+6 only work with $phong or without $bumpmap. 8+9 only work without $bumpmap. |
![]() |
Lightmapped_4WayBlend | Modes 1-6 are not supported. |
![]() ![]() |
LightmappedGeneric WorldVertexTransition |
Modes 2-9 are not supported. Modes 0+1 always work. Mode 10 does not work with $ssbump. Workarounds: For mode 2, use WorldTwoTextureBlend. For mode 8, use LightmappedTwoTexture. |
![]() ![]() ![]() |
VertexLitGeneric | Modes 10+11 are not supported. 0-4 always work (with or without $bumpmap) 5+6 only work with $phong or without $bumpmap. 7-9 only work without $bumpmap. |
![]() |
LightmappedGeneric WorldVertexTransition |
Mode 6 is not supported. Mode 7 does not work with $bumpmap2, $softedges and $blendmodulatetexture. |
![]() |
All shaders | Modes 1, 4, 6, 9, and 10 are not supported. |







[todo tested in ?]
$detail
texture on.
WorldVertexTransition Parameters

WorldVertexTransition
parameters, but they may not work as expected.
$detailtransform2
, the Shader will use $basetexturetransform2 instead! 
$detail
and $basetexture2
to be present!
$detailblendmode "9"
. [todo tested in ?]
$detailblendfactor
and $detailblendfactor2
are blended together before combining with the basetexture.$detail2
texture on.

SolidEnergy Parameters




$detail
has very similar parameter names, but they are not the same! There are 2 different detail blend methods that can be used.
Mode | Effect | Description |
---|---|---|
0 | DecalModulate | This functions the same as the DecalModulate shader—colors below 128 darken the image, colors above lighten the image. |
1 | Multiply | $basetexture is multiplied by $detail1, Alpha of the $basetexture controls the strength of the effect. Black parts have full multiplication, White parts have no multiplication. |


$detail1
texture on.


$detail2
parameter names, but they are not the same!- There are 2 different detail blend methods that can be used.
Mode | Effect | Description |
---|---|---|
0 | Additive | Adds $detail2 onto the $basetexture. ![]() |
1 | Multiply | $basetexture is multiplied by $detail2. ![]() |


$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 and in
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