Difference between revisions of "$bumpmap"

From Valve Developer Community
Jump to: navigation, search
m (Revamped with MatParam changes)
(Additional parameters)
 
(6 intermediate revisions by 4 users not shown)
Line 8: Line 8:
 
{{note|
 
{{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.
* Bumpmaps cannot be used on decal textures, except in {{csgo}}.}}
+
* Bump maps cannot be used on decal textures, except in {{csgo}}.}}
  
 
==Basic syntax==
 
==Basic syntax==
Line 23: Line 23:
 
{{MatParam|$bumptransform|matrix|Transforms the bump map texture. {{todo|Does this actually require DX9? Present in DX8 fallback shaders.}}
 
{{MatParam|$bumptransform|matrix|Transforms the bump map texture. {{todo|Does this actually require DX9? Present in DX8 fallback shaders.}}
 
{{VMT UVtransform}}|dx9=1}}
 
{{VMT UVtransform}}|dx9=1}}
{{MatParam|[[$ssbump]]|bool|Flags the bump map texture(s) as being self-shadowing. Click for more details.|since={{src07}}}}
 
{{MatParam|$bumpscale|float|Scales the bump map by the given value in DirectX 8. {{Todo|Does this actually exist? Seemingly not present in DX8 fallback shaders.}}|dx8=1}}
 
 
{{MatParam|$bumpframe|int|The frame to start an animated bump map on.}}
 
{{MatParam|$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.
+
{{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.
: {{bug|Does not function beyond {{Game link|Source 2007}}.}}}}
+
: {{bug|Does not function beyond {{Game link|Source 2007}}.{{confirm}}}}|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}}
+
{{MatParam|[[$ssbump]]|bool|Flags the bump map texture(s) as being self-shadowing. Click for more details.|since={{src07}}|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParam|$addbumpmaps|bool|Enables the usage and blending of two bump maps together for {{ent|LightmappedGeneric}}.|only={{csgo}}}}
+
{{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}}}}
{{MatParam|$bumpmap2|texture|The second bump map to use, for either {{ent|WorldVertexTransition}} or for <code>LightmappedGeneric</code> in {{csgo}} for bump map blending.|dx9=1}}
+
{{MatParam|$bump_force_on|bool|Force bump mapping on, even for low-end machines.|since={{portal2}}|shaders=LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition}}
{{MatParam|$bumpframe2|int|Same as <code>$bumpframe</code>, but for the second bump map.|dx9=1}}
+
{{MatParam|$addbumpmaps|bool|Enables the usage and blending of two bump maps together for {{ent|LightmappedGeneric}}.|only={{csgo}}|shaders=LightmappedGeneric}}
 +
{{MatParam|$bumpmap2|texture|The second bump map to use, for either {{ent|WorldVertexTransition}} or for <code>LightmappedGeneric</code> in {{csgo}} 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}}
 
{{MatParam|$bumptransform2|matrix|Same as <code>$bumptransform</code>, but for the second bump map.
 
{{MatParam|$bumptransform2|matrix|Same as <code>$bumptransform</code>, but for the second bump map.
: {{Note|<code>[[$detail]]</code> used with <code>$detailscale</code> will override this on <code>LightmappedGeneric</code>.}}|dx9=1}}
+
: {{Note|<code>[[$detail]]</code> 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|$bumpdetailscale1|and=$bumpdetailscale2|normal|The strength of the first and second bump maps for bump map blending.|only={{csgo}}}}
+
{{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.
 +
: {{note|Only used by {{hl2}}<code>materials/nature/toxicslime002a</code>.}}
 +
: {{note|Does not work with <code>[[$detail]]</code> 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={{csgo}}|shaders=LightmappedGeneric}}
  
 
==Console commands==
 
==Console commands==

Latest revision as of 14:09, 10 May 2021

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

$bumpmap is a material shader parameter available in all Source games. 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 normal mapping. The two terms are often used interchangeably, however.

Warning.png Warning: $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.png Note: 
  • In the Water shader, $bumpmap is for a DX8 du/dv map. Use $normalmap instead.
  • Bump maps cannot be used on decal textures, except in Counter-Strike: Global Offensive.

Basic syntax

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

Additional parameters

$bumptransform <matrix>  (DX9+)
Transforms the bump map texture. To do: 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.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.
$bumpframe <integer>
The frame to start an animated bump map on.
$nodiffusebumplighting <boolean>
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.
Bug.png Bug: Does not function beyond <Source><Source> Source 2007 .[confirm]
Shaders: LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
$ssbump <boolean> (in all games since <Source><Source>)
Flags the bump map texture(s) as being self-shadowing. Click for more details.
Shaders: LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
$forcebump <boolean>  (removed since Left 4 Dead)  (DX8)
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)
Force bump mapping on, even for low-end machines.
Shaders: LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
$addbumpmaps <boolean> (only in Counter-Strike: Global Offensive)
Enables the usage and blending of two bump maps together for LightmappedGeneric.
Shaders: LightmappedGeneric
$bumpmap2 <texture>  (DX9+)
The second bump map to use, for either WorldVertexTransition or for LightmappedGeneric in Counter-Strike: Global Offensive for bump map blending.
Shaders: LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
$bumpframe2 <integer>  (DX9+)
Same as $bumpframe, but for the second bump map.
Shaders: LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
$bumptransform2 <matrix>  (DX9+)
Same as $bumptransform, but for the second bump map.
Note.png Note: $detail used with $detailscale will override this on LightmappedGeneric if the shader is using $addbumpmaps.
Shaders: LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
$bumpmask <texture>  (DX9+)
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.png Note: Only used by Half-Life 2materials/nature/toxicslime002a.
Note.png Note: Does not work with $detail and $seamless_scale.
Shaders: LightmappedGeneric
$bumpdetailscale1 and $bumpdetailscale2 <normal> (only in Counter-Strike: Global Offensive)
The strength of the first and second bump maps for bump map blending.
Shaders: LightmappedGeneric

Console commands

mat_fastnobump <boolean>
Quickly enables/disabled normal mapping.
mat_normalmaps <boolean>
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!)
mat_bumpmap <boolean>
Enable or disable normal mapping. Default 1.

See also