$alphatest: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(→‎Additional parameters: $alphatestreference default is *not* 0.5)
Line 15: Line 15:


==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.<br>Default "0.5".
{{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.
: {{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 modifying the <code>$detailblendfactor</code> value. Detail texture must be a copy of <code>[[$basetexture]]</code> with a different alpha channel.}}
{{modernImportant|Unintuitively, this parameter does ''not'' always default to "0.5". The default value varies per [[shader]]; LightmappedGeneric and VertexLitGeneric default to "0.0", whereas UnlitGeneric defaults to "0.7". To avoid unexpected results, this parameter should always be set. {{modernConfirm|Verify that the defaults actually match what is described in the [[SHADER_PARAM]]; it can be easily observed in Hammer that the default for LightmappedGeneric is not 0.5 by modifying a VMT for a texture with an soft alpha channel, but whether this matches what is set in shader code was not tested by the user who added this warning.}} }}
}} }}
{{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>This parameter is incompatible with <code>$alphatestreference</code>.
{{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).
{{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>

Revision as of 18:06, 1 July 2024

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

$alphatest is a material shader parameter avaliable 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. This effect is similar to $translucent, except that it can not be semi-opaque (without Wikipedia icon banding), is much faster to render, and the engine can always sort it properly when layered (instead of only on non-detail worldspawn).

Syntax

$alphatest <bool>

VMT example

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
LightmappedGeneric { $basetexture "glass\window001a" $alphatest 1 //$alphatestreference 0.5 $allowalphatocoverage 1 // incompatible with $alphatestreference }

Additional parameters

$alphatestreference

$allowalphatocoverage

Comparison

$translucent $alphatest
Original image, rendered with $translucent
Animated preview of the same image, but with $alphatest. The first image shows the effect of $allowalphatocoverage 1 (at 4x MSAA). The rest show $alphatest with $alphatestreference ranging from 0.1 to 0.9

Notice how the $alphatest right circle hardly changes.

See also