ProGamer
×

Играем в Source SDK, как создавать текстуры


sdk custom textures

Следуя предшествующим статьям цикла, вы наверняка освоили процесс создания незаурядной карты с уникальными триггерами и различными видами освещения. Но для воплощения самых смелых идей в жизнь чего-то не хватает, верно? Стандартный контент полету фантазии не помощник, поэтому в данном уроке вы научитесь создавать собственные текстуры для своих карт на движке Source. Подобным образом вы сможете создавать текстуры и для моделей, спреев и вообще всего, что работает с изображениями в играх на Source.

Создание текстур не интуитивный процесс, но и не чрезмерно сложная задача. В отличие от большинства современных движков здесь нет «просто перетаскиваешь и всё работает»: большую часть работы придётся делать самостоятельно.

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. Для начала познакомьтесь с этим окном:

vtf options

Здесь много всего, но я разобью по пунктам:

  • Normal Format: Какая компрессия используется для стандартных (непрозрачных) изображений.
  • Alpha Format: Компрессия, используемая в изображениях с прозрачностью.
  • Texture Type: Применяется, только когда вы импортируете больше одного изображения, и определяет, что они должны из себя представлять. В 99% случаев здесь выбирается Animated Texture.
  • Resize/Clamp: Тут можно изменить размер в последний момент, но я советую делать это заранее.
  • Generate Mipmaps: MIP-карты – это уменьшенные версии текстуры, которые игра будет накладывать при отдалении. Здесь лучше всё оставить по умолчанию.
  • Normal Map: Карты нормалей используются для придания текстуре мнимой глубины. Опять же, этим лучше заниматься самостоятельно, но вы можете дать VTFEdit шанс и проверить результат её работы.

Хорошее руководство по выбору компрессии есть на Valve Developer Wiki. Если возникают сомнения, оставляйте всё по умолчанию.

Вкладку Advanced мы пока не трогаем (здесь настраивается VTF-файл – оставляйте 7.2, если только не знаете точно, что делаете).

После нажатия ОК вы должны увидеть вот это:

vtf import

Теперь, если не хотите поиграть с продвинутыми настройками, можете нажимать 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.
  • Этого должно быть достаточно.

Создание анимированных текстур

При создании анимированных текстур большая часть работы производится перед импортированием, так как кадры анимации должны храниться в отдельных файлах. С этим могут возникнуть сложности, но гугл вас выручит.

pglogo-animated

Названия готовых файлов должны нумероваться по типу: imagename_0000.tga, imagename_0001.tga, imagename_0002.tga.

При импортировании выделяйте сразу все файлы, остальное сделает VTFEdit.

frames

Если всё сработало, в информации об изображении должно быть указано более одного кадра.

VMT-файл для анимированной текстуры содержит чуть побольше данных:

«LightMappedGeneric»

{

«$baseTexture» «progamer/animated»

«$surfaceprop» «MetalPanel»

«$surfaceprop2» «MetalPanel»

«$translucent» «1»

«Proxies»

{

«AnimatedTexture»

{

«animatedTextureVar» «$basetexture»

«animatedTextureFrameNumVar» «$frame»

«animatedTextureFrameRate» «10»

}

}

}

Результат:

result

Центральная текстура анимирована, правая текстура статичная, но использует кое-какую магию в файле VMT для движения. Это мы рассмотрим в следующих уроках.

Запаковка текстур в карту

Здесь немного проявляются особенности разных игр. Если вы хотите распространять свою карту с пользовательскими текстурами через интернет, то наилучшим решением будет запаковать текстуры в файл BSP.

Для аддонов Garry’s Mod этого делать необязательно, так как структура .gma сохраняет файловую иерархию. Однако, если вы хотите, чтобы люди запускали карту на своих серверах и не доставали вас отзывами «карта отстой, текстурок нету», то лучше их всё же запаковать. Такое случается, потому что люди декомпилируют ваш файл GMA для хранения серверных файлов в FastDL, а не в Workshop.

И как же паковать текстуры в карту? С помощью Pakrat.

Pakrat позволяет открывать файлы BSP и изменять их содержимое. BSP-файлы представляют из себя контейнеры (как .zip, к примеру), где хранятся различные данные – обычно это файлы самой карты, файлы освещения, кубические текстуры и любой дополнительный контент, который вы решили поместить в свою карту.

pakrat

Дальше всё довольно просто: открываем скомпилированную карту, нажимаем Add и добавляем свои текстуры.

Обращайте внимание на столбец Path: там должно быть что-то вроде “materials/ваша-подпапка/“.

Сохраняем карту и всё готово. Для тестирования удалите свои текстуры из папки игры, чтобы убедиться, что они работают из .bsp, а лучше вообще проверяйте карту на другом компьютере.

Полезные замечания

  • Если возникают проблемы, проверяйте консоль, она может подсказать, почему что-то пошло не так.
  • Source кэширует данные текстур, так что команда «reload» не даст изменений, загрузите другую карту, затем снова свою или перезапустите игру.
  • В Hammer работает такое же правило, но здесь поможет только перезагрузка, благо Hammer запускается быстро.
  • При импортировании в VTFEdit проверяйте версию VTF, разные игры поддерживают только определённые версии (версия 7.2 хорошо поддерживается, хоть и старая).

Комментарии

Вы должны быть зарегистрированы, чтобы оставить комментарий

Зарегистрируйтесь, это просто!


Зарегистрироваться

Уже зарегистрированы?


Войти сейчас

frostbite, по сути все гайды, весь маппинг, что был в голд сорсе, остался таким же и в сорсе, просто появились новые энтити, дисплейменты и прочее полезные фишки. Но что поменялось/появилось, так это materials и прочее. Было бы здорово, дополнить библиотеку ещё одним уроком, про создание собственной коробки, со своими/сторонними текстурами, моделью, скайбоксом, где что должно лежать и какой софт для этого необходим и по сути всё.
Лично у меня это вызывает проблему на данном этапе, всё остальное вы уже и так ясно и подробно изложили ранее.

Ответить +1 - +

pr3da, в плане серия гайдов про Autodesk Stingray. Про Source если что-то конкретное, можешь предложить.

Ответить 0 - +

pr3da, посмотрим, чего насобирается, но вполне вероятно продолжение серии уроков. По крайней мере, раньше HL3 уложимся точно. :в

Ответить 0 - +

doctoragon, видимо так и есть, забавно то, что полу годом ранее, делал прозрачные декали по этому же тутору, и проблем с ними не было, а тут...
Кстати, ожидаются новые туторы? А то с переходом на сорс/go есть проблемы, в 1.6 всё было куда проще, 1 папка, 1 .wad и всё) В любом случае спасибо.

Ответить 0 - +

pr3da, текст выше тоже подразумевает и уточняет, что «progamer» - название папки, в которой находится текстура. Просто так вышло, что текстура имеет аналогичное имя, поэтому путь к ней имеет вид «progamer/progamer».

В вашем случае должно быть «$basetexture» «preda/tex1». Если проблема все равно возникает, должно быть, что-то не то с кодировкой. Стоит попробовать разные настройки выходного VTF-файла.

Ответить +1 - +

Создал пару простых текстур в своей папке materials/preda/tex1; tex2; ... , в хаммере они отображаются в панеле выбора текстуры, а вот когда наношу - то просто белая текстура.

Свойства vmt такие:

LightmappedGeneric
{
«$basetexture» «preda/preda»
«$surfaceprop» «MetalPanel»
}

И напрашивается вопрос, в строке $basetexture» «preda/preda» - я оставил как в туторе, но в туторе от valve, их путь стоит coast\shingle_01 - т.е кост - папка, а схингл_о1 - название самой текстры. Но даже если я поменяю и сделаю preda/tex1 - то результат тот же.
Подскажите в чём может быть проблема?

Ответить 0 - +