Shambler team
Статьи по работе с текстурами под движком Gold Source (игры Half-Life 1, Quake 2 и т.п.)

Всё о текстурах

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

Состоять наше "урководство" будет из 4-х частей и перечня дистрибутивов ПО:

  1. Введение
  2. Использование текстур в редакторе Valve Hammer Editor
  3. Создание текстур с помощью редактора Wally
  4. Выводы, советы и т.д.
  5. Список программ для редактирования
Итак, понеслось

1. Введение

Что же представляют собой текстуры? Текстуры — это "обёртка" всего, что мы с вами видим в игре Half-Life, да и вообще в играх. Посмотрим на кадр внизу и представим что у нас карта без текстур:

Хоть белый — тоже текстура, но всё равно это отнюдь не карта, а какие-то непонятные формы. Теперь мы добавляем текстуры, и у нас получается примерно такое:

Вот теперь это уже похоже на карту или по крайней мере на её кусок. Как видите, текстуры — одна из самых важных вещей на вашей карте.

Также текстуры следует использовать разумно и аккуратно, текстуры играют большую роль в создании атмосферы для вашей карты. Мапперы могут фантазировать на разные темы в своих картах с помощью текстур, и игроки могут понять задумку автора карты по текстурам. Итак, как же их использовать и, если не хватает стандартных текстур, сделать свои? Ответы на эти вопросы найдёте здесь.

2. Использование

Данная часть подробно рассказывает обо всём, и если вы знаете как настраивать и использовать текстуры в редакторе карт Хаммер, то можете это пропустить.

Итак, чтобы через редактор добавить текстуры карте, нужно сначала их ему указать. Текстуры хранятся в файлах с раширением *.wad и находятся
в каталогах модов. Указать файлы через Хаммер (скачать редактор можно из списка в конце) следующим образом:

Заходим в настройки Хаммера (Tools->Options) выбираем закладку Textures

жмём кнопку Add Wad, указываем файлы и щёлкаем ОК. С самого начала лучше зайти в папку \Valve и выбрать там 4 вада :
halflife.wad — самый крупный вадник, в нём содержатся почти все текстуры — их точное количество в нём 3116 штук.
xeno.wad — текстуры с мира ксен в 264 штуки
liquids.wad — текстуры жидкостей (в halflife.wad текстуры жидкости также имеются в наличии), количество — 32 штуки
decals.wad — декали, особые текстуры, о которых я расскажу дальше.
Их выбирать необязательно, однако они являются стандартными вадами, и в них все стандартные текстуры из оригинальной Халфы.
Моды с дополнительными текстурами имеют свои дополнительные вады в своих папках, например у Opposing Force — gearbox.wad, у Blue shift — barney.wad, у Counter-Strike — cstrike.wad и т. д.

Если вы сделали свой вад, то вы должны занести его в папку со своим модом.

Если же вы хотите добавить свои текстуры, но не хотите чтобы помимо вашей карты качали и вадник, то при компиляции добавляйте csg -nowadtextures
Тогда все текстуры будут находиться в самой карте, от этого, правда, увеличится размер файла карты, и немного увеличатся тормоза. Также можно вложить wad в карту, если к csg дописать параметр -wadinclude mywad.wad, где mywad название вашего вад-файла. Если их несколько, то пишите каждый через пробел.

Бывают иногда проблемы, что карта требует вадник, текстуры которого на нём не используются. Всё это потому, что компилятор записывает все вады, которые присутствовали в Хаммере во время компиляции карт в обязательные. Чтобы с вашими картами такого не было, вам не надо удалять из Хаммера лишние, по тысяче раз указывая и удаляя их из списка, добавьте к csg параметр -wadautodetect, и он включит в список обязательных только те вад-файлы, текстуры которых задействованы в карте.

Примечание: данные параметры работают с зонеровскими компиляторами (ZHLT — Zoner's Half-Life Tools), скачать их можно отсюда zhlt.info — обычные компиляторы такого не поддерживают.

В противном случае, чтобы повторно не перекомпилировать, вам придётся удалить упоминание о лишних wad-файлах с помощью утилиты Ripent.

Идём дальше. Итак — вады добавили, теперь надо их добавить на карту. Проверьте, стоИт ли у вас галочка на View->Screen Elements->Texture Bar, это табличка с текстурами, по умолчанию находящаяся справа. При загрузке карты там появится какая-нибудь текстура, обычно та, что первая из всех вадов по алфавиту (латинскому естевственно :Р или цифрам). Когда вы создадите обычную примитивную фигуру, она будет окрашена той текстурой, которая стоит в тот момент там. Выглядит эта таблица так:

  • Texture Group — здесь мы выбираем вады, в которых находится нужная нам текстура — лучше всего всё-таки ставить All Textures — тогда нам будут доступны все вадники, которые мы указали.

  • Current Texture — "AAAtrigger" — название текстуры, которая в данный момент выбрана — менять можно стрелочками.

    Ниже идёт сама текстура и её разрешение в пикселях (у нас 16 на 16 точек ).

  • Browse — кнопка вызывающая поиск текстур, с помощью которого можно намного легче найти текстуры, чем стрелочками

    ( нажмите чтобы увеличить )
    • Size — ставим условный размер текстур, если ставим 32х32\64х64\128х128, то текстуры будут в окне поиска именно такого размера, независимо от их настоящего.
    • Filter — здесь пишем символы, которые должны содержаться в названии текстуры, чтобы облегчить поиск, иными словами фильтруем :Р
    • Mark — отмечает все грани, которые окрашены выбранной в окне текстурой.
    • Replace — заменяет на всех гранях, окрашенных выделенной текстурой на заданную текстуру (окошко опишу чуть позже).
    • Only Used Textures — если флажок стоит, то в окне появятся те текстуры, которые вы уже использовали на карте.


  • Replace — заменяет на карте все текстуры на гранях, окрашенных выделенной текстурой на другую текстуру:
Здесь слева текстура которую заменить, справа текстура на которую заменить. Для более легкого поиска нажмите Browse, и вылезет окошко, которое я только что описал.

Итак, про выбор текстуры мы разобрались, идём дальше

У многогранника 6 сторон-проекций (по числу традиционных видов в черчении), и каждая из них может быть закрашена отдельной текстурой. Для такой операции нам понадобится инструмент Toggle texture Application, который находится справа, и у него вот такой значок:

Итак, открываем, и у нас появляется такая табличка:

Мы уже знаем про название текстуры, замену, поиск и группу. Разберём те, что мы не знаем.

  • Scale — масштаб, точнее величина множителя масштаба текстуры. Здесь текстуру можно растянуть. 1,00 — это стандартный размер, 1,50 — текстура растягивается в полтора раза, если 2,00 в 2 и т. д.

  • Shift — Здесь текстуру можно сдвигать также уменьшая или увеличивая числовые значения.

  • Rotate — Поворачивание текстуры, в строчке пишем количество градусов.

  • Justify — Выравнивание текстур:
    • Fit — здесь текстура выравняется ровно по поверхности.
    • T — здесь текстура выравняется с упором вверх,
    • B — тут с упором вниз,
    • L — тут с упором влево,
    • R — с упором вправо,
    • C — с упором в центр,
  • Align — своеобразное выравнивание габаритов текстуры:
    • Align to Face — просто берётся грань и на неё накладывается текстура. Рулит для создания элементов техногенного ландшафта.
    • Align to World — берётся грань. Из трёх возможных базисных плоскостей выбирается такая, чтобы угол между гранью и этой плоскостью был минимальным. Затем на эту плоскость накладывается воображаемая текстура, и пикселы этой текстуры проецируются на грань. Метод рулит при создании естественных ландшафтов — холмов там всяких.
    Существуют три положения, в которых воображаемая плоскость совпадает с плоскостью грани. В таких случаях разом активируются оба флажка.
    Что касается зеркального отображения: существуют также три положения, в которых грань лежит в одной из базисных плоскостей, но координатная система грани является зеркальным отражением координатной системы воображаемой плоскости. Т. н. "правые" и "левые" базисные системы измерения. В этом случае переключение между Align to World/Align to Face приведёт к тому, что текстура будет всякий раз зеркально отражаться.
    [За предоставление информации по Align огромное спасибо Loony].


  • Hide Mask — если включено, редактор не помечает выделеную сторону красным.

  • Apply — накладывает текстуру на выделенную сторону.

    Также накладывать текстуру можно, щёлкая второй кнопкой мышки по грани в 3-хмерном виде.

    Также есть такая очень нужная вещь как подгонка [за указание на эту особенность спасибо BUzer`у]: в общем представим, что у вас есть два блока, и они должны быть стеной на уровне, но случилась примерно такая проблема:

    Это происходит из-за того, что у текстур на двух блоках разные значения смещения, масштаба и т. д. Их можно подгонять, чередуя значения этих параметров, однако есть более простой и быстрый способ. Выделяем грань, текстура на которой по нашему мнению расположена правильно:

    Затем второй кнопкой мышки щёлкаем по второму блоку, и у нас теперь они выравнены:

    Вот так то... Однако при разных углах текстур текстуры будут накладываться косо, и потому чтобы и там было ровно, нужно зажимать alt и щёлкать также второй кнопкой мышки.

  • Mode — способы обозначения и закраски сторон щелчком первой кнопки мыши:
    • Lift + Select — указать на текстуру и пометить её (стандартный режим).
    • Lift — только указать на текстуру.
    • Select — только пометить текстуру.
    • Apply (texture only) — сразу накладывает текстуру на поверхность.
    • Apply (texture and values) — накладывает текстуру и её параметры (это если какая-то грань выделена, то все её показатели угла поворота (Rotate), масштабирования (Scale) и т. д. скопируются на ту, на которую вы нажали)
    • Align to View — очень интересный режим, который разворачивает текстуру под тем углом, под каким вы в 3-хмерном виде в данный момент смотрите на блок.
      Выделишь одну сторону, и легче затекстуривать в 3-хмерном виде.
С этим также разобрались, но не помешает сделать дополнение про особенности выделения граней для затекстуривания. Начнём с несерьёзно простого:
  • Во-первых, чтобы наложить текстуру или изменить текстурные параметры, грань на объёмном виде [camera] выделяют наведением на неё курсора и щелчком левой клавиши мыши.
  • Во-вторых, очевидно, что если выделен целиком браш, то выделяются все его грани для перетекстуривания.
  • В-третьих, если зажать только Ctrl, то можно добавлять к уже выделенным текстурам дополнительные щелчком левой кнопки мыши.
  • В-четвёртых, если зажать только Shift, то щелчком мыши можно выделить все стороны отдельного многогранника как в группе брашей или в составной брашевой энтите (и ради перетекстуривания не понадобиться разгруппировывать сложный объект), так и в одиночном браше.
  • В-пятых, если зажать Ctrl+Shift, то щелчком левой кнопки мыши можно инвертировать выделение граней на отдельном многограннике, не зависимо от того, состоит ли он в группе брашей или в составной брашевой энтите или он просто ни с чем не объединён.


Также для текстур есть ещё два инструмента:

Apply Current Texutre — наложить текстуру, выбранную заранее в таблице текстур, на выделенный блок, то есть закрасить его полностью данной текстурой.

Apply decals — наложить декаль.
Decal — означает "переводная картинка"
, это особый тип текстур разной прозрачности, отображаемых поверх обычной текстуры на грани. Ей в последнем индексе 256-тицветной палитры задан общий цвет, а величина яркости точки (в чёрно-белых градациях) задаёт степень прозрачности, то есть белый фон декали в игре полностью прозрачен, серые означают частичную прозрачность, а вместо чёрного отображается непрозрачный цвет рисунка, который задан последним в палитре. Декали — это надписи, следы крови, следы от пуль и т. д. С помощью этого параметра вы в трёхмерном виде можете вставить декаль на любую поверхность. Декали находятся в decals.wad

Итак с использованием текстур в Хаммере мы пожалуй разобрались. А если вам нужны свои текстуры? Если у вас есть рисунок, и вы хотите сделать его текстурой? Чтобы узнать, как это делается, читайте третью часть руководства — создание текстур...


3. Создание текстур

Данная часть очень массивная, поэтому сама будет состоять из нескольких параграфов: Приступим:

Итак, сначала нам нужен сам Wally, качаем например отсюда. Открываем его и создаем новый файл, в типе укажите Half-Life Package. Этим самым мы создали вад. Но он пока что пустой, и нам надо закинуть в него текстуры. Сделать это можно тремя способами

  1. Создавая новую текстуру
  2. Копируя с рисунка
  3. Копируя с других вадов
Итак первое, создаем новый wad:

Щёлкаем по ваду второй кнопкой мышки и выбираем пункт "Create New Image" (Создать новое изображение), и у вас выскочит такая табличка:

В поле пишите название текстуры, ниже выбор разрешения текстуры, а дальше определние некоторых типов текстур, которые я разберу дальше — в общем пишите название и жмите ОК, и тогда появится такая вот табличка:

Это палитра нашей текстуры, в которой мы дальше будем работать.

  • Load (Загруз.) — загрузить палитру, обычно это файлы с расиширением *.lmp
  • New (Новая) — создать новую палитру,
  • Save (Сохран.) — сохранить свою палитру,
  • Blend (Создать градации) — смешивание красок, точнее создание градаций. Двойным щелчком выделяете первую ячейку диапазона и задаёте ей цвет начала диапазона. Теперь двойным щелчком выделяете последнюю ячейку диапазона и задаёте ей цвет последней градации. Щёлкаете одной кнопкой мышки на начальный цвет диапазона, а второй (для правшей значит правой) кнопкой мыши на конечный цвет диапазона. Только теперь щёлкаете кнопку Blend (Создать градации), и все клетки внутри диапазона будут окрашены в оттенки, плавно переходящие между выделенными цветами.
  • Index (Индекс) — номер цветового индекса в палитре от 0 до 255,
  • Red (Красный) — значение яркости красного в диапазоне [0 - 255],
  • Green (Зелёный) — значение яркости зелёной составляющей цвета [0 - 255],
  • Blue (Синий) — значение яркости синей составляющей цвета [0 - 255].
Итак, меняя числовые значения в ячейках Red, Green и Blue вы можете подбирать цвет.
Затем нажимаете ОК, и у вас появляется окно, в котором можно рисовать примерно так же, как в графическом редакторе Paint, там и можете рисовать текстуру.


Второе, копируя с рисунка:

Допустим у вас есть рисунок и вы хотите его скопировать. Это довольно просто, однако должно соблюдаться два обязательных условия — первое: размеры текстуры должны быть кратны 16 (и желательно не больше 256, хотя во многих модах уже разрешено до 512), и второе: рисунок должен быть в формате 8 бит/точку (с 256-тицветной палитрой) или 24 бит/точку (который в Wally будет преобразован в 8 бит/точку).

Затем просто выделяете рисунок и делаете Edit->Copy (Правка->Копировать), затем в редакторе Волли жмём вторую кнопку мышки, и если вы правильно скопировали то пункт "Paste As New" ("Вставить как новое") у вас должен быть активен, его и жмите. Потом выскочит такая же табличка:

Пишите название текстуры и жмёте ОК (как видите, разрешения выбирать уже не надо, так как оно было задано в рисунке). Иногда у вас может скопироваться чёрная текстура вместо рисунка. Это значит, что вы не выполнили второе условие про формат рисунка.


И, наконец, третье:

Копирование с других вадов

Если вам нравится текстура, которую вы видели, и вы хотите её задействовать в своём ваде, то скопируйте её! :Р File->Open (Файл->Открыть) указываем на какой-нибудь вадник и жмём "Open" ("Открыть"). Через секунды у нас откроется вадник, вот, например, я открыл OPFOR.wad:

Слева список текстур, по середине сами текстуры. Теперь щёлкаем по понравившейся текстуре второй кнопкой мышки и жмём "Copy" ("Копировать"). Дальше как с рисунком — жмём "Paste As New" ("Вставить как новое") и текстура появится в вашем ваде, и если у вас много текстур, и её не видно, то не паникуйте, она автоматически выстроилась по алфавиту, и просто ищите её в списке.

Примечание: вместо пункта "Paste As New" ("Вставить как новое") есть ещё "Paste Over" ("Вставить поверх") — здесь скопированная текстура скопируется на место той, на которую вы в данный момент нажали, то есть скопируется поверху.

Остальные команды — "Open" (Открыть) текстуру, "Rename" (Переименовать) или "Delete" (Удалить) всем известны,
и также есть команда "Export..." (Экспорт...), которая экспортирует текстуру в графический файл, в выскочившем окошке нужно написать название и выбрать тип файла.

Сохраняется вад также стандартно — "Save As..." (Сохранить Как...), чтобы сохранить изменения нажимайте Save... (Сохранить...)

Вот пожалуй основное из создания текстур мы разобрали. Теперь давайте разберём типы текстур.
В Халфе есть вода, небо, движущиеся экраны, и всё это обеспечивают текстуры. Тип текстуры определяют символы в приставке у названия текстуры. Итак:


Обычные — это текстуры начинающиеся с букв или цифр. У них нет дополнительных функций, они просто покрывают грани блоков.

Анимации переключения — обычно текстуры кнопок, начинаются с +0 и +А — с +0 обычно начинается текстура, когда кнопка активна (горит), с +А когда не горит (не активна).

Анимации — начинаются с +0 и до +9 — своеобразные анимации, где максимум 10 кадров. Каждый кадр имеет последовательный номер, например +5,+6 и т.д. и чередуются они со скоростью 10 кадров/с. В игре если блок покрыт любой из текстур этой групы, текстура будет двигаться (т.е. сменяться). Пример с карты blue.bsp ( эту мультиплеерную карту скачать можно тут, правда без исходника):



Состоит это из 5 кадров, вот они :

- +0lab1_cmpm3
- +1lab1_cmpm3
- +2lab1_cmpm3
- +3lab1_cmpm3
- +4lab1_cmpm3

Надеюсь, для вас приоткрылась тайна, как сделать мультипликацию :Р

Примечание из www.celephais.net/stuff/texturefaq.htm: интересно, что ещё с движка игры Quake 1 реализована также возможность анимации выключенной текстуры — когда покрытые такими текстурами брашевые объекты выключены, то текстуры на них сменяются, выбирая между названиями текстуры, начинающейся не с цифровых, а с буквенных приставок "+A", "+B", "+C" и т.д. следующей по алфавиту. Последовательность может иметь до 10 вариантов, заканчиваясь текстурой с приставкой "+J", но не должна прерываться. Естественно, в конце снова переключится на первую "+A" и продолжит.

Случайные — текстуры, которые начинаются с -0 до -9 — если вы используете -0 текстуру, то текстуры из её группы будут случайно меняться в игре. Работает это полностью только в режиме Software, в режимах OpenGL и Direct3D это зависит от видеокарты.

Светящиеся текстуры — текстуры начинающиеся с ~ , они являются светящимися текстурами, и в игре они будут светиться. Однако, чтобы текстура была светящейся, ей не обязательна такая приставка, т. к. если текстура прописана в rad-е (.rad файл мы разберём дальше), то она будет светиться независимо от своего названия.

Прозрачные текстуры — текстуры, которые начинаются с { (обычно начинаются, но именно в Half-Life может быть любое название, прозрачен будет цвет последнего индекса палитры). Это всякие решётки, сетки и т. д. В этих текстурах последний цвет палитры в игре вырезается (как такие текстуры сделать самому я напишу дальше).
Примечание: чтобы их использовать, нужно покрытый такой текстурой блок обратить в энтитю (в меню Хаммера Tools→To entity Ctrl+T), и в параметре "Render Mode" поставить "Solid", а в параметре "FX Amount" написать 255).

Текстуры жидкости — текстуры, которые начинаются с ! — текстуры воды и остальных жидкостей. Если браш закрасить такой текстурой, то он автоматически становится водой (то еcть в нём можно будет плавать), даже не являясь энтитей func_water.

Движущиеся текстуры — текстуры которые начинаются со слова SCROLL, текстуры которые двигаются на конвейерах. (чтобы проверить куда будет ехать текстура, понажимайте стрелку вниз в Texture Application — Shift по оси Y)

Проходимые текстуры — текстуры которые начинаются с @. Они очень редко используются и не описаны в SDK. Браш, который покрашен это текстурой проходим для игрока. Если же ещё не назовёшь энтитей, то по меньшей мере это уже ВИЗ блок (на заметку тем, кто хочет улучшить свой показатель р_спидс, т.е. скорость отрисовки карты, а главное преодолеть избыток граней столкновения — когда при компиляции возникает ошибка MAX_MAP_CLIPNODES).

Декали — текстуры, которые находятся в decals.wad и, также как и прозрачные, начинаются с {. Подробнее о декалях дальше.

Специальные текстуры — текстуры, которые выполняют какую-либо функцию:

  • Sky — текстура для неба, ею покрываются браши, котороые должны быть небом на карте,
  • Origin — Используется для обозначения центра вращающимся энтитям (func_tracktrain, func_door_rotating и т.д.) (Прим. все стороны браша должны быть закрашены этой текстурой!), и должен быть включён в этот брашевый объект.
  • Clip — создает невидимую преграду для движения игрока. Через неё пролетают пули и проходят монстры (Прим. все стороны браша должны быть закрашены этой текстурой!). И такой браш может быть включён в движущиеся брашевые объекты, например в поезд или машину.
  • AAAtrigger — Обычно используется для покраски граней невидимых энтитей — триггеров (и областей вроде func_monsterclip и т.п.).

Также если вы используете компилятры от Зонера, то там есть zhlt.wad, в котором есть несколько важных для оптимизации карт текстур (и при компиляции этот wad вкладывается автоматически в карту, так что вам не надо его кидать в папку с вашим модом).
  • Null спецтекстура NULL — текстура, которую не видит движок. То есть если сторона закрашена нуллом, движок её не отрисует, и это экономит показатель w_poly. Поэтому покрывайте этой текстурой те стороны, которые игрок не видит, но движок всё равно рисует (раньше для этого использовали текстуру Sky, а теперь Нулл).
  • Skip спецтекстура SKIP и Hint спецтекстура HINT — две текстуры, которые всё время вместе на одном браше, помогают оптимизировать карту. Создаётся блок, у которого одна из граней (обычно одна, реже две-три) покрывается текстурой Hint и располагается своей плоскостью в том месте, где нужно разрезать VIS-блок на части. Остальные бездействующие стороны блока покрываются текстурой Skip. Подробнее о них в руководстве про р_спидс, которое выйдет скоро.
  • Bevel спецтекстура BEVEL — текстура, которая действует так же, как Null текстура, но к тому же она не растягивается при генерации ограничивающих поверхностей (каркасов границ столкновений) CSG-компилятором. Её можно использовать для уточнения отсечений BSP-структуры. Т.е. чтобы избавиться от ошибок из-за ограничивающей поверхности на внешних углах без использования параметра компиляции "-cliptype precise" (хотя применение "-cliptype precise" всё ещё рекомендуется для избежания ошибок с ограничивающими поверхностями, поскольку эта спецтекстура пока в виде эксперимента).

Напомню, что каркасы границ столкновений (clip hulls) — это невидимая непроходимая и непростреливаемая структура стен. А VIS-блоки — это видимые игровые сектора, только графика без проверки на столкновения. На большинстве поверхностей и те (точнее именно каркасы границ для просчёта реакции на точечные объекты — hulls 0) и другие встречаются вместе с обоих сторон от плоскости.

Итак с типами текстур и воздействием символов !, ~, @, - ,+ и { на текстуры мы разобрались.
Остаётся символ #, который обозначает текстуру с буквой, символом или цифрой. Например, в Half-Life для каждой декали, изображающей цифру от 0 до 9, своя картинка:

{64#0
{64#1
{64#2
{64#3
{64#4
{64#5
...
{large#s0
{large#s1
...{large#s6
{large#s7
{large#s8
{large#s9

Чаще # пишут не в приставке названия текстуры, а где-то в середине перед самим символом/цифрой, отражающей в названии текстуры её изображение. Этот знак нужен не только для удобства восприятия того, кто подбирает текстуру, но и для автоматического построения элементов карты (хотя в каком именно редакторе или генераторе карт используется, не знаю).
А пока прейдём к следующей части:


Создание фрагментарно прозрачных текстур и декалей

Декали — это один из важных элементов игры. С их помощью можно поместить след от пули на стену, следы крови и т. д. Однако возникает такой вопрос: как самому забацать такие декали?

Вообщем в отличии от аэрозольных рисунков, которыми все балуются в многопользовательских режимах игр, декаль для движка Gold Source (Half-Life 1) нужно делать в градациях серого, отвечающих за степень прозрачности. Это сделано для того, чтобы декаль выглядела реалистично, и чтобы вы могли видеть текстуру стены за ней. Однако свои декали вы можете засунуть в вадник Half-Life или вадник вашего мода, который будет называться decals.wad — другие названия движок может не понять, и будет воспринимать как обычную текстуру. Текстура должна быть 256 цветной с примерно такой палирой — в градациях серого от белого (255 255 255) до чёрного (0 0 0) или (1 1 1). В палитре клетки заполняете от 0 до 254 соответственно. Последний 255 индекс палитры будет означать цвет, которым будет окрашена ваша декаль. В игре выглядит это так:

Вот мы и работаем с палитрой, как я и обещал.
Также используйте оттенки серого при создании текстуры, так как белый в игре будет прозрачным, чёрный будет окрашен в цвет указанный на палитре, а оттенки серого будут задавать полупрозрачность в зависимости от того, как вы нарисуете текстуру. Вообщем делаем так: копируем decals.wad в папку со своим модом, открываем эту копию в редакторе Волли, экспортируем текстуру (для соблюдения стандартов поиска текстур желательно поставить перед названием символ { ) и настраиваем палитру, как я описал ранее. Сохраняем вадник и затем через Хаммер, КвАрК или другие редакторы вставляем эту декаль на поверхность в карте и всё. Если теряете палитру при вставке текстуры в wad, то можете действовать так:

  1. В редакторе Wally загружаете вашу текстуру из файла .png, .jpg или др. К примеру:
  2. В меню редактора Wally нажимаете File→New (Файл→Создать)
  3. В окне "Create new texture"("Создать новую текстуру") задаёте размер и тип, в нашем случае "Half-Life Texture".
  4. В следующем окне "Palette Chooser" ("Выбор палитры") щёлкаете двойным щелчком по начальному индексу палитры — верхней левой клетке и задаёте ему самый яркий белый цвет (255 255 255), предпоследнему цвету — нижней второй клетке справа двойным щелчком задаёте чёрный (0 0 0). Щёлкаете кнопку Blend (Создать Градации) — и "размазали" палитру на градации. А последний цвет — нижнюю правую клетку красите в цвет декали.
  5. Теперь копируете загруженную картинку и вставляете в пустую текстуру с настроенной палитрой.
  6. А после оттуда копируете всю текстуру и вставляете её в decals.wad, задавая ей название.

Вот что у нас получилось:

Легко не правда ли?

Прозрачные текстуры делаются по такому же принципу, только в цвете последней ячейки мы ставим параметры RGB = 0 0 255 :

Красного = 0, Зелёного = 0, Синего = 255, и у нас получится чистый синий цвет, а сама текстура должна быть цветной с синим фоном [Нет, цвет может быть любым, главное в Half-Life, что он последний в палитре — примеч. ObaGlaza. Но чистый синий цвет автоматически поместится в конец палитры, если вы импортируете текстуру не редактором, а консольными утилитами от Valve — примеч. G-cont].

Примечание: если вы копируете прозрачную текстуру или декаль — менять их палитры не надо, так как они уже настроены авторами wad-ов, откуда вы копируете. Кстати, если бы мы такую текстуру делали для серии игр Unreal, то прозрачным использовали бы 0 индекс палитры.


Перейдём к следующей части —

Светящиеся текстуры

Текстуры с приставкой из тильды ~ светяться, но это не всё. Даже на данный момент не все знают, что такое светящаяся текстура, и как это использовать. Многие хорошие мапперы до сих пор ставят под каждой статичной лампочкой точечную энтитю света... Итак вот вам об этом:
Информация о светящихся текстурах хранится в файле lights.rad, который идёт в комплекте с Хаммером. Этот файл должен находиться в одной папке с компиляторами, тогда компилятор Rad автоматически его обнаружит. Теперь о его содержании: изначально тот rad, что идёт в комплекте пустой, и мы должны сами его настраивать. В последних версиях Хаммера в комплекте идёт valve.rad — рад-файл, которым вроде бы пользовались при создании оригинальной Халфы. Вы можете, чтобы не мудохаться, скопировать этот файл в папку с компиляторами и переименовать его в lights.rad

Но если вы всё-таки решили изменить, то так тому и быть. Во многих руководствах авторы открывают lights.rad с помощью блокнота, у нас же на сайте есть программа RAD Editor, в которой rad-файл настраивать намного удобней. Сначала давайте рассмотрим действия с текстовым редактором.

Вообщем нам надо прописать текстуру, например, вот эту:

Её название +0~tnnl_lgt1.
Теперь через блокнот пишем в рад-файле строчку
+0~tnnl_lgt1 240 230 100 10000

Как видите, сначала идёт название текстуры, затем цвет в RGB и последняя — яркость. Вроде всё очень просто, но встает вопрос — как узнать правильный цвет и яркость?

Есть два способа — первый создать свет в Хаммере, там настроить поле Brightness, и оттуда скопировать параметры, с той лишь разницей, что последнее число — яркость — вам надо умножить примерно раз в 15 [для маленьких ламп — это хорошо, а для больших экранов и в 5 раз умножение велико — примеч. ObaGlaza]. Второй — это посмотреть valve.rad (если его у вас нету, качайте отсюда) и делать как там — valve.rad удобнее редактировать через Rad Generator.

Однако последние версии зонеровских компиляторов добавили в fgd такую энтитю, как info_texlights — можно прописывать в неё прямо на карте вместо использования рад-файла. Просто отрубите в окне свойств объекта кнопку SmartEdit, щёлкните Add, в поле "Key" пишите название текстуры, а в поле "Value" те четыре числа, что и в rad файле, и эффект будет тот же самый. Подробное описание info_texlights.

Ну с rad-файлом мы разобрались, перейдём дальше — materials.txt

Вы когда-нибудь замечали, что если ходите по воде звук один, по полу другой, по снегу тоже другой и т.д. Или если стреляете по деревянным ящикам, то звук дерева, в стекло стекла, а в металл металла?

Это всё так же проходит через текстуры, и настраивается в документе под названием materials.txt. Находится он в папке Sounds, которая находится в файле с расширением *.pak, обычно pak0.pak (открыть файлы формата .pak и извлечь можно с помощью редактора PakScape Pak Scape).

Вот открываем файл и видим перед собой примерно такую картину:


( нажмите чтобы увеличить )

Тут следуют названия текстур и перед ними буква, обозначающая какой тип звука будет звучать:

  • M — металл,
  • V — вентиляция,
  • D — грязь, земля,
  • S — шлёпание по воде,
  • T — сетка,
  • G — решётка,
  • W — дерево,
  • P — компьютерные детали,
  • Y — стекло.

Значит, если у вас есть новая текстура решётки, но топаем по ней как по камню, то допишите её название с типом:

G YOURTEXTURE

, где YOURTEXTURE — название вашей текстуры, причём воспринимаются первые 12 символов, различия в 13-м символе названия и дальше не распознаются.

Ну вот и с этим мы разобрались. Теперь подойдём к последней части нашего создания текстур — вады, которые редактор Волли не видит.


В папке Valve есть несколько вадов, который Wally не может редактировать. Это вады, содержащие текстуры для оболочки игры, а не для карты. В данный момент нас интересуют два вада — gfx.wad и cached.wad. В первом есть буквы которыми пишется текст в консоли и заставках (CONCHARS и CREDITSFONT), значок Загрузка (LAMBDA с надписью LOADING... 128х128 точек, LAMBDA32 с лямбдой в кружке 32х32 и LAMBDA64 с надписью LOADING... 64х64), значок Пауза (PAUSE) и ещё BACKTILE (фрагмент фона 64х64 точки), во втором есть два файла: один "Loading" — заставка, которую мы видим при загрузке игры (например в Халфе стоит Фримен с пистолетом и надпись Loading), а второй "ConBack" — фон консоли. Итак, что же делать, если нам хочется это поменять для своего мода, но редактор Wally этого не может?

Я разместил на сайте специальный архив с инстументами, которые могут редактировать эти два вада (качать отсюда).

Там две папки, по каждой для wad-а.

C gfx всё элементарно — если надо, то редактируете те bmp-ешки, что в той папке и всё.. Довольно лёгкая программка.

С cached посложнее — там есть файл cached.ls, который будет с таким содержанием

$DEST "cached.wad" $loadbmp "D:\Sierra\Half-Life\Combat\gfx\cached\Samples\loading.bmp" loading qpic 0 0 640 480 $loadbmp "D:\Sierra\Half-Life\Combat\gfx\cached\Samples\conback.bmp" conback qpic 0 0 640 480

Вам всего лишь надо будет создать где-нибудь два bmp файла с названием loading.bmp (это вместо Фримена со словом loading) и conback.bmp (это фон консоли) и указать у себя на компьютере (вместо "D:\Sierra\Half-Life\Combat\gfx\cached\Samples\loading.bmp" пишешь например "C:\cached\loading.bmp"), и всё он вам смастерит. Запускаем makewad.bat и вуаля!

Примечание: в cached.wad разрешение этих bmp должно быть 640х480 в режиме 256 цветной палитры.

Ну что ж, с созданием мы пожалуй разобрались...


4. Выводы, советы и т. д.

Теперь я надеюсь вы стали знать больше о текстурах, об их использовании и создании. Как я уже говорил, текстуры играют огромную роль в создании атмосферы для ваших карт и модов в целом. Поэтому грамотное использование и создание красивых и главное ПОДХОДЯЩИХ текстур всегда будет к месту.

Пара советов

  • Не стыдитесь копировать чужие текстуры — это не считается зазорным, чтобы вам не говорили, всё-таки ведь все мапперы товарищи. В свою очередь рассчитывайте, что и ваши текстуры будут копировать :Р. Желательно только указать потом, у кого вы скопировали во имя справедливости (чтобы copyright был всё-таки ;))
  • Делайте свои текстуры — копировать, конечно, хорошо, но хорошо в меру, что-то своё, оригинальное привнести просто необходимо.
  • Если делаете текстуры стен, гор и т. д., которые будут продолжаться, то пытайтесь делать их так, чтобы игрок не замечал стыков. То есть ваши текстуры должны быть способны продолжаться, и чтобы, например, левый край текстуры, если бы поставить перед правым, должен был подходить и наоборот. Для этого в редакторе Wally есть смещение текстуры в меню "Image→Offset..." (Фильтр→Циклическое смещение...), которое временно вызывают для работы над убиранием швов. И есть в нём режим просмотра размноженного 3х3 изображения из меню "View→Tiled" (Вид→Замостить 3х3 - проверить швы  Ctrl+T) или кнопка — по-моему так исправлять ещё удобнее.
  • Если покрываете текстурами большие площади, увеличивайте по возможности масштаб в 2 - 3 раза, от этого улучшится ваш показатель скорости r_speeds. Однако не увлекайтесь, чтоб текстуры не получились размытыми.
  • Зачастую изменения цвета очень кстати. Если, например, в стандартном ваде есть стена с жёлтой текстурой, можете в графическом редакторе заменить на зелёную, красную и т. д. Это может добавить атмосферности...


5. Список ПО, необходимый для понятия данного руководства:

Valve Hammer Editor v. 3.4 — редактор карт для Half-Life, Quake и др.;
Valve Hammer Editor v. 3.4-rus — русифицированный редактор карт для Half-Life;
Valve Hammer Editor v. 3.5 beta — отображает модельки, .exe файл можно устанавливать поверх версии 3.4, но и самостоятельно тоже работает;

QuArK v. 6.6.0 beta 4. КвАрК — альтернативный редактор карт для Half-Life, Quake и др.;

Wally 1.5.5b — редактор текстур и текстурных сборников форматов .wad и .pak;
RAD Editor — редактор списка светящихся текстур в файле lights.rad;
Pak Scape — редактор pak-файлов;
ZHLT — компиляторы карт;
GFX_Cached_wad_tool — редакторы для wad-файлов специального назначения (подробнее в статье было тут);
Valve.rad

Фуф.. вообщем написал...

Надеюсь, руководство вам понравилось и пригодилось, свои коментарии по поводу этой статьи можете оставлять на форуме.


Спасибо за внимание !
опубликовал Mitoh
под редакцией ОбаГлаза в 2010 г. и дополнениями в 2011-16 г.г.
2004 Shambler Team
  Counter.CO.KZ -     !
Hosted by uCoz