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

$detail: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
mNo edit summary
Line 21: Line 21:


== Parameters and Effects ==
== Parameters and Effects ==
{{MatParam|$detailtexturetransform|matrix|Rotates, scales, etc. the detail texture. {{VMT UVtransform}}|dx9=1}}
<div style=margin-bottom:16px>
{{bug|This parameter does not exist for {{ent|LightmappedGeneric}}, {{ent|WorldVertexTransition}} and {{only|{{csgo}}}} {{ent|Lightmapped_4WayBlend}}.}}
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailtexturetransform|<span style=color:#DDDCDC>$detailtexturetransform</span>]]</kbd> {{KV Type|matrix}} {{Dx9}}</div>
{{bug|Does not work with {{ent|$treesway}}.}}
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
{{MatParam|$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> }}
Rotates, scales, etc. the detail texture.
{{MatParam|$detailblendfactor|normal|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.}}
:The default position is {{Code|style=1|center .5 .5 scale 1 1 rotate 0 translate 0 0}}.
{{MatParam|$detailblendmode|int|How to combine the detail material with the albedo.}}
:# {{Code|style=1|select=1|center}} defines the point of rotation. Only useful if {{Code|style=1|select=1|rotate}} is being used.
:# {{Code|style=1|select=1|scale}} fits the texture into the material the given number of times. {{Code|style=1|select=1|2 1}} is a 50% scale in the horizontal X axis while the vertical Y axis is still at original scale.
:# {{Code|style=1|select=1|rotate}} rotates the texture ''counter''-clockwise in degrees. Accepts any number, including negatives.
:# {{Code|style=1|select=1|translate}} shifts the texture by the given numbers. {{Code|style=1|select=1|.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.}}
:: {{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.}}
{{Bug|This parameter does not exist for LightmappedGeneric, WorldVertexTransition and (only in Counter-Strike: Global Offensive) Lightmapped_4WayBlend.}}
{{Bug|Does not work with $treesway.}}
{{Bug|This parameter does not exist for {{ent|LightmappedGeneric}}, {{ent|WorldVertexTransition}} and {{only|{{csgo}}}} {{ent|Lightmapped_4WayBlend}}.}}
{{Bug|Does not work with {{ent|$treesway}}.}}
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailscale|<span style=color:#DDDCDC>$detailscale</span>]]</kbd> {{KV Type|float}}</div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
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>
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailblendfactor|<span style=color:#DDDCDC>$detailblendfactor</span>]]</kbd> {{KV Type|normal}}</div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
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.
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailblendmode|<span style=color:#DDDCDC>$detailblendmode</span>]]</kbd> {{KV Type|int}}</div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
How to combine the detail material with the albedo.
:There are 12 different detail blend methods that can be used.
:There are 12 different detail blend methods that can be used.
:The blend modes are implemented in <code>stdshaders/common_ps_fx.h</code>.
:The blend modes are implemented in <code>stdshaders/common_ps_fx.h</code>.
Line 92: Line 123:
* In {{as}}{{ent|LightmappedGeneric}} and {{ent|WorldVertexTransition}} Mode 6 is not supported. Additionally 7 does not work with {{ent|$bumpmap2}}, {{ent|$softedges}} and {{ent|$blendmodulatetexture}}.
* In {{as}}{{ent|LightmappedGeneric}} and {{ent|WorldVertexTransition}} Mode 6 is not supported. Additionally 7 does not work with {{ent|$bumpmap2}}, {{ent|$softedges}} and {{ent|$blendmodulatetexture}}.
* In {{l4d2}} Modes 1, 4, 6, 9, and 10 are not supported.
* In {{l4d2}} Modes 1, 4, 6, 9, and 10 are not supported.
<br>
</div>
{{MatParam|$detailtint|RGB matrix|Color tint of the detail texture.}}
</div>
{{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>
<div style=margin-bottom:16px>
{{todo|Verify which games this is broken in ( Works in {{l4d2}} {{tf2}} {{portal2}} {{csgo}} {{as}} and {{src13}} ).}}}}
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailtint|<span style=color:#DDDCDC>$detailtint</span>]]</kbd> {{KV Type|RGB matrix}}</div>
{{MatParam|$detailframe|int|The frame to start an animated <code>$detail</code> texture on.|dx9=1}}
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
{{MatParam|$detail_alpha_mask_base_texture|bool|{{ent|WorldVertexTransition}} only. When enabled, causes the level of detail alpha to determine "base texture blending."{{important|Since '''at minimum''' {{src13}} this parameter does not actually do anything!}}|removed={{csgo}}}}
Color tint of the detail texture.
<br>
{{Bug|In {{src13}} {{tf2}} {{as}} {{csgo}} On {{ent|VertexLitGeneric}}. Does not work with {{ent|$bumpmap}} or {{ent|$phong}}}}
==={{csgo}} <tt>WorldVertexTransition</tt> Parameters===
{{Bug|Does not work with {{ent|$blendtintbybasealpha}}<br>
{{confirm|are these limited to {{csgo}}, or are they in some/all {{csgobranch}}–branch games?}}
{{Todo|Verify which games this is broken in ( Works in {{l4d2}} {{tf2}} {{portal2}} {{csgo}} {{as}} and {{src13}} ).}}}}
{{MatParam|$detail2|texture|Detail texture for {{ent|WorldVertexTransition}}'s second layer.
</div>
{{note|{{ent|LightmappedGeneric}} technically has support for these parameters and other <code>WorldVertexTransition</code> parameters, but they may not work as expected.}}
</div>
{{note|There is no <code>$detailtransform2</code>, the Shader will use {{ent|$basetexturetransform2}} instead! }}
 
{{important|Requires both <code>$detail</code> and <code>$basetexture2</code> to be present!}}
<div style=margin-bottom:16px>
{{bug|Cannot be used with <code>$detailblendmode "9"</code>.}}
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailframe|<span style=color:#DDDCDC>$detailframe</span>]]</kbd> {{KV Type|int}} {{Dx9}}</div>
|only={{csgo}}|shaders=WorldVertexTransition}}
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
{{MatParam|$detailscale2|float|Detail scale for <tt>$detail2</tt>.|only={{csgo}}|shaders=WorldVertexTransition}}
The frame to start an animated <code>$detail</code> texture on.
{{MatParam|$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}}
</div>
{{MatParam|$detailframe2|int|The frame to start an animated <code>$detail2</code> texture on.|only={{csgo}}|shaders=WorldVertexTransition}}
</div>
{{MatParam|$detailtint2|RGB matrix|Color tint for <tt>$detail2</tt>.|only={{csgo}}|shaders=WorldVertexTransition}}
 
<br>
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail_alpha_mask_base_texture|<span style=color:#DDDCDC>$detail_alpha_mask_base_texture</span>]]</kbd> {{KV Type|bool}} {{removed|{{csgo}}}}</div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
{{Ent|WorldVertexTransition}} only. When enabled, causes the level of detail alpha to determine "base texture blending."{{Important|Since '''at minimum''' {{src13}} this parameter does not actually do anything!}}
</div>
</div>
 
 
=== {{csgo}} WorldVertexTransition Parameters ===
{{Confirm|are these limited to {{csgo}}, or are they in some/all {{csgobranch}}–branch games?}}
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail2|<span style=color:#DDDCDC>$detail2</span>]]</kbd> {{KV Type|texture}} {{only|{{csgo}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: WorldVertexTransition</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
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! }}
{{Important|Requires both <code>$detail</code> and <code>$basetexture2</code> to be present!}}
{{Bug|Cannot be used with <code>$detailblendmode "9"</code>.}}
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailscale2|<span style=color:#DDDCDC>$detailscale2</span>]]</kbd> {{KV Type|float}} {{only|{{csgo}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: WorldVertexTransition</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
Detail scale for <tt>$detail2</tt>.
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailblendfactor2|<span style=color:#DDDCDC>$detailblendfactor2</span>]]</kbd> {{KV Type|normal}} {{only|{{csgo}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: WorldVertexTransition</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
Detail blend factor for <tt>$detail2</tt>. {{Note|<code>$detailblendfactor</code> and <code>$detailblendfactor2</code> are blended together before combining with the basetexture.}}
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailframe2|<span style=color:#DDDCDC>$detailframe2</span>]]</kbd> {{KV Type|int}} {{only|{{csgo}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: WorldVertexTransition</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
The frame to start an animated <code>$detail2</code> texture on.
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detailtint2|<span style=color:#DDDCDC>$detailtint2</span>]]</kbd> {{KV Type|RGB matrix}} {{only|{{csgo}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: WorldVertexTransition</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
Color tint for <tt>$detail2</tt>.
</div>
</div>
 
 
==={{csgo}}{{portal2}} <tt>SolidEnergy</tt> Parameters===
==={{csgo}}{{portal2}} <tt>SolidEnergy</tt> Parameters===
{{todo|Confirm if all of this information is actually true for {{portal2}}}}
{{Todo|Confirm if all of this information is actually true for {{portal2}}}}
{{confirm|Is {{ent|SolidEnergy}} available in {{csgobranch}}–branch games?}}
{{Confirm|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!}}
{{Note|$detail1tint and $detail2tint do not exist on this Shader, they are missing in this list intentionally!}}
{{important|<code>$detail</code> has very similar parameter names, but they are not the same! }}
{{Important|<code>$detail</code> has very similar parameter names, but they are not the same! }}
{{MatParam|$detail1|texture|Detail texture for {{ent|SolidEnergy}}'s second layer.|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
 
{{MatParam|$detail1blendmode|int|How to combine the detail material with the albedo.|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail1|<span style=color:#DDDCDC>$detail1</span>]]</kbd> {{KV Type|texture}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
Detail texture for {{ent|SolidEnergy}}'s second layer.
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail1blendmode|<span style=color:#DDDCDC>$detail1blendmode</span>]]</kbd> {{KV Type|int}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
How to combine the detail material with the albedo.
:There are 2 different detail blend methods that can be used.
:There are 2 different detail blend methods that can be used.
{| class="standard-table"
{| class="standard-table"
Line 134: Line 225:
| $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.
| $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.
|}
|}
{{MatParam|$detail1scale|float|Detail scale for <tt>$detail2</tt>. {{note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
</div>
{{MatParam|$detail1blendfactor|float|Detail blend factor for <tt>$detail2</tt>. {{note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
</div>
{{MatParam|$detail1frame|int|The frame to start an animated <code>$detail1</code> texture on.|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail1scale|<span style=color:#DDDCDC>$detail1scale</span>]]</kbd> {{KV Type|float}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
Detail scale for <tt>$detail2</tt>. {{note| Does not appear to do anything.}}
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail1blendfactor|<span style=color:#DDDCDC>$detail1blendfactor</span>]]</kbd> {{KV Type|float}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
Detail blend factor for <tt>$detail2</tt>. {{note| Does not appear to do anything.}}
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail1frame|<span style=color:#DDDCDC>$detail1frame</span>]]</kbd> {{KV Type|int}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
The frame to start an animated <code>$detail1</code> texture on.
 
{{Important|{{csgo}}s {{ent|WorldVertexTransition}} Shader has very similar <code>$detail2</code> parameter names, but they are not the same!}}
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail2|<span style=color:#DDDCDC>$detail2</span>]]</kbd> {{KV Type|texture}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
Detail texture for {{ent|SolidEnergy}}'s third layer.
</div>
</div>


{{important|{{csgo}}s {{ent|WorldVertexTransition}} Shader has very similar <code>$detail2</code> parameter names, but they are not the same!}}
<div style=margin-bottom:16px>
{{MatParam|$detail2|texture|Detail texture for {{ent|SolidEnergy}}'s third layer.|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail2blendmode|<span style=color:#DDDCDC>$detail2blendmode</span>]]</kbd> {{KV Type|int}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
{{MatParam|$detail2blendmode|int|How to combine the detail material with the albedo.|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
How to combine the detail material with the albedo.
:There are 2 different detail blend methods that can be used.
:There are 2 different detail blend methods that can be used.
{| class="standard-table"
{| class="standard-table"
Line 149: Line 270:
| 0
| 0
| Additive
| Additive
| Adds $detail2 onto the $basetexture. {{note|When using a $detail1, $detail2 will first be multiplied by $detail2!}}
| Adds $detail2 onto the $basetexture. {{Note|When using a $detail1, $detail2 will first be multiplied by $detail2!}}
|-
|-
| 1
| 1
| Multiply
| Multiply
| $basetexture is multiplied by $detail2. {{note|There is no way to control the strength of the effect.}}
| $basetexture is multiplied by $detail2. {{Note|There is no way to control the strength of the effect.}}
|}
|}
{{MatParam|$detail2scale|float|Detail scale for <tt>$detail2</tt>. {{note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
</div>
{{MatParam|$detail2blendfactor|float|Detail blend factor for <tt>$detail2</tt>. {{note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
</div>
{{MatParam|$detail2frame|int|The frame to start an animated <code>$detail2</code> texture on.|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail2scale|<span style=color:#DDDCDC>$detail2scale</span>]]</kbd> {{KV Type|float}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
Detail scale for <tt>$detail2</tt>. {{note| Does not appear to do anything.}}
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail2blendfactor|<span style=color:#DDDCDC>$detail2blendfactor</span>]]</kbd> {{KV Type|float}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
Detail blend factor for <tt>$detail2</tt>. {{note| Does not appear to do anything.}}
</div>
</div>
 
<div style=margin-bottom:16px>
<div style="background-color:#262626; position:sticky; z-index:10; padding:2px 0; top:0;"><kbd>[[$detail2frame|<span style=color:#DDDCDC>$detail2frame</span>]]</kbd> {{KV Type|int}} {{only|{{csgo}} {{portal2}}}} <span style="background-color:#202020; border-radius:2px; white-space:nowrap; color:#d3d3d3; padding:2px 4px">Shader: SolidEnergy</span></div>
<div style="border:1px dotted rgba(255,255,255,.2); border-radius:4px; border-left:4px solid rgba(255,255,255,.2); padding:2px 9px; margin-top:2px;">
The frame to start an animated <code>$detail2</code> texture on.
</div>
</div>


== Valve's Detail Textures ==
== Valve's Detail Textures ==

Revision as of 04:54, 10 March 2023

English (en)Français (fr)中文 (zh)Translate (Translate)
A detail texture (noise_detail_01), and its effect when applied to a material (left).

Template:Shaderparam 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.

Icon-Bug.pngBug:$Detail textures do not work in conjunction with some parameters :  [todo tested in ?]
Note.pngNote: In Counter-Strike: Global Offensive, LightmappedGeneric does not appear to even have $lightwarptexture as a parameter... So it 'cannot not' work.
Todo:  Document issues from other branches of source.
Todo:  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: Previously it was stated that $blendmodulatetexture would only work with $detail in Counter-Strike: Global Offensive. however. This does appear to work, in at least Source 2013Team Fortress 2Alien Swarm and 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.  [todo tested in ?]
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.  [todo tested in ?]
Icon-Bug.pngBug:This parameter does not exist for LightmappedGeneric, WorldVertexTransition and (only in Counter-Strike: Global Offensive) Lightmapped_4WayBlend.  [todo tested in ?]
Icon-Bug.pngBug:Does not work with $treesway.  [todo tested in ?]
Icon-Bug.pngBug:This parameter does not exist for LightmappedGeneric, WorldVertexTransition and (only in Counter-Strike: Global Offensive) Lightmapped_4WayBlend.  [todo tested in ?]
Icon-Bug.pngBug:Does not work with $treesway.  [todo tested in ?]

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_fx.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%).
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 the same as $additive.
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.
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.
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.
Note.pngNote: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.
11 SSBump Albedo Unknown function, used internally. The comment says, "shader does the magic here - no user needs to specify mode 11."
Icon-Important.pngImportant:Below is listed, what blendmodes, work in which games, on what 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  [todo tested in ?]
Icon-Bug.pngBug:Does not work with $blendtintbybasealpha
Todo: 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 ).
  [todo tested in ?]
$detailframe <integer> (DX9 SM2)

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: 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".  [todo tested in ?]
$detailscale2 <float> (only in Counter-Strike: Global Offensive) Shader: WorldVertexTransition

Detail scale for $detail2.

$detailblendfactor2 <normal> (only in Counter-Strike: Global Offensive) Shader: 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: WorldVertexTransition

The frame to start an animated $detail2 texture on.

$detailtint2 <RGB matrix> (only in Counter-Strike: Global Offensive) Shader: WorldVertexTransition

Color tint for $detail2.


Counter-Strike: Global OffensivePortal 2 SolidEnergy Parameters

Todo: Confirm if all of this information is actually true for Portal 2
Confirm: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 Offensive Portal 2) Shader: SolidEnergy

Detail texture for SolidEnergy's second layer.

$detail1blendmode <integer> (only in Counter-Strike: Global Offensive Portal 2) Shader: SolidEnergy

How to combine the detail material with the albedo.

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.
$detail1scale <float> (only in Counter-Strike: Global Offensive Portal 2) Shader: SolidEnergy
Detail scale for $detail2.
Note.pngNote: Does not appear to do anything.
$detail1blendfactor <float> (only in Counter-Strike: Global Offensive Portal 2) Shader: SolidEnergy
Detail blend factor for $detail2.
Note.pngNote: Does not appear to do anything.
$detail1frame <integer> (only in Counter-Strike: Global Offensive Portal 2) Shader: 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 Offensive Portal 2) Shader: SolidEnergy

Detail texture for SolidEnergy's third layer.

$detail2blendmode <integer> (only in Counter-Strike: Global Offensive Portal 2) Shader: SolidEnergy

How to combine the detail material with the albedo.

There are 2 different detail blend methods that can be used.
Mode Effect Description
0 Additive Adds $detail2 onto the $basetexture.
Note.pngNote:When using a $detail1, $detail2 will first be multiplied by $detail2!
1 Multiply $basetexture is multiplied by $detail2.
Note.pngNote:There is no way to control the strength of the effect.
$detail2scale <float> (only in Counter-Strike: Global Offensive Portal 2) Shader: SolidEnergy
Detail scale for $detail2.
Note.pngNote: Does not appear to do anything.
$detail2blendfactor <float> (only in Counter-Strike: Global Offensive Portal 2) Shader: SolidEnergy
Detail blend factor for $detail2.
Note.pngNote: Does not appear to do anything.
$detail2frame <integer> (only in Counter-Strike: Global Offensive Portal 2) Shader: 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