Valve Texture Format:ru

From Valve Developer Community
Jump to: navigation, search
English

Valve Texture Format (VTF) - это проприетарный формат текстур использующийся движком Source. VTF файлы обычно задействуются через VMT файлы вместо использования напрямую, что предоставляет возможность их повторного использования.

VTF файлы могут быть созданы из изображений в формате TGA с помощью Source SDK Tool VTEX или из большинства основных форматов изображений с помощью сторонних инструментов. И текстуры и материалы хранятся в подпапках game_dir/materials/.

Примечание:VTF файлы должны быть в размерности степени двойки, например: 64x64, 128x128, 256x256, 512x512 и т.д.

Возможности

Формат VTF может хранить двумерную текстуру, либо карту окружения, либо объемную текстуру. Каждая из этих текстур может иметь несколько кадров.

  • Карта окружения (environment map) - это шестигранная кубическая карта.
  • Объемная текстура (volumetric texture) - это текстура с глубиной, у которой каждый кадр это слой в третьем измерении. То есть объемная текстура 16x16x16 имеет 16 текстур размером 16x16 сложенных друг на друге (как стопка блинчиков). Этот формат используется внутренне движком Source и у вас не должно быть никакой потребности в создании такой текстуры самому.
  • Для каждого кадра и грани, файл VTF содержит и оригинальное изображение и серию mipmap'ов, использующихся для рендера текстуры на различных расстояниях. Так как каждый последующий mipmap имеет 1/2 размера (ширины и высоты) предыдущего, оригинальное изображение должно быть в размерности степени двойки. Не смотря на то, что оригинальное изображение может быть прямоугольным, квадратные mipmap'ы хранятся более эффективно в VTF.
  • Начальный кадр (для анимаций)
  • Размер бамп мапы
  • Значение коэффициента отражения для VRAD
  • Копия 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.
    Note: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.
  • Данные animated particle sheet.
  • Расширенные настройки текстуры. Это коллекция из 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
Сравнение влияния DXT сжатия на различные типы изображений

Сжатие 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 Используется в skyboxes. Убедитесь, что края бесшовные.
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 использование NICE фильтрация для создания MIP-карт. (Для внутреннего использования VTEX?)
Clamp U 0x2000000 Координаты зажима U (для объемных текстур).
Vertex Texture 0x4000000 Может использоваться как вершинная текстура
SSBump 0x8000000 Текстура - это SSBump. (SSB)
Border 0x20000000 Привязка к цвету границы по всем координатам текстуры

Формат файла

Описание формата VTF.

Структура формата

7.2 7.3 +
  1. VTF заголовок
  2. VTF Данные изображения с низким разрешением
  3. Для каждого Mipmap (от наименьшего к наибольшему)
    • Для каждого кадра (от первого до последнего)
      • Для каждого лица (от первого до последнего)
        • Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
          • VTF Данные изображения высокого разрешения
  1. VTF заголовок
  2. Записи ресурсов
    • 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 г. как часть Alien Swarm
  • Побитовый эквивалент 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 г. как часть Team Fortress 2 бета.

v7.2

  • Добавлена ​​поддержка объемных текстур.
  • Выпущен 23 сентября 2005 г. как Steam обновление двигателя.

v7.1

  • Добавлена ​​поддержка карты сфер для карт среды. (Это было предназначено для поддержки DirectX 6, которая позже была сокращена.)

v7.0

  • Изначальный выпуск. (Только для внутреннего выпуска, однако некоторые текстуры v7.0 попали в опубликованный заголовок.)

Реализация

Пример независимой от Steam реализации формата файла изображения VTF можно найти в библиотеке LGPL C / C ++. VTFLib.

Инструменты

Просмотр
Windows thumbnail handler (Windows XP+)
VTF Explorer (Windows; можно исследовать внутри GCFs)
gdk-pixbuf-vtf (Gnome\Nautilus\Eog)
IrfanView plugin
Программа просмотра изображений Leadworks (supports VTF) [dead link]
Редактирование
VTFEdit (GUI) и VTFCmd (command line)
Photoshop Plug-in (6 и вверх)
GIMP Plug-in
Paint.NET Plug-in
3DSMax plugin (версии с 6 по 2009)
VIDE
Преобразование между версиями
7.5 to 7.4 Batch Converter

См. также