Как сохранить файл в формате vtf
The Valve Texture Format (VTF) is the proprietary texture format used by the Source engine. VTF files are generally referenced in a Material instead of being accessed directly, which allows re-use in different ways.
VTF files can be created from TGA images using the Source SDK Tool VTEX, or from most common image formats with third-party tools. Both textures and materials are stored in subfolders of game_dir/materials/ .
Note: All block-compressed VTF files (such as those which use DXT compression) must have dimensions that are a multiple of 4. Although VTF dimensions are usually restricted to powers of two, some third-party tools can import and export non-powers of two textures. If you opt to use non-power-of-two textures, expect texture filtering to break (this can be "remedied" by setting the point sampling flag on the texture).
Tip: It is possible to restore DXT compressed VTF files (i.e. removing compression artifacts) by using an AI.
Storage capabilities
The VTF image format can store either a flat texture, an environment map, or a volumetric texture. Each of these can have multiple frames.
Note: Textures with dimensions larger than 4096 pixels can be created, if a few conditions are met. The resulting .vtf should be below 33 MB (or 33,554,432 bytes), the resolutions used is a powers of two and isn't exceeding 65,536 pixels in either dimension and the total amount of pixels of the image should be below 16.7 megapixels: For example, a texture the size of 512x32,768 will work, because 512 multiplied by 32,768 equals 16.7 megapixels.
- An environment map is a six-faced cube map, unless the version is less than 7.5 and the first frame in the header is -1, then it will be seven-faced.
- A volumetric texture is a texture with depth, where each frame is a "layer" which are layered in the third dimension. So a 16x16x16 volumetric texture has 16 separate 16x16 textures stacked to give depth. This format is used internally by Source, and you shouldn't have any need to actually create one yourself.
- For each frame and face, the VTF file contains both the basic original source-image data (pixel map) and a series of mipmaps used for rendering the texture over varying distances. Because each successive mipmap is exactly 1/2 the dimension (height and width) of the previous one, the source-image dimensions must be a multiple of 4. Although the source-image may be rectangular, square mipmaps are stored more efficiently in the VTF.
- Start frame (for animations) scale
- A Reflectivity value for use by VRAD
- A very low resolution copy of the VTF for color sampling by the engine.
Resources
VTF 7.3 added an extensible "resource data" system. Anything can be added, but Source will recognise only the following:
- A CRC value, for detecting data corruption.
- 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 (2 11 ) across at the "High" texture setting, and 4096 pixels across at the "Very High" ( mat_picmip -1 ) 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.
Image data formats
The VTF image format can store image data in a variety of formats. Some formats were meant for the engine, some only as an interim format for conversions. The uncompressed formats are not lossy and the compressed (DXT) formats are.
Note: The VTF format can actually store many more formats than those listed below -- consult your engine branch's public/bitmap/imageformat.h to see exactly what it supports. However, these formats are not GUARANTEED to work and their enum values are prone to being shuffled around between engine branches.
Image data format table
Format | Red Bits | Green Bits | Blue Bits | Alpha Bits | Total Bits | Compressed | Supported | Comments |
---|---|---|---|---|---|---|---|---|
A8 | 0 | 0 | 0 | 8 | 8 | False | True | |
ABGR8888 | 8 | 8 | 8 | 8 | 32 | False | True | Uncompressed texture with alpha |
ARGB8888 | 8 | 8 | 8 | 8 | 32 | False | True | |
BGR565 | 5 | 6 | 5 | 0 | 16 | False | True | Uncompressed texture, limited color depth |
BGR888 | 8 | 8 | 8 | 0 | 24 | False | True | Uncompressed texture |
BGR888_BLUESCREEN | 8 | 8 | 8 | 0 | 24 | False | True | |
BGRA4444 | 4 | 4 | 4 | 4 | 16 | False | True | Uncompressed texture with alpha, half color depth |
BGRA5551 | 5 | 5 | 5 | 1 | 16 | False | True | |
BGRA8888 | 8 | 8 | 8 | 8 | 32 | Either | True | Also used for compressed 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 | Standard compression, no alpha |
DXT1_ONEBITALPHA | N/A | N/A | N/A | 1 | 4 | True | True | Standard compression, one bit alpha |
DXT3 | N/A | N/A | N/A | 4 | 8 | True | True | Uninterpolated Alpha |
DXT5 | N/A | N/A | N/A | 8 | 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 | Uncompressed du/dv Format |
UVLX8888 | N/A | N/A | N/A | N/A | 32 | False | True | |
UVWQ8888 | N/A | N/A | N/A | N/A | 32 | False | True |
HDR compression
HDR textures can be stored in compressed form using the BGRA8888 format.
The formula to convert these colors back to integer HDR is:
RGB = RGB * (A * 16)
and for floating point HDR:
RGB = (RGB * (A * 16)) / 262144
Additional data formats
These are additional image formats that are found in imageformat.h of Source 2013 and Alien Swarm.
Format | Red Bits | Green Bit | Blue Bits | Alpha Bits | Total Bits | Compressed | Supported | Comments |
---|---|---|---|---|---|---|---|---|
R32F | 32 | 0 | 0 | 0 | 32 | False | ? | Single-channel 32-bit floating point |
RGB323232F | 32 | 32 | 32 | 0 | 48 | False | ? | 32-Bit Floating point HDR |
RGB32323232F | 32 | 32 | 32 | 32 | 64 | False | ? | 32-Bit Floating point HDR w/alpha channel |
Format | Red Bits | Green Bit | Blue Bits | Alpha Bits | Total Bits | Compressed | Supported | Comments |
---|---|---|---|---|---|---|---|---|
RG1616F | 16 | 16 | 0 | 0 | 32 | False | ? | Dual-channel 16-bit floating point |
RG3232F | 32 | 32 | 0 | 0 | 64 | False | ? | Dual-channel 32-bit floating point |
RGBX8888 | 8 | 8 | 8 | 8 | 32 | False | ? | |
RGBA1010102 | 10 | 10 | 10 | 2 | 32 | Either | ? | 10 bit-per component render targets |
BGRA1010102 | 10 | 10 | 10 | 2 | 32 | Either | ? | 10 bit-per component render targets |
R16F | 16 | 0 | 0 | 0 | 16 | Either | ? | 16 bit floating point |
Choosing an image format
Though the VTF image format provides support for a wide range of image data formats, there are only a handful of image data formats you are likely to use. These formats and their criteria are described below:
- BGR888: use this format for textures with no alpha channel and very fine gradients (i.e. normal maps or light halos).
- BGRA8888: use this format for textures with an alpha channel and very fine gradients (i.e. normal maps or light halos). It can also be used to produce Very High quality textures.
- DXT1: use this format for typical textures with no alpha channel. (Also known as BC1.)
Note: DXT1 supports 1 bit of alpha precision. However, any areas of 0 alpha will be fully black. This functionality is therefore best used for textures using $alphatest.
- DXT3:DXT5 should almost always be used over DXT3, but DXT3 is acceptable (not necessarily better) for textures with an alpha channel with sharp gradients. (Also known as BC2.)
- DXT5: use this format for typical textures with an alpha channel. (Also known as BC3).
- I8: use this format for black and white textures with no alpha channel and very fine gradients (i.e. light halos).
- IA88: use this format for black and white textures with an alpha channel and very fine gradients (i.e. smoke or light halos).
- RGBA16161616F: use this format for HDR textures.
- UV88: use this format for DuDv maps.
Find technical details on the various DXT compression formats here and here.
Image flags
Tip: Most shader settings are configured as material parameters, not texture flags.
Привет юзер.
Представляю тебе коротенький гайд, по конвертации jpg / jpeg / png / tga / bmp / dds / psd в формат VTF, понятный движку Source Engine (1).
2
6,884 | уникальных посетителей |
233 | добавили в избранное |
В архиве можно найти последнюю версию VTFEdit (не требует установки) и консольную программу VTFCmd.
VTFEdit - полноценная программа для конвертации форматов в VTF и обатно.
VTFCmd - консольная прога для конвертации форматов через cmd строку Windows. Очень удобна, если надо без лишних телодвижений конвертировать целую папку в VTF.
Папка х64 - для 64 битных систем Windows
Папка x86 - для 32 битных систем Windows
Основное окно программы.
Для импорта выше указанных форматов:
Жмём File - Import и выбираем нужное изображение
Окно параметров импорта изображения.
General:
Normal Format - формат, в который будет сжиматься текстура
Alpha Format - формат альфа канала tga (png ?)
Texture type:
Animated Texture - анимированная текстура, если вы выбрали более 1 изображения
Environment Texture - текстура-env_map, создание текстуры кастомного отражения.
Volume Texture - обычная текстура
Resize:
Различные варианты способов, по которым будет масштабироваться текстура, если она не кратна 2м. Т.е. 64х128х256х512 итд
Clamp:
Обрезка. Здесь устанавливаются максимальные размеры выходной текстуры. Предположим у вас есть текстура 9999х9999, при импорте она может быть автоматически урезана например до 2048х2048.
Generate MipMaps:
Не советую отключать. MipMaps это мини версии текстуры, которые появляются, когда игрок отдаляется от неё. Что снижает нагрузку и исключает эффект мельтешения.
Дополнительные параметры импорта.
Version:
Версия VTF формата. Советую использовать 7.3. Из большинства движков уже выпилили поддержку версий 7.1 и 7.2. Версии 7.4 и 7.5 встречаются в играх вроде Portal 2 и Left 4 Dead 2.
Выбрав нужные параметры жмём ОК.
В зависимости от жирности входного формата программа может повиснуть на неопределённое время, идёт конвертация в VTF.
После конвертации видим примерно следующее.
Для отображения прозрачности нажмите View - Mask или Ctrl+M (вкл/выкл)
DXT1-5 сжатие
DXT1-5 сжатие подходит для большинства текстур, которые не требуют максимального качества. Текстура с таким сжатием весит намного меньше чем ABGR8888, но такая текстура имеет низкое качество, особенно это заметно на градиентах или мелких элементах.
ABGR8888 сжатие
ABGR8888 текстура получается практически без сжатия, имеет максимальный вес, даже больше оригинала, т.к. ещё учитываются MipMaps. Желательно использовать для текстур например волос, где требуется максимальное качество альфа канала и прозрачности.
Текстуры где используются градиенты, мелкие детали на normal / bump картах и.т.п.
Пример внешнего вида модели с сжатием и без. В данном случае, используется в качестве примера $bumpmap текстура.
Также, убедитесь в том что статья пытается соответствовать статье об альтернативных языках.
Contents
Valve Texture Format (VTF) - это проприетарный формат текстур использующийся движком Source. VTF файлы обычно задействуются через VMT файлы вместо использования напрямую, что предоставляет возможность их повторного использования.
VTF файлы могут быть созданы из изображений в формате TGA с помощью Source SDK Tool VTEX или из большинства основных форматов изображений с помощью сторонних инструментов. И текстуры и материалы хранятся в подпапках game_dir/materials/ .
Примечание: VTF файлы должны быть в размерности степени двойки, например: 64x64, 128x128, 256x256, 512x512 и т.д.
Примечание: Хотя технически это ограничение можно обойти с помощью альтернативных программ для конвертации текстур, например SprayMaker 5000
Возможности
Формат 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.
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.
Форматы данных изображения
VTF может хранить в себе данные в различных форматах. Некоторые форматы предназначены для движка, некоторые только как промежуточные форматы для преобразований. Несжатые форматы не теряют данных, а сжатые (DXT) - теряют.
Таблица форматов данных изображений
Формат | Red Bits | Green Bits | Blue Bits | Alpha Bits | Total Bits | Сжатие | Поддерживается | Комментарий |
---|---|---|---|---|---|---|---|---|
A8 | 0 | 0 | 0 | 8 | 8 | False | True | |
ABGR8888 | 8 | 8 | 8 | 8 | 32 | False | True | Несжатая текстура с альфа-каналом |
ARGB8888 | 8 | 8 | 8 | 8 | 32 | False | True | |
BGR565 | 5 | 6 | 5 | 0 | 16 | False | True | Несжатая текстура, ограниченная глубина цвета |
BGR888 | 8 | 8 | 8 | 0 | 24 | False | True | Несжатая текстура |
BGR888_BLUESCREEN | 8 | 8 | 8 | 0 | 24 | False | True | |
BGRA4444 | 4 | 4 | 4 | 4 | 16 | False | True | Несжатая текстура с альфа-каналом, половина глубины цвета |
BGRA5551 | 5 | 5 | 5 | 1 | 16 | False | True | |
BGRA8888 | 8 | 8 | 8 | 8 | 32 | Either | True | Также используется для сжатых HDR |
BGRX5551 | 5 | 5 | 5 | 1 | 16 | False | True | |
BGRX8888 | 8 | 8 | 8 | 8 | 32 | False | True | |
DXT1 | N/A | N/A | N/A | 0 | 4 | True | True | Стандартное сжатие, без альфа-канала |
DXT1_ONEBITALPHA | N/A | N/A | N/A | 1 | 4 | True | True | Стандартное сжатие, однобитный альфа-канал |
DXT3 | N/A | N/A | N/A | 4 | 8 | True | True | Uninterpolated Alpha |
DXT5 | N/A | N/A | N/A | 4 | 8 | True | True | Interpolated Alpha (recommended) |
I8 | N/A | N/A | N/A | N/A | 8 | False | True | Luminance (Grayscale) |
IA88 | N/A | N/A | N/A | 8 | 16 | False | True | Luminance (Grayscale) |
P8 | N/A | N/A | N/A | N/A | 8 | False | False | Paletted |
RGB565 | 5 | 6 | 5 | 0 | 16 | False | True | |
RGB888 | 8 | 8 | 8 | 0 | 24 | False | True | |
RGB888_BLUESCREEN | 8 | 8 | 8 | 0 | 24 | False | True | |
RGBA16161616 | 16 | 16 | 16 | 16 | 64 | False | True | Integer HDR Format |
RGBA16161616F | 16 | 16 | 16 | 16 | 64 | False | True | Floating Point HDR Format |
RGBA8888 | 8 | 8 | 8 | 8 | 32 | False | True | |
UV88 | N/A | N/A | N/A | N/A | 16 | False | True | Несжатый формат du/dv |
UVLX8888 | N/A | N/A | N/A | N/A | 32 | False | True | |
UVWQ8888 | N/A | N/A | N/A | N/A | 32 | False | True |
Сжатие HDR
HDR текстуры могут храниться в сжатой форме используя формат BGRA8888.
Эта формула показывает как преобразовать эти цвета в целочисленный HDR (integer): RGB = RGB * (A * 16)
и в HDR с плавающей запятой (floating point):
RGB = (RGB * (A * 16)) / 262144
Выбор формата изображений
Не смотря на то, что VTF предоставляет поддержку широкого ряда форматов изображений, есть только несколько форматов, которые вы, скорее всего, будете использовать. Эти форматы и критерии выбора описаны ниже.
- BGR888: используйте для текстур без альфа-канала и с качественным градиентом (например, карт нормалей и световых ореолов (light halo)).
- BGRA8888: используйте для текстур с альфа-каналом и с качественным градиентом (например, карт нормалей и световых ореолов). Он также может быть использован, чтобы получать высококачественные текстуры.
- DXT1: используйте этот формат для обычных текстур без альфа-канала.
- DXT3: используйте этот формат для обычных текстур с альфа-каналом и резкими градиентами.
- DXT5: используйте этот формат для обычных текстур с альфа-каналом и плавными градиентами.
- I8: используйте этот формат для черно-белых текстур без альфа-канала и с качественным градиентом (например, световые ореолы).
- IA88: используйте этот формат для черно-белых текстур с альфа каналом и качественным градиентом (например, дым или световые ореолы).
- RGBA16161616F: используйте этот формат для HDR текстур.
- UV88: используйте этот формат для DuDv карт.
Флаги изображений
Совет: Большинство настроек шейдера конфигурируются с помощью параметров материала, не с помощью текстурных флагов.
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.
Структура формата
- VTF заголовок
- VTF Данные изображения с низким разрешением
- Для каждого Mipmap (от наименьшего к наибольшему)
- Для каждого кадра (от первого до последнего)
- Для каждого лица (от первого до последнего)
- Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
- VTF Данные изображения высокого разрешения
- Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
- Для каждого лица (от первого до последнего)
- Для каждого кадра (от первого до последнего)
- VTF заголовок
- Записи ресурсов
- VTF Данные изображения с низким разрешением
- Для каждого Mipmap (от наименьшего к наибольшему)
- Для каждого кадра (от первого до последнего)
- Для каждого лица (от первого до последнего)
- Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
- VTF Данные изображения высокого разрешения
- Для каждого Z-среза (от минимального до максимального; зависит от Mipmap)
- Для каждого лица (от первого до последнего)
- Для каждого кадра (от первого до последнего)
Перечисления
Заголовок формата
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.
Этот урок является пошаговым руководством по созданию совершенно нового материала, включая материал текстур.
Создание текстур
Для создания текстуры подойдёт любое изображение, если его размеры (высота и ширина) кратны двум, например: 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, и т.д. Прежде, чем создавать новую текстуру, изучите существующие, выполняющие ту же роль. Текстуры с высоким разрешением тормозят производительность, но при этом дают большую резкость при просмотре вблизи.
Различные классы объектов имеют разные стандартные разрешения (например, модели персонажей более детализированы). Если запутаетесь, вам в помощь source materials.gcf вместе с GCFScape.
Примечание: Исходные файлы текстур должны сохраняться в формате с меньшими потерями качества - TGA.
Преобразование текстур
Перед тем, как использовать в Source, текстуры необходимо преобразовать в Valve Texture Format. Для этого Valve предоставляет инструмент VTEX. С этим инструментом можно работать через командную строку, или с помощью сторонних программ, таких как VTFEdit. VTFEdit предпочтительней, поскольку имеет удобный графический интерфейс, позволяет редактировать текстуры без перекомпиляции, поддерживает множество форматов, и не требует отдельных скриптов для создания каждой текстуры.
Чтобы импортировать текстуру в VTFEdit, используйте File > Import или нажмите Ctrl+I . Выберите изображение и откроется окно импортирования:
Основные параметры
Следующие параметры наиболее важны. Их три:
Формат нормалей Формат цвета/сжатия, который используется для прозрачной текстуры. Формат Альфа Формат цвета/сжатия, который используется для текстуры с альфа-каналом. Тип текстуры Если вы импортировали больше, чем одно изображение, тут задаётся тип их использования (кадры анимации/кубмапы/глубина срезов).
Если вы создаёте простую текстуру, то вам не понадобится ничего из перечисленного выше. Если вы создаёте текстуру с детально проработанными градиентами, вам придётся выбрать режим сжатия без потерь.
Настройки мип-карт
Мип-карты - это версии текстуры, имеющие низкое разрешение, сменяющие друг друга по мере удаления камеры от неё. Они существенно сокращают требуемый объём текстуры, повышая производительность и качество изображения.
Совет: Текстуры, которые будут отображаться в 3D-мире, должны иметь мип-карты. Для экономии памяти, текстуры используют интерфейс 2D.
Следующие изображения демонстрируют различные мипмап-фильтры, доступные в VTFEdit:
Следуя предшествующим статьям цикла, вы наверняка освоили процесс создания незаурядной карты с уникальными триггерами и различными видами освещения. Но для воплощения самых смелых идей в жизнь чего-то не хватает, верно? Стандартный контент полету фантазии не помощник, поэтому в данном уроке вы научитесь создавать собственные текстуры для своих карт на движке Source. Подобным образом вы сможете создавать текстуры и для моделей, спреев и вообще всего, что работает с изображениями в играх на Source.
Создание текстур не интуитивный процесс, но и не чрезмерно сложная задача. В отличие от большинства современных движков здесь нет «просто перетаскиваешь и всё работает»: большую часть работы придётся делать самостоятельно.
VTF и VMT
Текстуры делятся на два файла: VTF (Valve Texture Format), файл, в котором хранится изображение, сами пиксели вашей текстуры, и VMT (Valve Material Type), файл, содержащий метаданные и информацию о шейдерах. Для отображения текстуры в игре используются оба файла.
Файлы VTF (.vtf) хранят всю информацию о пикселях, альфа-картах и MIP-картах, которую может использовать текстура.
Они создаются конвертированием исходного изображения в специальной программе. Данные располагаются таким образом, чтобы рендеринг был наиболее эффективным, поэтому обычные .jpg/.jpg-файлы без конвертации не используются. Самое главное – размеры изображения должны представлять из себя двойку в степени (то есть 64×64, 128×128, 256×256, 1024×1024 и т.д.).
Подробный технический анализ файлов VTF можно найти на Valve Developer Wiki.
Файлы VMT (.vmf) – это простые текстовые файлы с метаданными текстуры.
Среди них есть такая информация, как:
- Является ли текстура полупрозрачной?
- Анимирована ли она?
- Использует ли она рельефное текстурирование?
- Какой звук она воспроизводит при столкновениях?
Для одного VTF-изображения можно сделать несколько VMT-файлов с разными свойствами, и Hammer будет принимать их за разные текстуры. В следующих уроках мы рассмотрим продвинутые особенности VMT, добавляющие текстуре реалистичности.
Подробный технический анализ файлов VMT можно найти на Valve Developer Wiki.
Создание текстур
Что ж, приступим. Я буду использовать для создания текстуры логотип ProGamer.
Логотип окружён прозрачным фоном, но с этим мы разберёмся потом. Размер 1418×1418 я поменял на 1024×1024. На практике вы будете использовать наименьший возможный размер, а такие большие текстуры будут применяться только для самых важных вещей. Хорошим базисом для большинства текстур будет 512×512.
Нам нужно сконвертировать исходный файл в формат VTF. Valve прилагает к своим играм программу VTEX, это простой инструмент командной строки, способный создавать VTF-файлы только из TARGA (.tga). Есть альтернатива получше – VTFEdit, которая работает с большинством форматов, имеет собственный интерфейс и обилие функций.
Типы файлов
VTFEdit открывает файлы .bmp, .jpg, .jpg, .jpg и .tga.
Если вы не знакомы с их особенностями, то вот всё, что вам действительно нужно знать:
- PNG, GIF и TGA поддерживают прозрачность.
- GIF поддерживает анимацию (но перед импортированием нужно разбивать на кадры).
- Для всего остального рекомендуется JPG.
- С BMP не связывайтесь.
PNG-8 против PNG-24
24-битные PNG-файлы поддерживают переменную прозрачность, но плохо импортируются в VTFEdit, так что для переменной прозрачности нужно использовать .tga.
TARGA (.tga)
TARGA – это старый причудливый формат изображений со своими приятными особенностями, но во многих областях он вытесняется форматами PSD или PNG. Главная проблема состоит в поиске программ, способных создавать/редактировать такие файлы. Как вы могли догадаться, лучшим инструментом для этого является Photoshop. VTFEdit/VTEX хорошо дружат с TARGA, так что если возникают проблемы с импортированием, конвертируйте изображение в этот формат.
Импортирование в VTFEdit
Полагаю, к этому моменту вы уже приготовили желаемое изображение. Выбираем пункт меню File>Import. Для начала познакомьтесь с этим окном:
Здесь много всего, но я разобью по пунктам:
- Normal Format: Какая компрессия используется для стандартных (непрозрачных) изображений.
- Alpha Format: Компрессия, используемая в изображениях с прозрачностью.
- Texture Type: Применяется, только когда вы импортируете больше одного изображения, и определяет, что они должны из себя представлять. В 99% случаев здесь выбирается Animated Texture.
- Resize/Clamp: Тут можно изменить размер в последний момент, но я советую делать это заранее.
- Generate Mipmaps: MIP-карты – это уменьшенные версии текстуры, которые игра будет накладывать при отдалении. Здесь лучше всё оставить по умолчанию.
- Normal Map: Карты нормалей используются для придания текстуре мнимой глубины. Опять же, этим лучше заниматься самостоятельно, но вы можете дать VTFEdit шанс и проверить результат её работы.
Хорошее руководство по выбору компрессии есть на Valve Developer Wiki. Если возникают сомнения, оставляйте всё по умолчанию.
Вкладку Advanced мы пока не трогаем (здесь настраивается VTF-файл – оставляйте 7.2, если только не знаете точно, что делаете).
После нажатия ОК вы должны увидеть вот это:
Теперь, если не хотите поиграть с продвинутыми настройками, можете нажимать File>Save и получите готовый VTF-файл.
Создание VMT
Мы создадим голый скелет файла VMT для работы вместе с VTF. В той же папке, где вы сохранили свою progamer.vtf, создаём новый текстовый файл и называем его progamer.vmt, затем открываем в блокноте или другом текстовом редакторе и вводим эти строки:
«LightmappedGeneric»
«$basetexture» «progamer/progamer»
«$surfaceprop» «MetalPanel»
«$surfaceprop2» «MetalPanel»
>
- LightmappedGeneric – это тип шейдеров, который будет использовать текстура, это важно, когда вам нужны необычные эффекты или вы делаете текстуру для файла модели.
- Basetexture – это созданный вами файл VMT: заметьте, что у него нет расширения и он находится в папке progamer, которую мы пока не создали (но вскоре создадим).
- Surfaceprop определяет некоторые физические свойства текстуры.
В VMT-файл можно много чего добавить, расширенный список можно найти на Valve Developer Wiki.
Просмотр и применение текстур
Теперь у нас есть оба необходимых файла, давайте пустим их в дело.
Сначала их нужно поместить в нужную папку, она зависит от игры, для которой вы сделали текстуру и от настроек Hammer. Примеры:
- Half-Life 2: Episode 2: Steam\steamapps\common\Half-Life 2\ep2\materials
- Team Fortress 2: Steam\steamapps\common\common\Team Fortress 2\tf\materials
- CS:GO: Steam\steamapps\common\Counter-Strike Global Offensive\csgo\materials
Обычно все файлы материалов помещаются в отдельную подпапку, чтобы в базовой папке не скапливались потенциально конфликтующие материалы. Не забывайте прописывать название папки в VMT-файлах.
Предполагается, что текстуру вы делали для своей карты, так что открывайте Hammer и ищите новую текстуру в списке материалов. Если всё прошло нормально, она там будет. Если ничего нет, возможно, вы не туда поместили файлы. Если текстура есть, но она пустая/фиолетовая/неправильная, то проблема может быть в кодировке текстуры или настройках VMT.
И вот, ваша текстура в игре.
Создание текстур с прозрачностью
- Убедитесь, что изображение содержит прозрачность/альфа-канал (для этого лучше подходит формат TGA).
- Выбирайте компрессию с поддержкой альфа-информации (дефолтная DXT5 подойдёт).
- Добавьте в VMT: «$translucent» 1.
- Этого должно быть достаточно.
Создание анимированных текстур
При создании анимированных текстур большая часть работы производится перед импортированием, так как кадры анимации должны храниться в отдельных файлах. С этим могут возникнуть сложности, но гугл вас выручит.
Названия готовых файлов должны нумероваться по типу: imagename_0000.tga, imagename_0001.tga, imagename_0002.tga.
При импортировании выделяйте сразу все файлы, остальное сделает VTFEdit.
Если всё сработало, в информации об изображении должно быть указано более одного кадра.
VMT-файл для анимированной текстуры содержит чуть побольше данных:
«LightMappedGeneric»
«$baseTexture» «progamer/animated»
«$surfaceprop» «MetalPanel»
«$surfaceprop2» «MetalPanel»
«$translucent» «1»
«Proxies»
«AnimatedTexture»
«animatedTextureVar» «$basetexture»
«animatedTextureFrameNumVar» «$frame»
«animatedTextureFrameRate» «10»
>
>
>
Результат:
Центральная текстура анимирована, правая текстура статичная, но использует кое-какую магию в файле VMT для движения. Это мы рассмотрим в следующих уроках.
Запаковка текстур в карту
Здесь немного проявляются особенности разных игр. Если вы хотите распространять свою карту с пользовательскими текстурами через интернет, то наилучшим решением будет запаковать текстуры в файл BSP.
Для аддонов Garry’s Mod этого делать необязательно, так как структура .gma сохраняет файловую иерархию. Однако, если вы хотите, чтобы люди запускали карту на своих серверах и не доставали вас отзывами «карта отстой, текстурок нету», то лучше их всё же запаковать. Такое случается, потому что люди декомпилируют ваш файл GMA для хранения серверных файлов в FastDL, а не в Workshop.
И как же паковать текстуры в карту? С помощью Pakrat.
Pakrat позволяет открывать файлы BSP и изменять их содержимое. BSP-файлы представляют из себя контейнеры (как .zip, к примеру), где хранятся различные данные – обычно это файлы самой карты, файлы освещения, кубические текстуры и любой дополнительный контент, который вы решили поместить в свою карту.
Дальше всё довольно просто: открываем скомпилированную карту, нажимаем Add и добавляем свои текстуры.
Обращайте внимание на столбец Path: там должно быть что-то вроде “materials/ваша-подпапка/“.
Сохраняем карту и всё готово. Для тестирования удалите свои текстуры из папки игры, чтобы убедиться, что они работают из .bsp, а лучше вообще проверяйте карту на другом компьютере.
Читайте также: