Создание материалов
Материалы это то что движок Source использует для определения какие текстуры (textures) (в формате .VTX) и шейдеры (shaders) (функции, которые определяют как рендерятся материалы на экране) используются на поверхностях (surfaces) (модели, поверхностях мира, спрайты и т.д). Материал также может объявлять прокси (proxies) с помощью которых может расширяться и модифицироваться способ его рендеринга.
Материалы определяются в файлах .VMT (Valve Material). Это высокоуровневый скрипт который подробно описывает как будет рендериться материал.
Рассмотрим пример такого .VMT файла:
«LightmappedGeneric»
{
// Строковые значения заключаются в кавычки
«$basetexture» «shadertest/LightmappedTexture»
«$envmap» «shadertest/LightmappedTexture_envmap»

// Векторные занчения заключаются в кавычки
«$color» «[1 0 0]»
// Вещественный и целые значения *не* заключаются в кавычки

«$alpha» 0.5
«$nocull» 1
}
Первая строка в .VMT файле это имя шейдера который будет использован. Переменные шейдера для этого материала определены внутри секции заключенной в фигурные скобки. Обратите внимание, что не нужно использовать символ '=' между переменной материала и ее значением.
Можно создавать комментарии используя символы '//' в начале строки — движок просто проигнорирует все символы что находятся правее знака коментария.
Если шейдер требует «нейтрализации» до более упрощенного шейдера — для менее производительных компьютеров, вы можите указать опциональный блок для переопределения переменных материала указаных в главной секции.
Вот пример:
«LightmappedGeneric»
{
«$basetexture» «shadertest/LightmappedTexture»

«$envmap» «shadertest/LightmappedTexture_envmap»

// Если версия шейдера снижается до «LightmappedGeneric_DX7»,
// то environment map определенный в данной секции будет использоваться вместо
// определенного выше. Поскольку переменная $basetexture не определена в этой секции,
// будет задействована та которая определена в главной секции.
«LightmappedGeneric_DX7»
{
«$envmap» «shadertest/OverrideEnvMap»
}

// Если версия шейдера снижается до «LightmappedGeneric_DX6»,
// то переменная $basetexture определенная в данной секции будет задейстована вместо
// определенной выше. Поскольку переменная $envmap не определена в этой секции,
// будет задействована та которая определена в главной секции.
«LightmappedGeneric_DX6″
{
„$basetexture“ „shadertest/OverrideTexture“
}
}
Еще одна вещь которую вы могли заметить в .VMT файлах — это специальные переменные начинающиеся символом '%'.
Например:
„UnlitGeneric“
{
„$envmap“ „shadertest/shadertest_envmap“
„%tooltexture“ „shadertest/shadertest_envmap“
}
Попросту говоря — такие переменные используются только утилитами и не используются движком в самой игре. Из переменных которые начинаются символом '%' скорее всего вам понадобятся только '%tooltexture», «%keywords», «%detailtype» и все которые начинаются словом «compile», например «%compileWater» или «%compileHint».
Компиляция текстур для Source
Движок Source использует файлы .VTX (Valve Texture) для хранения данных текстур. Эти файлы содержат не только данные полученные из источника тексутры, кроме того они хранят данне для каждого МИП-уровня (mip-level) использующегося для рендеринга тексутры на разном удалении от точки наблюдения. .VTX фйалы создаются из TGA файлов с 16, 24, или 32 битной глубиной цвета при помощи утилиты Vtex. Данная утилита использует TGA файл и опциональный текстовый файл, который описывает дополнительные параметры для компиляции тексутры. Создавая .VTX, утилита пытается найти и использовать эти два файла. TXT файл содержащий парамтеры, должен името то же имя (до расширения .txt) и находится в той же директории что и TGA файл подлежащий компиляции. For example: the test.tga file must be in the same directory as the test.txt file for the tool to link the files properly.
Если TXT файл не существует, Vtex автоматически генерирует пустой файл с правильным именем и в правильной директории.
Исходный TGA дложен существовать в под-директории materialsrc, в директории вашего мода MOD. Эта директория является «зеркальным» отображением директории materials повторяя ее стркутуру поддиректорий и файлов, это позволяет утилитам корректно определять исходные и конечные пути файлов с которыми они работают. Для примера, если вы компилируете TGA файл находящийся в директории MyMod/materialsrc/test, конечный .VTX файл будет помещен в директорию MyMod/materials/test.
Для компиляции текстуры, просто перетащите в проводнике оба TXT и TGA файла на значек Vtex, или запустите с коммандной строки Vtex указав в качестве параметра путь и общее имя файла.
Вот пример для компиляции с помощью bat файла:
set BIN_PATH=C:\\Progra~1\\valve\\steam\\SteamApps\\username\\sourcesdk\\bin\\
set TGA_PATH=C:\\Progra~1\\valve\\steam\\SteamApps\\ИМЯ_ПОЛЬЗОВАТЕЛЯ\\sourcesdk\\sdkcontent\\materialsrc\\

%BIN_PATH%vtex.exe %TGA_PATH%console\\background01
С помощью bat файлов можно создавать пакетную обработку сразу для нескольких текстур.

Утилита выводит сообщение что она создала файл и .VTX будет создан в директории materials в той поддиректории где размещен материал в исходной директории.
Внимание: для того чтоб Vtex корректно работала и определяла пути, переменнная среды VPROJECT должна быть правильно установлена для вашего мода.
Как только будет создан .VTX, создается .VMT файл для использования текстуры движком Source.
Параметры для Vtex которые могут быть считаны из TXT файла:
$nolod Не использовать версии низкого качества этой текстуры в ранних версиях Direct X
$nomip Не генерировать МИП-уровни (mip-levels) для данной текстуры
$clamps
$clampt
Запретить повторение текстуры соответственно в S или T координатном пространстве (S — горизонталь, T — вертикаль). Чаще всего используется для спрайтов, которые не тайлятся.
$skybox Используется для компиляции скайбоксов (неба). Гарантирует согласование углов между кажой гранью.
$startframe (число)
$endframe (число)
Используется для анимированных текстур. Тексутры должны называться texture000, texture001, texture002, и т.д. Параметр $startframe определяет индекс первого кадра а $endframe — последнего.
$nocompress Запретить компрессию для данной текстуры. Важно для текстур с плавной градацией цветовой палитры (подобные радйжным сияниям)
$nonice Запретить NICE фильтрацию данной тексутры в низких МИП-уровнях
$dxt5 Использовать DXT5 компрессию вместо обычной полной
Создание .VMT файла
.VMT файл описывает как будет рендериться .VTX файл на экране. Существует большое количество шейдеров которые могут использоваться для рендера текстуры. Для наяала можно использовать простой шейдер: LightmappedGeneric. Данный шейдер используется для поверхностей мира, которые могут получать lightmap-ы.
Простейшее определение этого шейдера:
«LightmappedGeneric»
{ «$basetexture «test/MyTexture» }
Это приведет к рендерингу «test/MyTexture» .VTX файла непрозрачным с применением lightmap (карта освещения). Наиболее часто используется для тексутр применяемых на брашевых поверхностях (например стены). С созданием .VTX и .VMT файла, мы можем использовать эту текстуру на поверхностях при создании карт в Hammer.
Уже существуют специальные программы которые позволяют выполнять компиляцию через удобный интерфейс.
Автор: DarkLight.
19 февраля 2005, 16:04