Как сохранить файл в формате vtf

Обновлено: 07.07.2024

Также, убедитесь в том что статья пытается соответствовать статье об альтернативных языках.

Contents

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

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

Возможности

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

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

Ресурсы

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

  • Значение CRC для обнаружения "битых" данных.
  • An U/V LOD control. This is the highest mipmap which should be loaded when game's Texture Detail setting is "High" ( mat_picmip 0 ). An U LOD Control value of 11 selects the mipmap which is 2048 pixels (2 11 ) across.

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

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

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

Формат Red Bits Green Bits Blue Bits Alpha Bits Total Bits Сжатие Поддерживается Комментарий
A8 0 0 0 8 8 False True
ABGR8888 8 8 8 8 32 False True Несжатая текстура с альфа-каналом
ARGB8888 8 8 8 8 32 False True
BGR565 5 6 5 0 16 False True Несжатая текстура, ограниченная глубина цвета
BGR888 8 8 8 0 24 False True Несжатая текстура
BGR888_BLUESCREEN 8 8 8 0 24 False True
BGRA4444 4 4 4 4 16 False True Несжатая текстура с альфа-каналом, половина глубины цвета
BGRA5551 5 5 5 1 16 False True
BGRA8888 8 8 8 8 32 Either True Также используется для сжатых HDR
BGRX5551 5 5 5 1 16 False True
BGRX8888 8 8 8 8 32 False True
DXT1 N/A N/A N/A 0 4 True True Стандартное сжатие, без альфа-канала
DXT1_ONEBITALPHA N/A N/A N/A 1 4 True True Стандартное сжатие, однобитный альфа-канал
DXT3 N/A N/A N/A 4 8 True True Uninterpolated Alpha
DXT5 N/A N/A N/A 4 8 True True Interpolated Alpha (recommended)
I8 N/A N/A N/A N/A 8 False True Luminance (Grayscale)
IA88 N/A N/A N/A 8 16 False True Luminance (Grayscale)
P8 N/A N/A N/A N/A 8 False False Paletted
RGB565 5 6 5 0 16 False True
RGB888 8 8 8 0 24 False True
RGB888_BLUESCREEN 8 8 8 0 24 False True
RGBA16161616 16 16 16 16 64 False True Integer HDR Format
RGBA16161616F 16 16 16 16 64 False True Floating Point HDR Format
RGBA8888 8 8 8 8 32 False True
UV88 N/A N/A N/A N/A 16 False True Несжатый формат du/dv
UVLX8888 N/A N/A N/A N/A 32 False True
UVWQ8888 N/A N/A N/A N/A 32 False True


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

Сжатие HDR

HDR текстуры могут храниться в сжатой форме используя формат BGRA8888.

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

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

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

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

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

  • BGR888: используйте для текстур без альфа-канала и с качественным градиентом (например, карт нормалей и световых ореолов (light halo)).
  • BGRA8888: используйте для текстур с альфа-каналом и с качественным градиентом (например, карт нормалей и световых ореолов). Он также может быть использован, чтобы получать высококачественные текстуры.
  • DXT1: используйте этот формат для обычных текстур без альфа-канала.
  • DXT3: используйте этот формат для обычных текстур с альфа-каналом и резкими градиентами.
  • DXT5: используйте этот формат для обычных текстур с альфа-каналом и плавными градиентами.
  • I8: используйте этот формат для черно-белых текстур без альфа-канала и с качественным градиентом (например, световые ореолы).
  • IA88: используйте этот формат для черно-белых текстур с альфа каналом и качественным градиентом (например, дым или световые ореолы).
  • RGBA16161616F: используйте этот формат для HDR текстур.
  • UV88: используйте этот формат для DuDv карт.

Флаги изображений

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

Флаг Значение Комментарий
Point Sampling 0x0001 Низкое качество, фильтрация текстур "пиксельная графика".
Trilinear Sampling 0x0002 Фильтрация текстур среднего качества.
Clamp S 0x0004 Координаты зажима S.
Clamp T 0x0008 Координаты зажима T.
Anisotropic Sampling 0x0010 Качественная фильтрация текстур.
Hint DXT5 0x0020 Используется в skyboxes. Убедитесь, что края бесшовные.
PWL Corrected 0x0040 Цель неизвестна.
SRGB n/a Использует пространство RGB. Полезно для высоких гамм. Не рекомендуется в версии 7.5.
No Compress 0x0040 Сжатие DXT не используется. Устаревшее
Normal Map 0x0080 Текстура - это карта нормалей.
No Mipmaps 0x0100 Отрисовывать только самые большие MIP-карты. (Не удаляет существующие MIP-карты, а просто отключает их.)
No Level Of Detail 0x0200 Не зависит от настроек разрешения текстуры.
No Minimum Mipmap 0x0400 Если установлено, загружайте MIP-карты размером менее 32x32 пикселей.
Procedural 0x0800 Текстура - это процедурная текстура (код может ее изменять).
One Bit Alpha 0x1000 Используется однобитовый альфа-канал.
Eight Bit Alpha 0x2000 Используется восьмибитный альфа-канал.
Environment Map 0x4000 Текстура - это карта окружения.
Render Target 0x8000 Текстура - это цель рендеринга.
Depth Render Target 0x10000 Текстура - это цель рендеринга глубины.
No Debug Override 0x20000
Single Copy 0x40000
Pre SRGB 0x80000 Исправление SRGB уже применено
One Over Mipmap Level In Alpha 0x80000 Заполните альфа-канал значением 1 / Mipmap Level. Устарело (для внутреннего использования VTEX?)
Premultiply Color By One Over Mipmap Level 0x100000 (Для внутреннего использования VTEX?)
Normal To DuDv 0x200000 Текстура - это карта DuDv. (Для внутреннего использования VTEX?)
Alpha Test Mipmap Generation 0x400000 (Для внутреннего использования VTEX?)
No Depth Buffer 0x800000 Не Z-буферизация для обработки видео обычно расстояние визуализации.
Nice Filtered 0x1000000 использование NICE фильтрация для создания MIP-карт. (Для внутреннего использования VTEX?)
Clamp U 0x2000000 Координаты зажима U (для объемных текстур).
Vertex Texture 0x4000000 Может использоваться как вершинная текстура
SSBump 0x8000000 Текстура - это SSBump. (SSB)
Border 0x20000000 Привязка к цвету границы по всем координатам текстуры

Формат файла

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

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

  1. VTF заголовок
  2. VTF Данные изображения с низким разрешением
  3. Для каждого Mipmap (от наименьшего к наибольшему)
    • Для каждого кадра (от первого до последнего)
      • Для каждого лица (от первого до последнего)
        • Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
          • VTF Данные изображения высокого разрешения
  1. VTF заголовок
  2. Записи ресурсов
    • VTF Данные изображения с низким разрешением
    • Для каждого Mipmap (от наименьшего к наибольшему)
      • Для каждого кадра (от первого до последнего)
        • Для каждого лица (от первого до последнего)
          • Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
            • VTF Данные изображения высокого разрешения

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

Заголовок формата

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.

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

  • Выпущено 19 июля 2010 г. как часть Alien Swarm
  • Побитовый эквивалент v7.4.
  • Переопределяет и изменяет два флага текстуры.
  • Сферы теперь официально избыточны.
  • Большинство изменений внутри процесса создания VTF с помощью VTEX, например Форматы MipMap fading, Alpha decay и XBox360.
  • Выпущена 10 октября 2007 г. как часть The Orange Box.
  • Побитовый эквивалент версии 7.3.
  • Решает проблемы, связанные с тем, как выполняется гамма-коррекция текстур для ТВ-вывода на XBOX 360 в сочетании с поиском памяти выгружаемого пула ОС.
  • Добавлена ​​расширяемая структура, ориентированная на ресурсы.
  • Добавлены ресурсы CRC, управления уровнем детализации текстуры и листа, а также ресурсы изображений с обратной совместимостью и изображений с низким разрешением.
  • Добавлено несколько форматов трафаретов глубины, зависящих от поставщика (для внутреннего использования в движке), а также форматы карт нормалей и линейные несжатые форматы.
  • Выпущена 18 сентября 2007 г. как часть Team Fortress 2 бета.
  • Добавлена ​​поддержка объемных текстур.
  • Выпущен 23 сентября 2005 г. как Steam обновление двигателя.
  • Добавлена ​​поддержка карты сфер для карт среды. (Это было предназначено для поддержки DirectX 6, которая позже была сокращена.)
  • Изначальный выпуск. (Только для внутреннего выпуска, однако некоторые текстуры v7.0 попали в опубликованный заголовок.)

Реализация

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

Читайте также: