$alphatest

From Valve Developer Community
Jump to: navigation, search
English (en)русский (ru)
Edit

$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

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.
Default "0.5".
Note.pngNote:$alphatestreference cannot be updated in real time with proxies.
Tip.pngTip:This limitation can be circumvented by using $alphatestreference 1, and modifying the $alpha value instead. (requires $alpha to be raised above 1, its normal threshold, this may cause sorting issues)
Tip.pngTip:For VertexLitGeneric on models you can use $detail with $detailblendmode 3 and modifying the $detailblendfactor value. Detail texture must be a copy of $basetexture with a different alpha channel.
Creates translucent steps based on alpha values. Can be used for softer edges, as well as greatly reducing shimmering when viewed at a distance.
This parameter is incompatible with $alphatestreference.
Warning.pngWarning:MSAA must be enabled in order for this to have an effect.
The granularity of the steps is dependent on chosen amount of MSAA; 2x MSAA will have fewer translucent steps than 8x MSAA.
Note.pngNote:At 8x MSAA (Tested in Source 2013 Source 2013) there are 7 translucency steps. ( 9 if you include fully Opaque and fully Transparent )

The levels should roughly be arranged as such:
Linear : fully transparent - 0.06 - 0.18 - 0.31 - 0.43 - 0.56 - 0.68 - 0.81 - 0.93 - fully opaque
RGB : fully transparent - 15 - 46 - 80 - 110 - 143 - 174 - 207 - 238 - fully opaque
( 0-255 values are rounded to the next highest. Formula used is LinearValue * 255)

Blank image.pngTodo: 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.pngTip: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.

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