From Valve Developer Community
Jump to: navigation, search
Phong shading provides Alyx's skin, hairband and lip highlights.

The $phong material parameter provides diffuse reflections. In most engine branches it is only available on VertexLitGeneric; <Counter-Strike: Global Offensive> Counter-Strike: Global Offensive (as of early 2015) allows it to a limited extent on LightmappedGeneric and WorldVertexTransition. For a full explanation, see Phong materials.

VMT syntax

$phong <bool>
Note:All parameters must be specified otherwise the phong shader won't show up at all, except in <Insurgency>.
To do: Other games that don't require all phong parameters present (likely Portal 2 and up)
	$phong 1

	$bumpmap				[texture]
	$phongexponent			5			// either/or
	$phongexponenttexture	[texture]	// either/or
	$phongboost				1.0
	$phongfresnelranges		"[0 0.5 1]"



$bumpmap <texture>
There must be a Phong mask. The alpha channel of a bump map acts as a Phong mask by default.
$basemapalphaphongmask <bool>
Uses $basetexture's alpha channel as the Phong mask instead of $bumpmap's. The phong will not be influenced by the bumpmap, however.
$basemapluminancephongmask <bool> (New with Left 4 Dead)
Phong intensity is based on the brightness of $basetexture.
$phongexponent <int>
The numeric value overrides an exponent mask if present.
$phongexponenttexture <texture>
A global exponent value, or a per-texel exponent texture map. In an exponent map:
  • Red channel: Exponent (size of highlight, 0-255, where a value of 0 is a large highlight, 255 small.)
  • Green channel: Albedo tint (if $phongalbedotint 1, higher is more tint)
  • Blue channel: Nothing
  • Alpha channel: $rimlight mask
$invertphongmask <bool>
Appears to invert the value of the phong mask, as the name suggests. To do: What types of mask does this work on?
$phongexponentfactor <int>
This number will be used to multiply the exponent texture.
$shinyblood <int> (New with Left 4 Dead)
$shinybloodexponent <int> (New with Left 4 Dead)
To do: See Shading a Bigger, Better Sequel: Techniques in Left 4 Dead 2.
To do: Does this have something to do with the $phongexponent, $phongexponenttexture or both? Confirm engine branches.


$phongboost <float>
Phong brightness factor. Larger values create a more intense highlight, useful for surfaces like metal and glass.
$phongfresnelranges <matrix>
See Phong Fresnel ranges. Default is "[0 0.5 1]".
$phongDisableHalfLambert <bool> (New with Alien Swarm)
Used in Portal 2 on the Personality Cores such as Wheatley, disables functionality of $halflambert. MAY need $halflambert 0!
$ambientocclusiontexture <texture>
A "dirtmap". Mentioned in the SDK samples and seen in the VMT for Alyx's face. Ambient Occlusion is generally used for the eyes and face. To do: Does this actually do anything?


$phongalbedotint <bool>
Allows the $basetexture to affect the color of the Phong highlight. The amount of tint is defined by the green channel of $phongexponenttexture (see above).
Note:$phongalbedotint will tint highlights by the original color of the $basetexture even when the material is tinted by $color2 or rendercolor.
$phongalbedoboost <float> (New with Counter-Strike: Global Offensive)
Phong albedo overbrightening factor. Ranges 0-255. To do: Test and add a better description.
$phongtint "[<red float> <green float> <blue float>]"
Modifies the colour of the phong reflection. The channels are interpreted relative to each other (so "[0 0 0]" and "[1 1 1]" are the same).
Phongwarp example.png
Note:This will override $phongalbedotint if both are used.
Bug: This does not work with $basemapalphaphongmask.
$phongwarptexture <texture> (New with Half-Life 2: Episode Two / Source 2007)
Used to create an iridescence effect, as seen on Episode Two's Hunters. To do: How does $phongwarptexture actually work?
Note:Does not work in <Left 4 Dead 2>, despite the game being released in 2009.

Phong shading on brush faces

A May 2015 update to <Counter-Strike: Global Offensive> Counter-Strike: Global Offensive added limited support for Phong-based highlights on LightmappedGeneric materials. Currently it only works when the material is directly lit by an env_cascade_lighting, using the dynamic shadows as a mask (although traditional Phong masking is supported on top of this). It is known to work on displacements as well as WorldVertexTransition materials, but not on water or Lightmapped_4WayBlend.

New Parameters

$phongMaskContrastBrightness "[<float> <float>]"
Defines the contrast level between light and dark areas in the mask, and the overall brightness, respectively. Added along with support for phong-shaded lightmapped textures. To do: Find out the range of both values, and whether or not it can be used on models.
$phongAmount "[<red float> <green float> <blue float> <brightness> float]"
Controls the tint and brightness. The fourth value can go beyond 1, but affects the brightness of the whole texture, not just the highlight.

See also