S&box Wiki

Revision Difference

Shader_Reference#551084

<cat>Material.ShaderReference</cat> <title>Shader Reference</title> # Variables Variables will show up in Material Editor. They're defined like this. ``` float3 g_vColorTint < UiType( Color ); Default3( 1.0, 1.0, 1.0 ); UiGroup( "Color,10/20" ); >; float2 g_vTexCoordScale < UiType( Slider ); UiStep( 1 ); Default2( 1.0, 1.0 ); UiGroup( "Texture Coordinates,10/21" ); >; Float3Attribute( g_vColorTint, g_vColorTint ); // Only needed if your variable is not showing up in the material editor Float2Attribute( g_vTexCoordScale, g_vTexCoordScale); ``` A list of attributes you can expose can be seen below | Data Type | Attribute Function | |-----------|--------------------| | bool | BoolAttribute | | int/uint | IntAttribute | | float | FloatAttribute | | float2 | Float2Attribute | | float3 | Float3Attribute | | float4 | Float4Attribute | | float/float2/float3/float4 | TextureAttribute | ## UiType Describes how the variable should be represented in the editor. |Name|Description| |-----|----------| | VectorText | Text boxes and sliders (this is the default) | | Slider | A slider type. Usually combined with a Range setting. | | Color | A Color picker, works on float3 or float4. | | Texture | A texture picker | | CheckBox | On or off, generally used on bool | ## UiStep `UiStep` lets you set the amount of each interval or step that the value increases or decreases by. ## Default The `Default` lets you specify the default value for the variable. If you're filling a `float2`, it should be `Default2`, if you're filling a `float4` it should be `Default4` etc. ## Range The `Range` lets you cap the variable to a specific range. If you're filling a `float2`, it should be `Range2`, if you're filling a `float4` it should be `Range4` etc. ``` float g_flAlphaTestReference < Range(0.01, 0.99); UiType(Slider); >; float2 g_vTexCoordScrollSpeed < Range2(-10, -10, 10, 10); UiType(VectorText); >; ``` ## UiGroup The `UiGroup` is used to sort the variable into a group, subgroup and define its order. So for example, given this.. ``` float4 BorderColorL < UiType( Color ); Default4( 0.0, 0.0, 0.0, 1.0 ); UiGroup( "Border,10/Colors,10/1" ); >; float4 BorderColorT < UiType( Color ); Default4( 0.0, 0.0, 0.0, 1.0 ); UiGroup( "Border,10/Colors,10/2" ); >; float4 BorderColorR < UiType( Color ); Default4( 0.0, 0.0, 0.0, 1.0 ); UiGroup( "Border,10/Colors,10/3" ); >; float4 BorderColorB < UiType( Color ); Default4( 0.0, 0.0, 0.0, 1.0 ); UiGroup( "Border,10/Colors,10/4" ); >; ``` You end up with this <upload src="1/8d89e07e3fc960b.png" size="16898" name="image.png" /> The format is: ``` Heading,Order / Group,Order / VariableOrder ``` ## Expression `Expression` is used to evaluate an expression on the variable, using the [Dynamic Expressions](Using_Dynamic_Expressions) language. `Expression` is used to evaluate an expression on the variable, using the [Dynamic Expressions](Using_Dynamic_Expressions) language. A good reason for their use is to save GPU instructions, since they get evaluated on the CPU prior to rendering. The expression can refer to: the variable itself with `this`, as well as to any other variables or features. ``` float3 g_vColorTint < Default3(1, 1, 1); UiType(Color); Expression(SrgbGammaToLinear(this)); >; float4 g_vTexCoordXform < Expression(g_flTexCoordRotation*3.14159)/180); >; int g_nFoliageAnimationMode < Expression(F_FOLIAGE_ANIMATION); >; ```