Играем в Source SDK, как создавать текстуры
Следуя предшествующим статьям цикла, вы наверняка освоили процесс создания незаурядной карты с уникальными триггерами и различными видами освещения. Но для воплощения самых смелых идей в жизнь чего-то не хватает, верно? Стандартный контент полету фантазии не помощник, поэтому в данном уроке вы научитесь создавать собственные текстуры для своих карт на движке Source. Подобным образом вы сможете создавать текстуры и для моделей, спреев и вообще всего, что работает с изображениями в играх на Source.
- Базовые элементы, текстуры и компиляция
- Триггеры и двери
- Работа с освещением, cubemaps и HDR
- Собственные текстуры
Создание текстур не интуитивный процесс, но и не чрезмерно сложная задача. В отличие от большинства современных движков здесь нет «просто перетаскиваешь и всё работает»: большую часть работы придётся делать самостоятельно.
VTF и VMT
Текстуры делятся на два файла: VTF (Valve Texture Format), файл, в котором хранится изображение, сами пиксели вашей текстуры, и VMT (Valve Material Type), файл, содержащий метаданные и информацию о шейдерах. Для отображения текстуры в игре используются оба файла.
VTF
Файлы VTF (.vtf) хранят всю информацию о пикселях, альфа-картах и MIP-картах, которую может использовать текстура.
Они создаются конвертированием исходного изображения в специальной программе. Данные располагаются таким образом, чтобы рендеринг был наиболее эффективным, поэтому обычные .jpg/.png-файлы без конвертации не используются. Самое главное – размеры изображения должны представлять из себя двойку в степени (то есть 64×64, 128×128, 256×256, 1024×1024 и т.д.).
Подробный технический анализ файлов VTF можно найти на Valve Developer Wiki.
VMT
Файлы 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, .gif, .png и .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, а лучше вообще проверяйте карту на другом компьютере.
Полезные замечания
- Если возникают проблемы, проверяйте консоль, она может подсказать, почему что-то пошло не так.
- Source кэширует данные текстур, так что команда «reload» не даст изменений, загрузите другую карту, затем снова свою или перезапустите игру.
- В Hammer работает такое же правило, но здесь поможет только перезагрузка, благо Hammer запускается быстро.
- При импортировании в VTFEdit проверяйте версию VTF, разные игры поддерживают только определённые версии (версия 7.2 хорошо поддерживается, хоть и старая).