Ru/VTF (Valve Texture Format)

Valve Texture Format (VTF) - это проприетарный формат использующийся движком . VTF файлы обычно задействуются через файлы вместо использования напрямую, что предоставляет возможность их повторного использования. 
== Ограничения и Нюансы ==
== Инструменты ==
VTF файлы могут быть созданы из изображений в формате или с помощью Source SDK Tool . Следующие сторонние инструменты также могут быть использованы для создания, просмотра или редактирования файлов VTF.
=== Просмотр ===
* (Windows XP+)
* (Windows; можно исследовать внутри GCFs)
* gdk-pixbuf-vtf (Gnome\Nautilus\Eog)
* IrfanView plugin
* Программа просмотра изображений Leadworks (поддерживает VTF)
=== Редактирование ===
* (GUI) and ()
* (с 6 по CC 2018, только 32-битная версия)
* GIMP Plug-in
* Paint.NET Plug-in – официальный вебсайт
* Paint.NET Plug-in – архив на Wayback Machine
* (версии с 6 по 2009 год)
* 
=== Преобразование между версиями ===
* (7.5 to 7.4)
* 
* 7.5 to 7.4 Batch Converter
* Easy VTF Version (7.0-7.5) Converter
* vtex2 (Supports v7.6)
=== Ресурсы ===
В VTF версии 7.3 появилась расширяемая система ресурсов. Вы можете хранить что угодно, но движок Source распознает только следующие данные:
* Значение CRC для обнаружения "битых" данных.
* An U/V LOD control. This is the highest mipmap which should be loaded when game's Texture Detail setting is "High" (mat_picmip 0). An U LOD Control value of 11 selects the mipmap which is 2048 pixels (211) across. 
* Данные .
* Расширенные настройки текстуры. Это коллекция из 32 флагов, ни один из которых не используется в Valve. В отличие от встроенных флагов VTF, эти могут быть определены специально для определенной игры.
== Форматы данных изображения ==
VTF может хранить в себе данные в различных форматах. Некоторые форматы предназначены для движка, некоторые только как промежуточные форматы для преобразований. Несжатые форматы не теряют данных, а сжатые (DXT) - теряют.
=== Таблица форматов данных изображений ===
Формат 	К 	З 	С 	I 	 	 	В 	Сжат 	Под	Комментарии
A8 	0 	0 	0 	N/A	N/A	8 	8 	Нет 	Да 	Без цвета (полностью чёрный), 8-битный альфа-канал
ABGR8888 	8 	8 	8 	N/A	N/A	8 	32	Нет 	Да 	Несжатая текстура с 8-битным альфа-каналом
ARGB8888 	8 	8 	8 	N/A	N/A	8 	32	Нет 	Да 	Несжатая текстура с 8-битным альфа-каналом, похожа на ABGR8888
BGR565 	5 	6 	5 	N/A	N/A	0 	16	Нет 	Да 	Несжатая непрозрачная текстура, ограниченная глубина цвета
BGR888 	8 	8 	8 	N/A	N/A	0 	24	Нет 	Да 	Несжатая непрозрачная текстура, полная глубина цвета
BGR888_BLUESCREEN 	8 	8 	8 	N/A	N/A	0 	24	Нет 	Да 	То же самое, что и BGR888, но синие пиксели (цвет hex #0000ff) отрисовываются прозрачными
BGRA4444 	4 	4 	4 	N/A	N/A	4 	16	Нет 	Да 	Несжатая текстура с альфа-каналом, половина глубины цвета
BGRA5551 	5 	5 	5 	N/A	N/A	1 	16	Нет 	Да 	Несжатая текстура, ограниченная глубина цвета, 1-битный альфа-канал
BGRA8888 	8 	8 	8 	N/A	N/A	8 	32	Either	Да 	Сжатая HDR текстура без альфа-канала или несжатая SDR текстура с 8-битным альфа-каналом
BGRX5551 	5 	5 	5 	N/A	N/A	1 	16	Нет 	Да 	
BGRX8888 	8 	8 	8 	N/A	N/A	8 	32	Нет 	Да 	Как BGRA8888, но альфа-канал всегда установлен на 255, делая его функционально равноценным BGR888.
DXT1DXT1_ONEBITALPHA	N/A	N/A	N/A	N/A	4 	N/A	4 	Да 	Да 	Стандартное сжатие, опциональный 1-битный альфа-канал (рекомендуется для непрозрачных). Формат DXT1_ONEBITALPHA не работает должным образом; вместо него используйте обычный DXT1 с пометкой о включённом 1-битном альфа-канале.
DXT3 	N/A	N/A	N/A	N/A	4 	4 	8 	Да 	Да 	Стандартное сжатие, неинтерполированный 4-битный альфа-канал
DXT5 	N/A	N/A	N/A	N/A	4+4	N/A	8 	Да 	Да 	Стандартное сжатие, интерполированный 8-битный альфа-канал (рекомендуется для прозрачных/полупрозрачных)
I8 	N/A	N/A	N/A	8 	N/A	N/A	8 	Нет 	Да 	Яркость (Градация серого), нет альфа-канала
IA88 	N/A	N/A	N/A	8 	N/A	8 	16	Нет 	Да 	Яркость (Градация серого), 8-битный альфа-канал
P8 	N/A	N/A	N/A	N/A	8 	N/A	8 	Нет 	Нет	256-цветная палитра
RGB565 	5 	6 	5 	N/A	N/A	0 	16	Нет 	Да 	Несжатая текстура, ограниченная глубина цвета, похожа на BGR565.Not properly supported in all branches; prefer BGR565 instead, which always works.
RGB888 	8 	8 	8 	N/A	N/A	0 	24	Нет 	Да 	Несжатая непрозрачная текстура, похожа на BGR888.
RGB888_BLUESCREEN 	8 	8 	8 	N/A	N/A	0 	24	Нет 	Да 	То же самое, что и RGB888, но синие пиксели (цвет hex #0000ff) отрисовываются прозрачными.
RGBA16161616 	16 	16 	16 	N/A	N/A	16 	64	Нет 	Да 	Целочисленный формат HDR (integer)
RGBA16161616F 	16 	16 	16 	N/A	N/A	16 	64	Нет 	Да 	Формат HDR с плавающей запятой (floating point)
RGBA8888 	8 	8 	8 	N/A	N/A	8 	32	Нет 	Да 	Несжатая текстура с 8-битным альфа-каналом, похожа на ABGR8888
UV88 	8 	8 	N/A	N/A	N/A	N/A	16	Нет 	Да 	Несжатый формат du/dv
UVLX8888 	N/A	N/A	N/A	N/A	N/A	N/A	32	Нет 	Да 	
UVWQ8888 	N/A	N/A	N/A	N/A	N/A	N/A	32	Нет 	Да 	
====Сжатие HDR====
HDR текстуры могут храниться в сжатой форме используя любой формат с небинарным альфа-каналом (BGRA8888 is greatly preferred and is what is used by , but DXT5 or BGRA4444 also work).
Эта формула показывает как преобразовать эти цвета в целочисленный HDR (integer):
и в HDR с плавающей запятой (floating point):
 can convert 32 bits-per-channel files to this format, and can convert compressed HDR VTFs to regular 16 bits-per-channel files.
===Выбор формата изображений===
Не смотря на то, что VTF предоставляет поддержку широкого ряда форматов изображений, есть только несколько форматов, которые вы, скорее всего, будете использовать. Эти форматы и критерии выбора описаны ниже:
* BGR888
: 24 бит на пиксель.
: Используйте для текстур без альфа-канала и с качественным градиентом (например, карт нормалей и световых ореолов (light halo)).
* BGR565
: 16 бит на пиксель.
: Используйте этот формат вместо BGR888, чтобы сохранить до 33% места, с зачастую несущественной потерей качества (особенно для ).
: Рекомендуется для текстур низкого разрешения, где блочное сжатие DXT будет заметным (например, порты с GoldSrc).
:: 
* BGRA8888
: 32 бит на пиксель.
: Используйте этот формат для текстур с альфа-каналом и с качественным градиентом (например, карт нормалей и световых ореолов). Он также может быть использован, чтобы получать высококачественные текстуры.
: Рекомендуется для текстур низкого разрешения, для которых блочное сжатие DXT будет заметным (например, порты с GoldSrc).
* DXT1 (также известен как BC1)
: 4 бит на пиксель.
: Используйте этот формат для обычных текстур без альфа-канала.
:: 
* DXT3 (также известен как BC2)
: 8 бит на пиксель.
: почти всегда должен быть использован вместо DXT3, но DXT3 оптимален (не обязательно лучше) для текстур с альфа-каналом и резкими градиентами, such as if using ; see :File:DXTn alpha comparison.png.DXT3 takes up the same file size as DXT5.
: 
* (также известен как BC3)
: 8 бит на пиксель.
: Используйте этот формат для обычных текстур с альфа-каналом.
* I8
: 8 бит на пиксель.
: Используйте этот формат для черно-белых текстур без альфа-канала и с качественным градиентом (например, световые ореолы).
* IA88
: 16 бит на пиксель.
: Используйте этот формат для черно-белых текстур с альфа каналом и качественным градиентом (например, дым или световые ореолы).
* A8
: 8 бит на пиксель.
: Используйте этот формат в связи с , для одноцветных текстур с альфа-каналом, such as .
* RGBA16161616F
: 64 бит на пиксель.
: Используйте этот формат для текстур.
:: 
* UV88 
: 16 бит на пиксель.
: Используйте этот формат для карт.
Найти технические детали о различных форматах сжатия DXT здесь и здесь.
==== Дополнительные форматы в Strata Source ====
 поддерживает дополнительные форматы изображения в VTF v7.6, которые обеспечивают более лучшее сжатие, уменьшая требования к GPU VRAM и, в то же время, сохраняя более лучшее качество изображение, чем DXT1 или DXT5.
* BC7
: 8 бит на пиксель.
: Используйте этот формат вместо DXT5 для текстур с альфа-каналом, так как он использует такое же количество видеопамяти.
: Используйте этот формат вместо BGR888 или BGR565 когда нужно больше деталей, чем DXT1 может предоставить.
* ATI1N (также известен как BC4)
: 4 бит на пиксель.
: Используйте этот формат вместо I8 или DXT1 для чёрно-белых текстур. Использует то же количество видеопамяти, что и DXT1.
* BC6H
: 8 бит на пиксель.
: Используйте этот формат для текстур. It is a quarter the size of compressed HDR в видеопамяти, while being similar or better quality.
==Пометки изображений==
VTF может содержать следующие пометки (версия 7.5):
Пометка 	Значение 	Комментарий
Point Sampling 	0x0001 	Отключает Билинейную фильтрацию ради фильтрации текстуры в стиле "пиксель-арт".
Trilinear Sampling 	0x0002 	Всегда использовать Трилинейную фильтрацию, даже когда в настройках видео стоит Билинейная фильтрация.
Clamp S 	0x0004 	Координаты зажима S. Предотвращает горизонтальную обёртку текстуры.
Clamp T 	0x0008 	Координаты зажима T. Предотвращает вертикальную обёртку текстуры.
Anisotropic Sampling 	0x0010 	Всегда использовать Анизатропную фильтрацию, даже когда в настройках видео стоит Билинейная или Трилинейная фильтрация.
Hint DXT5 	0x0020 	Используется в . Убедитесь, что края бесшовные.
PWL Corrected 	0x0040 	Цель неизвестна.
SRGB 	0x0040 	Использует цветовое пространство sRGB. Полезно для высоких гамм. Устарело в версии 7.5.
No Compress 	0x0040 	Не использует сжатие DXT (внутренний для vtex)
Normal Map 	0x0080 	Текстура является картой нормалей.
No Mipmaps 	0x0100 	Отрисовывает только самую большую MIP-карту. (Не удаляет существующие MIP-карты, а просто отключает их.)
No Level Of Detail 	0x0200 	Не зависит от настроек разрешения текстуры.
No Minimum Mipmap 	0x0400 	Если установлено, загружает MIP-карты размером менее 32x32 пикселей.
Procedural 	0x0800 	Текстура является процедурной текстурой (код может это изменять).
One Bit Alpha 	0x1000 	Использует однобитовый альфа-канал.
Eight Bit Alpha 	0x2000 	Используе восьмибитный альфа-канал.
Environment Map 	0x4000 	Текстура является картой окружения.
Render Target 	0x8000 	Текстура является целью рендеринга.
Depth Render Target 	0x10000 	Текстура является целью рендеринга глубины.
No Debug Override 	0x20000 	
Single Copy 	0x40000 	
Pre SRGB 	0x80000 	Исправление SRGB уже применено
One Over Mipmap Level In Alpha 	0x80000 	Заполняет альфа-канал значением 1 / Mipmap Level. Устарело (для внутреннего использования VTEX?)
Premultiply Color By One Over Mipmap Level	0x100000 	(Для внутреннего использования VTEX?)
Normal To DuDv 	0x200000 	Текстура является картой DuDv. (Для внутреннего использования VTEX?)
Alpha Test Mipmap Generation 	0x400000 	(Для внутреннего использования VTEX)
No Depth Buffer 	0x800000 	Не для обработки видео обычно расстояние визуализации.
Nice Filtered 	0x1000000 	использование для создания MIP-карт. (Для внутреннего использования VTEX?)
Clamp U 	0x2000000 	Координаты зажима U (для объемных текстур).
Vertex Texture 	0x4000000 	Может использоваться как вершинная текстура
SSBump 	0x8000000 	Текстура является . (SSB)
Border 	0x20000000	Привязка к цвету границы по всем координатам текстуры
==Формат файла==
Описание формата VTF.
===Структура формата===
7.2	7.3 +
# VTF заголовок
# VTF Данные изображения с низким разрешением
# Для каждого Mipmap (от наименьшего к наибольшему)
#* Для каждого кадра (от первого до последнего)
#** Для каждого лица (от первого до последнего)
#*** Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
#**** VTF Данные изображения высокого разрешения	
# VTF заголовок
# Записи ресурсов
#* VTF Данные изображения с низким разрешением
#* 
#* Для каждого Mipmap (от наименьшего к наибольшему)
#** Для каждого кадра (от первого до последнего)
#*** Для каждого лица (от первого до последнего)
#**** Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
#***** VTF Данные изображения высокого разрешения
===Перечисления===
==== 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===
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).
	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. Can be 0 or 1 for a 2D texture (v7.2 only).
	// 7.3+
	unsigned char	padding2[3];		// depth padding (4 byte alignment).
	unsigned int	numResources;		// Number of resources this vtf has
} 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 данные изображения в низком разрешении ===
Плотно упакованные данные изображения с низким разрешением в формате, описанном в заголовке. Данные изображения с низким разрешением всегда хранятся в формате сжатого изображения DXT1. Его размеры соответствуют размерам самого большого MIP-карты с шириной или высотой, не превышающей 16 пикселей. то есть для VTF 256x256 пикселей: 16x16, для VTF 256x64 пикселей: 16x4, для VTF 1x32 пикселей: 1x16, для VTF 4x4 пикселей: 4x4.
=== VTF данные изображения в высоком разрешении ===
Tхорошо упакованные перемежающиеся данные изображения высокого разрешения в формате, описанном в заголовке. Распространенные форматы изображений включают DXT1, DXT5, BGR888, BGRA8888 и UV88. Все размеры должны быть power of two.
=== История версий ===
=== 7.6 ===
Unofficial VTF version supported by . 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 BC6H and BC7.
=== 7.5 ===
* Выпущено 19 июля 2010 г. как часть 
* Побитовый эквивалент v7.4.
* Переопределяет и изменяет два флага текстуры.
* Сферы теперь официально избыточны.
* Большинство изменений внутри процесса создания VTF с помощью VTEX, например Форматы MipMap fading, Alpha decay и XBox360.
=== 7.4 ===
* Несовместим с и ранее.
* Выпущена 10 октября 2007 г. как часть The Orange Box.
* Побитовый эквивалент версии 7.3.
* Решает проблемы, связанные с тем, как выполняется гамма-коррекция текстур для ТВ-вывода на XBOX 360 в сочетании с поиском памяти выгружаемого пула ОС.
=== 7.3 ===
* Несовместим с и ранее.
* Добавлена ​​расширяемая структура, ориентированная на ресурсы.
* Добавлены ресурсы CRC, управления уровнем детализации текстуры и листа, а также ресурсы изображений с обратной совместимостью и изображений с низким разрешением.
* Добавлено несколько форматов трафаретов глубины, зависящих от поставщика (для внутреннего использования в движке), а также форматы карт нормалей и линейные несжатые форматы.
* Выпущена 18 сентября 2007 г. как часть бета.
=== 7.2 ===
* Добавлена ​​поддержка объемных текстур.
* Выпущен 23 сентября 2005 г. как обновление движка и в поздних версиях .
=== 7.1 ===
* Добавлена ​​поддержка карты сфер для карт среды. (Предназначалась для поддержки DirectX 6, которая позже была вырезана.)
=== 7.0 ===
* Изначальный выпуск. (Только для внутреннего выпуска, однако некоторые текстуры v7.0 попали в опубликованный заголовок.)
=== Другие реализации ===
Пример независимой от Steam реализации формата файла изображения VTF можно найти в библиотеке LGPL C / C ++. .
* cl-valve-texture-format — VTF reader and writer in Common Lisp.
==Смотреть также==
* 
* 
* 
* , , and / ( equivalents)
* ( equivalent)