Parallax mapping: Difference between revisions
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
{{warning|Parallax maps are disabled in every Valve game, although since {{as}} an (unfinished) shader exists named [[ParallaxTest]], which can be used as an alternative.}} | {{warning|Parallax maps are disabled in every Valve game, although since {{as}} an (unfinished) shader exists named [[ParallaxTest]], which can be used as an alternative.}} | ||
{{note|This '''downloadable''' shader only works in the Episode 1 (2006) engine.}} | {{note|This '''downloadable''' shader only works in the Episode 1 (2006) engine.}} | ||
{{note|Thexa4's PBR shader works in {{src13|4}}.}} | |||
'''Parallax mapping''' (also known as '''offset mapping''' or '''virtual displacement mapping''') is a shading technique that displaces the individual pixel height of a surface, so that when you look at it at an angle, the high points will obscure the low points behind them, making it look three-dimensional. The height data for each pixel comes from a [[$parallaxmap]] texture, which needs to be created for each parallax mapped material. | '''Parallax mapping''' (also known as '''offset mapping''' or '''virtual displacement mapping''') is a shading technique that displaces the individual pixel height of a surface, so that when you look at it at an angle, the high points will obscure the low points behind them, making it look three-dimensional. The height data for each pixel comes from a [[$parallaxmap]] texture, which needs to be created for each parallax mapped material. | ||
Line 71: | Line 72: | ||
"$bumpmap" "walls/brickwall_normal" | "$bumpmap" "walls/brickwall_normal" | ||
"$heightmap" "walls/brickwall_height" | "$heightmap" "walls/brickwall_height" | ||
} | |||
</nowiki> | |||
</pre> | |||
===Adding parallax map with Thexa4's PBR shader mod=== | |||
[[File:Thexa4 pbr parallax 1.png|thumb|300px|right|Parallax enabled.]] | |||
{{note| Follow the tutorial [[Adding PBR_to_Your_Mod|Adding PBR to Your Mod]] to implement the shader into your source sdk project! This shader is compatible with [[HDR]] and with {{src13|4}}.}} | |||
{{warning| This shader drastically modifies how your materials look compared to lightmappedgeneric!!}} | |||
[[File:Thexa4 pbr parallax 0.png|300px|thumb|right|Parallax Disabled.]] | |||
To make the effect work you will need to have these 3 parameters in your [[VMT]]: | |||
Enables/Disables parallax mapping. | |||
<code>$parallax <[[bool]]> </code> | |||
Controls the intensity of the parallax effect. | |||
<code>$parallaxdepth <[[float]]> </code> | |||
Center depth of the Parallax Map. | |||
<code> $parallaxcenter <[[float]]></code> | |||
To make the parallax mapping work you will need to put your [[Heightmap]] into the [[Bump_map]]'s alpha channel!! | |||
Example VMT: | |||
<pre> | |||
<nowiki> | |||
"PBR" | |||
{ | |||
"$basetexture" "pbr/rock_color" | |||
"$bumpmap" "pbr/rock_bump" //important you need to put your heightmap into the bumpmaps alpha channel | |||
"$mraotexture" "pbr/rock_mrao" | |||
"$envmap" "env_cubemap" | |||
"$surfaceprop" "Default" | |||
"$model" "0" | |||
"$parallax" "1" | |||
"$parallaxdepth" "0.030" | |||
"$parallaxcenter" "0.5" | |||
} | } | ||
</nowiki> | </nowiki> |
Revision as of 15:43, 16 July 2023





Parallax mapping (also known as offset mapping or virtual displacement mapping) is a shading technique that displaces the individual pixel height of a surface, so that when you look at it at an angle, the high points will obscure the low points behind them, making it look three-dimensional. The height data for each pixel comes from a $parallaxmap texture, which needs to be created for each parallax mapped material.
Parallax mapping is an enhancement of the bump mapping technique. It is only worthwhile for textures that have a depth of at least a few centimeters, like deep-set bricks or stone.
Creating a parallax mapped material
Creating a heightmap
Regardless of the way you are going to render them, creating parallax mapped materials always starts with creating a heightmap.
Adding a parallax map with the built-in support for parallax maps
Add these two lines to your Valve Material (.vmt) file:
"$parallaxmap" "texture name"
"$parallaxmapscale" <scale value>
Fill in the path and name of your heightmap on the first line, and a number between 0 and 1 on the second line. This number affects how deep the texture will look. 0.05
is an appropriate value for bricks.
Example VMT:
"LightmappedGeneric" { "$basetexture" "walls/brickwall" "$surfaceprop" "brick" "$bumpmap" "walls/brickwall_normal" "$parallaxmap" "walls/brickwall_height" "$parallaxmapscale" 0.05 }
Adding a parallax map with the Parallax Occlusion Shader mod

First, in the Valve Material (.vmt) file, after the line
"LightmappedGeneric"
add this line:
//"MN_PrlxLightmappedGeneric"
When playing a map with your parallax mapped material, comment out the first line. When compiling a map with your parallax mapped material in Hammer, comment out the last line. This (according to the author of the mod) is a workaround to a glitch in Source SDK.
Finally, add this line to your VMT file:
"$heightmap" "texture name"
Other parameters you may need:
"$heightscale"
, defines the "depth" of the effect, takes values 0.0—1.0, default=0.4
"$heightmapsample"
, default=16
Example VMT:
"MN_PrlxLightmappedGeneric" { "$basetexture" "walls/brickwall" "$surfaceprop" "brick" "$bumpmap" "walls/brickwall_normal" "$heightmap" "walls/brickwall_height" }
Adding parallax map with Thexa4's PBR shader mod



To make the effect work you will need to have these 3 parameters in your VMT:
Enables/Disables parallax mapping.
$parallax <bool>
Controls the intensity of the parallax effect.
$parallaxdepth <float>
Center depth of the Parallax Map.
$parallaxcenter <float>
To make the parallax mapping work you will need to put your Heightmap into the Bump_map's alpha channel!!
Example VMT:
"PBR" { "$basetexture" "pbr/rock_color" "$bumpmap" "pbr/rock_bump" //important you need to put your heightmap into the bumpmaps alpha channel "$mraotexture" "pbr/rock_mrao" "$envmap" "env_cubemap" "$surfaceprop" "Default" "$model" "0" "$parallax" "1" "$parallaxdepth" "0.030" "$parallaxcenter" "0.5" }