$phong: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
mNo edit summary
(Incorrectly implemented in gmod)
Line 1: Line 1:
{{langsp}}
{{langsp}}
[[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 {{shader Name|LightmappedGeneric}} and {{Shader Name|WorldVertexTransition}} shaders in all games since {{csgo|4}}. It provides {{w|diffuse reflection|icon=hide}}s at low intensity and {{w|specular highlight|icon=hide}}s 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 {{shader Name|LightmappedGeneric}} and {{Shader Name|WorldVertexTransition}} shaders in all games since {{csgo|4}}{{also|{{gmod}}{{xengine}}{{mapbase}}}}. It provides {{w|diffuse reflection|icon=hide}}s at low intensity and {{w|specular highlight|icon=hide}}s at apex intensity, masked by a texture which control per-texel its intensity. For a full explanation, see [[Phong materials]].
{{Note|Phong shading for <code>LightmappedGeneric</code> and <code>WorldVertexTransition</code> is only available in {{csgobranch|4}}. 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|4}} also affects brushes with phong enabled)}}
{{Note|Phong shading for <code>LightmappedGeneric</code> and <code>WorldVertexTransition</code> is only available in {{csgobranch|4}}. 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|4}} also affects brushes with phong enabled)
{{bug|{{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.}}
{{Note|Phong shading for <code>LightmappedGeneric</code> is also available in {{mapbase|4}}, but it is implemented differently.}}
{{important|In {{bms|4}} half-lambertian for [[NewLight Point|new lights]] is broken. The result is that meshes with [[$phong]] or [[$halflambert]] get lit from ALL sides perpendicular to newlights, including ones with opposing normals. If you want to use [[$phong]] or [[$halflambert]] - you are able to fix this with adding in your [[VMT]] material parameter <code>"$halflambert_gbuffer_off"    "1"</code>.}}
{{important|In {{bms|4}} half-lambertian for [[NewLight Point|new lights]] is broken. The result is that meshes with [[$phong]] or [[$halflambert]] get lit from ALL sides perpendicular to newlights, including ones with opposing normals. If you want to use [[$phong]] or [[$halflambert]] - you are able to fix this with adding in your [[VMT]] material parameter <code>"$halflambert_gbuffer_off"    "1"</code>.}}

Revision as of 18:29, 13 March 2024

English (en)Español (es)Русский (ru)中文 (zh)Translate (Translate)
Phong shading provides Alyx's skin, hairband and lip highlights.

It is also available on the Shader-ball.png LightmappedGeneric and Shader-ball.png WorldVertexTransition shaders in all games since Counter-Strike: Global Offensive Counter-Strike: Global Offensive(also in Garry's ModXengineMapbase). 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 branch CS:GO engine branch. 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 4 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.  [todo tested in ?]
Note.pngNote:Phong shading for LightmappedGeneric is also available in Mapbase Mapbase, but it is implemented differently.
Icon-Important.pngImportant:In Black Mesa Black Mesa half-lambertian for new lights is broken. The result is that meshes with $phong or $halflambert get lit from ALL sides perpendicular to newlights, including ones with opposing normals. If you want to use $phong or $halflambert - you are able to fix this with adding in your VMT material parameter "$halflambert_gbuffer_off" "1".

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 $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

mat_phong <booleanRedirectInput/boolean>
Disable or enable phong shading. Default 1.

See also

External links