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
- Нажмите кнопку куба на панели инструментов слева. Правый клик по ней открывает окно CubeBuilder, где задаются размеры; введите 512×512×512.
- Появится браш с красным контуром — это ваша «кисть» (билдер).
- Нажмите Subtract на левой панели. Получится комната, покрытая «пузырьками» (текстура по умолчанию).
В Unreal Engine нет пустоты как таковой: всё пространство редактора — «твёрдый материал», и комната была из него «вырезана». Кнопка Add, наоборот, добавляет браш в вырезанное пространство и заполняет его.
Билдер двигается в 2D-проекции с зажатым Ctrl и перемещением мыши. Движение идёт по сетке редактора; размер клетки выбирается через ПКМ → Grid или на нижней панели инструментов. Если отодвинуть билдер, за ним останется вычитающий браш с жёлтым контуром — это и есть созданная комната.
Простейшая карта
Текстуры
- Выделите поверхности кликом мыши. С Ctrl можно выделить несколько, повторный клик снимает выделение, Shift+B выделяет все поверхности этого браша.
- Откройте Texture Browser, нажмите File → Open… и выберите, например,
KillingFloorManorTextures.utx. В верхнем поле показано имя открытого пакета (там же можно переключаться между пакетами), во втором — группа текстур. Кнопка All слева от поля группы показывает все текстуры пакета. Для удобства уменьшите превью через View → 25%. - Наложите текстуры, например
BrickWallна стены иwood_floorна пол и потолок. - У этих текстур большое разрешение, их стоит уменьшить: ПКМ по выделенным поверхностям → Surface Properties, вкладка Pan/Rot/Scale, в поле Scaling замените Simple
1.0на0.25.
Текстуры можно выравнивать и инструментами texture pan/rotate прямо во вьюпорте, но в Surface Properties наложить их получается точнее.
Коридор и развилка
- Откройте CubeBuilder и задайте 256×1024×256. В 2D-окнах поставьте билдер у основания комнаты и нажмите Subtract. Новый коридор уже не в «пузырьках»: на все его грани ляжет последняя выбранная текстура. Наложите те же текстуры, что и в комнате, с масштабом 0.25.
- Отодвиньте билдер и в проекции сверху выделите коридор кликом по его контуру.
- Сделайте копию: ПКМ → Duplicate (или Ctrl+W).
- Поверните копию на 90 градусов, двигая мышь с зажатой ПКМ, и поставьте её по центру.
- Чтобы копия полностью отобразилась в 3D, нажмите Build Geometry на верхней панели.
- Текстуры на копии сохранят размер, но тоже повернутся на 90 градусов. Поправьте их в Surface Properties: поле Rotation поворачивает текстуру, поле Pan смещает.
Освещение
- Щёлкните ПКМ по любой поверхности и выберите Add Light Here.
- Чтобы увидеть свет, нажмите Build Lighting. 3D-окно должно быть в режиме Dynamic Light (Alt+5).
- Перенесите «лампочку» в центр комнаты и откройте Light Properties (F4). В группе LightColor кнопкой Color выбирается цвет, там же настраиваются яркость, оттенок и насыщенность; в группе Lighting — радиус освещения.
- Расставьте в коридоре несколько источников с меньшим радиусом.
Спавн зомби, пути и старт игрока
- В концах развилки создайте кубы 256×256×256. ПКМ по кнопке Volume → ZombieVolume: появится прозрачный браш с белым контуром. Сделайте такой же во второй развилке. Каких именно монстров спавнит волюм, настраивается в его свойствах.
- Чтобы зомби могли нормально передвигаться и находить игроков, нужны пути: ПКМ по поверхности в 3D-окне → Add Path Node Here. Проложите из нод «дорожку».
- Старт игрока ставится так же: ПКМ → Add Player Start Here.
Патроны и оружие
- Откройте Actor Class Browser и выберите Actor → Pickup. Для патронов раскройте Ammo и выберите
KFAmmoPickup. - ПКМ по любой поверхности (пол или стена — неважно) → Add KFAmmoPickup Here и переместите патроны куда-нибудь в угол. Если с первого раза ничего не добавилось, попробуйте другую поверхность.
- Оружие лежит в 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 UU | 0,75 дюйма |
| 1 м | 52,5 UU |
| 1 см | 0,525 UU |
| 1 фут | 16 UU |
| 256 UU | 487,68 см = 16 футов |
Для поворотов Pitch, Roll и Yaw свои условные единицы — отклонение от исходного положения:
| Значение | Угол |
|---|---|
| 1024 | 5,625° |
| 8192 | 45° |
| 16384 | 90° |
| 24576 | 135° |
| 32768 | 180° |
Отрицательное значение означает вращение в обратную сторону.
Инструменты редактирования форм
VertexEditing
Позволяет менять форму браша перемещением вершин.
- Выделите браш и включите режим VertexEditing.
- С зажатым Ctrl выберите нужные вершины (в любой проекции).
- Двигайте их с зажатыми Ctrl+ЛКМ.
Так удобно делать нестандартные формы. Кроме того, продублировать готовый браш и изменить его размер или форму через VertexEditing гораздо быстрее, чем создавать новый, вписывать размеры и заново накладывать текстуры. Чтобы вершины было легче выделять, включите Show Large Vertices на панели режимов вьюпорта. Подробнее о привязке вершин к сетке — в разделе «Vertex editor» руководства по маппингу.
BrushClipping
Обрезка и разделение брашей.
- Выделите браш и включите режим BrushClipping.
- Щёлкните ЛКМ по вершине браша, чтобы поставить маркер, и с зажатым Ctrl передвиньте его на нужное место.
- Поставьте второй маркер. Двух маркеров достаточно, третий не нужен. Между ними появится красная линия, а из её середины — перпендикулярный отрезок, указывающий, какая сторона будет отрезана.
- Выберите одну из команд режима:
| Команда | Действие |
|---|---|
| Clip Selected Brushes | Обрезать браш в направлении отрезка |
| Split Selected Brushes | Разделить браш на части по линии сечения |
| Flip Clipping Normal | Поменять отрезаемую сторону |
| Delete Clipping Markers | Удалить все маркеры |
Другие полезные кнопки
| Кнопка | Действие |
|---|---|
| Mirror X / Y / Z | Зеркально отражает геометрию относительно Pivot по выбранной оси |
| Select All Inside | Выделяет все объекты внутри билдера |