Эта статья документации для всего, что использует платформу Source. Нажмите для получения дополнительной информации.

Ru/VTF (Valve Texture Format): Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
No edit summary
mNo edit summary
 
(10 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{langsp}}
{{LanguageBar|title=Формат текстур Valve (VTF)}}
{{Source topicon}}
{{Tabs|VTF (Valve Texture Format)|source=1|custom1=VTEX (Valve Texture)|custom1alt=Source 2|main=source}}
{{toc-right}}
 
'''Valve Texture Format''' ('''VTF''') - это проприетарный формат {{L|texture|текстур}} использующийся движком {{source|4}}. VTF файлы обычно задействуются через {{L|Material|VMT}} файлы вместо использования напрямую, что предоставляет возможность их повторного использования.
 
{{tip|Возможно, в некоторой степени, восстановить VTF-файлы сжатые в формате DXT (т.е. убрать артефакты сжатия) {{L|Restoring_Texture_After_DXT_Compression|используя ИИ}}.}}


{{finishtranslation}}
== Ограничения и нюансы ==
{{toc-right}}
{{stub|section=1}}
{{warning|Совместимость нетривиальна. Смотрите подробности в {{↓|История версий|истории версий}}.}}
{{note|Все файлы блочного сжатия VTF (например использующие DXT сжатие) должны обладать размерами кратными степени четвёрки. Хотя размеры VTF файла обычно ограничены до [[Wikipedia:Powers of two#The first 96 powers of two|степени двойки]], некоторые сторонние инструменты могут импортировать и экспортировать текстуры вне этого ограничения. При использовании таких текстур будьте готовы к проблемам с фильтрацией (это можно "исправить" установкой признака "point sampling" для текстуры).
Кроме того, такие VTF-файлы неправильно считываются {{hammer|4.1}} (и возможно игрой), принимая за следующую по величине степень двойки.
{{clarify|Текстуры детализации размером 4&times;4 по-прежнему хранятся в виде блоков размером 4&times;4, но используется только часть из них.}} }}
{{modernConfusion|В отличии от форматов текстур, таких как {{L|DDS}}, которые хранят текстуры детализациии от большей к меньшей, VTF-файлы хранят текстуры детализации от меньшей к большей.}}
{{important|Ветви платформы {{src13|2}} {{not|{{gmod}}}} не позволяют загрузить VTF-файлы размером более 32 МиБ (33'554'432 байт). Это означает, что применение текстур размером 4096&times;4096 ограничено определёнными {{↓|Форматы данных изображений|форматами данных}}, в основном DXT1, DXT5, и I8.}}
 
== Инструменты ==
{{stub|section=1}}
VTF файлы могут быть созданы из изображений в формате {{L|TGA}} или {{L|PFM}} с помощью Source SDK Tool {{L|Vtex (Source 1)|Vtex}}. Следующие сторонние инструменты также могут быть использованы для создания, просмотра или редактирования файлов VTF.
 
=== Просмотр ===
* {{L|VTF Shell Extensions|Windows thumbnail handler}} (Windows XP+)
* {{L|VTF Explorer}} (Windows; можно исследовать внутри GCFs)
* [https://forre.st/vtf gdk-pixbuf-vtf] (Gnome\Nautilus\Eog)
* [https://www.irfanview.com/plugins.htm IrfanView plugin]
* [https://www.filedropper.com/imageviewer002 Программа просмотра изображений Leadworks] {{Dead_link}} (поддерживает VTF)


'''Valve Texture Format''' ('''VTF''') - это проприетарный формат [[texture|текстур]] использующийся движком [[Source]]. VTF файлы обычно задействуются через [[Material:ru|VMT]] файлы вместо использования напрямую, что предоставляет возможность их повторного использования.
=== Редактирование ===
* {{L|VTFEdit}} (GUI) and {{L|VTFCmd}} ({{L|command line|командная строка}})
* {{L|Photoshop VTF Plugin|Photoshop Plug-in}} (с 6 по CC 2018, только 32-битная версия)
* [http://code.google.com/p/gimp-vtf/ GIMP Plug-in]
* [http://nemesis.thewavelength.net/index.php?p=50 Paint.NET Plug-in] {{Dead_link}} – официальный вебсайт
* [https://web.archive.org/web/20200201044118/http://nemesis.thewavelength.net:80/index.php?p=50 Paint.NET Plug-in] – архив на Wayback Machine
* {{L|3DSMax VTF plugin|3DSMax plugin}} (версии с 6 по 2009 год)
* {{L|VIDE}}


VTF файлы могут быть созданы из изображений в формате [[TGA]] с помощью Source SDK Tool [[Vtex (Source 1)|VTEX]] или из большинства основных форматов изображений с помощью [[Valve_Texture_Format:ru#.D0.98.D0.BD.D1.81.D1.82.D1.80.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D1.8B| сторонних инструментов]]. И текстуры и материалы хранятся в подпапках <code>game_dir/materials/</code>.
=== Преобразование между версиями  ===
* {{L|VTFVer}} (7.5 to 7.4)
* {{no_vtf|3.1}}
* [https://github.com/geotavros/vtf75tovtf74/releases 7.5 to 7.4 Batch Converter]
* [https://github.com/Mix-Anik/Easy-VTF-Converter/releases Easy VTF Version (7.0-7.5) Converter]
* [https://github.com/StrataSource/vtex2 vtex2] (Supports v7.6)


{{note|VTF файлы должны быть в размерности [[Wikipedia:Powers of two#The first 96 powers of two|степени двойки]], например: 64x64, 128x128, 256x256, 512x512 и т.д.}}
==Файлы==
{{note|Хотя технически это ограничение можно обойти с помощью альтернативных программ для конвертации текстур, например SprayMaker 5000}}
Both [[texture]]s and [[material]]s are stored in subfolders of {{path|<nowiki><mod_dir>/materials/</nowiki>}}, or {{path|<nowiki>pak01_dir.vpk/materials/</nowiki>}}.
{{Note|In older {{source|3.1}} games like {{tf2|3.1}}, {{hl2|3.1}} and many {{src13|3.1}} games, as well as some third-party games/mods, Valve and/or other developers separated the textures and materials into different [[VPK]]s. Typically, textures are located in {{path|<nowiki><mod_dir>/<game>_textures</nowiki>|vpk}} while materials are in {{path|<nowiki><mod_dir>/<game>_misc</nowiki>|vpk}}. Most Source 2009 games and earlier (including Source SDK Base 2006, 2007) stores textures inside {{path|vpks/depot_<nowiki><appid></nowiki>_dir|vpk}}.}}


== Возможности ==
==Возможности хранения данных==
Формат изображения VTF может содержать либо обычную текстуру, типа [[$envmap|environment map]], или текстуру объёмности. Каждая из них может содержать несколько кадров.


Формат VTF может хранить двумерную текстуру, либо [[$envmap|карту окружения]], либо объемную текстуру. Каждая из этих текстур может иметь несколько кадров.  
* Поддерживаются текстуры размером до 4096&times;4096 пикселей.
{{note|При соблюдении нескольких условий можно создавать текстуры размером более 4096 пикселей. Результирующий VTF-файл должен быть меньше 32 МиБ (33'554'432 байт){{not|{{csgo}}{{gmod}}}}, используемые размерность должна быть равна степени двойки и не превышать 65'536 пикселей в любом измерении, а общее количество пикселей изображения должно быть меньше 16,7 Мпикс: Например, подойдет текстура размером 512&times;32'768, потому что 512, умноженное на 32'768, равно 16,7 мегапикселям.}}


* Карта окружения (environment map) - это шестигранная [[Wikipedia:cube map|кубическая карта]].
* Карта окружения представляет собой шестисторонюю [[w:cube mapping|кубическую карту]], если версия старее 7.5 и первый кадр в заголовке равен -1, тогда она будет семисторонней.
* Объемная текстура (volumetric texture) - это текстура с глубиной, у которой каждый кадр это слой в третьем измерении. То есть объемная текстура 16x16x16 имеет 16 текстур размером 16x16 сложенных друг на друге (как стопка блинчиков). Этот формат используется внутренне движком Source и у вас не должно быть никакой потребности в создании такой текстуры самому.
* Текстура объёмности - это текстура "с глубиной", где каждый кадр представляет собой "слой", который накладывается "в глубину". Таким образом, текстура объёмности размером 16&times;16&times;16 имеет 16 отдельных текстур размером 16&times;16, наложенных друг на друга для придания глубины. Этот формат используется внутри Source, и его не нужно создавать самостоятельно.
* Для каждого кадра и грани, файл VTF содержит и оригинальное изображение и серию [[mipmap]]'ов, использующихся для рендера текстуры на различных расстояниях. Так как каждый последующий mipmap имеет 1/2 размера (ширины и высоты) предыдущего, оригинальное изображение должно быть в размерности степени двойки. Не смотря на то, что оригинальное изображение может быть прямоугольным, квадратные mipmap'ы хранятся более эффективно в VTF.
* Для каждого кадра и стороны файл VTF содержит как основные данные исходного изображения (карту пикселей), так и набор [[MIP Mapping|текстур детализации]], используемых для отображения текстуры на различных дистанциях. Для форматов с блочным сжатием, таких как DXT1, размеры исходного изображения должны быть кратны 4, поскольку для блочного сжатия используются блоки размером 4&times;4. Хотя исходное изображение может быть и прямоугольным, квадратные mipmaps-текстуры детализации упаковываются в VTF более эффективно.
* Начальный кадр (для анимаций)
* Стартовый кадр (для анимаций)
* Размер [[$bumpmap|бамп мапы]]
* Масштабирование [[$bumpmap|Bump map]] текстуры рельефа
* Значение [[$reflectivity|коэффициента отражения]] для [[VRAD:ru|VRAD]]
* Значение [[$reflectivity|коэффициента светоотражения]] для [[VRAD]]
* Копия VTF небольшого разрешения для сэмплирования цвета движком.
* VTF очень малой размерности для выбора цветности платформой.


=== Ресурсы ===
=== Ресурсы ===
В VTF версии 7.3 появилась расширяемая система ресурсов. Вы можете хранить что угодно, но движок Source распознает только следующие данные:
В VTF версии 7.3 появилась расширяемая система ресурсов. Вы можете хранить что угодно, но движок Source распознает только следующие данные:


* Значение [[Wikipedia:Cyclic redundancy check|CRC]] для обнаружения "битых" данных.
* Значение [[Wikipedia:Cyclic redundancy check|контроля целостности]] для обнаружения "испорченных" данных.
* An [[Wikipedia:UV mapping|U/V]] LOD control. This is the highest mipmap which should be loaded when game's Texture Detail setting is "High" (<code>mat_picmip 0</code>). An U LOD Control value of 11 selects the mipmap which is 2048 pixels (2<sup>11</sup>) 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.}}
* An [[w:UV mapping|U/V]] LOD control. This is the highest mipmap which should be loaded when the game's Texture Detail setting is "High" (<code>mat_picmip 0</code>). An U LOD Control value of 11 will select the mipmap which is 2048 pixels (2<sup>11</sup>) across at the "High" texture setting, and 4096 pixels across at the "Very High" (<code>mat_picmip -1</code>) texture setting. {{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. Otherwise, the user would need to manually set their<code>mat_picmip</code>to a lower value to see the full-res texture, like in {{tf2}}, which requires<code>sv_cheats</code>in most other titles.}}
* Данные [[Animated Particles|animated particle sheet]].
* Данные коллажа {{L|Animated Particles|анимации частиц}}.
* Расширенные настройки текстуры. Это коллекция из 32 флагов, ни один из которых не используется в Valve. В отличие от встроенных флагов VTF, эти могут быть определены специально для определенной игры.
* Расширенные настройки текстуры. Это коллекция из 32 признаков, ни один из которых не используется в Valve. В отличие от встроенных признаков VTF, которые могут быть определены для каждой игры отдельно.


== Форматы данных изображения ==
== Форматы данных изображений ==
VTF может хранить в себе данные в различных форматах. Некоторые форматы предназначены для движка, некоторые только как промежуточные форматы для преобразований. Несжатые форматы не теряют данных, а сжатые (DXT) - теряют.
VTF может хранить в себе данные в различных форматах. Некоторые форматы предназначены для движка, некоторые только как промежуточные форматы для преобразований. Несжатые форматы не теряют данных, а сжатые (DXT) - теряют.


=== Таблица форматов данных изображений ===
=== Таблица форматов данных изображений ===
{| class="wikitable sortable" style="text-align:center;"
{| class="wikitable sortable" style="text-align:center;"
! Format || <span title="Красные биты">К</span> || <span title="Зелёные биты">З</span> || <span title="Синие биты">С</span> || <span title="Серые (&quot;Intensity&quot;) биты">I</span> || <span title="Биты палитры">[[Palette|П]]</span> || <span title="Альфа биты">[[Alpha|А]]</span> || <span title="Всего битов">В</span> || <span title="Сжатие">Сжат</span> || <span title="Поддерживается">Под</span> || Комментарии
! Формат || <span title="Биты красной компоненты">К</span> || <span title="Биты зелёной компоненты">З</span> || <span title="Биты синей компоненты">С</span> || <span title="Биты яркости (&quot;Градации серого&quot;)">Ярк</span> || <span title="Биты палитры">{{L|Palette|Пал}}</span> || <span title="Биты прозрачности">{{L|Alpha|Прозр}}</span> || <span title="Размер">Разм</span> || <span title="Сжатие">Сжат</span> || <span title="Поддерживается">Под</span> || Комментарии
|-
|-
| A8 || 0 || 0 || 0 || N/A || N/A || 8 || 8 || Нет || Да || Без цвета (полностью чёрный), 8-битный альфа-канал
| A8 || 0 || 0 || 0 || N/A || N/A || 8 || 8 || Нет || Да || Без цвета (полностью чёрный), 8-битный альфа-канал
Line 49: Line 87:
| BGR888 || 8 || 8 || 8 || N/A || N/A || 0 || 24 || Нет || Да || Несжатая непрозрачная текстура, полная глубина цвета
| BGR888 || 8 || 8 || 8 || N/A || N/A || 0 || 24 || Нет || Да || Несжатая непрозрачная текстура, полная глубина цвета
|-
|-
| BGR888_BLUESCREEN || 8 || 8 || 8 || N/A || N/A || 0 || 24 || Нет || Да || То же самое, что и BGR888, но синие пиксели (hex color #0000ff) отрисовываются прозрачными
| BGR888_BLUESCREEN || 8 || 8 || 8 || N/A || N/A || 0 || 24 || Нет || Да || То же самое, что и BGR888, но синие пиксели (цвет hex #0000ff) отрисовываются прозрачными
|-
|-
| BGRA4444 || 4 || 4 || 4 || N/A || N/A || 4 || 16 || Нет || Да || Несжатая текстура с альфа-каналом, половина глубины цвета
| BGRA4444 || 4 || 4 || 4 || N/A || N/A || 4 || 16 || Нет || Да || Несжатая текстура с альфа-каналом, половина глубины цвета
Line 55: Line 93:
| BGRA5551 || 5 || 5 || 5 || N/A || N/A || 1 || 16 || Нет || Да || Несжатая текстура, ограниченная глубина цвета, 1-битный альфа-канал
| BGRA5551 || 5 || 5 || 5 || N/A || N/A || 1 || 16 || Нет || Да || Несжатая текстура, ограниченная глубина цвета, 1-битный альфа-канал
|-
|-
| BGRA8888 || 8 || 8 || 8 || N/A || N/A || 8 || 32 || '''''Either''''' || Да || [[#HDR compression|Сжатая HDR]] текстура без альфа-канала или несжатая SDR текстура с 8-битным альфа-каналом
| BGRA8888 || 8 || 8 || 8 || N/A || N/A || 8 || 32 || '''''Любой''''' || Да || [[#HDR compression|Сжатая HDR]] текстура без альфа-канала или несжатая SDR текстура с 8-битным альфа-каналом
|-
|-
| BGRX5551 || 5 || 5 || 5 || N/A || N/A || 1 || 16 || Нет || Да ||  
| BGRX5551 || 5 || 5 || 5 || N/A || N/A || 1 || 16 || Нет || Да ||  
Line 73: Line 111:
| P8 || N/A || N/A || N/A || N/A || 8 || N/A || 8 || Нет || '''''Нет''''' || 256-цветная палитра
| 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.<br>Not properly supported in all branches; prefer BGR565 instead, which always works.
| RGB565 || 5 || 6 || 5 || N/A || N/A || 0 || 16 || Нет || Да || Несжатая текстура, ограниченная глубина цвета, похожа на BGR565.<br>Не поддерживается должным образом для всех веток платформы; предпочтительнее использовать BGR565, который работает всегда.
|-
|-
| RGB888 || 8 || 8 || 8 || N/A || N/A || 0 || 24 || Нет || Да || Несжатая непрозрачная текстура, похожа на BGR888.
| RGB888 || 8 || 8 || 8 || N/A || N/A || 0 || 24 || Нет || Да || Несжатая непрозрачная текстура, похожа на BGR888.
|-
|-
| RGB888_BLUESCREEN || 8 || 8 || 8 || N/A || N/A || 0 || 24 || Нет || Да || То же самое, что и RGB888, но синие пиксели (hex color #0000ff) отрисовываются прозрачными.
| 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
| RGBA16161616 || 16 || 16 || 16 || N/A || N/A || 16 || 64 || Нет || Да || Целочисленный формат HDR (integer)
|-
|-
| RGBA16161616F || 16 || 16 || 16 || N/A || N/A || 16 || 64 || Нет || Да || Floating Point HDR Format
| 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
| RGBA8888 || 8 || 8 || 8 || N/A || N/A || 8 || 32 || Нет || Да || Несжатая текстура с 8-битным альфа-каналом, похожа на ABGR8888
Line 91: Line 129:
| 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) прежде чем being uploaded to the GPU; это означает, что их главная цель for saving installation size.{{tip|If making a texture for {{strata|4.1}}, prefer using Deflate-compressed VTFs in RGBA8888 (or BC7) format instead of using 16-bit or 24-bit formats, as Deflate offers better filesize savings without any quality loss; needing to both decompress the texture and convert to 32-bit would increase load times unnecessarily.}} }}
{{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-битный формат приведет к неоправданному увеличению времени загрузки.}} }}


[[File:Dxtn_comparison.jpg|right|100px|thumb|Сравнение влияния DXT сжатия на различные типы изображений]]
====Сжатие HDR====
HDR текстуры могут храниться в сжатой форме используя любой формат с небинарным альфа-каналом (BGRA8888 является «очень предпочтительным» и используется в {{L|Vtex (Source 1)|Vtex}}, но DXT5 или BGRA4444 также работают).


==== Сжатие HDR ====
Эта формула показывает как преобразовать эти цвета в целочисленный HDR (integer):
HDR текстуры могут храниться в сжатой форме используя формат BGRA8888.


Эта формула показывает как преобразовать эти цвета в целочисленный HDR (integer):
{{codeblock|1=RGB = RGB * (A * 16)}}
<code>RGB = RGB * (A * 16)</code>


и в HDR с плавающей запятой (floating point):
и в HDR с плавающей запятой (floating point):


<code>RGB = (RGB * (A * 16)) / 262144</code>
{{codeblock|1=RGB = (RGB * (A * 16)) / 262144}}
 
{{L|Vtex (Source 1)|Vtex}} может конвертировать 32 бит на канал {{w|Portable Floatmap|PFM}} файлы в этот формат, а {{no_vtf|3.1}} может конвертировать сжатые HDR VTF в обычные 16 бит на канал {{Wikipedia|OpenEXR|EXR}} файлы.
 
{{note|Интерпретация данных как HDR выполняется в шейдере, и в настоящее время поддерживается только {{L|Sky (Source 1 shader)|Sky shader}}. Шейдер неба также имеет альтернативный «метод сжатия HDR B», который использует несколько текстур (с разной экспозицией? {{confirm}}) для создания HDR-изображения.<br>
Кубмапы HDR всегда хранятся как несжатые RGBA16161616F, за исключением {{strata|4}}, где они могут храниться как BC6H.}}
 
===Выбор формата изображений===
[[File:Dxtn_comparison.jpg|right|150px|thumb|Сравнение влияния DXT сжатия на различные типы изображений (нажмите, чтобы посмотреть)]]
Не смотря на то, что VTF предоставляет поддержку широкого ряда форматов изображений, есть только несколько форматов, которые вы, скорее всего, будете использовать. Эти форматы и критерии выбора описаны ниже:


=== Выбор формата изображений ===
* '''BGR888'''
Не смотря на то, что VTF предоставляет поддержку широкого ряда форматов изображений, есть только несколько форматов, которые вы, скорее всего, будете использовать. Эти форматы и критерии выбора описаны ниже.
: 24 бит на пиксель.
: Используйте для текстур без альфа-канала и с качественным градиентом (например, карт нормалей и световых ореолов (light halo)).
* '''BGR565'''
: 16 бит на пиксель.
: Используйте этот формат вместо BGR888, чтобы сохранить до 33% места, с зачастую несущественной потерей качества (особенно для {{L|$basetexture|basetextures}}).
: Рекомендуется для текстур низкого разрешения, где блочное сжатие DXT будет заметным (например, порты с GoldSrc).
:: {{note|BGR888 все еще может быть востребован для текстур с качественным градиентом (например, LDR-скайбоксы или красные светящиеся текстуры), а также для повышения точности карт нормалей (BGR565 не способен правильно отобразить «плоскую» карту нормалей).}}
* '''BGRA8888'''
: 32 бит на пиксель.
: Используйте этот формат для текстур с альфа-каналом и с качественным градиентом (например, карт нормалей и световых ореолов). Он также может быть использован, чтобы получать высококачественные текстуры.
: Рекомендуется для текстур низкого разрешения, для которых блочное сжатие DXT будет заметным (например, порты с GoldSrc).
* '''DXT1''' (также известен как BC1)
: 4 бит на пиксель.
: Используйте этот формат для обычных текстур без альфа-канала.
:: {{Note|DXT1 поддерживает 1 бит точности альфа. Однако все области с 0 альфа будут полностью черными. Поэтому эту функциональность лучше всего использовать для текстур, использующих {{L|$alphatest}} (хотя иногда DXT5 может обрабатывать мипмапинг таких текстур более эффективно, и его следует использовать при использовании {{L|$allowalphatocoverage}}).}}
* '''DXT3''' (также известен как BC2)
: 8 бит на пиксель.
: ''{{L|DirectX_Texture_compression_5|DXT5}} почти всегда должен быть использован вместо DXT3'', но DXT3 оптимален (не обязательно лучше) для текстур с альфа-каналом и резкими градиентами, например, при использовании {{L|$allowalphatocoverage}}; см. [[:File:DXTn alpha comparison.png]].<br> DXT3 занимает тот же размер файла, что и DXT5.
: {{bug|hidetested=1|{{L|VRAD}} не может рассчитать текстурные тени для текстур, использующих сжатие DXT3. Вместо этого используйте DXT5 или BGRA8888 для текстур, бросающих тень.}}
* '''{{L|DirectX_Texture_compression_5|DXT5}}''' (также известен как BC3)
: 8 бит на пиксель.
: Используйте этот формат для обычных текстур с альфа-каналом.
* '''I8'''
: 8 бит на пиксель.
: Используйте этот формат для черно-белых текстур без альфа-канала и с качественным градиентом (например, световые ореолы).
* '''IA88'''
: 16 бит на пиксель.
: Используйте этот формат для черно-белых текстур с альфа каналом и качественным градиентом (например, дым или световые ореолы).
* '''A8'''
: 8 бит на пиксель.
: Используйте этот формат в связи с {{ent|$color}}, для одноцветных текстур с альфа-каналом, such as {{L|decals (GoldSrc)|GoldSrc-style decals}}.
* '''RGBA16161616F'''
: 64 бит на пиксель.
: Используйте этот формат для {{L|HDR}} текстур.
:: {{tip|{{L|HDR Skybox Creation|HDR небосводы}} также могут использовать сжатый формат используя BGRA8888, обычно обеспечивая приемлемое качество, при этом уменьшая размер файла наполовину. [[#HDR_compression|Сжатый формат]] рекомендуется для пользовательских небосводов, {{L|BSPZIP|упакованные}} в многопользовательских картах.}}
* '''UV88'''
: 16 бит на пиксель.
: Используйте этот формат для {{L|Du/dv_map|DuDv}} карт.


* '''BGR888:''' используйте для текстур без альфа-канала и с качественным градиентом (например, карт нормалей и световых ореолов (light halo)).
Найти технические детали о различных форматах сжатия DXT [http://www.fsdeveloper.com/wiki/index.php?title=DXT_compression_explained здесь] и [http://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/ здесь.]
* '''BGRA8888:''' используйте для текстур с альфа-каналом и с качественным градиентом (например, карт нормалей и световых ореолов). Он также может быть использован, чтобы получать высококачественные текстуры.  
* '''DXT1:''' используйте этот формат для обычных текстур без альфа-канала.
* '''DXT3:''' используйте этот формат для обычных текстур с альфа-каналом и резкими градиентами.  
* '''DXT5:''' используйте этот формат для обычных текстур с альфа-каналом и плавными градиентами.
* '''I8:''' используйте этот формат для черно-белых текстур без альфа-канала и с качественным градиентом (например, световые ореолы).
* '''IA88:''' используйте этот формат для черно-белых текстур с альфа каналом и качественным градиентом (например, дым или световые ореолы).
* '''RGBA16161616F:''' используйте этот формат для HDR текстур.
* '''UV88:''' используйте этот формат для DuDv карт.


[http://www.fsdeveloper.com/wiki/index.php?title=DXT_compression_explained Технические детали о различных форматах сжатия DXT.]
==== Дополнительные форматы в Strata Source ====
{{strata|4}} поддерживает дополнительные форматы изображения в VTF v7.6, которые обеспечивают более лучшее сжатие, уменьшая требования к GPU VRAM и, в то же время, сохраняя более лучшее качество изображение, чем DXT1 или DXT5.
* '''BC7'''
: 8 бит на пиксель.
: Используйте этот формат вместо DXT5 для текстур с альфа-каналом, так как он использует такое же количество видеопамяти.
: Используйте этот формат вместо BGR888 или BGR565 когда нужно больше деталей, чем DXT1 может предоставить.
* '''ATI1N''' (также известен как BC4)
: 4 бит на пиксель.
: Используйте этот формат вместо I8 или DXT1 для чёрно-белых текстур. Использует то же количество видеопамяти, что и DXT1.
* '''BC6H'''
: 8 бит на пиксель.
: Используйте этот формат для {{L|HDR}} текстур. Он на четверть меньше, чем [[#HDR_compression|compressed HDR]] в видеопамяти, при этом качество аналогичное или даже лучше.
{{note|Все ветви движка Source, начиная с {{orangebox|4}} неофициально поддерживают ATI1N и ATI2N. Но несмотря на это, нет никакой гарантии, что они будут работать корректно; ATI1N интерпретируется как красный, а не как серый, и ось Z карт нормалей ATI2 может быть неправильно сгенерирована в зависимости от GPU пользователя при использовании ванильных шейдеров{{cn|в ванильных шейдерах есть код, специально предназначенный для работы с картами нормалей ATI2N}}.}}


== Флаги изображений ==
==Признаки текстур==


{{tip|Большинство настроек шейдера конфигурируются с помощью [[:Category:List of Shader Parameters|параметров материала]], не с помощью текстурных флагов.}}
{{tip|Большинство настроек оттенения настраиваются с помощью {{LCategory|Shader parameters|материальных параметров оттенения}}, вместо признаков текстур.}}


VTF может содержать следующие флаги (версия 7.5):
VTF может содержать следующие признаки (версия 7.5):


{| class=standard-table
{| class=standard-table
| '''Флаг''' || '''Значение''' || '''Комментарий'''
| '''Признак''' || '''Значение''' || '''Комментарий'''
|-
|-
| Point Sampling || 0x0001 || Низкое качество, фильтрация текстур "пиксельная графика".
| Point Sampling || 0x0001 || Отключает Билинейную фильтрацию ради фильтрации текстуры в стиле "пиксель-арт". {{note|Портит детализацию, смотрите {{L|$pointsamplemagfilter}}, если используете {{csgo|4|nt=1}} или производные.}}
|-
|-
| Trilinear Sampling || 0x0002 || Фильтрация текстур среднего качества.
| Trilinear Sampling || 0x0002 || Всегда использовать [[Wikipedia:Trilinear filtering|Трилинейную фильтрацию]], даже когда в настройках видео выбрана Билинейная фильтрация.
|-
|-
| Clamp S || 0x0004 || Координаты зажима S.
| Clamp S || 0x0004 || Фиксации S координаты. Предотвращает горизонтальную обёртку текстуры.
|-
|-
| Clamp T || 0x0008 || Координаты зажима T.
| Clamp T || 0x0008 || Фиксация T координаты. Предотвращает вертикальную обёртку текстуры.
|-
|-
| Anisotropic Sampling || 0x0010 || Качественная фильтрация текстур.
| Anisotropic Sampling || 0x0010 || Всегда использовать [[Wikipedia:Trilinear filtering|Анизотропную фильтрацию]], даже когда в настройках видео выбрана Билинейная или Трилинейная фильтрация.
|-
|-
| Hint DXT5 || 0x0020 || Используется в [[skybox]]es. Убедитесь, что края бесшовные.
| Hint DXT5 || 0x0020 || Используется для {{L|skybox|небосвода}}. Убедитесь, что края бесшовные.{{how}}
|-
|-
| PWL Corrected || 0x0040 || Цель неизвестна.
| PWL Corrected
| rowspan=2 | 0x0040 || Назначение неизвестно.
|-
|-
| SRGB || n/a || Использует пространство RGB. Полезно для высоких гамм. Не рекомендуется в версии 7.5.
| SRGB || Использует [[Wikipedia:sRGB|цветовое пространство sRGB]]. Полезно для высоких гамм. Устарело в версии 7.5.
|-
|-
| No Compress || 0x0040 || Сжатие DXT не используется. Устаревшее
| No Compress || 0x0040 || Не использует сжатие DXT (внутренний для vtex)
|-
|-
| Normal Map || 0x0080 || Текстура - это карта нормалей.
| Normal Map || 0x0080 || Текстура является картой нормалей.
|-
|-
| No Mipmaps || 0x0100 || Отрисовывать только самые большие MIP-карты. (Не удаляет существующие MIP-карты, а просто отключает их.)
| No Mipmaps || 0x0100 || Отрисовывает только самую большую MIP-карту детализации. (Не удаляет существующие MIP-карты, а просто отключает их.) {{note|Не рекомендуется, хотя часто используется в элементах [[HUD|экранного интерфейса пользователя]]. Желательно использовать признаки фиксации.}}
|-
|-
| No Level Of Detail || 0x0200  || Не зависит от настроек разрешения текстуры.
| No Level Of Detail || 0x0200  || Не зависит от настроек разрешения текстуры. {{tip|Настоятельно рекомендуется для элементов {{L|HUD|экранного интерфейса пользователя}}.}}
|-
|-
| No Minimum Mipmap || 0x0400 || Если установлено, загружайте MIP-карты размером менее 32x32 пикселей.
| No Minimum Mipmap || 0x0400 || Если установлено, загружает MIP-карты размером менее 32&times;32 пикселей. {{warning|Требуется на Env Maps для корректной работы пользовательских шейдеров, например PBR.}} {{tip|Используйте для зашумлённых {{L|diffuse|диффузных}}/{{L|albedo|альбедо}}, {{L|normal map}} и {{L|$detail|detail}} текстур с целью уменьшения бликов при просмотре на расстоянии.}}
|-
|-
| Procedural || 0x0800 || Текстура - это процедурная текстура (код может ее изменять).
| Procedural || 0x0800 || Текстура является процедурной текстурой (код может это изменять).
|-
|-
| One Bit Alpha || 0x1000 || Используется однобитовый альфа-канал.
| One Bit Alpha || 0x1000 || Использует однобитовый альфа-канал.
|-
|-
| Eight Bit Alpha || 0x2000 || Используется восьмибитный альфа-канал.
| Eight Bit Alpha || 0x2000 || Используе восьмибитный альфа-канал. {{note|Фактически используется всеми форматами с небинарным альфа-каналом (К примеру: BGRA4444, BGRA1616161616F)}}
|-
|-
| Environment Map || 0x4000 || Текстура - это карта окружения.
| Environment Map || 0x4000 || Текстура является картой окружения.
|-
|-
| Render Target || 0x8000 || Текстура - это цель рендеринга.
| Render Target || 0x8000 || Текстура предназначена для отображения.
|-
|-
| Depth Render Target || 0x10000 || Текстура - это цель рендеринга глубины.
| Depth Render Target || 0x10000 || Текстура предназначена для отображения глубины.
|-
|-
| No Debug Override  || 0x20000 ||
| No Debug Override  || 0x20000 || {{todo|Добавить описание}}
|-
|-
| Single Copy || 0x40000 ||
| Single Copy || 0x40000 || {{todo|Добавить описание}}
|-
|-
| Pre SRGB  || 0x80000 || Исправление SRGB уже применено
| Pre SRGB  || 0x80000 || Исправление SRGB уже применено
|-
|-
| One Over Mipmap Level In Alpha  || 0x80000 || Заполните альфа-канал значением 1 / Mipmap Level. Устарело (для внутреннего использования VTEX?)
| One Over Mipmap Level In Alpha  || 0x80000 || Заполняет альфа-канал значением 1 / Mipmap Level. Устарело (для внутреннего использования VTEX?)
|-
|-
| Premultiply Color By One Over Mipmap Level  || 0x100000 || (Для внутреннего использования VTEX?)
| Premultiply Color By One Over Mipmap Level  || 0x100000 || (Для внутреннего использования VTEX?)
|-
|-
| Normal To DuDv  || 0x200000 || Текстура - это карта DuDv. (Для внутреннего использования VTEX?)
| Normal To DuDv  || 0x200000 || Текстура является картой DuDv. (Для внутреннего использования VTEX?)
|-
|-
| Alpha Test Mipmap Generation  || 0x400000 || (Для внутреннего использования VTEX?)
| Alpha Test Mipmap Generation  || 0x400000 || (Для внутреннего использования VTEX)
|-
|-
| No Depth Buffer  || 0x800000 || Не [https://ru.wikipedia.org/wiki/Z-%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F Z-буферизация] для обработки видео обычно расстояние визуализации.
| No Depth Buffer  || 0x800000 || Не [https://ru.wikipedia.org/wiki/Z-%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F|Z-буферизация] для обработки видео обычно расстояние визуализации.
 
|-
|-
| Nice Filtered  || 0x1000000 || использование [[NICE filtering|NICE фильтрация]] для создания MIP-карт. (Для внутреннего использования VTEX?)
| Nice Filtered  || 0x1000000 || использование {{L|NICE filtering|NICE фильтрация}} для создания MIP-карт. (Для внутреннего использования VTEX?)
|-
|-
| Clamp U || 0x2000000 || Координаты зажима U (для объемных текстур).
| Clamp U || 0x2000000 || Фиксация U координаты (для текстур объёмности).
|-
|-
| Vertex Texture || 0x4000000 || Может использоваться как вершинная текстура
| Vertex Texture || 0x4000000 || Может использоваться как вершинная текстура
|-
|-
| SSBump  ||0x8000000 ||Текстура - это [[$ssbump|SSBump]]. (''SSB'')
| SSBump  ||0x8000000 || Текстура является {{L|$ssbump|SSBump}}. (''SSB'')
|-
|-
| Border  ||0x20000000 || Привязка к цвету границы по всем координатам текстуры
| Border  ||0x20000000 || Привязка к цвету границы по всем координатам текстуры
|}
|}


== Формат файла ==
==Формат VTF-файла==
Описание формата VTF.
Описание формата VTF.


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


{| class=standard-table  
{| class=standard-table  
Line 205: Line 292:
|-
|-
| style="vertical-align:top;" |
| style="vertical-align:top;" |
# VTF заголовок
# Заголовок
# VTF Данные изображения с низким разрешением
# Данные изображения малой размерности
# Для каждого Mipmap (от наименьшего к наибольшему)
# Каждый Mipmap (последовательно от меньшего к большему)
#* Для каждого кадра (от первого до последнего)
#* Каждый кадр (от первого до последнего)
#** Для каждого лица (от первого до последнего)
#** Каждая сторона (от первой до последней)
#*** Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
#*** Каждый Z-срез (от минимального до максимального; зависит от Mipmap)
#**** VTF Данные изображения высокого разрешения
#**** Данные изображения большой размерности
| style="vertical-align:top;" |
| style="vertical-align:top;" |
# VTF заголовок
# Заголовок
# Записи ресурсов
# Записи ресурсов
#* VTF Данные изображения с низким разрешением
#* Данные изображения малой размерности
#* [[Valve_Texture_Format|Другие данные о ресурсах]]
#* {{↑|Ресурсы|Данные прочих ресурсов}}
#* Для каждого Mipmap (от наименьшего к наибольшему)
#* Каждый Mipmap (последовательно от меньшего к большему)
#** Для каждого кадра (от первого до последнего)
#** Каждый кадр (от первого до последнего)
#*** Для каждого лица (от первого до последнего)
#*** Каждая сторона (от первой до последней)
#**** Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
#**** Каждый Z-срез (от минимального до максимального; зависит от Mipmap)
#***** VTF Данные изображения высокого разрешения
#***** Данные изображения большой размерности
|}
|}


=== Перечисления ===
===Перечисления===
==== IMAGE_FORMAT ====
<source lang="cpp">
<source lang="cpp">
enum
enum
Line 258: Line 346:
};
};
</source>
</source>
 
==== TEXTUREFLAGS ====
<source lang="cpp">
<source lang="cpp">
enum
enum CompiledVtfFlags
{
{
// Flags from the *.txt config file
// Flags from the *.txt config file
Line 276: Line 364:
TEXTUREFLAGS_PROCEDURAL = 0x00000800,
TEXTUREFLAGS_PROCEDURAL = 0x00000800,


// These are automatically generated by vtex from the texture data.
// Они автоматически генерируются vtex из данных текстуры.
TEXTUREFLAGS_ONEBITALPHA = 0x00001000,
TEXTUREFLAGS_ONEBITALPHA = 0x00001000,
TEXTUREFLAGS_EIGHTBITALPHA = 0x00002000,
TEXTUREFLAGS_EIGHTBITALPHA = 0x00002000,


// Newer flags from the *.txt config file
// Новые флаги из файла конфигурации *.txt
TEXTUREFLAGS_ENVMAP = 0x00004000,
TEXTUREFLAGS_ENVMAP = 0x00004000,
TEXTUREFLAGS_RENDERTARGET = 0x00008000,
TEXTUREFLAGS_RENDERTARGET = 0x00008000,
Line 309: Line 397:
</source>
</source>


=== Заголовок формата ===
===Заголовок===
<source lang="cpp">
<source lang="cpp">
typedef struct tagVTFHEADER
typedef struct tagVTFHEADER
{
{
char signature[4]; // File signature ("VTF\0"). (or as little-endian integer, 0x00465456)
char signature[4]; // Заголовок формата файла («VTF\). (или как целое число с младшим порядком, 0x00465456)
unsigned int version[2]; // version[0].version[1] (currently 7.2).
unsigned int version[2]; // version[0].version[1] (в настоящее время 7.2).
unsigned int headerSize; // Size of the header struct  (16 byte aligned; currently 80 bytes) + size of the resources dictionary (7.3+).
unsigned int headerSize; // Размер структуры заголовка (выравнивание по 16 байт; в настоящее время 80 байт) + размер словаря ресурсов (7.3+).
unsigned short width; // Width of the largest mipmap in pixels. Must be a power of 2.
unsigned short width; // Ширина набольшего mipmap в пикселях. Должна быть равна степени 2-ки.
unsigned short height; // Height of the largest mipmap in pixels. Must be a power of 2.
unsigned short height; // Высота набольшего mipmap в пикселях. Должна быть равна степени 2-ки.
unsigned int flags; // VTF flags.
unsigned int flags; // Признаки VTF.
unsigned short frames; // Number of frames, if animated (1 for no animation).
unsigned short frames; // Количество кадров в анимации (1 если анимация отсутствует).
unsigned short firstFrame; // First frame in animation (0 based).
unsigned short firstFrame; // Первый кадр в анимации (основное значение 0). Должно быть равно -1 для карт окружения в версии меньше 7.5, что означает наличие 7-ми, а не 6-ти сторон.
unsigned char padding0[4]; // reflectivity padding (16 byte alignment).
unsigned char padding0[4]; // Отражающая подложка (выравнивание по 16 байтам).
float reflectivity[3]; // reflectivity vector.
float reflectivity[3]; // Вектор отражения.
unsigned char padding1[4]; // reflectivity padding (8 byte packing).
unsigned char padding1[4]; // Отражение (упаковка 8-ми байтная).
float bumpmapScale; // Bumpmap scale.
float bumpmapScale; // Масштаб бампмапа.
unsigned int highResImageFormat; // High resolution image format.
unsigned int highResImageFormat; // Формат изображений высокого разрешения.
unsigned char mipmapCount; // Number of mipmaps.
unsigned char mipmapCount; // Количество мипмапов.
unsigned int lowResImageFormat; // Low resolution image format (always DXT1).
unsigned int lowResImageFormat; // Формат изображения малой размерности (обычно DXT1).
unsigned char lowResImageWidth; // Low resolution image width.
unsigned char lowResImageWidth; // Ширина изображения малой размерности.
unsigned char lowResImageHeight; // Low resolution image height.
unsigned char lowResImageHeight; // Высота изображения малой размерности.


// 7.2+
// 7.2+
unsigned short depth; // Depth of the largest mipmap in pixels.
unsigned short depth; // Глубина самого большого mipmap в пикселях.
// Must be a power of 2. Can be 0 or 1 for a 2D texture (v7.2 only).
// Должна быть равна 2. Может быть 0 или 1 для 2D-текстуры (только в v7.2).


// 7.3+
// 7.3+
unsigned char padding2[3]; // depth padding (4 byte alignment).
unsigned char padding2[3]; // Глубины (выравнивание по 4 байтам).
unsigned int numResources; // Number of resources this vtf has
unsigned int numResources; // Количество ресурсов, которыми располагает этот vtf
} VTFHEADER;
} VTFHEADER;
</source>
</source>


=== VTF данные изображения в низком разрешении ===
===Записи ресурсов===
Плотно упакованные данные изображения с низким разрешением в формате, описанном в заголовке. Данные изображения с низким разрешением всегда хранятся в формате сжатого изображения DXT1. Его размеры соответствуют размерам самого большого MIP-карты с шириной или высотой, не превышающей 16 пикселей. то есть для VTF 256x256 пикселей: 16x16, для VTF 256x64 пикселей: 16x4, для VTF 1x32 пикселей: 1x16, для VTF 4x4 пикселей: 4x4.
<source lang="cpp">
struct ResourceEntryInfo
{
unsigned char tag[3]; // Трехбайтовая «метка», идентифицирующая, что это за ресурс.
unsigned char flags; // Флаги входа в ресурс. Единственный известный флаг - 0x2, который указывает, что этому ресурсу не соответствует ни один блок данных.
unsigned int offset; // Смещение данных этого ресурса в файле.  
};
</source>


=== VTF данные изображения в высоком разрешении ===
;Теги
Tхорошо упакованные перемежающиеся данные изображения высокого разрешения в формате, описанном в заголовке. Распространенные форматы изображений включают DXT1, DXT5, BGR888, BGRA8888 и UV88. Все размеры должны быть [http://en.wikipedia.org/wiki/Power_of_two power of two].
:<code>{ '\x01', '\0', '\0' }</code> - Данные изображения малой размерности (миниатюры).
:<code>{ '\x30', '\0', '\0' }</code> - Данные изображения большой размерности.
:<code>{ '\x10', '\0', '\0' }</code> - Данные коллажа анимации частиц.
:<code>{ 'C', 'R', 'C' }</code> - Данные [[w:Cyclic redundancy check|контроля целостности]].
:<code>{ 'L', 'O', 'D' }</code> - Информация об управлении LOD текстуры.
:<code>{ 'T', 'S', 'O' }</code> - Определенные игрой «расширенные» признаки VTF.
:<code>{ 'K', 'V', 'D' }</code> - Произвольные ключи-параметры данных. Используется только сторонними иснтрументами.


=== История версий ===
=== Данные изображения малой размерности ===
'''v7.5'''
Плотно упакованные данные изображения с низким разрешением в формате, описанном в заголовке. Данные изображения с низким разрешением всегда хранятся в формате сжатого изображения DXT1. Его размеры соответствуют размерам самого большого MIP-карты с шириной или высотой, не превышающей 16 пикселей. то есть для VTF 256&times;256 пикселей: 16&times;16, для VTF 256&times;64 пикселей: 16&times;4, для VTF 1x32 пикселей: 1&times;16, для VTF 4&times;4 пикселей: 4&times;4.
* Выпущено 19 июля 2010 г. как часть [[Alien Swarm]]
 
=== Данные изображения большой размерности ===
Хорошо упакованные перемежающиеся данные изображения высокого разрешения в формате, описанном в заголовке. Распространенные {{↑|Форматы данных изображений|форматы данных}} включают DXT1, DXT5, BGR888, BGRA8888 и UV88. Все размеры должны быть [http://en.wikipedia.org/wiki/Power_of_two power of two].
 
== История версий ==
=== 7.6 ===
Неофициальная версия VTF, поддерживаемая {{strata|4}}. Не совместима ни с одной из игр Valve, ни с другими модами.
* Добавляет поддержку [[Wikipedia:Deflate|deflate]] для сжатия данных изображений, что позволяет уменьшить размер хранилища.
* Исправлена поддержка ATI1N и ATI2N, а также добавлена поддержка BC6H и BC7.
 
=== 7.5 ===
* Выпущено 19 июля 2010 г. как часть {{L|Alien Swarm}}
* Побитовый эквивалент v7.4.
* Побитовый эквивалент v7.4.
* Переопределяет и изменяет два флага текстуры.
* Переопределяет и изменяет два флага текстуры.
Line 355: Line 467:
* Большинство изменений внутри процесса создания VTF с помощью VTEX, например Форматы MipMap fading, Alpha decay и XBox360.
* Большинство изменений внутри процесса создания VTF с помощью VTEX, например Форматы MipMap fading, Alpha decay и XBox360.


'''v7.4'''
=== 7.4 ===
* Несовместим с {{src06|4}} и ранее.
* Выпущена 10 октября 2007 г. как часть [[wikipedia:The_Orange_Box|The Orange Box]].
* Выпущена 10 октября 2007 г. как часть [[wikipedia:The_Orange_Box|The Orange Box]].
* Побитовый эквивалент версии 7.3.
* Побитовый эквивалент версии 7.3.
* Решает проблемы, связанные с тем, как выполняется гамма-коррекция текстур для ТВ-вывода на XBOX 360 в сочетании с поиском памяти выгружаемого пула ОС.
* Решает проблемы, связанные с тем, как выполняется гамма-коррекция текстур для ТВ-вывода на XBOX 360 в сочетании с поиском памяти выгружаемого пула ОС.


'''v7.3'''
=== 7.3 ===
* Несовместим с {{src06|4}} и ранее.
* Добавлена ​​расширяемая структура, ориентированная на ресурсы.
* Добавлена ​​расширяемая структура, ориентированная на ресурсы.
* Добавлены ресурсы CRC, управления уровнем детализации текстуры и листа, а также ресурсы изображений с обратной совместимостью и изображений с низким разрешением.
* Добавлены контроль целостности, управление уровнем детализации текстуры и коллажные ресурсы, а также ресурсы обратно-совместимых изображений и изображений малой размерности.
* Добавлено несколько форматов трафаретов глубины, зависящих от поставщика (для внутреннего использования в движке), а также форматы карт нормалей и линейные несжатые форматы.
* Добавлено несколько форматов трафаретов глубины, зависящих от поставщика (для внутреннего использования в движке), а также форматы карт нормалей и линейные несжатые форматы.
* Выпущена 18 сентября 2007 г. как часть [[Team Fortress 2:ru|Team Fortress 2]] бета.
* Выпущена 18 сентября 2007 г. как часть {{tf2|4}} бета.


'''v7.2'''
=== 7.2 ===
* Добавлена ​​поддержка объемных текстур.
* Добавлена ​​поддержка текстур объёмности.
* Выпущен 23 сентября 2005 г. как [[Steam]] обновление двигателя.
* Выпущен 23 сентября 2005 г. как {{L|Steam}} обновление движка и в поздних версиях {{src04|4}}.


'''v7.1'''
=== 7.1 ===
* Добавлена ​​поддержка карты сфер для карт среды. (Это было предназначено для поддержки DirectX 6, которая позже была сокращена.)
* Добавлена ​​поддержка карты сфер для карт среды. (Предназначалась для поддержки DirectX 6, которая позже была вырезана.)


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


=== Реализация ===
== Сторонние реализации ==
Пример независимой от Steam реализации формата файла изображения VTF можно найти в библиотеке LGPL C / C ++. [[VTFLib]].
* Пример независимой от Steam реализации VTF-формата файла изображения можно найти в библиотеке LGPL C/C++. {{L|VTFLib}}.
 
* [https://file.io/fqh8bhLzX1rD cl-valve-texture-format] — Чтение и запись VTF на языке Common Lisp.
== Инструменты ==
 
; Просмотр
: [[VTF Shell Extensions|Windows thumbnail handler]] (Windows XP+)
: [[VTF Explorer]] (Windows; можно исследовать внутри GCFs)
: [https://forre.st/vtf gdk-pixbuf-vtf] (Gnome\Nautilus\Eog)
: [https://www.irfanview.com/plugins.htm IrfanView plugin]
: [https://www.filedropper.com/imageviewer002 Программа просмотра изображений Leadworks (supports VTF)] {{Dead_link}}
; Редактирование
: [[VTFEdit]] (GUI) и [[VTFCmd]] ([[command line]])
: [[Photoshop VTF Plugin|Photoshop Plug-in]] (6 и вверх)
: [https://code.google.com/p/gimp-vtf/ GIMP Plug-in]
: [https://nemesis.thewavelength.net/index.php?p=50 Paint.NET Plug-in]
: [[3DSMax VTF plugin|3DSMax plugin]] (версии с 6 по 2009)
: [http://www.riintouge.com/VIDE/ VIDE]
; Преобразование между версиями
: [https://github.com/geotavros/vtf75tovtf74/releases 7.5 to 7.4 Batch Converter]


== См. также ==
==Смотреть также==
* {{L|Creating a Material|Создание материала}}
* {{L|Material|Материал}}
* {{L|VMT}}
* {{L|WAD}}, {{L|SPR}}, и {{L|BMP}}/{{L|TGA}} ({{gldsrc|4}} эквиваленты)
* {{L|VTEX (Source 2)|VTEX}} ({{src2|4}} эквивалент)


* [[Creating a Material:ru|Создание материала]]
{{ACategory|File formats}}
* [[Material:ru|Valve Material Type]]
{{ACategory|Image formats}}
{{ACategory|Material System}}

Latest revision as of 06:53, 25 May 2025

English (en)Français (fr)Русский (ru)Translate (Translate)

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

Tip.pngСовет:Возможно, в некоторой степени, восстановить VTF-файлы сжатые в формате DXT (т.е. убрать артефакты сжатия) используя ИИ(en).

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

Неполная

This article or section is a stub. You can help by expanding it.

Warning.pngПредупреждение:Совместимость нетривиальна. Смотрите подробности в истории версий ↓.
Note.pngПримечание:Все файлы блочного сжатия VTF (например использующие DXT сжатие) должны обладать размерами кратными степени четвёрки. Хотя размеры VTF файла обычно ограничены до степени двойки, некоторые сторонние инструменты могут импортировать и экспортировать текстуры вне этого ограничения. При использовании таких текстур будьте готовы к проблемам с фильтрацией (это можно "исправить" установкой признака "point sampling" для текстуры).

Кроме того, такие VTF-файлы неправильно считываются Hammer Hammer (и возможно игрой), принимая за следующую по величине степень двойки.

Уточнить: Текстуры детализации размером 4×4 по-прежнему хранятся в виде блоков размером 4×4, но используется только часть из них.
Warning.pngВозможна путаница:В отличии от форматов текстур, таких как DDS(en), которые хранят текстуры детализациии от большей к меньшей, VTF-файлы хранят текстуры детализации от меньшей к большей.
Icon-Important.pngВажно:Ветви платформы Source 2013 Source 2013 (нет в Garry's Mod) не позволяют загрузить VTF-файлы размером более 32 МиБ (33'554'432 байт). Это означает, что применение текстур размером 4096×4096 ограничено определёнными форматами данных ↓, в основном DXT1, DXT5, и I8.

Инструменты

Неполная

This article or section is a stub. You can help by expanding it.

VTF файлы могут быть созданы из изображений в формате TGA(en) или PFM(en) с помощью Source SDK Tool Vtex(en). Следующие сторонние инструменты также могут быть использованы для создания, просмотра или редактирования файлов VTF.

Просмотр

Редактирование

Преобразование между версиями

Файлы

Both textures and materials are stored in subfolders of 🖿<mod_dir>/materials/, or 🖿pak01_dir.vpk/materials/.

Note.pngПримечание:In older Source games like Team Fortress 2, Half-Life 2 and many Source 2013 games, as well as some third-party games/mods, Valve and/or other developers separated the textures and materials into different VPKs. Typically, textures are located in 🖿<mod_dir>/<game>_textures.vpk while materials are in 🖿<mod_dir>/<game>_misc.vpk. Most Source 2009 games and earlier (including Source SDK Base 2006, 2007) stores textures inside 🖿vpks/depot_<appid>_dir.vpk.

Возможности хранения данных

Формат изображения VTF может содержать либо обычную текстуру, типа environment map, или текстуру объёмности. Каждая из них может содержать несколько кадров.

  • Поддерживаются текстуры размером до 4096×4096 пикселей.
Note.pngПримечание:При соблюдении нескольких условий можно создавать текстуры размером более 4096 пикселей. Результирующий VTF-файл должен быть меньше 32 МиБ (33'554'432 байт)(нет в Counter-Strike: Global OffensiveGarry's Mod), используемые размерность должна быть равна степени двойки и не превышать 65'536 пикселей в любом измерении, а общее количество пикселей изображения должно быть меньше 16,7 Мпикс: Например, подойдет текстура размером 512×32'768, потому что 512, умноженное на 32'768, равно 16,7 мегапикселям.
  • Карта окружения представляет собой шестисторонюю кубическую карту, если версия старее 7.5 и первый кадр в заголовке равен -1, тогда она будет семисторонней.
  • Текстура объёмности - это текстура "с глубиной", где каждый кадр представляет собой "слой", который накладывается "в глубину". Таким образом, текстура объёмности размером 16×16×16 имеет 16 отдельных текстур размером 16×16, наложенных друг на друга для придания глубины. Этот формат используется внутри Source, и его не нужно создавать самостоятельно.
  • Для каждого кадра и стороны файл VTF содержит как основные данные исходного изображения (карту пикселей), так и набор текстур детализации, используемых для отображения текстуры на различных дистанциях. Для форматов с блочным сжатием, таких как DXT1, размеры исходного изображения должны быть кратны 4, поскольку для блочного сжатия используются блоки размером 4×4. Хотя исходное изображение может быть и прямоугольным, квадратные mipmaps-текстуры детализации упаковываются в VTF более эффективно.
  • Стартовый кадр (для анимаций)
  • Масштабирование Bump map текстуры рельефа
  • Значение коэффициента светоотражения для VRAD
  • VTF очень малой размерности для выбора цветности платформой.

Ресурсы

В VTF версии 7.3 появилась расширяемая система ресурсов. Вы можете хранить что угодно, но движок Source распознает только следующие данные:

  • Значение контроля целостности для обнаружения "испорченных" данных.
  • An U/V LOD control. This is the highest mipmap which should be loaded when the game's Texture Detail setting is "High" (mat_picmip 0). An U LOD Control value of 11 will select the mipmap which is 2048 pixels (211) across at the "High" texture setting, and 4096 pixels across at the "Very High" (mat_picmip -1) texture setting.
    Note.pngПримечание: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. Otherwise, the user would need to manually set theirmat_picmipto a lower value to see the full-res texture, like in Team Fortress 2, which requiressv_cheatsin most other titles.
  • Данные коллажа анимации частиц(en).
  • Расширенные настройки текстуры. Это коллекция из 32 признаков, ни один из которых не используется в Valve. В отличие от встроенных признаков VTF, которые могут быть определены для каждой игры отдельно.

Форматы данных изображений

VTF может хранить в себе данные в различных форматах. Некоторые форматы предназначены для движка, некоторые только как промежуточные форматы для преобразований. Несжатые форматы не теряют данных, а сжатые (DXT) - теряют.

Таблица форматов данных изображений

Формат К З С Ярк Пал(en) Прозр(en) Разм Сжат Под Комментарии
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 Любой Да Сжатая 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.
Не поддерживается должным образом для всех веток платформы; предпочтительнее использовать BGR565, который работает всегда.
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 Нет Да
Note.pngПримечание:Определённые 16-битные (ex: BGR565, BGRA4444) и 24-битные (ex: BGR888, RGB888) форматы are converted to 32-битные (BGRA8888 in DX9, RGBA8888 in DX11) прежде чем загружается на графический процессор; это означает, что их главная цель для сохранения размеров установки.
Tip.pngСовет:Если вы создаете текстуру для Template:Пласта, предпочитают использовать сжатые в Deflate VTF в RGBA8888 (или BC7) вместо использования 16- или 24-битных форматов, поскольку Deflate обеспечивает лучшую экономию размера файлов без потери качества; необходимость одновременно распаковывать текстуру и конвертировать ее в 32-битный формат приведет к неоправданному увеличению времени загрузки.

Сжатие HDR

HDR текстуры могут храниться в сжатой форме используя любой формат с небинарным альфа-каналом (BGRA8888 является «очень предпочтительным» и используется в Vtex(en), но DXT5 или BGRA4444 также работают).

Эта формула показывает как преобразовать эти цвета в целочисленный HDR (integer):

RGB = RGB * (A * 16)

и в HDR с плавающей запятой (floating point):

RGB = (RGB * (A * 16)) / 262144

Vtex(en) может конвертировать 32 бит на канал Wikipedia icon PFM файлы в этот формат, а no_vtf может конвертировать сжатые HDR VTF в обычные 16 бит на канал Wikipedia icon EXR файлы.

Note.pngПримечание:Интерпретация данных как HDR выполняется в шейдере, и в настоящее время поддерживается только Sky shader(en). Шейдер неба также имеет альтернативный «метод сжатия HDR B», который использует несколько текстур (с разной экспозицией? [подтвердить]) для создания HDR-изображения.
Кубмапы HDR всегда хранятся как несжатые RGBA16161616F, за исключением Strata Source Strata Source, где они могут храниться как BC6H.

Выбор формата изображений

Сравнение влияния DXT сжатия на различные типы изображений (нажмите, чтобы посмотреть)

Не смотря на то, что VTF предоставляет поддержку широкого ряда форматов изображений, есть только несколько форматов, которые вы, скорее всего, будете использовать. Эти форматы и критерии выбора описаны ниже:

  • BGR888
24 бит на пиксель.
Используйте для текстур без альфа-канала и с качественным градиентом (например, карт нормалей и световых ореолов (light halo)).
  • BGR565
16 бит на пиксель.
Используйте этот формат вместо BGR888, чтобы сохранить до 33% места, с зачастую несущественной потерей качества (особенно для basetextures(en)).
Рекомендуется для текстур низкого разрешения, где блочное сжатие DXT будет заметным (например, порты с GoldSrc).
Note.pngПримечание:BGR888 все еще может быть востребован для текстур с качественным градиентом (например, LDR-скайбоксы или красные светящиеся текстуры), а также для повышения точности карт нормалей (BGR565 не способен правильно отобразить «плоскую» карту нормалей).
  • BGRA8888
32 бит на пиксель.
Используйте этот формат для текстур с альфа-каналом и с качественным градиентом (например, карт нормалей и световых ореолов). Он также может быть использован, чтобы получать высококачественные текстуры.
Рекомендуется для текстур низкого разрешения, для которых блочное сжатие DXT будет заметным (например, порты с GoldSrc).
  • DXT1 (также известен как BC1)
4 бит на пиксель.
Используйте этот формат для обычных текстур без альфа-канала.
Note.pngПримечание:DXT1 поддерживает 1 бит точности альфа. Однако все области с 0 альфа будут полностью черными. Поэтому эту функциональность лучше всего использовать для текстур, использующих $alphatest(en) (хотя иногда DXT5 может обрабатывать мипмапинг таких текстур более эффективно, и его следует использовать при использовании $allowalphatocoverage(en)).
  • DXT3 (также известен как BC2)
8 бит на пиксель.
DXT5(en) почти всегда должен быть использован вместо DXT3, но DXT3 оптимален (не обязательно лучше) для текстур с альфа-каналом и резкими градиентами, например, при использовании $allowalphatocoverage(en); см. File:DXTn alpha comparison.png.
DXT3 занимает тот же размер файла, что и DXT5.
Icon-Bug.pngБаг:VRAD(en) не может рассчитать текстурные тени для текстур, использующих сжатие DXT3. Вместо этого используйте DXT5 или BGRA8888 для текстур, бросающих тень.
  • DXT5(en) (также известен как BC3)
8 бит на пиксель.
Используйте этот формат для обычных текстур с альфа-каналом.
  • I8
8 бит на пиксель.
Используйте этот формат для черно-белых текстур без альфа-канала и с качественным градиентом (например, световые ореолы).
  • IA88
16 бит на пиксель.
Используйте этот формат для черно-белых текстур с альфа каналом и качественным градиентом (например, дым или световые ореолы).
  • A8
8 бит на пиксель.
Используйте этот формат в связи с $color, для одноцветных текстур с альфа-каналом, such as GoldSrc-style decals(en).
  • RGBA16161616F
64 бит на пиксель.
Используйте этот формат для HDR(en) текстур.
Tip.pngСовет:HDR небосводы(en) также могут использовать сжатый формат используя BGRA8888, обычно обеспечивая приемлемое качество, при этом уменьшая размер файла наполовину. Сжатый формат рекомендуется для пользовательских небосводов, упакованные(en) в многопользовательских картах.
  • UV88
16 бит на пиксель.
Используйте этот формат для DuDv(en) карт.

Найти технические детали о различных форматах сжатия DXT здесь и здесь.

Дополнительные форматы в Strata Source

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(en) текстур. Он на четверть меньше, чем compressed HDR в видеопамяти, при этом качество аналогичное или даже лучше.
Note.pngПримечание:Все ветви движка Source, начиная с Orange Box branch Orange Box branch неофициально поддерживают ATI1N и ATI2N. Но несмотря на это, нет никакой гарантии, что они будут работать корректно; ATI1N интерпретируется как красный, а не как серый, и ось Z карт нормалей ATI2 может быть неправильно сгенерирована в зависимости от GPU пользователя при использовании ванильных шейдеров[citation needed].

Признаки текстур

Tip.pngСовет:Большинство настроек оттенения настраиваются с помощью материальных параметров оттенения(en), вместо признаков текстур.

VTF может содержать следующие признаки (версия 7.5):

Признак Значение Комментарий
Point Sampling 0x0001 Отключает Билинейную фильтрацию ради фильтрации текстуры в стиле "пиксель-арт".
Note.pngПримечание:Портит детализацию, смотрите $pointsamplemagfilter(en), если используете Counter-Strike: Global Offensive CS:GO или производные.
Trilinear Sampling 0x0002 Всегда использовать Трилинейную фильтрацию, даже когда в настройках видео выбрана Билинейная фильтрация.
Clamp S 0x0004 Фиксации S координаты. Предотвращает горизонтальную обёртку текстуры.
Clamp T 0x0008 Фиксация T координаты. Предотвращает вертикальную обёртку текстуры.
Anisotropic Sampling 0x0010 Всегда использовать Анизотропную фильтрацию, даже когда в настройках видео выбрана Билинейная или Трилинейная фильтрация.
Hint DXT5 0x0020 Используется для небосвода(en). Убедитесь, что края бесшовные.[Как?]
PWL Corrected 0x0040 Назначение неизвестно.
SRGB Использует цветовое пространство sRGB. Полезно для высоких гамм. Устарело в версии 7.5.
No Compress 0x0040 Не использует сжатие DXT (внутренний для vtex)
Normal Map 0x0080 Текстура является картой нормалей.
No Mipmaps 0x0100 Отрисовывает только самую большую MIP-карту детализации. (Не удаляет существующие MIP-карты, а просто отключает их.)
Note.pngПримечание:Не рекомендуется, хотя часто используется в элементах экранного интерфейса пользователя. Желательно использовать признаки фиксации.
No Level Of Detail 0x0200 Не зависит от настроек разрешения текстуры.
Tip.pngСовет:Настоятельно рекомендуется для элементов экранного интерфейса пользователя(en).
No Minimum Mipmap 0x0400 Если установлено, загружает MIP-карты размером менее 32×32 пикселей.
Warning.pngПредупреждение:Требуется на Env Maps для корректной работы пользовательских шейдеров, например PBR.
Tip.pngСовет:Используйте для зашумлённых диффузных(en)/альбедо(en), normal map(en) и detail(en) текстур с целью уменьшения бликов при просмотре на расстоянии.
Procedural 0x0800 Текстура является процедурной текстурой (код может это изменять).
One Bit Alpha 0x1000 Использует однобитовый альфа-канал.
Eight Bit Alpha 0x2000 Используе восьмибитный альфа-канал.
Note.pngПримечание:Фактически используется всеми форматами с небинарным альфа-каналом (К примеру: BGRA4444, BGRA1616161616F)
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 фильтрация(en) для создания MIP-карт. (Для внутреннего использования VTEX?)
Clamp U 0x2000000 Фиксация U координаты (для текстур объёмности).
Vertex Texture 0x4000000 Может использоваться как вершинная текстура
SSBump 0x8000000 Текстура является SSBump(en). (SSB)
Border 0x20000000 Привязка к цвету границы по всем координатам текстуры

Формат VTF-файла

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

Структура

7.2 7.3 +
  1. Заголовок
  2. Данные изображения малой размерности
  3. Каждый Mipmap (последовательно от меньшего к большему)
    • Каждый кадр (от первого до последнего)
      • Каждая сторона (от первой до последней)
        • Каждый Z-срез (от минимального до максимального; зависит от Mipmap)
          • Данные изображения большой размерности
  1. Заголовок
  2. Записи ресурсов
    • Данные изображения малой размерности
    • Данные прочих ресурсов ↑
    • Каждый Mipmap (последовательно от меньшего к большему)
      • Каждый кадр (от первого до последнего)
        • Каждая сторона (от первой до последней)
          • Каждый Z-срез (от минимального до максимального; зависит от Mipmap)
            • Данные изображения большой размерности

Перечисления

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,
};

Заголовок

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). Должно быть равно -1 для карт окружения в версии меньше 7.5, что означает наличие 7-ми, а не 6-ти сторон.
	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;

Записи ресурсов

struct ResourceEntryInfo
{
	unsigned char	tag[3]; 		// Трехбайтовая «метка», идентифицирующая, что это за ресурс.
	unsigned char	flags;			// Флаги входа в ресурс. Единственный известный флаг - 0x2, который указывает, что этому ресурсу не соответствует ни один блок данных.
	unsigned int	offset;			// Смещение данных этого ресурса в файле. 
};
Теги
{ '\x01', '\0', '\0' } - Данные изображения малой размерности (миниатюры).
{ '\x30', '\0', '\0' } - Данные изображения большой размерности.
{ '\x10', '\0', '\0' } - Данные коллажа анимации частиц.
{ 'C', 'R', 'C' } - Данные контроля целостности.
{ 'L', 'O', 'D' } - Информация об управлении LOD текстуры.
{ 'T', 'S', 'O' } - Определенные игрой «расширенные» признаки VTF.
{ 'K', 'V', 'D' } - Произвольные ключи-параметры данных. Используется только сторонними иснтрументами.

Данные изображения малой размерности

Плотно упакованные данные изображения с низким разрешением в формате, описанном в заголовке. Данные изображения с низким разрешением всегда хранятся в формате сжатого изображения DXT1. Его размеры соответствуют размерам самого большого MIP-карты с шириной или высотой, не превышающей 16 пикселей. то есть для VTF 256×256 пикселей: 16×16, для VTF 256×64 пикселей: 16×4, для VTF 1x32 пикселей: 1×16, для VTF 4×4 пикселей: 4×4.

Данные изображения большой размерности

Хорошо упакованные перемежающиеся данные изображения высокого разрешения в формате, описанном в заголовке. Распространенные форматы данных ↑ включают DXT1, DXT5, BGR888, BGRA8888 и UV88. Все размеры должны быть power of two.

История версий

7.6

Неофициальная версия VTF, поддерживаемая Strata Source Strata Source. Не совместима ни с одной из игр Valve, ни с другими модами.

  • Добавляет поддержку deflate для сжатия данных изображений, что позволяет уменьшить размер хранилища.
  • Исправлена поддержка ATI1N и ATI2N, а также добавлена поддержка BC6H и BC7.

7.5

  • Выпущено 19 июля 2010 г. как часть Alien Swarm(en)
  • Побитовый эквивалент v7.4.
  • Переопределяет и изменяет два флага текстуры.
  • Сферы теперь официально избыточны.
  • Большинство изменений внутри процесса создания VTF с помощью VTEX, например Форматы MipMap fading, Alpha decay и XBox360.

7.4

  • Несовместим с Source 2006 Source 2006 и ранее.
  • Выпущена 10 октября 2007 г. как часть The Orange Box.
  • Побитовый эквивалент версии 7.3.
  • Решает проблемы, связанные с тем, как выполняется гамма-коррекция текстур для ТВ-вывода на XBOX 360 в сочетании с поиском памяти выгружаемого пула ОС.

7.3

  • Несовместим с Source 2006 Source 2006 и ранее.
  • Добавлена ​​расширяемая структура, ориентированная на ресурсы.
  • Добавлены контроль целостности, управление уровнем детализации текстуры и коллажные ресурсы, а также ресурсы обратно-совместимых изображений и изображений малой размерности.
  • Добавлено несколько форматов трафаретов глубины, зависящих от поставщика (для внутреннего использования в движке), а также форматы карт нормалей и линейные несжатые форматы.
  • Выпущена 18 сентября 2007 г. как часть Team Fortress 2 Team Fortress 2 бета.

7.2

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

7.1

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

7.0

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

Сторонние реализации

  • Пример независимой от Steam реализации VTF-формата файла изображения можно найти в библиотеке LGPL C/C++. VTFLib(en).
  • cl-valve-texture-format — Чтение и запись VTF на языке Common Lisp.

Смотреть также