$bumpmap: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(it don't work)
(Rewrote $forcebump with code comment, use DirectX templates, todos for $bumptransform, $bumpscale and $bumpoffset, add $bumptransform2, misc fixes)
Line 4: Line 4:
The '''$bumpmap''' [[VMT]] parameter specifies a [[texture]] that will provide three-dimensional lighting information for a material. The texture is a [[bump map]], but the process it is used for is called [[Wikipedia:Normal mapping|normal mapping]]. The two terms are often used interchangeably, however.
The '''$bumpmap''' [[VMT]] parameter specifies a [[texture]] that will provide three-dimensional lighting information for a material. The texture is a [[bump map]], but the process it is used for is called [[Wikipedia:Normal mapping|normal mapping]]. The two terms are often used interchangeably, however.


{{warning|$bumpmap will disable [[prop_static]]'s per-vertex lighting in every Source game but CS:GO. Not enough data is stored in the vertices for normal mapping, so the engine has no choice but to fall back.}}
{{warning|$bumpmap will disable [[prop_static]]'s per-vertex lighting in every Source game but {{csgo}}. Not enough data is stored in the vertices for normal mapping, so the engine has no choice but to fall back.}}


{{note|
{{note|
* In the <code>[[Water_(shader)|Water]]</code> shader, $bumpmap is for a DX8 [[Du/dv_map|du/dv map]]. Use <code>$normalmap</code> instead.
* In the <code>[[Water_(shader)|Water]]</code> shader, $bumpmap is for a DX8 [[Du/dv_map|du/dv map]]. Use <code>$normalmap</code> instead.
* The $bumpmap parameter is not compatible with decals textures.}}
* The $bumpmap parameter is not compatible with decal textures.}}


==Basic syntax==
==Basic syntax==
Line 21: Line 21:


==Additional parameters==
==Additional parameters==
; <code>$bumptransform <matrix></code>
; <code>$bumptransform <matrix></code> {{dx9}}
: Transforms the bump map texture. Requires DirectX 9 or above.
: Transforms the bump map texture. {{todo|Does this actually require DX9? Present in DX8 fallback shaders.}}
{{VMT UVtransform}}
{{VMT UVtransform}}
; <code>[[$ssbump]]</code>
; <code>[[$ssbump]]</code>
: Flags the bump map texture as being self-shadowing. Click for more details.
: Flags the bump map texture as being self-shadowing. Click for more details.
; <code>$bumpscale <[[float]]></code>
; <code>$bumpscale <[[float]]></code> {{dx8}}
: Scales the bump map by the given value in DirectX 8.
: Scales the bump map by the given value in DirectX 8. {{Todo|Does this actually exist? Seemingly not present in DX8 fallback shaders.}}
; <code>$bumpframe <[[integer]]></code>
; <code>$bumpframe <[[integer]]></code>
: The frame to start an animated bump map on.
: The frame to start an animated bump map on.
Line 33: Line 33:
: Stops the bump map affecting the lighting of the material's [[albedo]], which help combat [[Material optimization#Overdraw|overdraw]]. Does not affect the [[specular]] map.
: Stops the bump map affecting the lighting of the material's [[albedo]], which help combat [[Material optimization#Overdraw|overdraw]]. Does not affect the [[specular]] map.
::{{bug|Does not function in Orange Box builds and later.}}
::{{bug|Does not function in Orange Box builds and later.}}
;<code>$forcebump <bool></code>
;<code>$forcebump <bool></code> {{dx8}}
: Forces DirectX 8 cards to render the bump map. They normally don't for performance reasons.
: If 0, use bumpmapping if the card says it can handle it. If 1, always force bumpmapping on.  
; <code>$bumpoffset <?></code>
; <code>$bumpoffset <?></code>
: {{confirm|DX8 version of center?}}
: {{confirm|DX8 version of center?}} {{todo|Does this actually exist?}}
; <code>$bumpmap2 <texture></code>
; <code>$bumpmap2 <texture></code> {{dx9}}
; <code>$bumpframe2 <integer></code>
; <code>$bumpframe2 <integer></code> {{dx9}}
: Used by the [[WorldVertexTransition]] shader in blend materials that display two textures. DirectX 9 required.
; <code>$bumptransform2 <matrix></code> {{dx9}}
: Used by the [[WorldVertexTransition]] shader in blend materials that display two textures.


==Console commands==
==Console commands==

Revision as of 19:22, 4 May 2019

A material's albedo (left) compared to its bump map.
The above material in-game.

The $bumpmap VMT parameter specifies a texture that will provide three-dimensional lighting information for a material. The texture is a bump map, but the process it is used for is called normal mapping. The two terms are often used interchangeably, however.

Warning.pngWarning:$bumpmap will disable prop_static's per-vertex lighting in every Source game but Counter-Strike: Global Offensive. Not enough data is stored in the vertices for normal mapping, so the engine has no choice but to fall back.
Note.pngNote:
  • In the Water shader, $bumpmap is for a DX8 du/dv map. Use $normalmap instead.
  • The $bumpmap parameter is not compatible with decal textures.

Basic syntax

LightmappedGeneric
{
	$basetexture	brick/brickwall021a
	$surfaceprop	brick
	$bumpmap		brick/brickwall021a_normal
}

Additional parameters

$bumptransform <matrix> (DX9 SM2)
Transforms the bump map texture.
Todo: Does this actually require DX9? Present in DX8 fallback shaders.
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 ?]
$ssbump
Flags the bump map texture as being self-shadowing. Click for more details.
$bumpscale <float> (DX8)
Scales the bump map by the given value in DirectX 8.
Todo: Does this actually exist? Seemingly not present in DX8 fallback shaders.
$bumpframe <integer>
The frame to start an animated bump map on.
$nodiffusebumplighting <bool>
Stops the bump map affecting the lighting of the material's albedo, which help combat overdraw. Does not affect the specular map.
Icon-Bug.pngBug:Does not function in Orange Box builds and later.  [todo tested in ?]
$forcebump <bool> (DX8)
If 0, use bumpmapping if the card says it can handle it. If 1, always force bumpmapping on.
$bumpoffset <?>
Confirm:DX8 version of center?
Todo: Does this actually exist?
$bumpmap2 <texture> (DX9 SM2)
$bumpframe2 <integer> (DX9 SM2)
$bumptransform2 <matrix> (DX9 SM2)
Used by the WorldVertexTransition shader in blend materials that display two textures.

Console commands

mat_fastnobump <bool>
Quickly enables/disabled normal mapping.
mat_normalmaps <bool>
Displays the bump map texture of all materials that have one in place of their albedo.

(Yes, these two commands have bump and normal the wrong way around!)

See also