Template:en

From Valve Developer Community
Revision as of 12:26, 1 June 2023 by SirYodaJedi (talk | contribs) (→‎Conversion: internal link)
Jump to navigation Jump to search
Flag-white.pngEnglish (en)

The Valve Texture Format (VTF) is the proprietary texture format used by the Source Source engine. VTF files are generally referenced in a Material instead of being accessed directly, which allows re-use in different ways.

Note.pngNote:All block-compressed VTF files (such as those which use DXT compression) must have dimensions that are a multiple of 4. Although VTF dimensions are usually restricted to powers of two, some third-party tools can import and export non-powers of two textures. If you opt to use non-power-of-two textures, expect texture filtering to break (this can be "remedied" by setting the point sampling flag on the texture).
Tip.pngTip:It is possible, to an extent, to restore DXT compressed VTF files (i.e. removing compression artifacts) by using an AI.

Limitations

Stub

This article or section is a stub. You can help by expanding it.

Template:ModernWarning

Tools

Stub

This article or section is a stub. You can help by expanding it.

VTF files can be created from TGA images using the Source SDK Tool Vtex.

Viewing

Windows thumbnail handler (Windows XP+)
VTF Explorer (Windows; can explore inside GCFs)
gdk-pixbuf-vtf (Gnome\Nautilus\Eog)
IrfanView plugin
Leadworks Image Viewer [dead link] (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 [dead link] – 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)
no_vtf
7.5 to 7.4 Batch Converter
Easy VTF Version (7.0-7.5) Converter

Files

Both textures and materials are stored in subfolders of game_dir/materials/.

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.
Note.pngNote:Textures with dimensions larger than 4096 pixels can be created, if a few conditions are met. The resulting .vtf should be below 33 MB (or 33,554,432 bytes), the resolutions used is a powers of two and isn't exceeding 65,536 pixels in either dimension and the total amount of pixels of the image should be below 16.7 megapixels: For example, a texture the size of 512x32,768 will work, because 512 multiplied by 32,768 equals 16.7 megapixels.
  • 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. Because each successive mipmap is exactly 1/2 the dimension (height and width) of the previous one, the source-image dimensions must be a multiple of 4. 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.
  • 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.
    Note.pngNote:Since users are currently only presented with one texture detail setting above High, there is little point setting this value to anything except 50% or 100% of your texture's size. Otherwise, the user would need to manually set theirmat_picmipto a lower value to see the full-res texture, like in Team Fortress 2, which requiressv_cheatsin most other titles.
  • 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.

Note.pngNote:The VTF format can actually store many more formats than those listed below -- consult your engine branch's public/bitmap/imageformat.h to see exactly what it supports. However, these formats are not GUARANTEED to work and their enum values are prone to being shuffled around between engine branches.

Image data format table

Format R G B G P A T Comp Sup Comments
A8 0 0 0 N/A N/A 8 8 False True
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
BGR565 5 6 5 N/A N/A 0 16 False True Uncompressed texture, limited color depth
BGR888 8 8 8 N/A N/A 0 24 False True Uncompressed texture
BGR888_BLUESCREEN 8 8 8 N/A N/A 0 24 False True
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
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
DXT1 N/A N/A N/A N/A 4 0 4 True True Standard compression, no alpha
DXT1_ONEBITALPHA N/A N/A N/A N/A 4 1 4 True True Standard compression, 1-bit alpha
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 8 8 True True Standard compression, interpolated 8-bit alpha (recommended)
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 Paletted
RGB565 5 6 5 N/A N/A 0 16 False True
RGB888 8 8 8 N/A N/A 0 24 False True
RGB888_BLUESCREEN 8 8 8 N/A N/A 0 24 False True
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
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 the BGRA8888 format.

The formula to convert these colors back to integer HDR is:

RGB = RGB * (A * 16)

and for floating point HDR:

RGB = (RGB * (A * 16)) / 262144

Vtex can convert PFM files to this format, and no_vtf can convert compressed HDR VTFs to regular 16-bpc EXR files.

Additional data formats

These are additional image formats that are found in imageformat.h of Source 2013 Source 2013 and Alien Swarm engine branch Alien Swarm engine branch.

Formats found in Source 2013
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
RGB32323232F 32 32 32 32 64 False ? 32-Bit Floating point HDR w/alpha channel
Formats found in Alien Swarm engine branch
Clarify: How are the RGB10A2 and R16f formats "either" compressed or uncompressed?
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, Strata Source Strata Source adds support for additional compression formats:

Formats found in Strata Source
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 8 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 In Progress 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
Hardware decoding requires DX11; converted to RGBA8888 in DX9 mode.

Choosing an image format

Comparison of how DXTn compression affects different types of images (click to view)

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: use this format for textures with no alpha channel and very fine gradients (i.e. normal maps or light halos).
  • BGR565: 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).
Note.pngNote:BGR888 may still be desired for textures with fine gradients (such as LDR skyboxes or red glowing textures), as well as for improved accuracy for normal maps (BGR565 is incapable of properly representing a "flat" normal map).
  • BGRA8888: 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: use this format for typical textures with no alpha channel. (Also known as BC1.)
Note.pngNote:DXT1 supports 1 bit of alpha precision. However, any areas of 0 alpha will be fully black. This functionality is therefore best used for textures using $alphatest (although DXT5 can sometimes handle mipmaping of such textures more effectively).
  • DXT3: DXT5 should almost always be used over DXT3, but DXT3 is acceptable (not necessarily better) for textures with an alpha channel with sharp gradients. (Also known as BC2.)
  • DXT5: use this format for typical textures with an alpha channel. (Also known as BC3).
  • I8: use this format for greyscale textures with no alpha channel and very fine gradients (i.e. light halos).
  • IA88: use this format for greyscale textures with an alpha channel and very fine gradients (i.e. smoke or light halos).
  • RGBA16161616F: use this format for HDR textures.
Tip.pngTip:HDR skyboxes can also use a compressed format using BGRA8888, providing generally acceptable quality at half the file size. The compressed format is recommended for custom skyboxes packaged in multiplayer maps.
  • UV88: use this format for DuDv maps.

Find technical details on the various DXT compression formats here and here.

Image flags

Tip.pngTip:Most shader settings are configured as material parameters, not 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.
Note.pngNote:Breaks mipmapping, see $pointsamplemagfilter if using Counter-Strike: Global Offensive CS:GO branch or derivatives.
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 n/a Uses space RGB. Useful for High Gamuts. Deprecated in 7.5.
No Compress 0x0040 No DXT compression used. Deprecated
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.
Warning.pngWarning:Required for some custom shaders to work, such as PBR shaders.
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.
Note.pngNote:Actually used by all formats with non-binary alpha channel (ex: BGRA4444, BGRA1616161616F)
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
Todo: Add description
Single Copy 0x40000
Todo: Add description
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 Use NICE filtering to generate 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 +
  1. VTF Header
  2. VTF Low Resolution Image Data
  3. 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
  1. VTF Header
  2. 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

VTF enumerations

IMAGE_FORMAT

enum
{
	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
};

TEXTUREFLAGS

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.
    unsigned int    highResImageFormat; // High resolution image format.
    unsigned char   mipmapCount;        // Number of mipmaps.
    unsigned int    lowResImageFormat;  // Low resolution image format (always 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

Clarify: many dates are missing.

7.6

Unofficial VTF version supported by the Strata Source Strata Source. Not compatible with any of Valve's games, or other mods.

  • Adds support for deflate compression of image data, allowing for reduced storage size.
  • Fixes support for ATI1N and ATI2N, and adds support for BC7.

7.5

  • Incompatible with Half-Life 2 Half-Life 2, Counter-Strike: Source Counter-Strike: Source, Team Fortress 2 Team Fortress 2 and other Source 2004 Source 2004 to Source 2013 Source 2013 & Left 4 Dead engine branch Left 4 Dead engine branch based games. Garry's Mod Garry's Mod has experimental 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 Portal 2 Portal 2 or Counter-Strike: Global Offensive Counter-Strike: Global Offensive into older games.
    • Common errors encountered when using VTFVer to convert Counter-Strike: Global Offensive 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 Counter-Strike: Global Offensive 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 Alien Swarm Alien Swarm.
  • 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 Xbox 360 Xbox 360 formats.

7.4

  • Incompatible with Source 2006 Source 2006 and earlier.
  • 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 it's Source engine branch.

7.3

  • Incompatible with Source 2006 Source 2006 and earlier.
  • 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 Team Fortress 2 Team Fortress 2 beta.

7.2

  • Added volumetric texture support.
  • Released September 23rd, 2005 as a Steam engine update and in later versions of Source 2004 Source 2004.

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

See also

Broom icon.png
This article or section needs to be cleaned up to conform to a higher standard of quality because:
1. Reduce unwanted duplication about file formats.
For help, see the VDC Editing Help and Wikipedia cleanup process. Also, remember to check for any notes left by the tagger at this article's talk page.