Parallax mapping

From Valve Developer Community
Revision as of 12:53, 27 November 2009 by Cheesemoo0 (talk | contribs) (External links: Put in a working link)
Jump to: navigation, search
Note.png Note: This downloadable shader only works in the ep1 engine
Note.png Note: Parallax mapping is currently disabled in the Source Engine shaders. However, it is very easy to implement with custom code; hardly any coding experience is needed. For an installable implementation, see the extended phong and parallax shader by Mihail Najdenov or the parallax mod by Twilight mod.

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, and placing it in the same folder as the texture it belongs to.

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.png 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