Parallax mapping: Difference between revisions
m (Setting bug notice hidetested=1 param on page where the bug might not need tested in param specified) |
MyGamepedia (talk | contribs) (Fixed in new beta.) |
||
Line 108: | Line 108: | ||
'''Black Mesa''' has its own way of rendering parallax mapping, which was not used in the original campaign, but was used in {{bmsbs|4}} for brick walls and the likes. This material shader parameter can be used for {{code|[[LightmappedGeneric]]}} and {{code|[[VertexLitGeneric]]}}. Also works with {{code|[[Lightmapped_4WayBlend]]}}, useless however. | '''Black Mesa''' has its own way of rendering parallax mapping, which was not used in the original campaign, but was used in {{bmsbs|4}} for brick walls and the likes. This material shader parameter can be used for {{code|[[LightmappedGeneric]]}} and {{code|[[VertexLitGeneric]]}}. Also works with {{code|[[Lightmapped_4WayBlend]]}}, useless however. | ||
{{warning|Parallax occlusion mapping is an expensive pixel shader, meaning it has higher performance costs based on its sample count and occupying screen percentage, and should thus be used smartly.}} | {{warning|Parallax occlusion mapping is an expensive pixel shader, meaning it has higher performance costs based on its sample count and occupying screen percentage, and should thus be used smartly.}} | ||
{{bug|hidetested=1|Parallax occlusion mapping UVs aren't sent to the [[gbuffer]]. This means that [[newlight_point|dynamic lighting]] will "fly" on a surface with POM | {{bug|hidetested=1|Parallax occlusion mapping UVs aren't sent to the [[gbuffer]]. This means that [[newlight_point|dynamic lighting]] will "fly" on a surface with POM.}} | ||
}} | |||
Revision as of 03:18, 16 June 2025




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>
$parallaxmapscale <float>
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:
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:
Adding parallax map with the PBR shader
Games running on Strata Source or with Thexa4's PBR shader installed can use parallax mapping already. All Strata Source games use a similar method.



To make the effect work you will need to have these 3 parameters in your VMT:
$parallax <bool> - Enables/Disables parallax mapping.
$parallaxdepth <float> - Controls the intensity of the parallax effect.
$parallaxcenter <float> - Center depth of the Parallax Map.
To make the parallax mapping work you will need to put your Heightmap into the Bump map's alpha channel. See Creating PBR materials for a tutorial on how to do this.
Example VMT:
Parallax occlusion mapping in
Black Mesa
Black Mesa has its own way of rendering parallax mapping, which was not used in the original campaign, but was used in Black Mesa: Blue Shift for brick walls and the likes. This material shader parameter can be used for LightmappedGeneric and VertexLitGeneric. Also works with Lightmapped_4WayBlend, useless however.


To make the effect work you will need to have these 3 parameters in your VMT:
$pomscale <float> - Scale of parallax mapping.
$pomminsamples <float> - Min amount of depth samples. The minimum is used at steep glancing angles and far distances. Less samples means more performance, but also worse quality.

|
$pommaxsamples <float> - Max amount of depth samples. The maximum is used at shallow glancing angles and close distances.

|
To make the parallax mapping work you'll need Heightmap. This is not embedded in the Bumpmap, but is instead kept separate in it's own VTF image.
Example VMT:
See also
- Adding PBR to Your Mod
- Creating PBR materials
- Material Creation
- $parallax
- Normal Map Creation
- Wikipedia:Parallax mapping