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

$bumpmap: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (Added Caveats and changed first few Templates to Modern ones)
No edit summary
 
(22 intermediate revisions by 8 users not shown)
Line 1: Line 1:
{{lang|$bumpmap}}[[Category:List of Shader Parameters|B]]
{{LanguageBar}}
[[Image:Brickwall021a normalcompare.jpg|thumb|A material's [[albedo]] (left) compared to its bump map.]]
{{this is a|shader parameter|notext=1|name=$bumpmap}}
[[Image:Example of bump mapping.jpg|thumb|The above material in-game.]]


{{Shaderparam|$bumpmap}} It 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.
[[File:Brickwall021a normalcompare.jpg|thumb|A material's [[diffuse]] (left) compared to its normal map.]]
[[File:Example of bump mapping.jpg|thumb|The above material in-game.]]It 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 {{w|normal mapping}}. The two terms are often used interchangeably, however.


{{ModernWarning|<code>$bumpmap</code> will disable {{ent|prop_static}}'s per-vertex lighting in every Source game before {{csgobranch|4}}.<br>
{{warning|<code>$bumpmap</code> will disable {{ent|prop_static}}'s per-vertex lighting in every Source game before {{csgobranch|4}}.<br>
Not enough data is stored in the vertices for normal mapping, so the engine has no choice but to fall back.}}
Not enough data is stored in the vertices for normal mapping, so the engine has no choice but to fall back.}}
{{important|Bumpmapped brushes and displacements generate four lightmaps per-surface (one for each light direction, plus non-bumped version), instead of one. If {{code|$bumpmap}} or {{code|$normalmap}} is added to a VMT that did not have it at the time of compilation, the map must be recompiled.
{{note|This does not apply to maps compiled using the {{code|-bumpall}} [[VBSP]] parameter (Which creates 4 lightmaps for all faces, regardless of if they are bumpmapped). This parameter should not be used often, however, as it significantly increases lightmap usage.}}
}}
{{Important|<code>$bumpmap</code> does not exist for {{code|[[LightmappedReflective]]}}. Use <code>$normalmap</code> instead.}}


{{ModernNote|
{{note|
* In the <code>[[Water_(shader)|Water]]</code> shader, <code>$bumpmap</code> is for a DX8 [[Du/dv_map|du/dv map]]. Use <code>$normalmap</code> instead.
* In the <code>[[Water_(shader)|Water]]</code> shader, <code>$bumpmap</code> is for a DX8 [[Du/dv_map|du/dv map]]. Use <code>$normalmap</code> instead.
* Bump maps cannot be used on decal textures except in {{csgobranch|4}}.
* Bump maps cannot be used on decal textures except in {{csgobranch|4}}.
* On {{ent|VertexLitGeneric}} using {{ent|$lightwarptexture}} will force bumpmapping even if <code>$bumpmap</code> is not in the VMT. A default one is bound instead, all <code>$bumpmap</code> caveats come with it.}}
* On {{ent|VertexLitGeneric}} using {{ent|$lightwarptexture}} will force bumpmapping even if <code>$bumpmap</code> is not in the VMT. A default one is bound instead, all <code>$bumpmap</code> caveats come with it.}}
{{ModernBug| <code>$bumpmap</code> causes some other Parameters to not work. Parameters that will break with <code>$bumpmap</code> are ( but not limited to ) :
{{bug| <code>$bumpmap</code> causes some other Parameters to not work. Parameters that will break with <code>$bumpmap</code> are ( but not limited to ) :
* Will not work with materials using {{ent|$envmapmask}}. Except on {{ent|VertexLitGeneric}}{{mapbase|only}} and {{ent|LightmappedGeneric}}{{csgo|only}}. See [[$envmapmask#Alternative_methods|Alternative methods]].
* Will not work with materials using {{ent|$envmapmask}}. Except on {{ent|VertexLitGeneric}}{{mapbase|only}} and {{ent|LightmappedGeneric}}{{csgo|only}}. See [[$envmapmask#Alternative_methods|Alternative methods]].
* In {{csgo}} {{ent|LightmappedGeneric}}, [[$detail#Parameters and Effects|$detailblendmode]] 9 cannot be used.
* In {{csgo}} {{ent|LightmappedGeneric}}, [[$detail#Parameters and Effects|$detailblendmode]] 9 cannot be used.
Line 33: Line 37:


==Additional Parameters==
==Additional Parameters==
{{MatParam|$bumptransform|matrix|Transforms the bump map texture. {{todo|Does this actually require DX9? Present in DX8 fallback shaders.}}
{{MatParamDef|$bumptransform|matrix|Transforms the bump map texture. {{todo|Does this actually require DX9? Present in DX8 fallback shaders.}}
: {{bug|Does not work when using {{ent|$detail}}. This ''does'' work in {{csgobranch}}.}}
: {{bug|Does not work when using {{ent|$detail}}. This ''does'' work in {{csgobranch}}.}}
{{VMT UVtransform}}|dx9=1}}
{{VMT UVtransform}}|dx9=1}}
{{MatParam|$bumpframe|int|The frame to start an animated bump map on.}}
{{MatParamDef|$bumpframe|int|The frame to start an animated bump map on.}}
{{MatParam|$nodiffusebumplighting|bool|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, making it useful for distorted reflections on flat surfaces.
{{MatParamDef|$nodiffusebumplighting|bool|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, making it useful for distorted reflections on flat surfaces.
: {{bug|Does not function beyond {{src07|2}}.{{confirm}}}}
: {{bug|Does not function beyond {{src07|2}}.{{confirm}} {{note|Functions with [[$ssbump]] but not regular normals on {{game link|Source 2013}}. More testing required?}} }}
: {{note|Functions with [[$ssbump]] but not regular normals on {{game link|Source 2013}}. More testing required?}}
: Default behavior if the surface lacks {{cmd|SURF_BUMPLIGHT}}, regardless of this command.
|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParam|[[$ssbump]]|bool|Flags the bump map texture(s) as being self-shadowing. Click for more details.|since={{src07}}|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParamDef|$ssbump|bool|Flags the bump map texture(s) as being self-shadowing. Click for more details.|since={{src07}}|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParam|$forcebump|bool|If 0, use bumpmapping if the card says it can handle it. If 1, always force bumpmapping on.|dx8=1|removed={{l4d}}}}
{{MatParamDef|$forcebump|bool|If 0, use bumpmapping if the card says it can handle it. If 1, always force bumpmapping on.|dx8=1|removed={{l4d}}}}
{{MatParam|$bump_force_on|bool|Force bump mapping on, even for low-end machines.|since={{portal2}}|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParamDef|$bump_force_on|bool|Force bump mapping on, even for low-end machines.|since={{portal2}}|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParam|$addbumpmaps|bool|Enables the usage and blending of two bump maps together for {{ent|LightmappedGeneric}}.|only={{csgobranch}}|shaders=LightmappedGeneric}}
{{MatParamDef|$addbumpmaps|bool|Enables the usage and blending of two bump maps together for {{ent|LightmappedGeneric}}.|only={{csgobranch}}|shaders=LightmappedGeneric}}
{{MatParam|$bumpmap2|texture|The second bump map to use, either for {{ent|WorldVertexTransition}} or for <code>LightmappedGeneric</code> in {{csgobranch}} for bump map blending.|dx9=1|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParamDef|$bumpmap2|texture|The second bump map to use, either for {{ent|WorldVertexTransition}} or for <code>LightmappedGeneric</code> in {{csgobranch}} for bump map blending.|dx9=1|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParam|$bumpframe2|int|Same as <code>$bumpframe</code>, but for the second bump map.|dx9=1|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParamDef|$bumpframe2|int|Same as <code>$bumpframe</code>, but for the second bump map.|dx9=1|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParam|$bumptransform2|matrix|Same as <code>$bumptransform</code>, but for the second bump map.
{{MatParamDef|$bumptransform2|matrix|Same as <code>$bumptransform</code>, but for the second bump map.
: {{Note|{{ent|$detail}} used with <code>$detailscale</code> will override this on <code>LightmappedGeneric</code> if the shader is using <code>$addbumpmaps</code>.}}|dx9=1|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
: {{Note|{{ent|$detail}} used with <code>$detailscale</code> will override this on <code>LightmappedGeneric</code> if the shader is using <code>$addbumpmaps</code>.}}|dx9=1|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParam|$bumpmask|texture|If using two bump maps, use a third bump map to act as the base, with the alpha channel acting as a mask for the first two bump maps. The alpha channel of <code>$bumpmask</code> is also used as a specular mask.
{{MatParamDef|$bumpmask|texture|If using two bump maps, use a third bump map to act as the base, with the alpha channel acting as a mask for the first two bump maps. The alpha channel of <code>$bumpmask</code> is also used as a specular mask.
: {{note|Only used by {{hl2}}<code>materials/nature/toxicslime002a</code>.}}
: {{note|Only used by {{hl2}}<code>materials/nature/toxicslime002a</code>.}}
: {{note|Does not work with {{ent|$detail}} and {{ent|$seamless_scale}}.}}|dx9=1|shaders=LightmappedGeneric}}
: {{note|Does not work with {{ent|$detail}} and {{ent|$seamless_scale}}.}}|dx9=1|shaders=LightmappedGeneric}}
{{MatParam|$bumpdetailscale1|and=$bumpdetailscale2|normal|The strength of the first and second bump maps for bump map blending.|only={{csgobranch}}|shaders=LightmappedGeneric}}
{{MatParamDef|$bumpdetailscale1|and=$bumpdetailscale2|normal|The strength of the first and second bump maps for bump map blending.|only={{csgobranch}}|shaders=LightmappedGeneric}}


==Console Commands==
==Console Commands==
{{IO|mat_fastnobump|param=bool|Quickly enables/disabled normal mapping.}}
{{varcom|start}}
{{IO|mat_normalmaps|param=bool|Displays the bump map texture of all materials that have one in place of their [[albedo]].}}
{{varcom|mat_fastnobump||bool|Quickly enables/disabled normal mapping.}}
:(Yes, these two commands have bump and normal the wrong way around!)
{{varcom|mat_normalmaps||bool|Displays the bump map texture of all materials that have one in place of their [[diffuse]].}}
{{IO|mat_bumpmap|param=bool|Enable or disable normal mapping. Default 1.}}
{{varcom|mat_bumpmap|1|bool|Enable or disable normal mapping.}}
{{varcom|end}}


==See Also==
==See also==
* {{ent|$ssbump}}
* {{ent|$ssbump}}
* [[Bump map]], for technical details and a guide to creation.
* [[Bump map]], for technical details and a guide to creation.

Latest revision as of 11:39, 23 August 2025

English (en)Español (es)Français (fr)中文 (zh)Translate (Translate)

$bumpmap is a material shader parameter available in all Source Source games.

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

It 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 icon 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 before CS:GO engine branch CS:GO engine branch.
Not enough data is stored in the vertices for normal mapping, so the engine has no choice but to fall back.
Icon-Important.pngImportant:Bumpmapped brushes and displacements generate four lightmaps per-surface (one for each light direction, plus non-bumped version), instead of one. If $bumpmap or $normalmap is added to a VMT that did not have it at the time of compilation, the map must be recompiled.
Note.pngNote:This does not apply to maps compiled using the -bumpall VBSP parameter (Which creates 4 lightmaps for all faces, regardless of if they are bumpmapped). This parameter should not be used often, however, as it significantly increases lightmap usage.
Icon-Important.pngImportant:$bumpmap does not exist for LightmappedReflective. Use $normalmap instead.
Note.pngNote:
Icon-Bug.pngBug: $bumpmap causes some other Parameters to not work. Parameters that will break with $bumpmap are ( but not limited to ) :   [todo tested in ?]

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.
Icon-Bug.pngBug:Does not work when using $detail. This does work in CS:GO engine branch.  [todo tested in ?]
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 ?]
The frame to start an animated bump map on.
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
Stops the bump map affecting the lighting of the material's albedo, which help combat overdraw. Does not affect the specular map, making it useful for distorted reflections on flat surfaces.
Icon-Bug.pngBug:Does not function beyond Source 2007 Source 2007.[confirm]
Note.pngNote:Functions with $ssbump but not regular normals on Source 2013 Source 2013 . More testing required?
  [todo tested in ?]
Default behavior if the surface lacks SURF_BUMPLIGHT, regardless of this command.
$ssbump <boolean> (in all games since Source 2007)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
Flags the bump map texture(s) as being self-shadowing. Click for more details.
$forcebump <boolean> (DX8) (removed since Left 4 Dead)
If 0, use bumpmapping if the card says it can handle it. If 1, always force bumpmapping on.
$bump_force_on <boolean> (in all games since Portal 2)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
Force bump mapping on, even for low-end machines.
$addbumpmaps <boolean> (only in CS:GO engine branch)
Shader(s): LightmappedGeneric
Enables the usage and blending of two bump maps together for LightmappedGeneric.
$bumpmap2 <texture> (DX9 SM2)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
The second bump map to use, either for WorldVertexTransition or for LightmappedGeneric in CS:GO engine branch for bump map blending.
$bumpframe2 <integer> (DX9 SM2)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
Same as $bumpframe, but for the second bump map.
$bumptransform2 <matrix> (DX9 SM2)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
Same as $bumptransform, but for the second bump map.
Note.pngNote:$detail used with $detailscale will override this on LightmappedGeneric if the shader is using $addbumpmaps.
$bumpmask <texture> (DX9 SM2)
Shader(s): LightmappedGeneric
If using two bump maps, use a third bump map to act as the base, with the alpha channel acting as a mask for the first two bump maps. The alpha channel of $bumpmask is also used as a specular mask.
Note.pngNote:Only used by Half-Life 2materials/nature/toxicslime002a.
Note.pngNote:Does not work with $detail and $seamless_scale.
Shader(s): LightmappedGeneric
The strength of the first and second bump maps for bump map blending.

Console Commands

Cvar/Command Parameters or default value Descriptor Effect
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 diffuse.
mat_bumpmap 1 bool Enable or disable normal mapping.

See also