SolidEnergy
Remember to check for any notes left by the tagger at this article's talk page.
SolidEnergy is a Pixel shader available in all
Source games since
Portal 2. (also in
) It is used for the fizzler, excursion funnel, light bridge, and laser field materials.
Supported effects
$flowmap$flowbounds$translucent$additive$refract(only in
)
Fresnel behavior
- $TANGENTTOPACITYRANGES <vector4>
- Enables view-based opacity falloff based on tangent t direction, great for cylinders, includes last term for scaling backface opacity.
- $TANGENTSOPACITYRANGES <vector4>
- Enables view-based opacity falloff based on tangent s direction, great for cylinders, includes last term for scaling backface opacity.
- $FRESNELOPACITYRANGES <vector4>
- Enables fresnel-based opacity falloff, includes last term for scaling backface opacity.
- $NEEDSTANGENTT <boolean>
- Set when tangenttopacityranges is defined.
- $NEEDSTANGENTS <boolean>
- Set when tangentsopacityranges is defined.
- $NEEDSNORMALS <boolean>
- Set when fresnelopacityranges is defined.
Powerup and vortex parameters
These material parameters are used to control the power-up animation, and up to two vortexes which normally appear when objects are nearby. They are generally set by the FizzlerVortex proxy.
MaterialModify proxy can instead be used to control the effects manually, for custom fizzlers.- If multiple
trigger_portal_cleansershave a different enabled state, the brush material will flicker on and off depending on the player's angle, but will otherwise copy their state. - If the brush is within a specific range [Todo] of a
trigger_portal_cleanserthe brush's material will detect objects within that range as if the brush was itself atrigger_portal_cleanser.
- $powerup <float>
- Sets the progress through the power-up animation, with 0 being fully off and 1 being fully on.
- $FLOW_VORTEX1 <boolean>
- Whether or not the first vortex is active.
- $FLOW_VORTEX_POS1 <vector>
- World coordinates of the entity creating the first vortex.
- $FLOW_VORTEX2 <boolean>
- Whether or not the second vortex is active.
- $FLOW_VORTEX_POS2 <vector>
- World coordinates of the entity creating the second vortex.
Detail
When using a basetexture, the shader also renders 2 optional detail textures, which are blended with the basetexture. Both of these detail textures use the same syntax of variant parameters as $detail, with "$detail1" or "$detail2" replacing the "$detail" prefix. (eg: $detail1scale 1) This method must be used if the material is to be used on a model, as meshes will not render if a flowmap is applied.
etc
Flowbounds
If a flowmap is used, the material uses an additional texture comprised of three greyscale masks on each of the color channels.
- Red controls the flow speed
- Green controls the tint amount from
$flow_color - Blue controls the additive intensity, such as the ripples of a Fizzler
- $flowbounds <texture>
- Flowbounds texture
- $flow_color <RGB matrix>
- Color tint of the flowmap
Refract (only in
)
These parameters control the refraction effects added in P2:CE.
- $refractscale <float>
- Scale of the refraction
- $refracteffectscale <float>
- Scale of the refraction effect
Type 1 (Flowmap) Example
The example shown below is materials/effects/fizzler.vmt from Portal 2.
SolidEnergy
{
$basetexture "effects/fizzler_ripples_dim"
$flowmap "effects/fizzler_flow"
$flowbounds "effects/fizzler_bounds"
$FLOW_NOISE_TEXTURE "effects/fizzler_noise"
$FLOW_UVSCROLLDISTANCE "0.25"
$FLOW_TIMEINTERVALINSECONDS "1.2"
$FLOW_NOISE_SCALE 0.003
$FLOW_LERPEXP 1.5
$FLOW_WORLDUVSCALE 0.008
$FLOW_NORMALUVSCALE 0.008
$FLOW_COLOR "[0.025 0.08 0.1]"
$FLOW_VORTEX_COLOR "[0.64 2.058 2.56]"
$surfaceprop glass
"%keywords" Portal2
$translucent 1
$additive 1
$FLOW_VORTEX_SIZE 35
"360?$outputintensity" 2.8
"SonyPS3?$outputintensity" .7
"srgb_pc?$outputintensity" 2.3
"!srgb_pc?$outputintensity" 1.7
Proxies
{
FizzlerVortex
{
}
}
}
Type 2 (Basetexture and Detail) Example
The example shown below is materials/effects/projected_wall.vmt from Portal 2.
SolidEnergy
{
$basetexture "effects/projected_wall"
$detail1 "effects/projected_wall_draw"
$detail1scale 1
$DETAIL1BLENDMODE 1
$detail2 "effects/projected_wall_noise"
$detail2scale 1
$detail2blendmode 0
$translucent 1
$additive 1
$vertexalpha 0
$vertexcolor 0
$nocull 1
$surfaceprop glass
"%keywords" Portal2
$detailscroll1 "[0 0]"
$detailscroll2 "[0 0]"
$detail2componentscale "[1 1]"
$basescroll "[0 0]"
$basescale "[1 1]"
"!srgb?$outputintensity" .75
Proxies
{
Sine
{
sinemin 0
sinemax 0.94
sineperiod 5
timeoffset 3
resultVar "$detailscroll1[0]"
}
LinearRamp
{
rate -3
initialValue 0
resultVar "$detailscroll1[1]"
}
LinearRamp
{
rate 0.18
initialValue 0
resultVar "$detailscroll2[1]"
}
Sine
{
sinemin 0.99
sinemax 1.01
sineperiod 0.125
timeoffset 0
resultVar "$detail2componentscale[0]"
}
Sine
{
sinemin 0.995
sinemax 1.005
sineperiod 0.1
timeoffset 0.05
resultVar "$basescale[0]"
}
LinearRamp
{
rate 0.15
initialValue 0
resultVar "$basescroll[1]"
}
TextureTransform
{
translateVar $detailscroll1
resultVar $detail1texturetransform
}
TextureTransform
{
translateVar $detailscroll2
scaleVar $detail2componentscale
resultVar $detail2texturetransform
}
TextureTransform
{
translateVar $basescroll
scaleVar $basescale
resultVar $basetexturetransform
}
}
}