Valve Texture Format
You can help by finishing the translation.
Also, please make sure the article tries to comply with the alternate languages guide.Valve Texture Format (VTF) - это проприетарный формат текстур использующийся движком Source . VTF файлы обычно задействуются через VMT файлы вместо использования напрямую, что предоставляет возможность их повторного использования.
VTF файлы могут быть созданы из изображений в формате TGA с помощью Source SDK Tool VTEX или из большинства основных форматов изображений с помощью сторонних инструментов . И текстуры и материалы хранятся в подпапках game_dir/materials/
.
Возможности
Формат 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.Примечание: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 |
Сжатие 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 | Используется в skybox 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 | использование NICE фильтрация для создания MIP-карт. (Для внутреннего использования VTEX?) |
Clamp U | 0x2000000 | Координаты зажима U (для объемных текстур). |
Vertex Texture | 0x4000000 | Может использоваться как вершинная текстура |
SSBump | 0x8000000 | Текстура - это SSBump . (SSB) |
Border | 0x20000000 | Привязка к цвету границы по всем координатам текстуры |
Формат файла
Описание формата VTF.
Структура формата
7.2 | 7.3 + |
---|---|
|
|
Перечисления
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) [мёртвая ссылка]
- Редактирование
- 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