$detail: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (Undo revision 323644 by THE OWL (talk))
Tag: Undo
(→‎Parameters and Effects: {{Important}} replaced by {{ModernImportant}})
Line 53: Line 53:
| int
| int
| How to combine the detail material with the albedo.
| 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 {{Path|stdshaders/common_ps_fx|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%).]]
[[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
{{Table
| {{tr
| {{tr
| {{th|Mode}} {{th|width=180px|Effect}} {{th|Description}}
| {{th| Mode }} {{th| Effect |width=180px}} {{th| Description }}
}}
}}
{{tr
{{tr
| {{td|0|dark=1}}
| {{td| 0 |dark=1}}
  {{td|DecalModulate}}
  {{td| DecalModulate }}
  {{td|This functions the same as the {{ent|DecalModulate}} shader—colors below 128 darken the image, colors above lighten the image.}}
  {{td| This functions the same as the {{ent|DecalModulate}} shader—colors below 128 darken the image, colors above lighten the image. }}
}}
}}
{{tr
{{tr
| {{td|1|dark=1}}
| {{td| 1 |dark=1}}
  {{td|Additive}}
  {{td| Additive }}
  {{td|The color of the detail texture is added to the base texture. This is the same as {{ent|$additive}}.}}
  {{td| The color of the detail texture is added to the base texture. This is the same as {{ent|$additive}}. }}
}}
}}
{{tr
{{tr
| {{td|2|dark=1}}
| {{td| 2 |dark=1}}
  {{td|Translucent Detail}}
  {{td| Translucent Detail }}
  {{td|The detail texture is applied as a translucent overlay on top of the base texture.}}
  {{td| The detail texture is applied as a translucent overlay on top of the base texture. }}
}}
}}
{{tr
{{tr
| {{td|3|dark=1}}
| {{td| 3 |dark=1}}
  {{td|Blend Factor Fade}}
  {{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.}}
  {{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
{{tr
| {{td|3|dark=1}}
| {{td| 3 |dark=1}}
  {{td|Translucent Base}}
  {{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.}}
  {{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. }}
}}
}}
{{tr
{{tr
| {{td|5|dark=1}}
| {{td| 5 |dark=1}}
  {{td|Unlit Additive}}
  {{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.}}
  {{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
{{tr
| {{td|6|dark=1}}
| {{td| 6 |dark=1}}
  {{td|Unlit Additive Threshold Fade}}
  {{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.}}
  {{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. }}
}}
}}
{{tr
{{tr
| {{td|7|dark=1}}
| {{td| 7 |dark=1}}
  {{td|Two-Pattern DecalModulate}}
  {{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.}}
  {{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. }}
}}
}}
{{tr
{{tr
| {{td|8|dark=1}}
| {{td| 8 |dark=1}}
  {{td|Multiply}}
  {{td| Multiply }}
  {{td|The color of the base channel is multiplied by that of the detail texture.}}
  {{td| The color of the base channel is multiplied by that of the detail texture. }}
}}
}}
{{tr
{{tr
| {{td|9|dark=1}}
| {{td| 9 |dark=1}}
  {{td|Base Mask via Detail Alpha}}
  {{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.}}
  {{td| Only the detail alpha channel is used. It is multiplied with the base texture's alpha channel to produce the final alpha value. }}
}}
}}
{{tr
{{tr
| {{td|10|dark=1}}
| {{td| 10 |dark=1}}
  {{td|Self-Shadowed Bumpmap}}
  {{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.}}
  {{td| The detail texture is used as a (possibly additional) {{ent|$ssbump}} bumpmap. The blend factor is ignored.
{{Important| 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!}}}}
        {{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
{{tr
| {{td|11|dark=1}}
| {{td| 11 |dark=1}}
  {{td|SSBump Albedo}}
  {{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.
  {{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>
Calculated as <code>Basetexture * (DetailTexture.r * (2/3) + DetailTexture.g * (2/3) + DetailTexture.b * (2/3))</code>
{{Important| This cannot be used with $bumpmap. If the Detailtexture VTF is flagged with the SSBump flag, this mode will be used automatically!}}}}
        {{ModernImportant|This cannot be used with $bumpmap. If the Detailtexture VTF is flagged with the SSBump flag, this mode will be used automatically!}} }}
}}
}}
}}
}}


{{Important|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!}}
{{ModernImportant|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!
* In {{csgo}} {{ent|LightmappedGeneric}} Modes 1-6 and 8 are not supported. 9 not with {{ent|$bumpmap}}, {{ent|$envmap}}, {{ent|$selfillum}}.
* In {{csgo}} {{ent|LightmappedGeneric}} Modes 1-6 and 8 are not supported. 9 not with {{ent|$bumpmap}}, {{ent|$envmap}}, {{ent|$selfillum}}.
* In {{csgo}} {{ent|WorldVertexTransition}} Modes 1-6, 8-9 are not supported. 7 Does not work with {{ent|$blendmodulatetexture}}.
* In {{csgo}} {{ent|WorldVertexTransition}} Modes 1-6, 8-9 are not supported. 7 Does not work with {{ent|$blendmodulatetexture}}.
Line 134: Line 137:
* 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.
}}
}}
}}


Line 145: Line 149:


{{MatParam|$detailframe|int|dx9=1|The frame to start an animated <code>$detail</code> texture on.}}
{{MatParam|$detailframe|int|dx9=1|The frame to start an animated <code>$detail</code> texture on.}}
{{MatParam|$detail_alpha_mask_base_texture|bool|removed={{csgo}}|{{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!}}}}
{{MatParam|$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>
<br>
=== {{csgo}} <tt>WorldVertexTransition</tt> Parameters ===
=== {{csgo}} <tt>WorldVertexTransition</tt> Parameters ===
Line 154: Line 158:
{{Note|{{ent|LightmappedGeneric}} technically has support for these parameters and other <code>WorldVertexTransition</code> parameters, but they may not work as expected.}}
{{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! }}
{{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!}}
{{ModernImportant|Requires both <code>$detail</code> and <code>$basetexture2</code> to be present!}}
{{Bug|Cannot be used with <code>$detailblendmode "9"</code>.}}
{{Bug|Cannot be used with <code>$detailblendmode "9"</code>.}}
}}
}}
Line 195: Line 199:
{{MatParam|$detail1blendfactor|float|Detail blend factor for <tt>$detail2</tt>. {{Note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
{{MatParam|$detail1blendfactor|float|Detail blend factor for <tt>$detail2</tt>. {{Note| Does not appear to do anything.}}|only={{csgo}}{{portal2}}|shaders=SolidEnergy}}
{{MatParam|$detail1frame|int|only={{csgo}}{{portal2}}|shaders=SolidEnergy|The frame to start an animated <code>$detail1</code> texture on.
{{MatParam|$detail1frame|int|only={{csgo}}{{portal2}}|shaders=SolidEnergy|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!}}}}
{{ModernImportant|{{csgo}}s {{ent|WorldVertexTransition}} Shader has very similar <code>$detail2</code> parameter names, but they are not the same!}}}}
{{MatParam|$detail2|texture|only={{csgo}}{{portal2}}|shaders=SolidEnergy|Detail texture for {{ent|SolidEnergy}}'s third layer.}}
{{MatParam|$detail2|texture|only={{csgo}}{{portal2}}|shaders=SolidEnergy|Detail texture for {{ent|SolidEnergy}}'s third layer.}}
{{MatParam|$detail2blendmode|int|only={{csgo}}{{portal2}}|shaders=SolidEnergy|
{{MatParam|$detail2blendmode|int|only={{csgo}}{{portal2}}|shaders=SolidEnergy|

Revision as of 04:35, 29 June 2023

English (en)Français (fr)中文 (zh)Translate (Translate)
See also:  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).

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:
Todo:  Document issues from other branches of source.
Confirm: 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

$detailtexturetransform

$detailscale

$detailblendfactor

$detailblendmode

$detailtint

$detailframe $detail_alpha_mask_base_texture

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

$detailscale2 $detailblendfactor2 $detailframe2 $detailtint2

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 $detail1blendmode $detail1scale $detail1blendfactor $detail1frame $detail2 $detail2blendmode $detail2scale $detail2blendfactor $detail2frame

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