This is an info sheet about water materials in Team Fortress 2. A "material" is simply a list of properties and textures that a surface or volume can have. This page only covers materials that were made for TF2 and ignores the HL2 assets that also happen to be in the game.
Water materials always come in pairs: A top (or surface) material and a bottom (or beneath) material. The top material controls what the surface looks like when watching it from above. It's the material you actually use in Hammer. The bottom material controls what the water looks like once you are swimming inside of it. It should never be used in Hammer! At least for now, this page only covers the surface materials, but knowing which bottom material is used by which top material is still important.
TF2 water materials are mostly quite similar and can be grouped into the following 3 categories:
Regular Water |
Most water materials in TF2 fall into this category.
|
---|---|
Expensive Water |
This category is rather rare as it requires more processing power to render.
|
Cheap Water |
Water in this category is the easiest one to render and is therefore quite popular for purely visual effects.
|
For more information about water in the Source Engine as a whole, read the VDC: https://developer.valvesoftware.com/wiki/Water
Regular Water
Fog Settings | $FogColor: {35 32 20} $FogStart: 0 $FogEnd: 170 |
---|---|
Refraction Settings | $RefractAmount: 0.32 |
TextureScroll Proxy | Rate: 0.02 Angle: 10 (east) |
Bottom Material | swamp/water/water_murky_beneath.vmt |
The VMT includes the line "$basetexture" "swamp/water/water_murky"
. This base texture is 4 times larger than the normal-map texture, so the game scales up the normal-map accordingly. However, the Water
shader does not actually render base textures, so the increased scale was most likely unintentional.
Regular Water
Fog Settings | $FogColor: {27 26 21} $FogStart: 0 $FogEnd: 100 |
---|---|
Refraction Settings | $RefractAmount: 0.06 |
TextureScroll Proxy | Rate: 0.6 Angle: 10 (east) |
Bottom Material | water/water_2fort_beneath.vmt |
Fallback Materials | <dx90: water/water_2fort_dx80 Water_DX60: nature/water_dx70 |
Regular Water
Fog Settings | $FogColor: {51 43 13} $FogStart: -100 $FogEnd: 400 |
---|---|
Refraction Settings | $RefractAmount: 0.32 |
TextureTransform Proxy | repeating, sinusoidal motion |
Bottom Material | water/water_2fort_beneath.vmt |
Fallback Materials | <dx90: water/water_2fort_dx80 Water_DX60: nature/water_dx70 |
Regular Water Used As Fallback
Fog Settings | $FogColor: {51 43 13} $FogStart: -100 $FogEnd: 400 |
---|---|
Refraction Settings | $RefractAmount: 0.6 |
TextureTransform Proxy | repeating, sinusoidal motion |
Bottom Material | water/water_2fort_beneath.vmt |
The normal-map is DXT1 compressed. This means it has blocky artifacts but takes up less VRAM.
Expensive Water
Fog Settings | $FogColor: {51 43 13} $FogStart: 1 $FogEnd: 400 |
---|---|
Refraction Settings | $RefractAmount: 0.32 |
TextureTransform Proxy | repeating, sinusoidal motion |
Bottom Material | water/water_2fort_beneath.vmt |
Fallback Materials | Water_DX60: nature/water_dx70 |
Cheap Water
Fog Settings | $FogColor: {51 43 13} |
---|---|
Bottom Material | water/water_2fort_beneath.vmt |
Fallback Materials | <dx90: water/water_2fort_skybox_dx80 Water_DX60: nature/water_dx70 |
This water is completely opaque.
Cheap Water Used As Fallback
Fog Settings | $FogColor: {51 43 13} |
---|---|
Bottom Material | water/water_2fort_beneath.vmt |
This water is completely opaque.
The normal-map is DXT1 compressed. This means it has blocky artifacts but takes up less VRAM.
Regular Water
Fog Settings | $FogColor: {57 54 44} $FogStart: 0 $FogEnd: 300 |
---|---|
Refraction Settings | $RefractAmount: 0.12 |
TextureScroll Proxy | Rate: 0.6 Angle: 10 (east) |
Bottom Material | water/water_2fort_beneath.vmt |
Fallback Materials | <dx90: water/water_2fort_dx80 Water_DX60: nature/water_dx70 |
Cheap Water
Shader | LightMappedGeneric |
---|---|
Base Texture | water/water_hydro_base |
Reflection Settings | $EnvMapTint: [0.2 0.2 0.2] |
Bottom Material | water/water_well_beneath.vmt |
Fallback Materials | <dx90: water/water_hydro_cheap_dx80 |
The normal-map is DXT1 compressed. This means it has blocky artifacts but takes up less VRAM.
The base texture does not tile, literally. It only appears near the origin of the map. The border pixels stretch out to infinity. This visually splits the map into 4 quadrants.
Cheap Water Used As Fallback
Shader | LightMappedGeneric |
---|---|
Base Texture | water/water_hydro_base |
Reflection Settings | $EnvMapTint: [0.2 0.2 0.2] |
Bottom Material | water/water_well_beneath.vmt |
This water is completely opaque.
The normal-map is DXT1 compressed. This means it has blocky artifacts but takes up less VRAM.
The base texture does not tile, literally. It only appears near the origin of the map. The border pixels stretch out to infinity. This visually splits the map into 4 quadrants.
Cheap Water Used As Fallback
Bottom Material | water/water_well_beneath.vmt |
---|
This water is completely translucent.
This material uses a different normal-map than usual. It is not animated.
The normal-map is DXT1 compressed. This means it has blocky artifacts but takes up less VRAM.
Expensive Water
Reflection Settings | $ReflectTint: {208 157 155} $ReflectAmount: 1 |
---|---|
Fog Settings | $FogColor: {148 197 195} $FogStart: 1 $FogEnd: 400 |
Refraction Settings | $RefractTint: {144 255 240} $RefractAmount: 0.2 |
TextureScroll Proxy | Rate: 0.1 Angle: 315 (south-west) |
Bottom Material | water/water_well_beneath.vmt |
Fallback Materials | <dx90: water/water_island_cheap |
This material uses a different normal-map than usual. It is not animated.
The material also has a TextureTransform proxy. However, the TextureScroll proxy is placed right after, overwriting it.
The normal-map is DXT1 compressed. This means it has blocky artifacts but takes up less VRAM.
Regular Water
Fog Settings | $FogColor: {53 38 2} $FogStart: 1 $FogEnd: 300 |
---|---|
Refraction Settings | $RefractAmount: 0.2 |
TextureTransform Proxy | repeating, sinusoidal motion |
Bottom Material | water/water_well_beneath.vmt |
Fallback Materials | <dx90: water/water_well_dx80 |
The colors of the bottom and fallback materials do not match the fog color of this material.
Regular Water
Fog Settings | $FogColor: {57 54 44} $FogStart: 0 $FogEnd: 100 |
---|---|
Refraction Settings | $RefractAmount: 0.12 |
TextureScroll Proxy | Rate: 0.6 Angle: 170 (west) |
Bottom Material | water/water_2fort_beneath.vmt |
Fallback Materials | <dx90: water/water_2fort_dx80 Water_DX60: nature/water_dx70 |
Regular Water
Fog Settings | $FogColor: {57 54 44} $FogStart: 0 $FogEnd: 100 |
---|---|
Refraction Settings | $RefractAmount: 0.12 |
TextureScroll Proxy | Rate: 0.6 Angle: 10 (east) |
Bottom Material | water/water_2fort_beneath.vmt |
Fallback Materials | <dx90: water/water_2fort_dx80 Water_DX60: nature/water_dx70 |
Cheap Water
Fog Settings | $FogColor: {1 1 1} |
---|---|
Bottom Material | water/water_underworld_beneath.vmt |
Fallback Materials | Water_DX60: nature/water_dx70 |
This water is completely opaque.
Cheap Water
Fog Settings | $FogColor: {1 1 1} |
---|---|
Bottom Material | water/water_underworld_beneath.vmt |
Fallback Materials | Water_DX60: nature/water_dx70 |
This water is completely opaque.
The normal-map animates at 28 fps instead of the usual 30 fps.
Regular Water
Fog Settings | $FogColor: {24 38 53} $FogStart: 1 $FogEnd: 300 |
---|---|
Refraction Settings | $RefractAmount: 0.2 |
TextureTransform Proxy | repeating, sinusoidal motion |
Bottom Material | water/water_well_beneath.vmt |
Fallback Materials | <dx90: water/water_well_dx80 |
Regular Water Used As Fallback
Fog Settings | $FogColor: {24 38 53} $FogStart: 1 $FogEnd: 300 |
---|---|
Refraction Settings | $RefractTint: {184 191 208} $RefractAmount: 0.6 |
TextureTransform Proxy | repeating, sinusoidal motion |
Bottom Material | water/water_well_beneath.vmt |
The normal-map is DXT1 compressed. This means it has blocky artifacts but takes up less VRAM.