UnlitTwoTexture
- Two base textures are multiplied together and can be transformed independently. (Just like the Multiply blending mode in typical image editors.)
- Unrelated to WorldVertexTransition, which is used for making alpha fading transitions between two base textures on displacements.




Parameters
The first Texture that is used, how it is used depends on the effects which are enabled.
By default $basetexture
will be multiplied with $texture2
.
- The default position is center .5 .5 scale 1 1 rotate 0 translate 0 0.
- center defines the point of rotation. Only useful if rotate is being used.
- scale fits the texture into the material the given number of times. 2 1 is a 50% scale in the horizontal X axis while the vertical Y axis is still at original scale.
- rotate rotates the texture counter-clockwise in degrees. Accepts any number, including negatives.
- translate shifts the texture by the given numbers. .5 will shift it half-way. 1 will shift it once completely over, which is the same as not moving it at all.
Note:All values must be included!
Bug:Scaling the texture may cause odd issues where the Texture Lock tool in Hammer will not actually lock the texture in place. [todo tested in ?]
Bug:Rotating textures applied on brushes will rotate around the map origin (confirm: Orangebox engine only?). A fix for this is to change the center position in the VMT to the brush's origin. [todo tested in ?]
Second Texture that is used in different ways depending on which effects are used.
By default $basetexture
will be multiplied with $texture2
.

- The default position is center .5 .5 scale 1 1 rotate 0 translate 0 0.
- center defines the point of rotation. Only useful if rotate is being used.
- scale fits the texture into the material the given number of times. 2 1 is a 50% scale in the horizontal X axis while the vertical Y axis is still at original scale.
- rotate rotates the texture counter-clockwise in degrees. Accepts any number, including negatives.
- translate shifts the texture by the given numbers. .5 will shift it half-way. 1 will shift it once completely over, which is the same as not moving it at all.
Note:All values must be included!
Bug:Scaling the texture may cause odd issues where the Texture Lock tool in Hammer will not actually lock the texture in place. [todo tested in ?]
Bug:Rotating textures applied on brushes will rotate around the map origin (confirm: Orangebox engine only?). A fix for this is to change the center position in the VMT to the brush's origin. [todo tested in ?]

On the Dangerzone Wave Model, both $texture2
and $basetexture
use the 'Beachwaves' Texture.
The 'Beachwaves' Texture uses the RGB channels for different purposes.
- Red Channel : Waves Albedo Texture
- Green Channel : Distortion/Noise for the Red Channel
- Blue Channel : Distortion/Noise for the Red Channel
$basetexture
for the Crosshair$texture2
is used for a framebuffer texture.
The result will be blended between Crosshair Texture + CrosshairTint
and Crosshair Texture * CrosshairTint
using Average Luminance of $texture2 * $CrosshairColorAdapt
$basetexture
when using $CrosshairMode
$texture2

"0.4"
Example
Stock .vmt
hl2/materials/models/props_combine/portalball001_sheet.vmt
"UnlitTwoTexture"
{
"$basetexture" "models/props_combine/portalball001_sheet"
"$texture2" "models/props_combine/portalball001b_sheet"
"$model" 1
"$nocull" "1"
"$additive" "1"
"Proxies"
{
"TextureScroll"
{
"texturescrollvar" "$texture2transform"
"texturescrollrate" -.2
"texturescrollangle" 60
}
}
}
models/props/hr_massive/beachwaves/beachwaves.vmt
UnlitTwoTexture
{
"$beachfoam" "1"
"$basetexture" "models/props/hr_massive/beachwaves/beachwaves"
"$texture2" "models/props/hr_massive/beachwaves/beachwaves"
"$additive" "1"
}
effects/smoke_plumes_anim.vmt
UnLitTwoTexture
{
"%tooltexture" "effects/smoke_plumes_00"
$basetexture "effects/smoke_plumes_scroll"
$texture2 "effects/smoke_plumes_00"
$translucent 1
$nocull 1
$no_fullbright 1
$nofog 1
$scale "[1 1]"
$scroll "[2 2]"
Proxies
{
LinearRamp
{
resultVar "$scroll[0]"
rate -.01
}
LinearRamp
{
resultVar "$scroll[1]"
rate .035
}
TextureTransform
{
scaleVar $scale
translateVar $scroll
resultVar $basetexturetransform
}
}
}