[Часть: 1] Valve Hammer Editor

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

Теория

Valve Hammer Editor - редактор игровых уровней с широким набором функций, которые можно при необходимости дополнять. Source engine использует BSP архитектуру уровней, поэтому все локации строятся при помощи брашей. Движок имеет специфические понятия о масштабе, при разработке мы будем считать не метры, а units. 

Есть единые стандарты для движка по высоте различных объектов, но творческий процесс берет свое и большинство помещений получаются разными по высоте и это нормально - опустим этот момент но таблицу измерений я прикладываю ниже.

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

1 unit = каждой минимальной ячейке

Для вашего и своего удобства каждый выделенный объект получает разметку с указанием ширины и высоты объекта в юнитах, по этой разметке можно прикидывать будет ли влезать ваш гг в дверь или дырку

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

Откройте steam - библиотека - инструменты. Скачайте Source SDK и все пакеты Source SDK Base. Отлично! После запуска программы откроется окно настройки SDK.

 Нажмите Create a Mod и следуйте указаниям изображения ниже.

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

1. Хранит в себе исходные файлы с редактора мира.

2. Материалы

3. Модели

4. Исходный код библиотек

Батники отвечают за запуск редактора, просмотр моделей, запуск игры и компиляция моделей в понятный формат движку.


 Переключаемся на HL2EP2 в Current Game и запускаем редактор. 

 Верхняя панель как и все остальные в редакторе практически не используются, работать в VHE нужно учится исключительно при помощи hotkey. Здесь все по дзену из коробки, так что рекомендую ничего не нажимать, иначе можете испытать некий дискомфорт от использования. Единственное, что может вас интересовать здесь это третья и четвертая иконки с изображением сетки и голубыми пометками + и -. Это масштаб сетки, чем меньше масштаб, тем точней можно подгонять объекты по карте.

Пример:

Сетка в наименьшем значении.

Максимальный параметр

 

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


Меню

Верхние выпадающие списки и функции в них необходимо вычуить в виде хоткеев. Там все указано. Рекомендую сразу посетить раздел tool-options-3d views и выкрутить параметры дистанции на максимум.


 Начало работы

Всегда начинается либо с ctrl+n | ctrl+o (Новый/Открыть). Первый вариант наш и после выполнения команды вы увидите те самые 4 вьюпорта - окна через которые вы будете располагать объекты и собственно делать грязь.

1/4 Верхнее левое - 3D окно - визаулизатор ваших действий, работает реалтайм, но без света. Свет нужно компилировать.

Если окно черное и не выводит изображение, то нажмите на левый верхний угол вьюпорта на кнопку camera - 3D textured. Проблема уйдет.

2/4 - top - вид сверху - окно манипулятор позволяет взаимодействовать с объектами на сетке

3/4 - front - фронтальное окно, вид с боку - аналогично предыдущему тоже манипулятор, но в другой плоскости.

4/4 - side - тоже сбоку но другая сторона.

За грани вы можете таскать и подгонять окна в нужное положение, 3d окно не используйте как приоритетное, оно больше для теста перед компиляцией и просто иногда посмотреть, подумать.

3D окно имеет функцию перемещения в нем, активируйте кнопку полета наведя мышку на 3D вьюпорт и нажмите Z (WASD - Управление, Z - выйти)


 Делаем коробку

Куб - основная геометрическая фигура, которая используется при построении уровня, усложняется он уже по ходу действия.

Наведите мышку на окно top вьюпорта и нажмите shift + B - редактор не даст понять, что вы включили brush tool, но это произошло.

Зажмите кнопку мыши в любом из юнитов и потяните мышь, выстроится сетка будущего браша. Вы заметите ее на всех портах, отпустите кнопку мыши и браш будет готов к дальнейшим манипуляциям. Ваша задача построить пол, в окне топ скорректируйте форму так, чтобы фигура приняла вид квадрата (1024х1024 например). Сверьтесь с остальными портами и подгоните фигуру к бледной синей разметке по середине сетки, так будет удобно ориентироваться.

Нажмите enter - он превратит разметку в объект. Это будет заметно в окне 3D - браш примет текстуру. Таким же образом можно строить любые объекты, но об этом позже. 


 Подгоняем к правильному масштабу, entity объекты

Самый простой способ понять какой вам нужен масштаб - поставить info_player_start в любое место вашего браша.

Нажмите shift + E и кликните в окне 3D на поверхность.

 Гордон подскажет как лучше подогнать текущую плоскость, вы увидите, что 1024 юнита слишком много для молчаливого ученого.

Shift + S вернет курсор в режим указателя. Выберите ваш браш и измените масштаб. Гигантизм - одна из проблем всех начинающих дизайнеров уровней.

По Гордону вы сможете и намечать примерно стены.


 Entity объекты - меню

Двойной клик по info_player_start (респавн) откроет окно. 

Выпадающий список: Class предлагает все объекты игровой механики, которая использовалась в играх Source engine.

Перечислять смысла нет, есть бесчисленное количество уроков по использованию этих объектов.

На примере npc_zombie рассмотрим варианты взаимодействия с объектом.

Name - используется для идентификации в случае если персонаж участвует в сложных скриптовых сценах или как либо должен взаимодействовать. Можно не заполнять, в таком случае будет работать стандартный ИИ.

Все пункты ниже отвечают за визаулизацию, принадлежность к группе и т.д. полную значимость можно понять методом тыка или изучая туториалы.

Все остальные вкладка отвечают за события и особые привилегии применимые к данному объекту.


Стены, свет, текстуры, компиляция

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

1. Создайте стену и выделите ее (Shift + S), убедитесь, что в сетке объект изменил свой цвет, в любом из окон, зажмите Shift, затем нажмите левую кнопку мыши и передвиньте объект. 

Результатом стал дубликат уже существующей стены. Вы можете перетащить в другой конец комнаты и получить противоположную стенку.

2. Если у вас получился прямоугольник, а не квадрат, то отсутствующие стены имеют во первых другую длину, а во вторых другой градус. Повторите пункт 1.

Вы получили еще одну копию, ее необходимо развернуть, для этого нажмите ctrl + M и увидите следующее окно.

Rotate - поворот

Scale - увеличение

Move - сдвинуть

Значения X,Y,Z не просто так, градус прямой мы указать не можем так как работаем в 3D пространстве.

Нам нужен параметр: Z - 90 (В случае с rotate он будет воспринимать эти данные как градусы)

Осталось разместить и подогнать по стыкам наши стены. Три белых квадрата - интерактивный элемент позволяющий менять размеры браша.

 

Итогом должна стать полностью герметичная коробка с info_player_start внутри. Но конечно так коробки никто не делает, в следующий раз сделайте так: правый клик по кубу - make hollow


В появившимся окне можно указать толщину стен. Напр. 4

 

Что задаст параметр в 4 юнита толщину стены.

Категорически нельзя менять размер всей коробки целиком как один объект. Вы погубите оптимизацию. В случае когда мы делали коробку сами из брашей, они были по отдельности. Make Hallow группирует объекты, поэтому прежде чем производить манипуляции снимайте группировку. Ctrl + U (Если хотите сгруппировать браши, то нажмите Ctrl + G)


 

Для изменения поверхности браша включите полет камеры и попадите внутрь коробки. Нажмите Shift + A

Зажав кнопку Ctrl и поочередно кликая по стенам они будут выделены как показано на скриншоте выше -красным. (Стена уже прокрашена текстурой)

Параметр Texture Scale - отвечает за увеличение/уменьшения масштаба текстуры.(видно на скриншоте ниже, стена)

Texture Shift - подгоняет по нужным краям текстуру.

Rotation - поворот текстуры

Justify - применяет текстуру на свое усмотрение к объекту. Например на коробки параметр Fit - натягивает и масштабирует текстуру под объект - очень удобно.

All textures -выпадающий список с текстурами.

Сurrent texture - наименование выделенной текстуры

Hide mask - спрятать красное выделение

Browse - открыть проводник текстур

Replace - замена текстур одного типа на другие

Apply - применить


 

Browse - разбор

Ничего необычного все текстуры в одном окне, более удобное, позволяет рассмотреть текстуру, отсортировать по фильтрам, по ключевым словам (Grass - выдаст траву), по размеру.

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

После нажатия apply комната будет перекрашена в выбранную текстуру.


Свет

Нажмите Shift + E, разместите объект, два раза кликните по нему, откроется окно. 

Выбираем класс light. Лампу на середину. Параметр brightness|HDR - два разных оттенка, один будет светить постоянно, второй будет дополнять его, если компиляция проходит с параметром HDR.


Компиляция и запуск

Нажмите F9. Если в открывшимся окне слева внизу есть кнопка "Normal" - нажмите ее, она уберет вас из режим детальной настройки компилятора.

BSP - всегда компилируйте в нормал.

VIS -компилируйте FAST/NORMAL

RAD - компилируйте в Fast если вам необходимо посмотреть быстро на карту, Normal - если готовы подождать. Параметр HDR добавляет динамичное освещением. Когда будете работать с отражающими поверхностями, то необходимо расставлять env_cubemap по карте и после компиляции в консоли прописать buildcubemaps


Всего хорошего, спасибо за чтение.