$phong: Difference between revisions
No edit summary |
(Stop jamming notes at the top of the page, put them in their own section at the bottom) |
||
Line 3: | Line 3: | ||
[[File:Alyx phong closeup.jpg|thumb|200px|Phong shading provides Alyx's skin, hairband and lip highlights.]] | [[File:Alyx phong closeup.jpg|thumb|200px|Phong shading provides Alyx's skin, hairband and lip highlights.]] | ||
It is also available on the {{code|[[LightmappedGeneric]]}} and {{code|[[WorldVertexTransition]]}} shaders in all games since {{csgo|4}}{{also|{{gmod}}{{mapbase}}}}. It provides {{w|diffuse reflection|icon=hide|diffuse reflections}} at low intensity and {{w|specular highlight|icon=hide|specular highlights}} at apex intensity, masked by a texture which control per-texel its intensity. For a full explanation, see [[Phong materials]]. | It is also available on the {{code|[[LightmappedGeneric]]}} and {{code|[[WorldVertexTransition]]}} shaders in all games since {{csgo|4}}{{also|{{gmod}}{{mapbase}}}}. It provides {{w|diffuse reflection|icon=hide|diffuse reflections}} at low intensity and {{w|specular highlight|icon=hide|specular highlights}} at apex intensity, masked by a texture which control per-texel its intensity. For a full explanation, see [[Phong materials]]. | ||
==Syntax== | ==Syntax== | ||
Line 106: | Line 101: | ||
{{varcom|mat_phong|1|bool|Disable or enable phong shading. {{bug|Doesn't work in {{csgo|4}} branch.|tested={{p2ce}}}}}} | {{varcom|mat_phong|1|bool|Disable or enable phong shading. {{bug|Doesn't work in {{csgo|4}} branch.|tested={{p2ce}}}}}} | ||
{{varcom|end}} | {{varcom|end}} | ||
== Notes == | |||
{{Note|Phong shading for <code>LightmappedGeneric</code> and <code>WorldVertexTransition</code> is only available in {{csgobranch}}{{strata}}. It requires the material to be lit by the sunlight from a {{ent|env_cascade_light}} entity to work properly and uses the dynamic shadows generated by it as a mask on top of the traditional phong masking. ({{Strata|since}} {{ent|env_projectedtexture}} also affects brushes with phong enabled) | |||
{{bug|hidetested=1|{{gmod|4}} reads lighting direction for brush phong from {{ent|env_sun}} instead; maps with multiple suns may not get accurate phong reflections on brushes.}}}} | |||
{{Note|Phong shading for <code>LightmappedGeneric</code> is also available in {{mapbase|4}}, but it is implemented differently.}} | |||
{{important|In all [[Source Engine]] games since {{src07|4}} (until {{csgo}}) enabling this shader will also enable [[$halflambert]] automatically (including [[$halflambert_gbuffer_off|gbuffer's halflambert]] in {{bms|1}}), unless {{cmd|$phongdisablehalflambert}}{{since|{{as}}}} is used. This effect isn't physically accurate, so it should be disabled if possible in most cases.}} | |||
{{bug|tested={{bms}},{{csgo}}|Phong reflection vectors are broken on [[prop_static|static props]] with vertex lighting.}} | |||
{{tip|Use [[$specmap_mode|new specular]] shader in {{bms|4}} as an alternative of phong on brushes.}} | |||
== See also == | == See also == |
Revision as of 11:59, 13 August 2025
$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
$basemapalphaphongmask
or$basemapluminancephongmask
will override it.
$bumpmap
$basemapalphaphongmask
$basemapluminancephongmask
$phongexponent
$phongexponenttexture
$phongexponentfactor
$invertphongmask
$forcephong
$diffuseexp
$shinyblood
$shinybloodexponent
Brightness
$phongboost
$phongfresnelranges
$phongdisablehalflambert
Colors


Brush Shader Parameters
$phongmaskcontrastbrightness
$phongamount
$phongbasetint
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 









See also
- Phong materials
- $envmap (environment map)
- $lightwarptexture
- $rimlight
External links
- A comprehensive YouTube video on how phong materials work in Source
- $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
- SubstancePainter Source Engine Complex Phong Shader