VTF (Valve Texture Format)

The Valve Texture Format (VTF) is the proprietary texture format used by the engine. VTF files are generally referenced in a Material instead of being accessed directly, which allows re-use in different ways.
==Limitations and Caveats==
==Tools==
VTF files can be created from TGA or PFM images using the Source SDK Tool Vtex. The following third party tools can also be used to create, view, or edit VTFs.
===Viewing===
* Windows thumbnail handler (Windows XP+)
* VTF Explorer (Windows; can explore inside GCFs)
* gdk-pixbuf-vtf (Gnome\Nautilus\Eog)
* IrfanView plugin
* Leadworks Image Viewer (supports VTF)
===Editing===
* VTFEdit (GUI) and VTFCmd (command line)
* Photoshop Plug-in (6 and to CC 2018, 32-bit version only)
* GIMP Plug-in
* Paint.NET Plug-in – the official website
* Paint.NET Plug-in – archive on Wayback Machine
* 3DSMax plugin (versions 6 to 2009)
* VIDE
===Conversion===
* VTFVer (7.5 to 7.4)
* 
* 7.5 to 7.4 Batch Converter
* Easy VTF Version (7.0-7.5) Converter
* vtex2 (Supports v7.6)
==Files==
Both textures and materials are stored in subfolders of , or .
==Storage capabilities==
The VTF image format can store either a flat texture, an environment map, or a volumetric texture. Each of these can have multiple frames.
* Textures up to 4096x4096 pixels. 
* An environment map is a six-faced cube map, unless the version is less than 7.5 and the first frame in the header is -1, then it will be seven-faced.
* A volumetric texture is a texture with depth, where each frame is a "layer" which are layered in the third dimension. So a 16x16x16 volumetric texture has 16 separate 16x16 textures stacked to give depth. This format is used internally by Source, and you shouldn't have any need to actually create one yourself.
* For each frame and face, the VTF file contains both the basic original source image data (pixel map) and a series of mipmaps used for rendering the texture over varying distances. For block compressed formats such as DXT1, the source image dimensions must be a multiple of 4, since block compressed formats compress the image's data into 4x4 chunks. Although the source image may be rectangular, square mipmaps are stored more efficiently in the VTF.
* Start frame (for animations)
* Bump map scale
* A Reflectivity value for use by VRAD
* A very low resolution copy of the VTF for color sampling by the engine.
===Resources===
VTF 7.3 added an extensible "resource data" system. Anything can be added, but Source will recognise only the following:
* A CRC value, for detecting data corruption, usually accompanied by the 0x2 flag.
* An U/V LOD control. This is the highest mipmap which should be loaded when the game's Texture Detail setting is "High" (mat_picmip 0). An U LOD Control value of 11 will select the mipmap which is 2048 pixels (211) across at the "High" texture setting, and 4096 pixels across at the "Very High" (mat_picmip -1) texture setting. 
* Animated particle sheet data.
* Expanded texture settings. This is a collection of 32 flags, none of which are in use by Valve. Unlike the built-in VTF flags these can be defined on a game-by-game basis.
==Image data formats==
The VTF image format can store image data in a variety of formats. Some formats were meant for the engine, some only as an interim format for conversions. The uncompressed formats are not lossy and the compressed (DXT) formats are.
===Image data format table===
Format 	R 	G 	B 	I 	P 	A 	T 	Comp 	Sup 	Comments
A8 	0 	0 	0 	N/A	N/A	8 	8 	False 	True 	No color (fully black), 8-bit alpha
ABGR8888 	8 	8 	8 	N/A	N/A	8 	32	False 	True 	Uncompressed texture with 8-bit alpha
ARGB8888 	8 	8 	8 	N/A	N/A	8 	32	False 	True 	Uncompressed texture with 8-bit alpha, similar to ABGR8888
BGR565 	5 	6 	5 	N/A	N/A	0 	16	False 	True 	Uncompressed opaque texture, limited color depth
BGR888 	8 	8 	8 	N/A	N/A	0 	24	False 	True 	Uncompressed opaque texture, full color depth
BGR888_BLUESCREEN 	8 	8 	8 	N/A	N/A	0 	24	False 	True 	Same as BGR888, but blue pixels (hex color #0000ff) are rendered transparent instead.
BGRA4444 	4 	4 	4 	N/A	N/A	4 	16	False 	True 	Uncompressed texture with alpha, half color depth
BGRA5551 	5 	5 	5 	N/A	N/A	1 	16	False 	True 	Uncompressed texture, limited color depth, 1-bit alpha
BGRA8888 	8 	8 	8 	N/A	N/A	8 	32	Either	True 	Compressed HDR ↑ texture with no alpha or uncompressed SDR texture with 8-bit alpha
BGRX5551 	5 	5 	5 	N/A	N/A	1 	16	False 	True 	
BGRX8888 	8 	8 	8 	N/A	N/A	8 	32	False 	True 	Like BGRA8888, but the alpha channel is always set to 255, making it functionally equivalent to BGR888.
DXT1DXT1_ONEBITALPHA	N/A	N/A	N/A	N/A	4 	N/A	4 	True 	True 	Standard compression, optional 1-bit alpha (recommended for opaque).DXT1_ONEBITALPHA format does not properly work; use regular DXT1 with 1-bit alpha flag enabled instead.
DXT3 	N/A	N/A	N/A	N/A	4 	4 	8 	True 	True 	Standard compression, uninterpolated 4-bit Alpha
DXT5 	N/A	N/A	N/A	N/A	4+4	N/A	8 	True 	True 	Standard compression, interpolated 8-bit alpha (recommended for transparent/translucent)
I8 	N/A	N/A	N/A	8 	N/A	N/A	8 	False 	True 	Luminance (Grayscale), no alpha
IA88 	N/A	N/A	N/A	8 	N/A	8 	16	False 	True 	Luminance (Grayscale), 8-bit alpha
P8 	N/A	N/A	N/A	N/A	8 	N/A	8 	False 	False	256-color paletted
RGB565 	5 	6 	5 	N/A	N/A	0 	16	False 	True 	Uncompressed texture, limited color depth, similar to BGR565.Not properly supported in all branches; prefer BGR565 instead, which always works.
RGB888 	8 	8 	8 	N/A	N/A	0 	24	False 	True 	Uncompressed opaque texture, similar to BGR888.
RGB888_BLUESCREEN 	8 	8 	8 	N/A	N/A	0 	24	False 	True 	Same as RGB888, but blue pixels (hex color #0000ff) are rendered transparent instead.
RGBA16161616 	16 	16 	16 	N/A	N/A	16 	64	False 	True 	Integer HDR Format
RGBA16161616F 	16 	16 	16 	N/A	N/A	16 	64	False 	True 	Floating Point HDR Format
RGBA8888 	8 	8 	8 	N/A	N/A	8 	32	False 	True 	Uncompressed texture with 8-bit alpha, similar to ABGR8888
UV88 	8 	8 	N/A	N/A	N/A	N/A	16	False 	True 	Uncompressed du/dv Format
UVLX8888 	N/A	N/A	N/A	N/A	N/A	N/A	32	False 	True 	
UVWQ8888 	N/A	N/A	N/A	N/A	N/A	N/A	32	False 	True 	
====HDR compression====
HDR textures can be stored in compressed form using any format with a non-binary alpha channel (BGRA8888 is greatly preferred and is what is used by Vtex, but DXT5 or BGRA4444 also work).
The formula to convert colors from 8 bits-per-channel back to 16 bits-per-channel integer HDR is:
and for 16 bits-per-channel floating point HDR:
Vtex can convert 32 bits-per-channel files to this format, and can convert compressed HDR VTFs to regular 16 bits-per-channel files.
===Additional data formats===
These are additional image formats that are found in of and .
:
Formats found in 
Format 	Red Bits	Green Bit	Blue Bits	Alpha Bits	Total Bits	Compressed	Supported	Comments
R32F 	32 	0 	0 	0 	32 	False 	? 	Single-channel 32-bit floating point
RGB323232F 	32 	32 	32 	0 	48 	False 	? 	32-Bit Floating point HDR
RGBA32323232F	32 	32 	32 	32 	64 	False 	? 	32-Bit Floating point HDR w/alpha channel
:
Formats found in 
Format 	Red Bits	Green Bit	Blue Bits	Alpha Bits	Total Bits	Compressed	Supported	Comments
RG1616F 	16 	16 	0 	0 	32 	False 	? 	Dual-channel 16-bit floating point
RG3232F 	32 	32 	0 	0 	64 	False 	? 	Dual-channel 32-bit floating point
RGBX8888 	8 	8 	8 	8 	32 	False 	? 	Like RGBA8888, but alpha channel is always set to 255, making it functionally equivalent to RGB888.
RGBA1010102	10 	10 	10 	2 	32 	Either 	? 	10 bit-per component render targets
BGRA1010102	10 	10 	10 	2 	32 	Either 	? 	10 bit-per component render targets
R16F 	16 	0 	0 	0 	16 	Either 	? 	Single-channel 16 bit floating point
Additionally, adds support for additional compression formats:
:
Formats found in 
Format	Red Bits	Green Bits	Blue Bits	Grey Bits	Palette Bits	Total Bits	Compressed	Supported	Comments
ATI1N 	N/A 	N/A 	N/A 	N/A 	4 	4 	True 	True 	AKA BC4, greyscale; Identical to alpha channel of DXT5
ATI2N 	N/A 	N/A 	N/A 	N/A 	4+4 	8 	True 	True 	AKA BC5, Red and Green; equivalent to two ATI1N textures
BC6H 	N/A 	N/A 	N/A 	N/A 	8 	8 	True 	True* 	Block-compressed 16-bpc HDR textures; no alpha channel
BC7 	N/A 	N/A 	N/A 	N/A 	8 	8 	True 	True 	High-quality block compression; alpha channel optional
===Choosing an image format===
Though the VTF image format provides support for a wide range of image data formats, there are only a handful of image data formats you are likely to use. These formats and their criteria are described below:
* BGR888
: 24 bits per pixel; no alpha.
: Use this format for textures with no alpha channel and very fine gradients (i.e. normal maps or light halos).
* BGR565
: 16 bits per pixel; no alpha.
: Use this format instead of BGR888 to save 33% of space with often negligible quality loss (especially for basetextures).
: Recommended for lower resolution textures where DXT block compression would be noticeable (i.e. GoldSrc ports).
:: 
* BGRA8888
: 32 bits per pixel; supports alpha.
: Use this format for textures with an alpha channel and very fine gradients (i.e. normal maps or light halos). It can also be used to produce Very High quality textures.
: Recommended for lower resolution textures where DXT block compression would be noticeable (i.e. GoldSrc ports).
* DXT1 (also known as BC1)
: 4 bits per pixel; limited alpha support.
: Use this format for typical textures with no alpha channel.
:: 
* DXT3 (also known as BC2)
: 8 bits per pixel; supports alpha.
: DXT5 should almost always be used over DXT3, but DXT3 is acceptable (not necessarily better) for textures with an alpha channel with sharp gradients, such as if using $allowalphatocoverage; see :File:DXTn alpha comparison.png.DXT3 takes up the same file size as DXT5.
: 
* DXT5 (also known as BC3)
:8 bits per pixel; supports alpha.
:Use this format for typical textures with an alpha channel.
* I8
: 8 bits per pixel; no alpha.
: Use this format for greyscale textures with no alpha channel and very fine gradients (i.e. light halos). 
* IA88
:16 bits per pixel; supports alpha.
: Use this format for greyscale textures with an alpha channel and very fine gradients (i.e. smoke or light halos).
* A8
: 8 bits per pixel; alpha only.
: Use this, in conjunction with , for single-color textures with an alpha channel, such as GoldSrc-style decals. By default, the texture's color will be pure white (#000000).
* RGBA16161616F
: 64 bits per pixel; supports alpha.
: Use this format for HDR textures.
:: 
* UV88
:16 bits per pixel; no alpha.
:Use this format for DuDv maps.
Find technical details on the various DXT compression formats here and here.
====Additional formats in Strata Source====
 supports additional image formats in VTF v7.6, which provide better compression, reducing GPU VRAM requirements while retaining better image quality than DXT1 or DXT5.
* BC7
:8 bits per pixel; supports alpha.
:Use this format instead of DXT5 for textures with an alpha channel, as it uses the same amount of GPU memory.
:Use this format instead of BGR888 or BGR565 when more detail is needed than provided by DXT1.
* ATI1N (also known as BC4)
:4 bits per pixel; no alpha.
:Use this format instead of I8 or DXT1 for greyscale textures. It uses the same amount of GPU memory as DXT1.
* BC6H
:8 bits per pixel; no alpha.
:Use this format for HDR textures. It is a quarter the size of compressed HDR ↑ in GPU memory, while being similar or better quality.
==Texture flags==
A VTF file can contain the following flags (version 7.5):
Flag 	Value 	Comment
Point Sampling 	0x0001 	Disable Bilinear filtering for "pixel art"-style texture filtering.
Trilinear Sampling 	0x0002 	Always use Trilinear filtering, even when set to Bilinear in video settings.
Clamp S 	0x0004 	Clamp S coordinates, to prevent horizontal texture wrapping.
Clamp T 	0x0008 	Clamp T coordinates, to prevent vertical texture wrapping.
Anisotropic Sampling 	0x0010 	Always use Anisotropic filtering, even when set to Bilinear or Trilinear in video settings.
Hint DXT5 	0x0020 	Used in skyboxes. Makes sure edges are seamless.
PWL Corrected 	0x0040 	Purpose unknown.
SRGB 	0x0040 	Uses sRGB color space. Useful for High Gamuts. Deprecated in 7.5.
No Compress 	0x0040 	No DXT compression used (internal to vtex).
Normal Map 	0x0080 	Texture is a normal map.
No Mipmaps 	0x0100 	Load largest mipmap only. Does not delete existing mipmaps, just disables them.
No Level Of Detail 	0x0200 	Not affected by texture resolution settings.
No Minimum Mipmap 	0x0400 	If set, load mipmaps below 32x32 pixels.
Procedural 	0x0800 	Texture is an procedural texture (code can modify it).
One Bit Alpha 	0x1000 	One bit alpha channel used.
Eight Bit Alpha 	0x2000 	Eight bit alpha channel used.
Environment Map 	0x4000 	Texture is an environment map.
Render Target 	0x8000 	Texture is a render target.
Depth Render Target 	0x10000 	Texture is a depth render target.
No Debug Override 	0x20000 	
Single Copy 	0x40000 	
Pre SRGB 	0x80000 	SRGB correction has already been applied
One Over Mipmap Level In Alpha 	0x80000 	Fill the alpha channel with 1/Mipmap Level. Deprecated (Internal to VTEX?)
Premultiply Color By One Over Mipmap Level	0x100000 	(Internal to VTEX?)
Normal To DuDv 	0x200000 	Texture is a DuDv map (internal to vtex).
Alpha Test Mipmap Generation 	0x400000 	(internal to VTEX)
No Depth Buffer 	0x800000 	Do not buffer for Video Processing, generally render distance.
Nice Filtered 	0x1000000 	NICE filtering was used to generate the mipmaps (internal to VTEX).
Clamp U 	0x2000000 	Clamp U coordinates (for volumetric textures).
Vertex Texture 	0x4000000 	Usable as a vertex texture
SSBump 	0x8000000 	Texture is a SSBump.
Border 	0x20000000	Clamp to border colour on all texture coordinates
==File format==
The VTF image format is described as follows.
===VTF layout===
7.2	7.3 +
# VTF Header
# VTF Low Resolution Image Data
# For Each Mipmap (Smallest to Largest)
#* For Each Frame (First to Last)
#** For Each Face (First to Last)
#*** For Each Z Slice (Min to Max; Varies with Mipmap)
#**** VTF High Resolution Image Data	
# VTF Header
# Resource entries
#* VTF Low Resolution Image Data
#* Other resource data ↑
#* For Each Mipmap (Smallest to Largest)
#** For Each Frame (First to Last)
#*** For Each Face (First to Last)
#**** For Each Z Slice (Min to Max; Varies with Mipmap)
#***** VTF High Resolution Image Data
* Image section, or non-header data, starts slightly different between 7.2 and 7.3+ in most cases. For 7.2, it starts at the offset from the beginning of the file with the value of header size. For 7.3+, it starts immediately after the end of the header.
===VTF enumerations===
==== Image format ====
enum ImageFormat
{
	IMAGE_FORMAT_NONE = -1,
	IMAGE_FORMAT_RGBA8888 = 0,
	IMAGE_FORMAT_ABGR8888,
	IMAGE_FORMAT_RGB888,
	IMAGE_FORMAT_BGR888,
	IMAGE_FORMAT_RGB565,
	IMAGE_FORMAT_I8,
	IMAGE_FORMAT_IA88,
	IMAGE_FORMAT_P8,
	IMAGE_FORMAT_A8,
	IMAGE_FORMAT_RGB888_BLUESCREEN,
	IMAGE_FORMAT_BGR888_BLUESCREEN,
	IMAGE_FORMAT_ARGB8888,
	IMAGE_FORMAT_BGRA8888,
	IMAGE_FORMAT_DXT1,
	IMAGE_FORMAT_DXT3,
	IMAGE_FORMAT_DXT5,
	IMAGE_FORMAT_BGRX8888,
	IMAGE_FORMAT_BGR565,
	IMAGE_FORMAT_BGRX5551,
	IMAGE_FORMAT_BGRA4444,
	IMAGE_FORMAT_DXT1_ONEBITALPHA,
	IMAGE_FORMAT_BGRA5551,
	IMAGE_FORMAT_UV88,
	IMAGE_FORMAT_UVWQ8888,
	IMAGE_FORMAT_RGBA16161616F,
	IMAGE_FORMAT_RGBA16161616,
	IMAGE_FORMAT_UVLX8888
};
==== Texture flags ====
enum CompiledVtfFlags
{
	// Flags from the *.txt config file
	TEXTUREFLAGS_POINTSAMPLE = 0x00000001,
	TEXTUREFLAGS_TRILINEAR = 0x00000002,
	TEXTUREFLAGS_CLAMPS = 0x00000004,
	TEXTUREFLAGS_CLAMPT = 0x00000008,
	TEXTUREFLAGS_ANISOTROPIC = 0x00000010,
	TEXTUREFLAGS_HINT_DXT5 = 0x00000020,
	TEXTUREFLAGS_PWL_CORRECTED = 0x00000040,
	TEXTUREFLAGS_NORMAL = 0x00000080,
	TEXTUREFLAGS_NOMIP = 0x00000100,
	TEXTUREFLAGS_NOLOD = 0x00000200,
	TEXTUREFLAGS_ALL_MIPS = 0x00000400,
	TEXTUREFLAGS_PROCEDURAL = 0x00000800,
	// These are automatically generated by vtex from the texture data.
	TEXTUREFLAGS_ONEBITALPHA = 0x00001000,
	TEXTUREFLAGS_EIGHTBITALPHA = 0x00002000,
	// Newer flags from the *.txt config file
	TEXTUREFLAGS_ENVMAP = 0x00004000,
	TEXTUREFLAGS_RENDERTARGET = 0x00008000,
	TEXTUREFLAGS_DEPTHRENDERTARGET = 0x00010000,
	TEXTUREFLAGS_NODEBUGOVERRIDE = 0x00020000,
	TEXTUREFLAGS_SINGLECOPY	= 0x00040000,
	TEXTUREFLAGS_PRE_SRGB = 0x00080000,
 
 TEXTUREFLAGS_UNUSED_00100000 = 0x00100000,
	TEXTUREFLAGS_UNUSED_00200000 = 0x00200000,
	TEXTUREFLAGS_UNUSED_00400000 = 0x00400000,
	TEXTUREFLAGS_NODEPTHBUFFER = 0x00800000,
	TEXTUREFLAGS_UNUSED_01000000 = 0x01000000,
	TEXTUREFLAGS_CLAMPU = 0x02000000,
	TEXTUREFLAGS_VERTEXTEXTURE = 0x04000000,
	TEXTUREFLAGS_SSBUMP = 0x08000000,
	TEXTUREFLAGS_UNUSED_10000000 = 0x10000000,
	TEXTUREFLAGS_BORDER = 0x20000000,
	TEXTUREFLAGS_UNUSED_40000000 = 0x40000000,
	TEXTUREFLAGS_UNUSED_80000000 = 0x80000000,
};
===VTF header===
typedef struct tagVTFHEADER
{
 char signature[4]; // File signature ("VTF\0"). (or as little-endian integer, 0x00465456)
 unsigned int version[2]; // version[0].version[1] (currently 7.2).
 unsigned int headerSize; // Size of the header struct (16 byte aligned; currently 80 bytes) + size of the resources dictionary (7.3+).
 unsigned short width; // Width of the largest mipmap in pixels. Must be a power of 2.
 unsigned short height; // Height of the largest mipmap in pixels. Must be a power of 2.
 unsigned int flags; // VTF flags.
 unsigned short frames; // Number of frames, if animated (1 for no animation).
 unsigned short firstFrame; // First frame in animation (0 based). Can be -1 in environment maps older than 7.5, meaning there are 7 faces, not 6.
 unsigned char padding0[4]; // reflectivity padding (16 byte alignment).
 float reflectivity[3]; // reflectivity vector.
 unsigned char padding1[4]; // reflectivity padding (8 byte packing).
 float bumpmapScale; // Bumpmap scale.
 int highResImageFormat; // High resolution image format.
 unsigned char mipmapCount; // Number of mipmaps.
 int lowResImageFormat; // Low resolution image format (Usually DXT1).
 unsigned char lowResImageWidth; // Low resolution image width.
 unsigned char lowResImageHeight; // Low resolution image height.
 // 7.2+
 unsigned short depth; // Depth of the largest mipmap in pixels. Must be a power of 2. Is 1 for a 2D texture.
 // 7.3+
 unsigned char padding2[3]; // depth padding (4 byte alignment).
 unsigned int numResources; // Number of resources this vtf has. The max appears to be 32.
 unsigned char padding3[8]; // Necessary on certain compilers
} VTFHEADER;
===VTF Resource Entry===
struct ResourceEntryInfo
{
	unsigned char	tag[3]; 		// A three-byte "tag" that identifies what this resource is.
	unsigned char	flags;			// Resource entry flags. The only known flag is 0x2, which indicates that no data chunk corresponds to this resource.
	unsigned int	offset;			// The offset of this resource's data in the file. 
};
;Tags
:{ '\x01', '\0', '\0' } - Low-res (thumbnail) image data.
:{ '\x30', '\0', '\0' } - High-res image data.
:{ '\x10', '\0', '\0' } - Animated particle sheet data.
:{ 'C', 'R', 'C' } - CRC data.
:{ 'L', 'O', 'D' } - Texture LOD control information.
:{ 'T', 'S', 'O' } - Game-defined "extended" VTF flags.
:{ 'K', 'V', 'D' } - Arbitrary KeyValues data.
===VTF lo-res image data===
Tightly packed low resolution image data in the format described in the header. The low resolution image data is always stored in the DXT1 compressed image format. Its dimensions are that of the largest mipmap with a width or height that does not exceed 16 pixels. i.e. for a 256x256 pixel VTF: 16x16, for a 256x64 pixel VTF: 16x4, for a 1x32 pixel VTF: 1x16, for a 4x4 pixel VTF: 4x4.
===VTF hi-res image data===
Tightly packed interleaved high resolution image data in the format described in the header. Common image formats include DXT1, DXT5, BGR888, BGRA8888 and UV88. All dimensions must be a multiple of 4.
==Versions==
===7.6===
Unofficial VTF version supported by . Not compatible with any of Valve's games, or other mods.
* Adds support for and compression of image data, allowing for reduced storage size.
* Fixes support for ATI1N and ATI2N, and adds support for BC6H and BC7.
===7.5===
* Incompatible with to (e.g. , , ) and -based games. has support. Textures with VTF version 7.5 used by materials in those games need to be converted using a tool such as VTFVer. This is useful when e.g. mounting content from or into older games.
** Common errors encountered when using VTFVer to convert textures to v7.4:
*** In some cases, an "Exception could not be handled" error manifests during texture conversion. It is not confirmed what causes this at the current time.
*** Additionally, some of envmap textures, such as materials/environment maps/metal_generic_xxx.vtf, fail to be converted properly and must be reconstructed in an older vtf version. This can be done by simple exporting as .tga and re-importing and saving as v7.4 or earlier.
* Released July 19th, 2010 as part of .
* Bitwise equivalent to v7.4.
* Redefines and revises two texture flags.
* Spheremaps now officially redundant.
* Most changes internal to the VTF creation process with VTEX, e.g. MipMap fading, Alpha decay and formats.
===7.4===
* Requires or newer.
* Bitwise equivalent to v7.3.
* Addresses issues related to how gamma-correction is performed on textures for TV-output on XBOX 360 combined with hunting down OS Paged Pool Memory.
* Released October 10th, 2007 as part of The Orange Box and its Source engine branch.
===7.3===
* Requires or newer.
* Added an extensible resource orientated structure.
* Added CRC, Texture LOD Control and Sheet resources, along with backwards compatible Image and Low Resolution Image resources.
* Added several vendor specific depth-stencil formats (for internal engine use), along with normal map formats and linear uncompressed formats.
* Released September 18th, 2007 as part of the beta.
===7.2===
* Added volumetric texture support.
* Released September 23rd, 2005 as a Steam engine update and supported in later versions of .
===7.1===
* Added spheremap support to environment maps. (This was intended for DirectX 6 support which was later cut.)
===7.0===
* Initial release. (Internal release only, though some v7.0 textures made it to the published title.)
==Other implementations==
* the LGPL C/C++ library VTFLib
* cl-valve-texture-format — VTF reader and writer in Common Lisp.
==See also==
* Creating a Material
* Material
* VMT
* WAD, SPR, and BMP/TGA ( equivalents)
* VTEX ( equivalent)
* DDS
Category:File formats
Category:Image formats
Category:Material System