$phong
(Redirected from $phongwarptexture)
Jump to navigation
Jump to search
$phong is a material shader parameter for the VertexLitGeneric shader available in all
Source games since
Source 2006.
It is also available on the LightmappedGeneric and WorldVertexTransition shaders in all games since
Counter-Strike: Global Offensive(also in ![]()
). It provides
diffuse reflections at low intensity and
specular highlights at apex intensity, masked by a texture which control per-texel its intensity. For a full explanation, see Phong materials.
Syntax
$phong <bool>
- Todo: Other games that don't require all phong parameters present (likely Portal 2 and up)
VertexLitGeneric
{
$phong 1
$bumpmap [texture]
$phongexponent 5 // either/or
$phongexponenttexture [texture] // either/or
$phongboost 1.0
$phongfresnelranges "[0 0.5 1]"
}Parameters
Masking
- Using $selfillumfresnel without $normalmapalphaenvmapmask will mask the $envmap using the $basetexture's alpha channel.
- Using $selfillumfresnel with $normalmapalphaenvmapmask will multiply the $envmap by
0.0f. Effectively disabling the effect! - When not using $selfillumfresnel. The mask used for $envmap will be the $basetexture's alpha channel unless $normalmapalphaenvmapmask is also used.
- If $normalmapalphaenvmapmask is used, the $bumpmap's alpha channel will be used for Phong masking. Using either
$basemapalphaphongmaskor$basemapluminancephongmaskwill override it.
- $bumpmap <texture>
- Phong requires mask. The alpha channel of a bump map acts as a Phong mask by default.
- $basemapalphaphongmask <boolean> (in all games since
)
- Shader(s): VertexLitGeneric
- Use $basetexture's alpha channel as the Phong mask instead of
$bumpmap's alpha channel.
Warning:Using this with $normalmapalphaenvmapmask will override the mask used for $envmap to be the contents of the $basetexture's alpha channel!
Warning:
Garry's Mod Using this with $normalmapalphaenvmapmask and $envmap renders in $envmap and $phongbe masked by both$basemapalphaphongmaskalpha channel and $normalmapalphaenvmapmask alpha channel.
- $basemapluminancephongmask <boolean> (in all games since
)
- Shader(s): VertexLitGeneric
- Mask phong intensity based on the brightness of the
$basetexture.
Bug:Basetexture Luminance will replace the mask used for $envmap, if $normalmapalphaenvmapmask is used. [todo tested in ?]
Bug:Doesn't work in
Garry's Mod. [todo tested in ?]
- $phongexponent and $phongexponent2 <integer>
- A global exponent value. Overrides an exponent mask if present.
$phongexponent2is forWorldVertexTransition's second material in
CS:GO engine branch.
- $phongexponenttexture <texture>
- Shader(s): VertexLitGeneric
- A per-texel exponent map. In an exponent map:
- Red channel: Exponent mask (size of highlight, 0-255, where a value of 0 is a large highlight, 255 small.)
- Green channel: Albedo tint mask (only if
$phongalbedotint 1, 0-255, where a value of 0 is no tint, 255 full tint.) - Blue channel: Nothing.
- Alpha channel: $rimlight mask (only if
$rimmask 1.)
Note:LightmappedGenericandWorldVertexTransitiondo not have support for$phongexponenttexture. You must use$phongexponentinstead.
- $phongexponentfactor <float> (only in

)
- Shader(s): VertexLitGeneric
- Multiply the exponent from the
$phongexponenttextureby this amount.
Tip: The default value of this parameter is "0.0". However, a more reasonable default value would be"149.0"
- $invertphongmask <boolean> (in all games since
)
- Shader(s): VertexLitGeneric
- Invert the value of the phong mask.
Confirm: Is this the case for all branches?
- $forcephong <boolean> (in all games since
)
- Shader(s): VertexLitGeneric
- Force phong shading on phong-using materials even at low GPU levels when
mat_phongis disabled.
- $diffuseexp <float> (only in

)
- Shader(s): VertexLitGeneric, Infected
- Diffuse exponent used for dynamic lights only.
Note:have this with $halflambert greatly decrease it effect.
- $shinyblood <integer> (only in

)
- Shader(s): VertexLitGeneric, Infected
- Derive phong mask from areas that are more red than others. Only when variation is disabled.
- $shinybloodexponent <integer> (only in

)
- Shader(s): VertexLitGeneric, Infected
- Exponent for the above.
Brightness
- $phongboost <float>
- Shader(s): VertexLitGeneric, LightmappedGeneric((only in
)) - Phong brightness factor. Larger values create a more intense highlight, useful for surfaces like metal and glass.
Tip:A phong boost of zero is visually identical to no phong, and can be used to work around certain shader parameter combinations that require phong (ex $lightwarptexture).
- $phongfresnelranges <matrix>
- Shader(s): VertexLitGeneric, LightmappedGeneric((only in
)) - See Phong Fresnel ranges. Default is
"[0 0.5 1]".
Note:$envmapis also affected by these fresnel ranges if both it and Phong are enabled in a material.
Note: drives the x component of a phongwarptexture if specified.
- $phongdisablehalflambert <boolean> (in all games since
) (also in
,
)
- Shader(s): VertexLitGeneric
- Disables forced half-lambertian shading on Phong materials.
Note:This parameter is effectively forced on in
CS:GO engine branch due to $halflambertbeing disabled.
Tip:In games without this command, the effect can be simulated by using the $lightwarptexturefound here.
Colors
- $phongalbedotint <boolean> (in all games since
)
- Shader(s): VertexLitGeneric
-
Tints the phong reflection by the color of the
$basetexture. The amount of tint is defined by the green channel of$phongexponenttexture. A$phongexponenttexturemust be specified in order for$phongalbedotintto work.
Warning:$phongalbedotintcannot be used with$phongtint. The latter will disable the effect.
Note:$phongalbedotintworks by multiplying the$basetextureover the reflection, without darkening the albedo. The reflection will get dimmer as a result, so account for this in the phong mask or with$phongboost.
Note:$phongalbedotintwill tint highlights by the original color of the$basetextureeven when the material is tinted by$color2orrendercolor.
- $phongalbedoboost <float> (in all games since
) (also in
)
- Shader(s): VertexLitGeneric
- Phong albedo overbrightening factor. Ranges 0-255.
Note: This will multiply the tint that is being applied to phong from $phongalbedotint.
- $phongtint <RGB matrix> (in all games since
)
- Shader(s): VertexLitGeneric
- Color tint of the phong reflection.
Warning:This will override $phongalbedotintif both are used.
Note: Also tints $rimlight
- $phongwarptexture <texture> (in all games since
)
- Shader(s): VertexLitGeneric
- Used to create an iridescence effect, as seen on Episode Two's Hunters.
- The highlight is multiplied with a texture. The coordinates of the sampled pixel are as follows:
- x: 1 - (distance to the center of the highlight)
- y: 1 - (fresnel component as computed by Phong Fresnel ranges)
Note:Disables the initial phongfresnelranges masking
Bug:Does not work in Left 4 Dead 2. [todo tested in ?]
Brush Shader Parameters
WorldVertexTransition in - $phongmaskcontrastbrightness and $phongmaskcontrastbrightness2 <vector2>
- Shader(s): LightmappedGeneric, WorldVertexTransition
- The first value controls the contrast level between light and dark areas in the mask, and the second value controls the overall brightness.
$phongmaskcontrastbrightness2is forWorldVertexTransition's second material.- Todo: Find out the range of both values.
- $phongamount and $phongamount2 <vector4>
- Shader(s): LightmappedGeneric, WorldVertexTransition
- The first 3 values control the color tint, and the fourth value controls the brightness. The fourth value can go beyond 1, but affects the brightness of the whole texture, not just the highlight.
$phongamount2is forWorldVertexTransition's second material.
- $phongbasetint and $phongbasetint2 <float>
- Shader(s): LightmappedGeneric, WorldVertexTransition
- Allows the
$basetextureand/or$basetexture2to tint the color of the Phong highlight.
The Original VMT: tile/hr_t/inferno/tile_a.vmt From Counter-Strike: Global Offensive
Brush phong in
Counter-Strike: Global Offensive Using: tile/hr_t/inferno/tile_a.
Note:The complete absence of the reflection in the shaded area.
"lightmappedgeneric"
{
"$basetexture" "tile/hr_t/inferno/tile_a"
"$bumpmap" "tile/hr_t/inferno/tile_a_normals"
"$surfaceprop" "tile"
"$normalmapalphaenvmapmask" "1"
"$envmap" "env_cubemap"
"$envmaptint" "[.6 .6 .6]"
"$detail" "detail/plaster_detail_01"
"$detailscale" "[5 5]"
"$detailblendfactor" ".4"
"$envmaplightscale" "1"
"$phong" "1"
"$phongexponent" "80.0"
"$phongmaskcontrastbrightness" "[2 .7]"
"$phongamount" "[1 1 1 1]"
}
Console Commands
| Cvar/Command | Parameters or default value | Descriptor | Effect |
|---|---|---|---|
| mat_phong | 1 | bool | Disable or enable phong shading. |
Notes
LightmappedGeneric and WorldVertexTransition is only available in LightmappedGeneric is also available in $phongdisablehalflambert(in all games since See also
- Phong materials
- $envmap (environment map)
- $lightwarptexture
- $rimlight
External links
A comprehensive YouTube video on how phong materials work in Source
GMOD YouTube video showing how to apply Phong on LightmappedGeneric textures (Brushes)- $Phong on brushes*: The Hacky Way - A TF2maps.net guide on how to fake $Phong on brushes for games prior to CS:GO. Can also be used to fake phong on static props which are lit per-vertex, without falling back to lower-quality point lighting on the main prop
- $Phong on brushes*: The Hacky Way (gamebanana)
- SubstancePainter Source Engine Complex Phong Shader