$phong: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (Additional Information - $phongexponentfactor also a parameter in TF2)
(Additional Information - Caveats for $selfillumfresnel, $normalmapalphaenvmapmask, $basemapluminancephongmask, $basemapalphaphongmask and $invertphongmask)
Line 23: Line 23:
}
}
</syntaxhighlight>
</syntaxhighlight>


== Parameters ==
== Parameters ==
=== Masking ===
=== Masking ===
{{warning|There are some caveats regarding {{ent|$normalmapalphaenvmapmask}} and [[Glowing_Textures#.24selfillum|$selfillumfresnel]] when using {{ent|$phong}}!}}
* Using [[Glowing_Textures#.24selfillum|$selfillumfresnel]] '''without''' {{ent|$normalmapalphaenvmapmask}} will mask the {{ent|$envmap}} using the {{ent|$basetexture}}'s alpha channel.
* Using [[Glowing_Textures#.24selfillum|$selfillumfresnel]] '''with''' {{ent|$normalmapalphaenvmapmask}} will multiply the {{ent|$envmap}} by <code>0.0f</code>. Effectively disabling the effect!
* When '''not''' using [[Glowing_Textures#.24selfillum|$selfillumfresnel]]. The mask used for {{ent|$envmap}} will be the {{ent|$basetexture}}'s alpha channel '''unless''' {{ent|$normalmapalphaenvmapmask}} is also used.
'''If''' {{ent|$normalmapalphaenvmapmask}} is used, the {{ent|$bumpmap}}'s alpha channel will be used. Using either <code>$basemapalphaphongmask</code> or <code>$basemapluminancephongmask</code> will override it.
<br>
{{MatParam|$bumpmap|texture|There must be a Phong mask. The [[alpha channel]] of a [[$bumpmap|bump map]] acts as a Phong mask by default.}}
{{MatParam|$bumpmap|texture|There must be a Phong mask. The [[alpha channel]] of a [[$bumpmap|bump map]] acts as a Phong mask by default.}}
{{MatParam|$basemapalphaphongmask|bool|Use {{ent|$basetexture}}'s [[alpha channel]] as the Phong mask instead of <code>$bumpmap</code>'s. The Phong will not be influenced by the bump map, however.|since={{src07}}|shaders=VertexLitGeneric}}
{{MatParam|$basemapalphaphongmask|bool|Use {{ent|$basetexture}}'s [[alpha channel]] as the Phong mask instead of <code>$bumpmap</code>'s. The Phong will not be influenced by the bump map, however.
{{MatParam|$basemapluminancephongmask|bool|Mask phong intensity based on the brightness of the <code>$basetexture</code>.{{bug|Doesn't work in {{gmod|4}}.}}|not={{gmod}}|since={{l4d}}|shaders=VertexLitGeneric}}
{{warning|Using this with {{ent|$normalmapalphaenvmapmask}} will override the mask used for {{ent|$envmap}} to be the contents of the {{ent|$basetexture}}'s alpha channel!}} |since={{src07}}|shaders=VertexLitGeneric}}
{{MatParam|$basemapluminancephongmask|bool|Mask phong intensity based on the brightness of the <code>$basetexture</code>.
{{bug|Basetexture Luminance will replace the mask used for {{ent|$envmap}}, '''if''' [[Glowing_Textures#.24selfillum|$selfillumfresnel]] and {{ent|$normalmapalphaenvmapmask}} are also used.}}
{{bug|Doesn't work in {{gmod|4}}.}}
|not={{gmod}}|since={{l4d}}|shaders=VertexLitGeneric}}
{{MatParam|$phongexponent|and=$phongexponent2|int|A global [[Phong materials#Phong mask and exponent texture|exponent]] value. Overrides an exponent mask if present.
{{MatParam|$phongexponent|and=$phongexponent2|int|A global [[Phong materials#Phong mask and exponent texture|exponent]] value. Overrides an exponent mask if present.
: <code>$phongexponent2</code> is for <code>WorldVertexTransition</code>'s second material in {{csgobranch|4}}.}}
: <code>$phongexponent2</code> is for <code>WorldVertexTransition</code>'s second material in {{csgobranch|4}}.}}
Line 37: Line 48:
:* '''Alpha channel:''' {{ent|$rimlight}} mask (only if <code>$rimmask 1</code>.)
:* '''Alpha channel:''' {{ent|$rimlight}} mask (only if <code>$rimmask 1</code>.)
:{{Note|<code>LightmappedGeneric</code> and <code>WorldVertexTransition</code> do not have support for <code>$phongexponenttexture</code>. You must use <code>$phongexponent</code> instead.}}|shaders=VertexLitGeneric}}
:{{Note|<code>LightmappedGeneric</code> and <code>WorldVertexTransition</code> do not have support for <code>$phongexponenttexture</code>. You must use <code>$phongexponent</code> instead.}}|shaders=VertexLitGeneric}}
{{MatParam|$phongexponentfactor|float|Multiply the exponent texture by this amount. {{note| The default value of this parameter is <code>"0.0"<code>. However, a more reasonable default value would be <code>"149.0"<code>}}|only={{src13mp}}{{tf2}}|shaders=VertexLitGeneric}}
{{MatParam|$phongexponentfactor|float|Multiply the exponent from the <code>$phongexponenttexture</code> by this amount. {{tip| The default value of this parameter is <code>"0.0"</code>. However, a more reasonable default value would be <code>"149.0"</code>}}|only={{src13mp}}{{tf2}}|shaders=VertexLitGeneric}}
{{MatParam|$invertphongmask|bool|Invert the value of the phong mask. {{todo|What types of mask does this work on?}}|since={{src07}}|shaders=VertexLitGeneric}}
{{MatParam|$invertphongmask|bool|Invert the value of the phong mask.
{{bug|In {{as}}s and {{src13}}s Shadercode, using this parameter will invert the mask used for {{ent|$envmap}}, not the one used for <code>$phong</code>! }}
{{confirm| Is this the case for all branches?}}
|since={{src07}}|shaders=VertexLitGeneric}}
{{MatParam|$forcephong|bool|Force phong shading on phong-using materials even at low GPU levels when <code>mat_phong</code> is disabled.|since={{portal2}}|shaders=VertexLitGeneric}}
{{MatParam|$forcephong|bool|Force phong shading on phong-using materials even at low GPU levels when <code>mat_phong</code> is disabled.|since={{portal2}}|shaders=VertexLitGeneric}}
{{MatParam|$diffuseexp|float|Diffuse exponent used for dynamic lights only.|only={{L4ds}}}}
{{MatParam|$diffuseexp|float|Diffuse exponent used for dynamic lights only.|only={{L4ds}}}}

Revision as of 12:41, 16 February 2023

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

Template:Shaderparam It provides diffuse reflections, masked by a texture to control its intensity per-texel. 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.
Note.pngNote:Phong shading for LightmappedGeneric is also available in Mapbase Mapbase, but it is implemented differently.

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!

If $normalmapalphaenvmapmask is used, the $bumpmap's alpha channel will be used. Using either $basemapalphaphongmask or $basemapluminancephongmask will override it.
$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)

$phongmaskcontrastbrightness $phongamount $phongbasetint

Console Commands

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

See Also