Ru/Valve Texture Format

Valve Texture Format (VTF) - это проприетарный формат использующийся движком . VTF файлы обычно задействуются через файлы вместо использования напрямую, что предоставляет возможность их повторного использования. 
VTF файлы могут быть созданы из изображений в формате с помощью Source SDK Tool или из большинства основных форматов изображений с помощью . И текстуры и материалы хранятся в подпапках game_dir/materials/.
== Возможности ==
Формат VTF может хранить двумерную текстуру, либо , либо объемную текстуру. Каждая из этих текстур может иметь несколько кадров. 
* Карта окружения (environment map) - это шестигранная кубическая карта.
* Объемная текстура (volumetric texture) - это текстура с глубиной, у которой каждый кадр это слой в третьем измерении. То есть объемная текстура 16x16x16 имеет 16 текстур размером 16x16 сложенных друг на друге (как стопка блинчиков). Этот формат используется внутренне движком Source и у вас не должно быть никакой потребности в создании такой текстуры самому.
* Для каждого кадра и грани, файл VTF содержит и оригинальное изображение и серию 'ов, использующихся для рендера текстуры на различных расстояниях. Так как каждый последующий mipmap имеет 1/2 размера (ширины и высоты) предыдущего, оригинальное изображение должно быть в размерности степени двойки. Не смотря на то, что оригинальное изображение может быть прямоугольным, квадратные mipmap'ы хранятся более эффективно в VTF.
* Начальный кадр (для анимаций)
* Размер 
* Значение для 
* Копия VTF небольшого разрешения для сэмплирования цвета движком.
=== Ресурсы ===
В 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) - теряют.
=== Таблица форматов данных изображений ===
Формат 	Red Bits	Green Bits	Blue Bits	Alpha Bits	Total Bits	Сжатие	Поддерживается	Комментарий
A8 	0 	0 	0 	8 	8 	False 	True 	
ABGR8888 	8 	8 	8 	8 	32 	False 	True 	Несжатая текстура с альфа-каналом
ARGB8888 	8 	8 	8 	8 	32 	False 	True 	
BGR565 	5 	6 	5 	0 	16 	False 	True 	Несжатая текстура, ограниченная глубина цвета
BGR888 	8 	8 	8 	0 	24 	False 	True 	Несжатая текстура
BGR888_BLUESCREEN	8 	8 	8 	0 	24 	False 	True 	
BGRA4444 	4 	4 	4 	4 	16 	False 	True 	Несжатая текстура с альфа-каналом, половина глубины цвета
BGRA5551 	5 	5 	5 	1 	16 	False 	True 	
BGRA8888 	8 	8 	8 	8 	32 	Either	True 	Также используется для сжатых HDR
BGRX5551 	5 	5 	5 	1 	16 	False 	True 	
BGRX8888 	8 	8 	8 	8 	32 	False 	True 	
DXT1 	N/A 	N/A 	N/A 	0 	4 	True 	True 	Стандартное сжатие, без альфа-канала
DXT1_ONEBITALPHA 	N/A 	N/A 	N/A 	1 	4 	True 	True 	Стандартное сжатие, однобитный альфа-канал
DXT3 	N/A 	N/A 	N/A 	4 	8 	True 	True 	Uninterpolated Alpha
DXT5 	N/A 	N/A 	N/A 	4 	8 	True 	True 	Interpolated Alpha (recommended)
I8 	N/A 	N/A 	N/A 	N/A 	8 	False 	True 	Luminance (Grayscale)
IA88 	N/A 	N/A 	N/A 	8 	16 	False 	True 	Luminance (Grayscale)
P8 	N/A 	N/A 	N/A 	N/A 	8 	False 	False 	Paletted
RGB565 	5 	6 	5 	0 	16 	False 	True 	
RGB888 	8 	8 	8 	0 	24 	False 	True 	
RGB888_BLUESCREEN	8 	8 	8 	0 	24 	False 	True 	
RGBA16161616 	16 	16 	16 	16 	64 	False 	True 	Integer HDR Format
RGBA16161616F 	16 	16 	16 	16 	64 	False 	True 	Floating Point HDR Format
RGBA8888 	8 	8 	8 	8 	32 	False 	True 	
UV88 	N/A 	N/A 	N/A 	N/A 	16 	False 	True 	Несжатый формат du/dv
UVLX8888 	N/A 	N/A 	N/A 	N/A 	32 	False 	True 	
UVWQ8888 	N/A 	N/A 	N/A 	N/A 	32 	False 	True 	
==== Сжатие HDR ====
HDR текстуры могут храниться в сжатой форме используя формат BGRA8888.
Эта формула показывает как преобразовать эти цвета в целочисленный HDR (integer):
RGB = RGB * (A * 16)
и в HDR с плавающей запятой (floating point):
RGB = (RGB * (A * 16)) / 262144
=== Выбор формата изображений ===
Не смотря на то, что VTF предоставляет поддержку широкого ряда форматов изображений, есть только несколько форматов, которые вы, скорее всего, будете использовать. Эти форматы и критерии выбора описаны ниже.
* BGR888: используйте для текстур без альфа-канала и с качественным градиентом (например, карт нормалей и световых ореолов (light halo)).
* BGRA8888: используйте для текстур с альфа-каналом и с качественным градиентом (например, карт нормалей и световых ореолов). Он также может быть использован, чтобы получать высококачественные текстуры. 
* DXT1: используйте этот формат для обычных текстур без альфа-канала.
* DXT3: используйте этот формат для обычных текстур с альфа-каналом и резкими градиентами. 
* DXT5: используйте этот формат для обычных текстур с альфа-каналом и плавными градиентами.
* I8: используйте этот формат для черно-белых текстур без альфа-канала и с качественным градиентом (например, световые ореолы).
* IA88: используйте этот формат для черно-белых текстур с альфа каналом и качественным градиентом (например, дым или световые ореолы). 
* RGBA16161616F: используйте этот формат для HDR текстур.
* UV88: используйте этот формат для DuDv карт.
Технические детали о различных форматах сжатия DXT.
== Флаги изображений ==
VTF может содержать следующие флаги (версия 7.5):
Флаг 	Значение 	Комментарий
Point Sampling 	0x0001 	Низкое качество, фильтрация текстур "пиксельная графика".
Trilinear Sampling 	0x0002 	Фильтрация текстур среднего качества.
Clamp S 	0x0004 	Координаты зажима S.
Clamp T 	0x0008 	Координаты зажима T.
Anisotropic Sampling 	0x0010 	Качественная фильтрация текстур.
Hint DXT5 	0x0020 	Используется в es. Убедитесь, что края бесшовные.
PWL Corrected 	0x0040 	Цель неизвестна.
SRGB 	n/a 	Использует пространство RGB. Полезно для высоких гамм. Не рекомендуется в версии 7.5.
No Compress 	0x0040 	Сжатие DXT не используется. Устаревшее
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 	Не Z-буферизация для обработки видео обычно расстояние визуализации.
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 Данные изображения высокого разрешения
=== Перечисления ===
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
};
enum
{
	// 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,
};
=== Заголовок формата ===
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 данные изображения в низком разрешении ===
Плотно упакованные данные изображения с низким разрешением в формате, описанном в заголовке. Данные изображения с низким разрешением всегда хранятся в формате сжатого изображения 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.
=== История версий ===
v7.5
* Выпущено 19 июля 2010 г. как часть 
* Побитовый эквивалент v7.4.
* Переопределяет и изменяет два флага текстуры.
* Сферы теперь официально избыточны.
* Большинство изменений внутри процесса создания VTF с помощью VTEX, например Форматы MipMap fading, Alpha decay и XBox360.
v7.4
* Выпущена 10 октября 2007 г. как часть The Orange Box.
* Побитовый эквивалент версии 7.3.
* Решает проблемы, связанные с тем, как выполняется гамма-коррекция текстур для ТВ-вывода на XBOX 360 в сочетании с поиском памяти выгружаемого пула ОС.
v7.3
* Добавлена ​​расширяемая структура, ориентированная на ресурсы.
* Добавлены ресурсы CRC, управления уровнем детализации текстуры и листа, а также ресурсы изображений с обратной совместимостью и изображений с низким разрешением.
* Добавлено несколько форматов трафаретов глубины, зависящих от поставщика (для внутреннего использования в движке), а также форматы карт нормалей и линейные несжатые форматы.
* Выпущена 18 сентября 2007 г. как часть бета.
v7.2
* Добавлена ​​поддержка объемных текстур.
* Выпущен 23 сентября 2005 г. как обновление двигателя.
v7.1
* Добавлена ​​поддержка карты сфер для карт среды. (Это было предназначено для поддержки DirectX 6, которая позже была сокращена.)
v7.0
* Изначальный выпуск. (Только для внутреннего выпуска, однако некоторые текстуры v7.0 попали в опубликованный заголовок.)
=== Реализация ===
Пример независимой от Steam реализации формата файла изображения VTF можно найти в библиотеке LGPL C / C ++. .
== Инструменты ==
; Просмотр 
: (Windows XP+)
: (Windows; можно исследовать внутри GCFs)
: gdk-pixbuf-vtf (Gnome\Nautilus\Eog)
: IrfanView plugin
: Программа просмотра изображений Leadworks (supports VTF) 
; Редактирование
: (GUI) и ()
: (6 и вверх)
: GIMP Plug-in
: Paint.NET Plug-in
: (версии с 6 по 2009)
: VIDE
; Преобразование между версиями 
: 7.5 to 7.4 Batch Converter
== См. также ==
* 
*