Маппинг и SDK

KF SDK: первая карта, CSG/BSP и инструменты геометрии

Два первых урока K-2 из цикла по KF SDK, опубликованные на форуме killingfloor.ru в 2011 году: «С чего начать?» и «Геометрия». Первый проводит через создание простейшей карты, второй подробно разбирает CSG, браш-билдеры и инструменты редактирования форм. Общий обзор редактора есть в основах редактора карт, а продвинутые темы — в руководстве по маппингу.

Где взять редактор

Killing Floor работает на Unreal Engine 2.5, а KF SDK — это слегка изменённый UnrealEd 3.0 (не путать с Unreal Engine 3). Редактор запускается файлом KFEd.exe в папке System игры. Для Steam-версии SDK устанавливается из раздела Tools (Инструменты) библиотеки Steam.

Редактор должен стоять в корневой папке Killing Floor, чтобы KFEd.exe оказался именно в System. Если при запуске появляется ошибка о том, что не найден Core.dll, скорее всего, SDK установлен не туда.

Окна редактора и камера

При запуске открываются четыре окна-проекции (вид сверху, спереди, сбоку и 3D) и Texture Browser, который можно закрыть. K-2 считал стандартную раскладку самой удобной, но её можно поменять через View → Viewports → Configure…. Если окна-проекции пропали и в редакторе остался только белый экран, выберите одну из раскладок там же, в View → Viewports → Configure…: белое окно пропадёт (тема «Белый экран в редакторе», форум killingfloor.ru).

В 3D-окне вы смотрите через камеру; в 2D-проекциях она обозначена значком глаза.

ОкноУправлениеДействие
3DЗажатая ЛКМДвижение камеры по горизонтали: вперёд/назад и поворот влево/вправо
3DЗажатая ПКМСвободный обзор
3DОбе кнопки мышиДвижение по вертикали и вбок
2DЛюбая кнопка мышиПеремещение вида
2DОбе кнопки мышиПриближение/отдаление

Скорость камеры меняется кнопкой Change Camera Speed.

Основы: браш, Subtract и Add

  1. Нажмите кнопку куба на панели инструментов слева. Правый клик по ней открывает окно CubeBuilder, где задаются размеры; введите 512×512×512.
  2. Появится браш с красным контуром — это ваша «кисть» (билдер).
  3. Нажмите Subtract на левой панели. Получится комната, покрытая «пузырьками» (текстура по умолчанию).

В Unreal Engine нет пустоты как таковой: всё пространство редактора — «твёрдый материал», и комната была из него «вырезана». Кнопка Add, наоборот, добавляет браш в вырезанное пространство и заполняет его.

Билдер двигается в 2D-проекции с зажатым Ctrl и перемещением мыши. Движение идёт по сетке редактора; размер клетки выбирается через ПКМ → Grid или на нижней панели инструментов. Если отодвинуть билдер, за ним останется вычитающий браш с жёлтым контуром — это и есть созданная комната.

Простейшая карта

Текстуры

  1. Выделите поверхности кликом мыши. С Ctrl можно выделить несколько, повторный клик снимает выделение, Shift+B выделяет все поверхности этого браша.
  2. Откройте Texture Browser, нажмите File → Open… и выберите, например, KillingFloorManorTextures.utx. В верхнем поле показано имя открытого пакета (там же можно переключаться между пакетами), во втором — группа текстур. Кнопка All слева от поля группы показывает все текстуры пакета. Для удобства уменьшите превью через View → 25%.
  3. Наложите текстуры, например BrickWall на стены и wood_floor на пол и потолок.
  4. У этих текстур большое разрешение, их стоит уменьшить: ПКМ по выделенным поверхностям → Surface Properties, вкладка Pan/Rot/Scale, в поле Scaling замените Simple 1.0 на 0.25.

Текстуры можно выравнивать и инструментами texture pan/rotate прямо во вьюпорте, но в Surface Properties наложить их получается точнее.

Коридор и развилка

  1. Откройте CubeBuilder и задайте 256×1024×256. В 2D-окнах поставьте билдер у основания комнаты и нажмите Subtract. Новый коридор уже не в «пузырьках»: на все его грани ляжет последняя выбранная текстура. Наложите те же текстуры, что и в комнате, с масштабом 0.25.
  2. Отодвиньте билдер и в проекции сверху выделите коридор кликом по его контуру.
  3. Сделайте копию: ПКМ → Duplicate (или Ctrl+W).
  4. Поверните копию на 90 градусов, двигая мышь с зажатой ПКМ, и поставьте её по центру.
  5. Чтобы копия полностью отобразилась в 3D, нажмите Build Geometry на верхней панели.
  6. Текстуры на копии сохранят размер, но тоже повернутся на 90 градусов. Поправьте их в Surface Properties: поле Rotation поворачивает текстуру, поле Pan смещает.

Освещение

  1. Щёлкните ПКМ по любой поверхности и выберите Add Light Here.
  2. Чтобы увидеть свет, нажмите Build Lighting. 3D-окно должно быть в режиме Dynamic Light (Alt+5).
  3. Перенесите «лампочку» в центр комнаты и откройте Light Properties (F4). В группе LightColor кнопкой Color выбирается цвет, там же настраиваются яркость, оттенок и насыщенность; в группе Lighting — радиус освещения.
  4. Расставьте в коридоре несколько источников с меньшим радиусом.

Спавн зомби, пути и старт игрока

  1. В концах развилки создайте кубы 256×256×256. ПКМ по кнопке Volume → ZombieVolume: появится прозрачный браш с белым контуром. Сделайте такой же во второй развилке. Каких именно монстров спавнит волюм, настраивается в его свойствах.
  2. Чтобы зомби могли нормально передвигаться и находить игроков, нужны пути: ПКМ по поверхности в 3D-окне → Add Path Node Here. Проложите из нод «дорожку».
  3. Старт игрока ставится так же: ПКМ → Add Player Start Here.

Патроны и оружие

  1. Откройте Actor Class Browser и выберите Actor → Pickup. Для патронов раскройте Ammo и выберите KFAmmoPickup.
  2. ПКМ по любой поверхности (пол или стена — неважно) → Add KFAmmoPickup Here и переместите патроны куда-нибудь в угол. Если с первого раза ничего не добавилось, попробуйте другую поверхность.
  3. Оружие лежит в KFWeaponPickup и добавляется так же, как и любые акторы из Actor Classes. Точки случайного оружия, как на официальных картах, находятся в xPickupBase → KFRandomSpawn → KFRandomItemSpawn.

Сборка и тест

Перед запуском карту нужно скомпилировать кнопкой Build All. Для быстрого запуска игры на этой карте нажмите Play Map!.

CSG и BSP

В Unreal Engine мир строится по концепции Constructive Solid Geometry (CSG) — последовательности вырезаний и надстроек. Всё чёрное «ничего» в новой карте — сплошное твёрдое (Solid) пространство. Сначала в нём вырезается место для игрока вычитающими брашами (Subtractive Brush), затем внутрь можно добавлять постройки и декор добавляющими брашами (Additive Brush).

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

Порядок CSG-операций меняется через контекстное меню браша (или группы брашей): Order → ToFirst (выполнять первым) и Order → ToLast (выполнять последним).

На закрытых картах каждая комната и коридор вырезаются отдельно; открытые карты строятся внутри одного огромного вырезанного объёма.

BSP (Binary Space Partitioning) — двоичное разбиение пространства, которое используется при компиляции геометрии. BSP-дерево сортирует видимые объекты по удалённости от наблюдателя. От расположения, формы и типа брашей зависят BSP-сечения (BSP cuts), которыми после компиляции покрывается карта. При сложной геометрии в сечениях бывают ошибки, и тогда появляются BSP Holes — дыры в пространстве. Как их искать и лечить, подробно описано в разделе «Build и дыры в BSP» руководства по маппингу.

Перемещение, поворот и копирование брашей

  • Перемещение. Выделите браш кликом по контуру и двигайте его с зажатыми Ctrl+ЛКМ. С Ctrl можно выделить несколько брашей и двигать группу.
  • Поворот. Ctrl+ПКМ вращает браш вокруг опорной точки (Pivot), отмеченной точкой или перекрестием.
  • Сетка. Перемещение идёт по сетке, её размер удобно менять на нижней панели. Для точной расстановки мелких объектов подходит сетка 1-8, для крупных конструкций — крупнее.
  • Сетка поворота. У вращения три параметра — Pitch, Roll и Yaw — и своя сетка: один шаг равен 1024 единицам. Шаг меняется в View → Advanced Options → Editor → RotationGridSize.
  • Без сетки. Привязку перемещения и поворота отключают кнопки Toggle Drag Grid и Toggle Rotation Grid.
  • Выравнивание по вершине. Если вершина браша не лежит на пересечении сетки, выделите браш и щёлкните ПКМ по этой вершине: браш (или группа) сместится так, чтобы она встала на сетку, а Pivot переместится в эту вершину.

Копировать и дублировать можно любые объекты, включая браши (кроме билдера):

  • Duplicate (ПКМ по выделению или Ctrl+W) — для копий на той же карте.
  • Edit → Copy и Edit → Paste из контекстного меню — для переноса на другую карту. Так можно копировать многое, включая геометрию, даже из редактора UT2004 в редактор KF, если оба открыты.

При копировании у брашей сохраняются текстуры и порядок добавлений/вырезаний внутри группы. После копирования или перемещения геометрию нужно пересобрать кнопкой Build Geometry. При полной сборке (Build All) геометрия обрабатывается первой.

CSG-инструменты

КнопкаДействие
AddДобавляет пространство по красному контуру билдера
SubtractВырезает пространство по контуру билдера
IntersectМеняет форму билдера: обрезает его по Solid-пространству внутри него
DeintersectМеняет форму билдера: обрезает его по Non Solid-пространству внутри него

Если растянуть билдер на область карты и нажать Deintersect, станут видны контуры BSP-сечений. Сечения видны и в режиме вьюпорта Zone/Portal.

Браш-билдеры и их параметры

Кнопки фигур находятся на левой панели. Они создают билдер нужной формы; правый клик по кнопке открывает окно с размерами и параметрами.

Cube

Прямоугольный параллелепипед. Самый используемый инструмент: это самая удобная и простая в правке форма.

ПараметрОписание
HeightВысота
Width, BreadthДлина и ширина
WallThicknessТолщина стен (при Hollow = True)
GroupNameИмя группы, особого значения не имеет (есть у всех билдеров)
HollowБраш с полостью внутри и стенами толщиной WallThickness. Полезно для добавляющих брашей, например построек на открытой местности
TessellatedРазбивает грани браша на треугольники

Cylinder

N-угольная призма, приближённая к цилиндру.

ПараметрОписание
HeightВысота
OuterRadiusРадиус описанной (при AlignToSides = False) или вписанной (при True) окружности в проекции сверху
InnerRadiusРадиус полости при Hollow = True
SidesКоличество боковых граней
AlignToSidesПривязка радиуса к боковым граням
HollowКак у куба

Cone

N-угольная пирамида, приближённая к конусу.

ПараметрОписание
HeightВысота
CapHeightВысота потолка при Hollow = True
OuterRadiusКак у цилиндра, для основания пирамиды
InnerRadiusРадиус полости
SidesКоличество боковых граней
AlignToSides, HollowКак у цилиндра

Sphere

Форма на основе тетраэдра, приближённая к сфере.

ПараметрОписание
RadiusРасстояние от центра до каждой вершины
SphereExtrapolationСтепень приближения к сфере: чем больше, тем круглее. Больше 6 ставить не стоит — число граней растёт в геометрической прогрессии

Лестницы

Лестницы — браши из нескольких сегментов. Три параметра общие для всех типов:

ПараметрОписание
StepHeightВысота одной ступени
StepWidthШирина лестницы
NumStepsКоличество ступеней

LinearStaircase — прямая лестница.

ПараметрОписание
StepLengthДлина одной ступени
AddToFirstStepВысота, добавляемая к первой ступени

CurvedStaircase — лестница с поворотом.

ПараметрОписание
InnerRadiusРадиус от точки отсчёта до начала лестницы
AngleOfCurveУгол поворота от первой до последней ступени
AddToFirstStepКак у LinearStaircase
CounterClockwiseПри True лестница поворачивает против часовой стрелки

SpiralStaircase — винтовая лестница.

ПараметрОписание
InnerRadiusВнутренний радиус до начала лестницы
StepThicknessТолщина ступеней
NumStepsPer360Сколько ступеней приходится на полный оборот в 360 градусов
SlopedCeilingДелает нижнюю сторону лестницы гладкой
SlopedFloorСглаживает ступени, превращая лестницу в склон
CounterClockwiseПоворот против часовой стрелки

Плоские поверхности

Sheet — плоский четырёхугольник. Используется для декораций или разбивки карты на зоны.

ПараметрОписание
Height, WidthРазмеры
HorizBreaksРазбивка на сегменты по горизонтали
VertBreaksРазбивка на сегменты по вертикали
AxisОсь, на которой создаётся Sheet

Volumetric — несколько плоскостей, пересекающихся в центре. Иногда применяется для декораций.

ПараметрОписание
Height, RadiusРазмеры
NumSheetsКоличество плоскостей

BSP Based Terrain

Браш наподобие куба, одна грань которого разбита на сегменты, а сегменты — на треугольники. Предназначен для BSP-ландшафта, но это далеко не самый удобный инструмент, и используется он очень редко. Обычный ландшафт (terrain) — отдельная тема; в KF он остаётся «невидимым», пока его не раскрасят. См. раздел «Ландшафт» в руководстве по маппингу.

ПараметрОписание
Height, Width, BreadthРазмеры
WidthSegments, DepthSegmentsКоличество сегментов в длину и ширину

Единицы измерения

Высота, длина, радиус и другие размеры задаются в UU (Unreal Unit).

ВеличинаВ UU
1 UU0,75 дюйма
1 м52,5 UU
1 см0,525 UU
1 фут16 UU
256 UU487,68 см = 16 футов

Для поворотов Pitch, Roll и Yaw свои условные единицы — отклонение от исходного положения:

ЗначениеУгол
10245,625°
819245°
1638490°
24576135°
32768180°

Отрицательное значение означает вращение в обратную сторону.

Инструменты редактирования форм

VertexEditing

Позволяет менять форму браша перемещением вершин.

  1. Выделите браш и включите режим VertexEditing.
  2. С зажатым Ctrl выберите нужные вершины (в любой проекции).
  3. Двигайте их с зажатыми Ctrl+ЛКМ.

Так удобно делать нестандартные формы. Кроме того, продублировать готовый браш и изменить его размер или форму через VertexEditing гораздо быстрее, чем создавать новый, вписывать размеры и заново накладывать текстуры. Чтобы вершины было легче выделять, включите Show Large Vertices на панели режимов вьюпорта. Подробнее о привязке вершин к сетке — в разделе «Vertex editor» руководства по маппингу.

BrushClipping

Обрезка и разделение брашей.

  1. Выделите браш и включите режим BrushClipping.
  2. Щёлкните ЛКМ по вершине браша, чтобы поставить маркер, и с зажатым Ctrl передвиньте его на нужное место.
  3. Поставьте второй маркер. Двух маркеров достаточно, третий не нужен. Между ними появится красная линия, а из её середины — перпендикулярный отрезок, указывающий, какая сторона будет отрезана.
  4. Выберите одну из команд режима:
КомандаДействие
Clip Selected BrushesОбрезать браш в направлении отрезка
Split Selected BrushesРазделить браш на части по линии сечения
Flip Clipping NormalПоменять отрезаемую сторону
Delete Clipping MarkersУдалить все маркеры

Другие полезные кнопки

КнопкаДействие
Mirror X / Y / ZЗеркально отражает геометрию относительно Pivot по выбранной оси
Select All InsideВыделяет все объекты внутри билдера