# VTF и VMT
### Введение
В этой статье мы подробно рассмотрим подготовку текстур для моделей и не только.
Для начала давайте разберемся с формулировками.
#### Формулировки
* VTF (Valve Texture Format) - это проприетарный формат текстур (контейнер) использующийся движком Source. VTF файлы обычно задействуются через VMT файлы вместо использования напрямую, что предоставляет возможность их повторного использования. Все текстуры используются только через папку materials.
* VMT (Valve Material Format) - это файл с конфигурациями, который объясняет движку как текстура должна отображаться. Должны находится в materials.
#### Форматы
Здесь я опишу все дефолтные форматы, которые стоит использовать
* DXT1 - сжатый формат без альфа-канала.
* DXT5 - сжатый формат с альфа-каналом.
* BGR8888 - несжатый формат без альфа-канала.
* ABGR8888 - несжатый формат с альфа-каналом.
#### Mipmaps
Это картинки меньшего разрешения. По сути это тоже самое, что лоды только в мире текстурирования.
У VTF есть большое кол-во обычных и острых фильтров. Они объясняют движку каким образом изображение будет уменьшаться и как оно будет подчеркиваться.
> [name=Mikvoin] позже добавлю ссылки на таблицу.
#### Templates
Это уже готовые шаблоны.
* Default - подходит для большинства текстур. Содержит в себе компресированные форматы текстур. По-умолчанию определяет текстуры с альфа-каналом и без, и применяет соответствующий формат.
* Normal - подходит для карт нормалей.
* Uncomp. - включает в себя форматы в которых отсутствует компрессия текстур (размер текстур будет больше, чем у исходника).
* Sky - для текстур Skybox
* No alpha - текстуры без альфа-канала (DXT1 only)
* N. no alpha -

#### Программы для работы
* [VMT Editor](https://gira-x.github.io/VMT-Editor/) - программа для работы с VMT. Позволяет быстро и удобно конвертировать изображения в VTF-контейнер и создавать для них VMT по шаблону. Главной особенностью этой программы является то, что вам не нужно писать параметры вручную. Все выполнено в виде кнопок и ползунков с которыми вы будете взаимодействовать.
* [VTF Edit](https://gamebanana.com/tools/95) - программа для работы с VTF. Мы будем пользоваться ею только для **просмотра** VTF текстур.
* [VTF Shell Extensions](https://www.tophattwaffle.com/downloads/vtf-shell-extensions/) - расширение для винды с помощью которого у VTF текстур появляется возможность предпросмотра из папки.
### Создание VTF
1. "Tools" > "Convert to VTF".

2. Перекинуть все текстуры с помощью drag&drop, либо нажав на кнопку "Add".

3. Нажать на кнопку "Convert".
### Создание VMT
1. "Tools" > "Bath VMT".
2. В "Add" нужно указать текстуру цвета (Color/Albedo).

3. После этого открываем созданный VMT.
### Параметры VMT
Рассмотрим основные параметры.
#### Shader
Шейдер с помощью которого будет отображаться текстура.
* LightmappedGeneric - текстуры для хаммера.
* VertexLitGeneric - текстуры для моделек.

#### Texture
* Diffuse - карта цвета/альбедо/диффузная.
* Bump - карта нормалей.
* Surface - свойство текстуры
**ВНИМАНИЕ:** Работает только с шейдером LightmappedGeneric

#### Transparency
* Opacity - прозрачность ВСЕЙ текстуры
* Alpha test - дешевая поддержка прозрачности.
* Cutoff - сила с которой края будут съедатся.
* Translucent - максимальное качество отображения прозрачности, но могут возникнуть проблемы, если встретятся две такие текстуры.
* Additive - режим отображения альфы, на основе чёрного цвета текстуры. Т.е. например есть картинка какого-то спрайта, но место прозрачности его фон просто чёрный цвет. Этот параметр заставляет шейдер воспринимать чёрный фон как прозрачность. Используется в основном для спрайтов. Качество отображение аналогично $alphatest с минимальным качеством.
* Two-Sided - текстуру видно с двух сторон. Очень хорошо подходит для волос, одежды и т.д.
$AlphaTest + $alphatestreference НЕ СОВМЕСТИМЫ с $translucent
Т.е. вы используете только 1е два или только $translucent
$nocull - совместим со всеми параметрами.


#### Reflection (Envmap)
Это отражения основанные на какой-либо картинке, либо на cubemap(-ах), которые заранее раставлены на карте.
* Use cubemap (всегда выбирайте это)
* Mask - альфа-маска. Указываем карту Metallic. Если по какой-то причине не хотим использовать Metallic, то можем указать Diffuse, либо Bump.
* Tint - сила отражений. Обычно подходят значения до 0.25.
* Saturation - позволяет отключить цвет у отражений.
* Contart - управление контрастом
* Fresnel - см. вики.

#### [Specular (Phong)](https://developer.valvesoftware.com/wiki/$phong)
Представляет из себя что-то вроде эффекта матовый/глянец. Не требует пробилденных кубемапов на карте.

* Fresnel - освещает только те фейсы которые повернуты к игроку. Указывается в формате [φX φY φZ] от 0 до 1.

* Boost - усиление эффекта фонга, является десятичным числом. Например `$phongboost "4.3"`.
* Diffuse ting boost - не помню
* Tint - по сути тоже сила
* Glossiness - степень шероховатости. Чем ниже значение, тем эффект становится более матовым, если выше, то эффект становится больше похожим на глянец. Можно указать карту
* [Warp](https://developer.valvesoftware.com/wiki/$phong) - меняет цвет освещения фонга в соответствии с текстурой, которая указана в этом параметре.


* Diffuse Alpha Mask
* Diffuse luminance mask
* [Half lambert](https://developer.valvesoftware.com/wiki/$halflambert) - дополнительный "окружающий" эффект освещения. Имеет значения 0 и 1 (выкл/вкл).

* Disable half lambert

#### Rim Light


#### Flags
* Tool Texture - обложка для текстуры в Hammer
* Keywords - ключевые слова для поиска текстур в Hammer
* Model - включить режим шейдера для работы на модели, а не на брашевой геометрии. Применимо не ко всем шейдерам.
* [Vertex Alpha](https://developer.valvesoftware.com/wiki/$vertexalpha)
* Vertex Color
* No decals on surface - отключает отображение декалей на модели. Нет текстур выстрелов, крови и т.д.
* Ignore Z
* No fullbright
* No fog - игнорировать всё, текстура будет как бы светиться сквозь все стены, препятствия и.т.д. Применимо очень мало где. Т.к. появляются артефакты. Используется в HUD.
* No LOD - текстура не имеет лодов
* Disable CSM lookup -
