$detail: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
Line 27: Line 27:
; <code>$detailblendmode <[[int]]></code>
; <code>$detailblendmode <[[int]]></code>
: How to combine the detail material with the albedo.
: How to combine the detail material with the albedo.
:* 0 = normal (darken)
There are 12 different detail blend methods that can be used.
:* 1 = additive (lighten)
Taken from common_ps_fx.h
:* 2 = alpha blend detail over base
:*0 = original mode
:* 3 = crossfade
 
:* 4 = overlays over alpha map
:*1 = ADDITIVE base.rgb+detail.rgb*fblend
 
:*2 = alpha blend detail over base
 
:*3 = straight fade between base and detail.
 
:*4 = use base alpha for blend over detail
 
:*5 =  add detail color post lighting
 
:*6 = TCOMBINE_RGB_ADDITIVE_SELFILLUM_THRESHOLD_FADE 6
 
:*7 =  use alpha channel of base to select between mod2x channels in r+a of detail
 
:*8 =  multiply
 
:*9 = use alpha channel of detail to mask base
 
:*10 =  use detail to modulate lighting as an ssbump
 
:*11 =  detail is an ssbump but use it as an albedo. shader does the magic here - no user needs to specify mode 11
 
:*12 = there is no detail texture
 


(Dumped from shaderlib)
51477C32  PUSH stdsha_1.514896E0    ASCII "detail 1 blend mode: 0=off, 1=add, 2=add self-illum, 3=mod2x, 4=mul, 5=crossfade"
; <code>$detailtint "<[[RGB]] matrix>"</code>
; <code>$detailtint "<[[RGB]] matrix>"</code>
: Modifies the colour of the detail texture.
: Modifies the colour of the detail texture.

Revision as of 17:22, 27 May 2014

Template:Otherlang2

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

$detail 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 is useable in all Source Engine based games.


Tip.pngTip:A bump map can perform the same job as a detail texture, but is more expensive.
Icon-Bug.pngBug: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.  [todo tested in ?]

Syntax

$detail <texture>

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

Additional parameters

$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 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 ?]
$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>
Effectively an $alpha value for the detail texture.
$detailblendmode <int>
How to combine the detail material with the albedo.

There are 12 different detail blend methods that can be used. Taken from common_ps_fx.h

  • 0 = original mode
  • 1 = ADDITIVE base.rgb+detail.rgb*fblend
  • 2 = alpha blend detail over base
  • 3 = straight fade between base and detail.
  • 4 = use base alpha for blend over detail
  • 5 = add detail color post lighting
  • 6 = TCOMBINE_RGB_ADDITIVE_SELFILLUM_THRESHOLD_FADE 6
  • 7 = use alpha channel of base to select between mod2x channels in r+a of detail
  • 8 = multiply
  • 9 = use alpha channel of detail to mask base
  • 10 = use detail to modulate lighting as an ssbump
  • 11 = detail is an ssbump but use it as an albedo. shader does the magic here - no user needs to specify mode 11
  • 12 = there is no detail texture


$detailtint "<RGB matrix>"
Modifies the colour of the detail texture.
$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".
Todo: Which base texture?

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