Ru/VTF (Valve Texture Format): Difference between revisions
m (Multipage removal) |
No edit summary |
||
Line 2: | Line 2: | ||
{{Source topicon}} | {{Source topicon}} | ||
{{toc-right}} | {{toc-right}} | ||
Line 111: | Line 109: | ||
| UVWQ8888 || 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 || Нет || Да || | ||
|} | |} | ||
{{note|Определённые 16-битные (ex: BGR565, BGRA4444) и 24-битные (ex: BGR888, RGB888) форматы are converted to 32-битные (BGRA8888 in DX9, RGBA8888 in DX11) прежде чем | {{note|Определённые 16-битные (ex: BGR565, BGRA4444) и 24-битные (ex: BGR888, RGB888) форматы are converted to 32-битные (BGRA8888 in DX9, RGBA8888 in DX11) прежде чем загружается на графический процессор; это означает, что их главная цель для сохранения размеров установки.{{tip|Если вы создаете текстуру для {{пласта|4.1}}, предпочитают использовать сжатые в Deflate VTF в RGBA8888 (или BC7) вместо использования 16- или 24-битных форматов, поскольку Deflate обеспечивает лучшую экономию размера файлов без потери качества; необходимость одновременно распаковывать текстуру и конвертировать ее в 32-битный формат приведет к неоправданному увеличению времени загрузки.}} }} | ||
====Сжатие HDR==== | ====Сжатие HDR==== | ||
HDR текстуры могут храниться в сжатой форме используя любой формат с небинарным альфа-каналом (BGRA8888 | HDR текстуры могут храниться в сжатой форме используя любой формат с небинарным альфа-каналом (BGRA8888 является «очень предпочтительным» и используется в {{L|Vtex (Source 1)|Vtex}}, но DXT5 или BGRA4444 также работают). | ||
Эта формула показывает как преобразовать эти цвета в целочисленный HDR (integer): | Эта формула показывает как преобразовать эти цвета в целочисленный HDR (integer): | ||
Line 124: | Line 122: | ||
{{codeblock|1=RGB = (RGB * (A * 16)) / 262144}} | {{codeblock|1=RGB = (RGB * (A * 16)) / 262144}} | ||
{{L|Vtex (Source 1)|Vtex}} | {{L|Vtex (Source 1)|Vtex}} может конвертировать 32 бит на канал {{w|Portable Floatmap|PFM}} файлы в этот формат, а {{no_vtf|3.1}} может конвертировать сжатые HDR VTF в обычные 16 бит на канал {{Wikipedia|OpenEXR|EXR}} файлы. | ||
{{note| | {{note|Интерпретация данных как HDR выполняется в шейдере, и в настоящее время поддерживается только {{L|Sky (Source 1 shader)|Sky shader}}. Шейдер неба также имеет альтернативный «метод сжатия HDR B», который использует несколько текстур (с разной экспозицией? {{confirm}}) для создания HDR-изображения.<br> | ||
HDR | Кубмапы HDR всегда хранятся как несжатые RGBA16161616F, за исключением {{strata|4}}, где они могут храниться как BC6H.}} | ||
===Выбор формата изображений=== | ===Выбор формата изображений=== | ||
Line 140: | Line 138: | ||
: Используйте этот формат вместо BGR888, чтобы сохранить до 33% места, с зачастую несущественной потерей качества (особенно для {{L|$basetexture|basetextures}}). | : Используйте этот формат вместо BGR888, чтобы сохранить до 33% места, с зачастую несущественной потерей качества (особенно для {{L|$basetexture|basetextures}}). | ||
: Рекомендуется для текстур низкого разрешения, где блочное сжатие DXT будет заметным (например, порты с GoldSrc). | : Рекомендуется для текстур низкого разрешения, где блочное сжатие DXT будет заметным (например, порты с GoldSrc). | ||
:: {{note|BGR888 | :: {{note|BGR888 все еще может быть востребован для текстур с качественным градиентом (например, LDR-скайбоксы или красные светящиеся текстуры), а также для повышения точности карт нормалей (BGR565 не способен правильно отобразить «плоскую» карту нормалей).}} | ||
* '''BGRA8888''' | * '''BGRA8888''' | ||
: 32 бит на пиксель. | : 32 бит на пиксель. | ||
Line 148: | Line 146: | ||
: 4 бит на пиксель. | : 4 бит на пиксель. | ||
: Используйте этот формат для обычных текстур без альфа-канала. | : Используйте этот формат для обычных текстур без альфа-канала. | ||
:: {{Note|DXT1 поддерживает 1 | :: {{Note|DXT1 поддерживает 1 бит точности альфа. Однако все области с 0 альфа будут полностью черными. Поэтому эту функциональность лучше всего использовать для текстур, использующих {{L|$alphatest}} (хотя иногда DXT5 может обрабатывать мипмапинг таких текстур более эффективно, и его следует использовать при использовании {{L|$allowalphatocoverage}}).}} | ||
* '''DXT3''' (также известен как BC2) | * '''DXT3''' (также известен как BC2) | ||
: 8 бит на пиксель. | : 8 бит на пиксель. | ||
: ''{{L|DirectX_Texture_compression_5|DXT5}} почти всегда должен быть использован вместо DXT3'', но DXT3 оптимален (не обязательно лучше) для текстур с альфа-каналом и резкими градиентами, | : ''{{L|DirectX_Texture_compression_5|DXT5}} почти всегда должен быть использован вместо DXT3'', но DXT3 оптимален (не обязательно лучше) для текстур с альфа-каналом и резкими градиентами, например, при использовании {{L|$allowalphatocoverage}}; см. [[:File:DXTn alpha comparison.png]].<br> DXT3 занимает тот же размер файла, что и DXT5. | ||
: {{bug|{{L|VRAD}} | : {{bug|{{L|VRAD}} не может рассчитать текстурные тени для текстур, использующих сжатие DXT3. Вместо этого используйте DXT5 или BGRA8888 для текстур, бросающих тень.}} | ||
* '''{{L|DirectX_Texture_compression_5|DXT5}}''' (также известен как BC3) | * '''{{L|DirectX_Texture_compression_5|DXT5}}''' (также известен как BC3) | ||
: 8 бит на пиксель. | : 8 бит на пиксель. | ||
Line 186: | Line 184: | ||
* '''BC6H''' | * '''BC6H''' | ||
: 8 бит на пиксель. | : 8 бит на пиксель. | ||
: Используйте этот формат для {{L|HDR}} текстур. | : Используйте этот формат для {{L|HDR}} текстур. Он на четверть меньше, чем [[#HDR_compression|compressed HDR]] в видеопамяти, при этом качество аналогичное или даже лучше. | ||
{{note| | {{note|Все ветви движка Source, начиная с {{orangebox|4}} неофициально поддерживают ATI1N и ATI2N. Но несмотря на это, нет никакой гарантии, что они будут работать корректно; ATI1N интерпретируется как красный, а не как серый, и ось Z карт нормалей ATI2 может быть неправильно сгенерирована в зависимости от GPU пользователя при использовании ванильных шейдеров{{cn|в ванильных шейдерах есть код, специально предназначенный для работы с картами нормалей ATI2N}}.}} | ||
==Пометки изображений== | ==Пометки изображений== | ||
Line 198: | Line 196: | ||
| '''Пометка''' || '''Значение''' || '''Комментарий''' | | '''Пометка''' || '''Значение''' || '''Комментарий''' | ||
|- | |- | ||
| Point Sampling || 0x0001 || Отключает Билинейную фильтрацию ради фильтрации текстуры в стиле "пиксель-арт". {{note|Ломает mipmapping, смотреть {{L|$pointsamplemagfilter}} если используется {{csgo|4|nt=1}} | | Point Sampling || 0x0001 || Отключает Билинейную фильтрацию ради фильтрации текстуры в стиле "пиксель-арт". {{note|Ломает mipmapping, смотреть {{L|$pointsamplemagfilter}} если используется {{csgo|4|nt=1}} отрасль или производные.}} | ||
|- | |- | ||
| Trilinear Sampling || 0x0002 || Всегда использовать [[Wikipedia:Trilinear filtering|Трилинейную фильтрацию]], даже когда в настройках видео стоит Билинейная фильтрация. | | Trilinear Sampling || 0x0002 || Всегда использовать [[Wikipedia:Trilinear filtering|Трилинейную фильтрацию]], даже когда в настройках видео стоит Билинейная фильтрация. | ||
Line 223: | Line 221: | ||
| No Level Of Detail || 0x0200 || Не зависит от настроек разрешения текстуры. | | No Level Of Detail || 0x0200 || Не зависит от настроек разрешения текстуры. | ||
|- | |- | ||
| No Minimum Mipmap || 0x0400 || Если установлено, загружает MIP-карты размером менее 32x32 пикселей. {{warning| | | No Minimum Mipmap || 0x0400 || Если установлено, загружает MIP-карты размером менее 32x32 пикселей. {{warning|Требуется на Env Maps для корректной работы пользовательских шейдеров, например PBR.}} {{tip|Используйте его для шумных {{L|diffuse}}/{{L|albedo}}, {{L|normal map}}, и {{L|$detail|detail}} текстуры для уменьшения бликов при просмотре на расстоянии.}} | ||
|- | |- | ||
| Procedural || 0x0800 || Текстура является процедурной текстурой (код может это изменять). | | Procedural || 0x0800 || Текстура является процедурной текстурой (код может это изменять). | ||
Line 229: | Line 227: | ||
| One Bit Alpha || 0x1000 || Использует однобитовый альфа-канал. | | One Bit Alpha || 0x1000 || Использует однобитовый альфа-канал. | ||
|- | |- | ||
| Eight Bit Alpha || 0x2000 || Используе восьмибитный альфа-канал. {{note| | | Eight Bit Alpha || 0x2000 || Используе восьмибитный альфа-канал. {{note|Фактически используется всеми форматами с небинарным альфа-каналом (К примеру: BGRA4444, BGRA1616161616F)}} | ||
|- | |- | ||
| Environment Map || 0x4000 || Текстура является картой окружения. | | Environment Map || 0x4000 || Текстура является картой окружения. | ||
Line 346: | Line 344: | ||
TEXTUREFLAGS_PROCEDURAL = 0x00000800, | TEXTUREFLAGS_PROCEDURAL = 0x00000800, | ||
// | // Они автоматически генерируются vtex из данных текстуры. | ||
TEXTUREFLAGS_ONEBITALPHA = 0x00001000, | TEXTUREFLAGS_ONEBITALPHA = 0x00001000, | ||
TEXTUREFLAGS_EIGHTBITALPHA = 0x00002000, | TEXTUREFLAGS_EIGHTBITALPHA = 0x00002000, | ||
// | // Новые флаги из файла конфигурации *.txt | ||
TEXTUREFLAGS_ENVMAP = 0x00004000, | TEXTUREFLAGS_ENVMAP = 0x00004000, | ||
TEXTUREFLAGS_RENDERTARGET = 0x00008000, | TEXTUREFLAGS_RENDERTARGET = 0x00008000, | ||
Line 383: | Line 381: | ||
typedef struct tagVTFHEADER | typedef struct tagVTFHEADER | ||
{ | { | ||
char signature[4]; // | char signature[4]; // Подпись файла («VTF\0»). (или как целое число с младшим порядком, 0x00465456) | ||
unsigned int version[2]; // version[0].version[1] ( | unsigned int version[2]; // version[0].version[1] (в настоящее время 7.2). | ||
unsigned int headerSize; // | unsigned int headerSize; // Размер структуры заголовка (выровнен по 16 байт; в настоящее время 80 байт) + размер словаря ресурсов (7.3+). | ||
unsigned short width; // | unsigned short width; // Ширина самого большого mipmap в пикселях. Должна быть равна 2. | ||
unsigned short height; // | unsigned short height; // Высота самого большого mipmap в пикселях. Должна быть равна 2. | ||
unsigned int flags; // VTF | unsigned int flags; // Флаги VTF. | ||
unsigned short frames; // | unsigned short frames; // Количество кадров, если они анимированы (1 если анимация отсутствует). | ||
unsigned short firstFrame; // | unsigned short firstFrame; // Первый кадр в анимации (основан на 0). | ||
unsigned char padding0[4]; // | unsigned char padding0[4]; // Отражающая подложка (выравнивание по 16 байтам). | ||
float reflectivity[3]; // | float reflectivity[3]; // Вектор отражения. | ||
unsigned char padding1[4]; // | unsigned char padding1[4]; // Отражение (упаковка 8 байт). | ||
float bumpmapScale; // | float bumpmapScale; // Масштаб бампмапа. | ||
unsigned int highResImageFormat; // | unsigned int highResImageFormat; // Формат изображений высокого разрешения. | ||
unsigned char mipmapCount; // | unsigned char mipmapCount; // Количество мипмапов. | ||
unsigned int lowResImageFormat; // | unsigned int lowResImageFormat; // Формат изображения с низким разрешением (всегда DXT1). | ||
unsigned char lowResImageWidth; // | unsigned char lowResImageWidth; // Ширина изображения с низким разрешением. | ||
unsigned char lowResImageHeight; // | unsigned char lowResImageHeight; // Высота изображения с низким разрешением. | ||
// 7.2+ | // 7.2+ | ||
unsigned short depth; | unsigned short depth; // Глубина самого большого mipmap в пикселях. | ||
// | // Должна быть равна 2. Может быть 0 или 1 для 2D-текстуры (только в v7.2). | ||
// 7.3+ | // 7.3+ | ||
unsigned char padding2[3]; // | unsigned char padding2[3]; // Глубины (выравнивание по 4 байтам). | ||
unsigned int numResources; // | unsigned int numResources; // Количество ресурсов, которыми располагает этот vtf | ||
} VTFHEADER; | } VTFHEADER; | ||
</source> | </source> | ||
===VTF | ===Ввод ресурсов VTF=== | ||
<source lang="cpp"> | <source lang="cpp"> | ||
struct ResourceEntryInfo | struct ResourceEntryInfo | ||
{ | { | ||
unsigned char tag[3]; // | unsigned char tag[3]; // Трехбайтовая «метка», идентифицирующая, что это за ресурс. | ||
unsigned char flags; // | unsigned char flags; // Флаги входа в ресурс. Единственный известный флаг - 0x2, который указывает, что этому ресурсу не соответствует ни один чанк данных. | ||
unsigned int offset; // | unsigned int offset; // Смещение данных этого ресурса в файле. | ||
}; | }; | ||
</source> | </source> | ||
;Tags | ;Tags | ||
:<code>{ '\x01', '\0', '\0' }</code> - | :<code>{ '\x01', '\0', '\0' }</code> - Изображения низкого разрешения (миниатюры). | ||
:<code>{ '\x30', '\0', '\0' }</code> - | :<code>{ '\x30', '\0', '\0' }</code> - Изображения в высоком разрешении. | ||
:<code>{ '\x10', '\0', '\0' }</code> - | :<code>{ '\x10', '\0', '\0' }</code> - Анимированные данные о листах частиц. | ||
:<code>{ 'C', 'R', 'C' }</code> - [[w:Cyclic redundancy check|CRC]] | :<code>{ 'C', 'R', 'C' }</code> - Данные [[w:Cyclic redundancy check|CRC]]. | ||
:<code>{ 'L', 'O', 'D' }</code> - | :<code>{ 'L', 'O', 'D' }</code> - Информация об управлении LOD текстуры. | ||
:<code>{ 'T', 'S', 'O' }</code> - | :<code>{ 'T', 'S', 'O' }</code> - Определенные игрой «расширенные» флаги VTF. | ||
:<code>{ 'K', 'V', 'D' }</code> - | :<code>{ 'K', 'V', 'D' }</code> - Произвольные данные KeyValues. | ||
=== VTF данные изображения в низком разрешении === | === VTF данные изображения в низком разрешении === | ||
Line 438: | Line 436: | ||
=== История версий === | === История версий === | ||
=== 7.6 === | === 7.6 === | ||
Неофициальная версия VTF, поддерживаемая {{strata|4}}. Не совместима ни с одной из игр Valve, ни с другими модами. | |||
* | * Добавляет поддержку [[Wikipedia:Deflate|deflate]] для сжатия данных изображений, что позволяет уменьшить размер хранилища. | ||
* | * Исправлена поддержка ATI1N и ATI2N, а также добавлена поддержка BC6H и BC7. | ||
=== 7.5 === | === 7.5 === | ||
Line 474: | Line 472: | ||
=== Другие реализации === | === Другие реализации === | ||
Пример независимой от Steam реализации формата файла изображения VTF можно найти в библиотеке LGPL C / C ++. {{L|VTFLib}}. | Пример независимой от Steam реализации формата файла изображения VTF можно найти в библиотеке LGPL C / C ++. {{L|VTFLib}}. | ||
* [https://file.io/fqh8bhLzX1rD cl-valve-texture-format] — VTF | * [https://file.io/fqh8bhLzX1rD cl-valve-texture-format] — Читатель и писатель VTF на языке Common Lisp. | ||
==Смотреть также== | ==Смотреть также== | ||
Line 481: | Line 479: | ||
* {{L|Material|Материал}} | * {{L|Material|Материал}} | ||
* {{L|VMT}} | * {{L|VMT}} | ||
* {{L|WAD}}, {{L|SPR}}, | * {{L|WAD}}, {{L|SPR}}, и {{L|BMP}}/{{L|TGA}} ({{gldsrc|4}} эквиваленты) | ||
* {{L|VTEX (Source 2)|VTEX}} ({{src2|4}} | * {{L|VTEX (Source 2)|VTEX}} ({{src2|4}} эквивалент) | ||
{{ACategory|File formats}} | {{ACategory|File formats}} | ||
{{ACategory|Image formats}} | {{ACategory|Image formats}} | ||
{{ACategory|Material System}} | {{ACategory|Material System}} |
Revision as of 02:23, 9 May 2025
Valve Texture Format (VTF) - это проприетарный формат текстур использующийся движком Source. VTF файлы обычно задействуются через VMT файлы вместо использования напрямую, что предоставляет возможность их повторного использования.

Ограничения и Нюансы




Инструменты
VTF файлы могут быть созданы из изображений в формате TGA или PFM с помощью Source SDK Tool Vtex . Следующие сторонние инструменты также могут быть использованы для создания, просмотра или редактирования файлов VTF.
Просмотр
- Windows thumbnail handler (Windows XP+)
- VTF Explorer (Windows; можно исследовать внутри GCFs)
- gdk-pixbuf-vtf (Gnome\Nautilus\Eog)
- IrfanView plugin
- Программа просмотра изображений Leadworks [мёртвая ссылка] (поддерживает VTF)
Редактирование
- VTFEdit (GUI) and VTFCmd (командная строка )
- Photoshop Plug-in (с 6 по CC 2018, только 32-битная версия)
- GIMP Plug-in
- Paint.NET Plug-in [мёртвая ссылка] – официальный вебсайт
- Paint.NET Plug-in – архив на Wayback Machine
- 3DSMax plugin (версии с 6 по 2009 год)
- VIDE
Преобразование между версиями
- VTFVer (7.5 to 7.4)
- no_vtf
- 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.Примечание: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) - теряют.
Таблица форматов данных изображений
Формат | К | З | С | 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. |
DXT1 DXT1_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 является «очень предпочтительным» и используется в Vtex , но DXT5 или BGRA4444 также работают).
Эта формула показывает как преобразовать эти цвета в целочисленный HDR (integer):
и в HDR с плавающей запятой (floating point):
Vtex может конвертировать 32 бит на канал PFM файлы в этот формат, а no_vtf может конвертировать сжатые HDR VTF в обычные 16 бит на канал
EXR файлы.

Кубмапы HDR всегда хранятся как несжатые RGBA16161616F, за исключением

Выбор формата изображений
Не смотря на то, что VTF предоставляет поддержку широкого ряда форматов изображений, есть только несколько форматов, которые вы, скорее всего, будете использовать. Эти форматы и критерии выбора описаны ниже:
- BGR888
- 24 бит на пиксель.
- Используйте для текстур без альфа-канала и с качественным градиентом (например, карт нормалей и световых ореолов (light halo)).
- BGR565
- 16 бит на пиксель.
- Используйте этот формат вместо BGR888, чтобы сохранить до 33% места, с зачастую несущественной потерей качества (особенно для basetextures ).
- Рекомендуется для текстур низкого разрешения, где блочное сжатие DXT будет заметным (например, порты с GoldSrc).
Примечание:BGR888 все еще может быть востребован для текстур с качественным градиентом (например, LDR-скайбоксы или красные светящиеся текстуры), а также для повышения точности карт нормалей (BGR565 не способен правильно отобразить «плоскую» карту нормалей).
- BGRA8888
- 32 бит на пиксель.
- Используйте этот формат для текстур с альфа-каналом и с качественным градиентом (например, карт нормалей и световых ореолов). Он также может быть использован, чтобы получать высококачественные текстуры.
- Рекомендуется для текстур низкого разрешения, для которых блочное сжатие DXT будет заметным (например, порты с GoldSrc).
- DXT1 (также известен как BC1)
- 4 бит на пиксель.
- Используйте этот формат для обычных текстур без альфа-канала.
Примечание:DXT1 поддерживает 1 бит точности альфа. Однако все области с 0 альфа будут полностью черными. Поэтому эту функциональность лучше всего использовать для текстур, использующих $alphatest (хотя иногда DXT5 может обрабатывать мипмапинг таких текстур более эффективно, и его следует использовать при использовании $allowalphatocoverage ).
- DXT3 (также известен как BC2)
- 8 бит на пиксель.
- DXT5 почти всегда должен быть использован вместо DXT3, но DXT3 оптимален (не обязательно лучше) для текстур с альфа-каналом и резкими градиентами, например, при использовании $allowalphatocoverage ; см. File:DXTn alpha comparison.png.
DXT3 занимает тот же размер файла, что и DXT5.
- DXT5 (также известен как BC3)
- 8 бит на пиксель.
- Используйте этот формат для обычных текстур с альфа-каналом.
- I8
- 8 бит на пиксель.
- Используйте этот формат для черно-белых текстур без альфа-канала и с качественным градиентом (например, световые ореолы).
- IA88
- 16 бит на пиксель.
- Используйте этот формат для черно-белых текстур с альфа каналом и качественным градиентом (например, дым или световые ореолы).
- A8
- 8 бит на пиксель.
- Используйте этот формат в связи с $color, для одноцветных текстур с альфа-каналом, such as GoldSrc-style decals .
- RGBA16161616F
- 64 бит на пиксель.
- Используйте этот формат для HDR текстур.
Совет:HDR небосводы также могут использовать сжатый формат используя BGRA8888, обычно обеспечивая приемлемое качество, при этом уменьшая размер файла наполовину. Сжатый формат рекомендуется для пользовательских небосводов, упакованные в многопользовательских картах.
- UV88
- 16 бит на пиксель.
- Используйте этот формат для DuDv карт.
Найти технические детали о различных форматах сжатия DXT здесь и здесь.
Дополнительные форматы в Strata Source
Strata Source поддерживает дополнительные форматы изображения в VTF v7.6, которые обеспечивают более лучшее сжатие, уменьшая требования к GPU VRAM и, в то же время, сохраняя более лучшее качество изображение, чем DXT1 или DXT5.
- BC7
- 8 бит на пиксель.
- Используйте этот формат вместо DXT5 для текстур с альфа-каналом, так как он использует такое же количество видеопамяти.
- Используйте этот формат вместо BGR888 или BGR565 когда нужно больше деталей, чем DXT1 может предоставить.
- ATI1N (также известен как BC4)
- 4 бит на пиксель.
- Используйте этот формат вместо I8 или DXT1 для чёрно-белых текстур. Использует то же количество видеопамяти, что и DXT1.
- BC6H
- 8 бит на пиксель.
- Используйте этот формат для HDR текстур. Он на четверть меньше, чем compressed HDR в видеопамяти, при этом качество аналогичное или даже лучше.


Пометки изображений

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 | Использует цветовое пространство 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 | 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 + |
---|---|
|
|
Перечисления
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,
// Они автоматически генерируются vtex из данных текстуры.
TEXTUREFLAGS_ONEBITALPHA = 0x00001000,
TEXTUREFLAGS_EIGHTBITALPHA = 0x00002000,
// Новые флаги из файла конфигурации *.txt
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]; // Подпись файла («VTF\0»). (или как целое число с младшим порядком, 0x00465456)
unsigned int version[2]; // version[0].version[1] (в настоящее время 7.2).
unsigned int headerSize; // Размер структуры заголовка (выровнен по 16 байт; в настоящее время 80 байт) + размер словаря ресурсов (7.3+).
unsigned short width; // Ширина самого большого mipmap в пикселях. Должна быть равна 2.
unsigned short height; // Высота самого большого mipmap в пикселях. Должна быть равна 2.
unsigned int flags; // Флаги VTF.
unsigned short frames; // Количество кадров, если они анимированы (1 если анимация отсутствует).
unsigned short firstFrame; // Первый кадр в анимации (основан на 0).
unsigned char padding0[4]; // Отражающая подложка (выравнивание по 16 байтам).
float reflectivity[3]; // Вектор отражения.
unsigned char padding1[4]; // Отражение (упаковка 8 байт).
float bumpmapScale; // Масштаб бампмапа.
unsigned int highResImageFormat; // Формат изображений высокого разрешения.
unsigned char mipmapCount; // Количество мипмапов.
unsigned int lowResImageFormat; // Формат изображения с низким разрешением (всегда DXT1).
unsigned char lowResImageWidth; // Ширина изображения с низким разрешением.
unsigned char lowResImageHeight; // Высота изображения с низким разрешением.
// 7.2+
unsigned short depth; // Глубина самого большого mipmap в пикселях.
// Должна быть равна 2. Может быть 0 или 1 для 2D-текстуры (только в v7.2).
// 7.3+
unsigned char padding2[3]; // Глубины (выравнивание по 4 байтам).
unsigned int numResources; // Количество ресурсов, которыми располагает этот vtf
} VTFHEADER;
Ввод ресурсов VTF
struct ResourceEntryInfo
{
unsigned char tag[3]; // Трехбайтовая «метка», идентифицирующая, что это за ресурс.
unsigned char flags; // Флаги входа в ресурс. Единственный известный флаг - 0x2, который указывает, что этому ресурсу не соответствует ни один чанк данных.
unsigned int offset; // Смещение данных этого ресурса в файле.
};
- Tags
{ '\x01', '\0', '\0' }
- Изображения низкого разрешения (миниатюры).{ '\x30', '\0', '\0' }
- Изображения в высоком разрешении.{ '\x10', '\0', '\0' }
- Анимированные данные о листах частиц.{ 'C', 'R', 'C' }
- Данные CRC.{ 'L', 'O', 'D' }
- Информация об управлении LOD текстуры.{ 'T', 'S', 'O' }
- Определенные игрой «расширенные» флаги VTF.{ 'K', 'V', 'D' }
- Произвольные данные KeyValues.
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
Неофициальная версия VTF, поддерживаемая Strata Source. Не совместима ни с одной из игр Valve, ни с другими модами.
- Добавляет поддержку deflate для сжатия данных изображений, что позволяет уменьшить размер хранилища.
- Исправлена поддержка ATI1N и ATI2N, а также добавлена поддержка BC6H и BC7.
7.5
- Выпущено 19 июля 2010 г. как часть Alien Swarm
- Побитовый эквивалент v7.4.
- Переопределяет и изменяет два флага текстуры.
- Сферы теперь официально избыточны.
- Большинство изменений внутри процесса создания VTF с помощью VTEX, например Форматы MipMap fading, Alpha decay и XBox360.
7.4
- Несовместим с
Source 2006 и ранее.
- Выпущена 10 октября 2007 г. как часть The Orange Box.
- Побитовый эквивалент версии 7.3.
- Решает проблемы, связанные с тем, как выполняется гамма-коррекция текстур для ТВ-вывода на XBOX 360 в сочетании с поиском памяти выгружаемого пула ОС.
7.3
- Несовместим с
Source 2006 и ранее.
- Добавлена расширяемая структура, ориентированная на ресурсы.
- Добавлены ресурсы CRC, управления уровнем детализации текстуры и листа, а также ресурсы изображений с обратной совместимостью и изображений с низким разрешением.
- Добавлено несколько форматов трафаретов глубины, зависящих от поставщика (для внутреннего использования в движке), а также форматы карт нормалей и линейные несжатые форматы.
- Выпущена 18 сентября 2007 г. как часть
Team Fortress 2 бета.
7.2
- Добавлена поддержка объемных текстур.
- Выпущен 23 сентября 2005 г. как Steam обновление движка и в поздних версиях
Source 2004.
7.1
- Добавлена поддержка карты сфер для карт среды. (Предназначалась для поддержки DirectX 6, которая позже была вырезана.)
7.0
- Изначальный выпуск. (Только для внутреннего выпуска, однако некоторые текстуры v7.0 попали в опубликованный заголовок.)
Другие реализации
Пример независимой от Steam реализации формата файла изображения VTF можно найти в библиотеке LGPL C / C ++. VTFLib .
- cl-valve-texture-format — Читатель и писатель VTF на языке Common Lisp.