Max Payne: MaxEd 2 - Введение в картостроение

Полный мануал по MaxEd 2
После запуска редактора создайте новый пустой уровень (File -> New). Окно редактора примет примерно такой вид:
  1. Иерархия (Hierarchy View). Здесь сгруппированы абсолютно все объекты, входящие в состав уровня. Здесь же их можно перегруппировывать и изменять их параметры, переименовывать и удалять;
  2. Материалы, проще говоря, текстуры (Material View). Все текстуры сортируются по категориям, определяющим их физические и игровые свойства;
  3. Окно сообщений (Output Window). Как правило, здесь выводятся сообщения об ошибках и история строительства уровня;
  4. Основное рабочее окно редактора;
Также обратите внимание на Toolbar под строкой Меню. Периодически я буду на него ссылаться. Рекомендую окно сообщений скрыть, а границу иерархии и материалов сдвинуть левее, чтобы основное окно заняло всю высоту. На мой взгляд это гораздо удобнее.

Создание простейшей комнаты


Прежде, чем начать строительство, нужно научиться управлять камерой. Нажмите пробел — это переключение в режим камеры. Перемещение осуществляется следующим образом:
ЛКМ - обзор по сторонам из одной точки;
Shift + ЛКМ - смещение камеры в сторону вдоль плоскости обзора;
ПКМ - движение камеры вперед и назад;
Не забывайте, что скорость движения камеры можно изменять — Ctrl и Num +/-. Текущая скорость пишется на тулбаре (Cam).
Построим нашу первую комнату. Переключитесь в режим F3. Вы видите, как за курсором по узлам сетки следует белый квадратик. Постройте замкнутый контур — пол будущей комнаты. Если нужно отменить постановку последней точки, нажмите Del. Когда поставите последнюю точку, нажмите ПКМ для завершения контура. Контур приобретет объем и превратится в меш (mesh) - элементарный объект MaxEd 2. По умолчанию только что созданный mesh имеет высоту, равную размеру сетки. Размер сетки также указывается на тулбаре (Grid), изменяется посредством Num +/-. Так как мы делаем комнату, то нужно придать ей высоту не менее двух метров.
Переключитесь в режим F4 и наведите курсор на пол комнаты (щелчок не нужен). Вокруг него появится желтая рамка, обозначающая активный полигон. Но нам нужен потолок, который в данном случае является невидимым (culled) полигоном, так как мы смотрим на него "с изнанки". Чтобы выделить невидимый полигон, нажмите на тулбаре зеленую кнопку Culled (Ins). Хотя чаще бывает удобнее подвести камеру к другой стороне полигона, чтобы он стал видимым, нежели включать Culled.
Манипуляция полигонами осуществляется клавишами-стрелками (СКМ -> Move/Rotate Polygon). Полигон можно опускать и поднимать (стрелки вверх-вниз или с зажатой ЛКМ мышью вверх-вниз), а также вращать вокруг красного ребра как вокруг оси (стрелки влево-вправо или с зажатой ПКМ мышью вверх-вниз). За один раз полигон перемещается на расстояние, равное текущему размеру сетки.
Придайте комнате приемлемую форму и постройте в стороне еще одну. Переключитесь в режим F5. Это режим работы с объектами в целом. "Свежепостроенная" комната подсветится зеленым цветом, обозначающим текущий объект. В F5 объект можно двигать и изменять его свойства. Перемещение осуществляется стрелками (смещение объекта в стороны) и PgUp/PgDn (соответственно, верх и вниз). Эти смещения происходят относительно текущего положения сетки.
Важно понять, что сам Ваш уровень абсолютно не связан с сеткой. Сетку можно выровнять вдоль любой плоскости, а все объекты останутся на местах. Делается это в F4 — выделяете желаемый полигон и нажимаете Shift+A (СКМ -> Align Grid to Selected Face). Сетку можно перемещать в стороны, вверх-вниз и вращать так же, как обычный объект, но уже в режиме F12. Вращение объектов подробно описано моей статье по скриптам (см. Отступление — Pivot Point и поворот объектов здесь (articles.php?section=mp&name=mp2_scripts_A)), но при первом прочтении можно с этим не связываться.

Объединение мешей


Подвиньте новую комнату вплотную к старой. Теперь нужно объединить их. Существует 4 логических операции с мешами (В F5: СКМ -> Booleans) — объединение (Union - U), вычитание (Substract - S), пересечение (Intersect - I) и присоединение (Join - J). Нам понадобится объединение. Следуйте инструкциям на скриншотах.
Наряду с командами объединения существует команда разделения объекта — Y в F5 (СКМ -> Split Object). Фактически объект просто разрезается сеткой на два.
С логическими операциями связана ошибка с вершинами: при экспорте уровня выдается ошибка что-то вроде "<имя_меша> contains zero-area triangles". Иногда подобный глюк виден, что называется, невооруженным глазом — притормаживает перемещение камеры вперед-назад. Для устранения этой ошибки нажмите в F5 F (СКМ -> Mesh Manipulation -> Fix Object). В появившемся окне (Enter weld tolerance:) просто нажмите OK — это значение погрешности при исправлении вершин, лично мне менять его не приходилось ни разу.

Установка порталов


Для логического разграничения комнат используются порталы. Комнаты остаются соединенными, но являются разными объектами. Также порталы играют важную роль при освещении. Режим порталов — F7. Постановка портала осуществляется следующим образом:
  1. Расположите камеру так, чтобы коридор, дверной проем и.т.д. был виден целиком (см. скриншот);
  2. Выровняйте сетку вдоль плоскости, в которой произойдет разделение. Размер ячейки должен быть таким, чтобы в каждый из углов попадал узел сетки;
  3. При постановке точек портала достаточно придерживаться одного правила — в каждой точке красный луч, подсвечивающий полигон, должен смотреть от наблюдателя;
  4. Закончив построение контура, жмите ПКМ, затем OK. Портал готов!

Группировка объектов


Чтобы запустить уровень, осталось добавить точку старта. Верните сетку на уровень пола, перейдите в F3, наведите курсор на подходящее место и нажмите N. Открывшееся меню — New Entity — добавляет на уровень различные объекты. Нам потребуется Jumppoint; выберите ее из списка, нажмите OK и в открывшемся окне свойств объекта задайте имя Start и еще раз на OK. Точка старта готова.
Обратите внимание на окно иерархии. В одной из Ваших комнат появился объект Start (если Вы, конечно, не поставили ее вне комнаты). Вообще, объект, созданный внутри меша, автоматически группируется в него. Чтобы Вы не путалсь с терминологией, поясню, что всякий меш — это объект, но не всякий объект — это меш. К объектам относится все, что присутствует на уровне, а меши — всего лишь один из типов объектов.
Итак, нам нужно научиться группировать объекты. Создайте вне обеих комнат, например, аптечку. Делается это аналогично с Jumppoint, только выберите объект Level Item (еще нужно в его свойствах выбрать Level Item Type — Painkiller). В иерархии аптечка находится вне комнат. Даже если вы перетащите ее в строительном окне внутрь комнаты, ее логическое положение не изменится. Чтобы сгруппировать ее, существует два способа. Первый — перетащить ее мышью в окне иерархии в комнату. Второй способ — в режиме F5 произвести те же манипуляции, что и при объединении комнат, только вместо U нажать G (СКМ -> Grouping -> Group Selected).

Запуск уровня


Собственно, уровень уже готов к первому запуску. Однако, лучше задать комнате с точкой старта приемлемое название. Для этого пара слов о дочерних объектах.
Объект, сгруппированный в другой, является дочерним. Можно выбрать, будут ли при выделении родительского объекта выделяться его дочерние. Чтобы изменить этот параметр, нажмите в режиме F5 букву V (СКМ -> Toggle Autoselect Children State) или среднюю кнопку в окне иерархии. Обращаю ваше внимание на то, что когда параметр выключен (т.е. подобъекты не выделяются), то кнопка нажата. Не запутайтесь.
Теперь переименуйте комнату с точкой старта в Startroom. Это можно сделать как в свойствах объекта (Enter, СКМ -> Properties или в иерархии ПКМ -> Properties), тогда не забудьте выключить выделение подобъектов, так и обычным виндовым переименованием F2 в иерархии. Кстати, если уж Вы зашли в свойства комнаты, можете поставить ей Sound Environment (подробности читайте в data\database\soundenvironments.txt).
Сохраните уровень и экспортируйте его (File -> Export). Автоматически Ваш уровень проверится на ошибки. Сейчас их быть не должно, но знайте, что две самые основные: "There are <количество> top level entities that are not grouped to a room" (если не все объекты сгруппированы в комнаты) и "<имя_меша> contains zero-area triangles" (исправляется F5: F, читайте выше). Назовем уровень First.ldb. Откройте data\database\levels\levels.txt и исправьте имя уровня и точку старта на Ваши. Загрузочный экран менять не нужно, я просто не помню, что там изначально стоит.
[ExampleLevel]
{
	[Properties]
	LevelName		= "Example Level";
	Directory 		= work;
	Level 			= First.ldb;
	<...>
	PlayerStartingPlace = "::Startroom::Start";
Все готово! Уже можно запустить плод нашего творчества и побегать по нему.

Просмотров: 5 853

donartruss #1 - 7 лет назад 0
Спасибо за статью, очень хорошо и понятно написано. Всё сделал, получил помещение из 3х комнат с двумя порталами. Теперь, собственно, вопрос: вот я экспортировал файл, внёс изменения в levels.txt, что делать дальше? В смысле, чтобы запустить то, что получилось и там побегать?
Да, и ещё. Возможно ли создавать комнаты, в плане имеющие форму окружности?
donartruss #2 - 6 лет назад 0
Уже разобрался.