$alphatest: Difference between revisions
Jump to navigation
Jump to search
SirYodaJedi (talk | contribs) (→Additional parameters: LMG defaults to 0.7 as well) |
No edit summary |
||
Line 17: | Line 17: | ||
==Additional parameters== | ==Additional parameters== | ||
{{MatParam|$alphatestreference|float|Specifies the threshold alpha channel value at which the surface should be transparent instead of opaque. A value of ".3" will create a thicker shape while a value of ".7" will create a thinner shape. | {{MatParam|$alphatestreference|float|Specifies the threshold alpha channel value at which the surface should be transparent instead of opaque. A value of ".3" will create a thicker shape while a value of ".7" will create a thinner shape. | ||
{{ | {{expand|title=Notes| | ||
{{Important|Unintuitively, this parameter does ''not'' default to "0.5". LightmappedGeneric, UnlitGeneric, and VertexLitGeneric all default to "0.7" instead. To avoid unexpected results, this parameter should always be set.}} | |||
{{bug|Updating <code>$alphatestreference</code> in real time with [[Material_proxies|proxies]] only affects projected shadows (like the flashlight). {{Tip|This limitation can be circumvented by using $alphatestreference 1, and modifying the <code>[[$alpha]]</code> value instead. (requires $alpha to be raised above 1, its normal threshold, this may cause sorting issues)}} {{Tip|For [[VertexLitGeneric|VertexLitGeneric]] on models you can use <code>[[$detail]]</code> with <code>$detailblendmode 3</code> and modify the <code>$detailblendfactor</code> value. Detail texture must be a copy of <code>[[$basetexture]]</code> with a different alpha channel.}} | {{bug|Updating <code>$alphatestreference</code> in real time with [[Material_proxies|proxies]] only affects projected shadows (like the flashlight). {{Tip|This limitation can be circumvented by using $alphatestreference 1, and modifying the <code>[[$alpha]]</code> value instead. (requires $alpha to be raised above 1, its normal threshold, this may cause sorting issues)}} {{Tip|For [[VertexLitGeneric|VertexLitGeneric]] on models you can use <code>[[$detail]]</code> with <code>$detailblendmode 3</code> and modify the <code>$detailblendfactor</code> value. Detail texture must be a copy of <code>[[$basetexture]]</code> with a different alpha channel.}} | ||
}} | |||
}} }} | }} }} | ||
{{MatParam|$allowalphatocoverage|bool|Creates translucent steps based on alpha values. Can be used for softer edges, as well as greatly reducing shimmering when viewed at a distance.<br>While it may not immediately appear to be the case, <code>$alphatestreference</code>is still used when this command is used, for controlling projected shadow masking, for if the client has MSAA disabled, and in Hammer (where $allowalphatocoverage doesn't work). | {{MatParam|$allowalphatocoverage|bool|Creates translucent steps based on alpha values. Can be used for softer edges, as well as greatly reducing shimmering when viewed at a distance.<br>While it may not immediately appear to be the case, <code>$alphatestreference</code>is still used when this command is used, for controlling projected shadow masking, for if the client has MSAA disabled, and in Hammer (where $allowalphatocoverage doesn't work). | ||
{{Expand|title=Notes| | |||
{{warning|MSAA must be enabled in order for this to have an effect.<br>The granularity of the steps is dependent on chosen amount of MSAA; 2x MSAA will have fewer translucent steps than 8x MSAA. {{note|At 8x MSAA (Tested in {{src13|2}}) there are 7 translucency steps. ( 9 if you include fully Opaque and fully Transparent )<br> | {{warning|MSAA must be enabled in order for this to have an effect.<br>The granularity of the steps is dependent on chosen amount of MSAA; 2x MSAA will have fewer translucent steps than 8x MSAA. {{note|At 8x MSAA (Tested in {{src13|2}}) there are 7 translucency steps. ( 9 if you include fully Opaque and fully Transparent )<br> | ||
The levels should roughly be arranged as such:<br> | The levels should roughly be arranged as such:<br> | ||
Line 29: | Line 32: | ||
{{todo|Make a table for this. One that considers other MSAA Levels. There are always 1 fewer translucency steps than the number of MSAA samples (or one additional, if including fully transparent and fully opaque).}} }} }} | {{todo|Make a table for this. One that considers other MSAA Levels. There are always 1 fewer translucency steps than the number of MSAA samples (or one additional, if including fully transparent and fully opaque).}} }} }} | ||
{{tip|Alpha to coverage works best with '''sharp, high-resolution alpha channels''', as this mitigates the inherent banding artefacts caused by the stock shaders' lack of sharpening when magnifying alpha to coverage textures.}} | {{tip|Alpha to coverage works best with '''sharp, high-resolution alpha channels''', as this mitigates the inherent banding artefacts caused by the stock shaders' lack of sharpening when magnifying alpha to coverage textures.}} | ||
}} | |||
}} | }} | ||
Revision as of 12:59, 11 June 2025
$alphatest
is a material shader parameter available in all Source games. It specifies a mask to use to determine binary opacity. White represents fully opaque, while black represents fully transparent. Any values in-between are rounded to either 0 or 1, unless
$allowalphatocoverage
is also used. This effect is similar to $translucent
, except that it can not be semi-opaque (without banding), is much faster to render, and the engine can always sort it properly when layered (instead of only on non-detail worldspawn).
Syntax
VMT example
Additional parameters
Comparison
$translucent |
$alphatest
|
---|---|
Notice how the right circle, which has a sharp alpha channel, hardly changes.