Difference between revisions of "$detail"

From Valve Developer Community
Jump to: navigation, search
Line 68: Line 68:
: Modifies the colour of the detail texture.
: Modifies the colour of the detail texture.
::{{bug|Doesn't work.}}
=== <code>$detailframe <int></code> ===
=== <code>$detailframe <int></code> ===

Revision as of 12:57, 18 April 2019

A detail texture (noise_detail_01), and its effect when applied to a material (left).

The $envmap VMT parameter specifies a texture with which Source will add high-resolution detail when the material 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 Episode Two. The effect exists in all Source Engine based games.

Bug.png Bug: Detail textures do not currently work in conjunction with $seamless_scale. Enabling them to work together would require a programmer to edit the used shader.


$detail <texture>

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

Parameters and Effects

$detailtexturetransform <matrix>

Rotates, scales, etc. the detail texture. Requires DX9.
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 X axis.
  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.
Note.png Note: All values must be included!
Bug.png Bug: Scaling the texture may cause odd issues where the Texture Lock tool in Hammer will not actually lock the texture in place.
Bug.png 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.

$detailscale <float>

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.

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

$detailblendmode <int>

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.

  • 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 transulcent 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 unnaffected by lighting like mode 5, but first modifies the colour added in two modes, depending on if the blend factor is above or below 0.5. To do: Screenshots of how this appears.
  • 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.
Bug.png Bug: Not compatible with $phong due to missing shader combinations.
  • 9 = Base Mask via Detail Alpha
Only the detail alpha channel is used. It is multiplied with the base 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
Unknown function, used internally. The comment says, "shader does the magic here - no user needs to specify mode 11".
  • 12+
Any other values will disable the detail effect.

$detailtint "<RGB matrix>"

Modifies the colour of the detail texture.
Bug.png Bug: Doesn't work.

$detailframe <int>

The frame to start animated detail texture on. Requires DX9.

$detail_alpha_mask_base_texture <bool>

WorldVertexTransition only. When enabled, causes the level of detail alpha to determine "base texture blending". To do: Which base texture? Is this actually fully implemented?

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 (1024x1024), 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 & 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