This article's documentation is for anything that uses the Source engine. Click here for more information.

$phong: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
Tag: Manual revert
No edit summary
Line 114: Line 114:


== External links ==
== External links ==
* [https://www.youtube.com/watch?v=tLCUE25KEmM A comprehensive YouTube video on how phong materials work in Source]
* [https://tf2maps.net/threads/phong-on-brushes-the-hacky-way.26765 $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 [[prop_static|static props]] which are lit per-vertex, without falling back to lower-quality point lighting on the main prop
* [https://tf2maps.net/threads/phong-on-brushes-the-hacky-way.26765 $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 [[prop_static|static props]] which are lit per-vertex, without falling back to lower-quality point lighting on the main prop
*[https://share.substance3d.com/libraries/6595 SubstancePainter Source Engine Complex Phong Shader]
*[https://share.substance3d.com/libraries/6595 SubstancePainter Source Engine Complex Phong Shader]
[[Category:Shader parameters|p]][[Category:VMT Lighting]]
[[Category:Shader parameters|p]][[Category:VMT Lighting]]
[[Category:Material System]]
[[Category:Material System]]

Revision as of 05:45, 13 August 2025

English (en)Español (es)Русский (ru)中文 (zh)Translate (Translate)

$phong is a material shader parameter for the VertexLitGeneric shader available in all Source Source games since Source 2006 Source 2006.

Phong shading provides Alyx's skin, hairband and lip highlights.

It is also available on the LightmappedGeneric and WorldVertexTransition shaders in all games since Counter-Strike: Global Offensive Counter-Strike: Global Offensive(also in Garry's ModMapbase). It provides Wikipedia icon diffuse reflections at low intensity and Wikipedia icon specular highlights at apex intensity, masked by a texture which control per-texel its intensity. For a full explanation, see Phong materials.

Note.pngNote:Phong shading for LightmappedGeneric and WorldVertexTransition is only available in CS:GO engine branchStrata Source. It requires the material to be lit by the sunlight from a 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. ((in all games since Strata Source) env_projectedtexture also affects brushes with phong enabled)
Icon-Bug.pngBug:Garry's Mod Garry's Mod reads lighting direction for brush phong from env_sun instead; maps with multiple suns may not get accurate phong reflections on brushes.
Note.pngNote:Phong shading for LightmappedGeneric is also available in Mapbase Mapbase, but it is implemented differently.
Icon-Important.pngImportant:In all Source Engine games since Source 2007 Source 2007 (until Counter-Strike: Global Offensive) enabling this shader will also enable $halflambert automatically (including gbuffer's halflambert in Black Mesa), unless $phongdisablehalflambert(in all games since Alien Swarm) is used. This effect isn't physically accurate, so it should be disabled if possible in most cases.
Icon-Bug.pngBug:Phong reflection vectors are broken on static props with vertex lighting.  (tested in: Black Mesa,Counter-Strike: Global Offensive)
Tip.pngTip:Use new specular shader in Black Mesa Black Mesa as an alternative of phong on brushes.

Syntax

$phong <bool>
Note.pngNote:All parameters in the following example must be specified in the material, otherwise Phong shading won't show up at all, except in Insurgency Insurgency.
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

Warning.pngWarning:There are some caveats regarding $normalmapalphaenvmapmask and $selfillumfresnel when using $phong!


$bumpmap $basemapalphaphongmask $basemapluminancephongmask $phongexponent $phongexponenttexture $phongexponentfactor $invertphongmask $forcephong $diffuseexp $shinyblood $shinybloodexponent

Brightness

$phongboost $phongfresnelranges $phongdisablehalflambert

Colors

$phongalbedotint

An example model showing how AlbedoTint appears on a model.

$phongalbedoboost

The Hunter without and with its $phongwarptexture, showing how it affects the Phong reflection.

$phongtint

Breakdown of the $phongwarptexture: computed coordinates, texture and result

$phongwarptexture

Brush phong in Counter-Strike: Global Offensive Counter-Strike: Global Offensive using tile/hr_t/inferno/tile_a. Note the complete absence of the reflection in the shaded area.

Brush Shader Parameters

(only in CS:GO engine branch)(also in Garry's Mod)

$phongmaskcontrastbrightness $phongamount $phongbasetint

Console Commands

Cvar/Command Parameters or default value Descriptor Effect
mat_phong 1 bool Disable or enable phong shading.
Icon-Bug.pngBug:Doesn't work in Counter-Strike: Global Offensive Counter-Strike: Global Offensive branch.  (tested in: Portal 2: Community Edition)

See also

External links