Parallax mapping

From Valve Developer Community
Jump to: navigation, search
Example of parallax mapping.
Note:This feature is not currently available in any official Valve game, but code exists to implement it
Note:This downloadable shader only works in the ep1 engine

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 heightmap 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:

    "$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

Note:This mod is obsolete, and does not work properly with HDR. There is a reincarnation of the Parallax Occlusion Shader mod by the same author but that only works with models. A brush version is in the works. In the meantime, Parallax Occlusion Shader still works with HDR off.

First, in the Valve Material (.vmt) file, after the line


add this line:


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:

    "$basetexture"	"walls/brickwall"
    "$surfaceprop"	"brick"
    "$bumpmap"		"walls/brickwall_normal"
    "$heightmap"	"walls/brickwall_height"

See also

External links