Еще круче

Существует такая добрая вещь — CSG (Computed Solid
Geometry, т.е. вычислительная стереометрия).
Относящиеся к ней операции осуществляют
элементарные действия над несколькими
брашами. Чтобы создавать объекты посложнее
простых боксов, необходимо научится
работать с 3-мя важными операциями: Subtract, Merge
и Hollow (вырезание, слияние и опустошение),
которые относятся к операциям CSG. 

Subtract используется очень часто, например,
когда нужно сделать окно или дверь.
Работает она так: выделенный браш
вырезается (исключается) изо всех других, с
которыми пересекается. Например, чтобы
сделать проем в стене, достаточно создать
браш, который был бы несколько толще, чем
стена, а его высота и ширина совпадали бы с
размерами желаемого проема. После чего,
этот вспомогательный браш надо поместить в
стену и выполнить Subtract.

Операция Merge используется реже, чем
предыдущая. Принцип ее действия прост, как
format c:, два выделенных соприкасающихся браша,
совокупность которых есть выпуклый
параллелепипед ;), сливаются и становятся
новым брашем. В противном случае ничего не
произойдет. Если глубина твоих познаний в
области геометрии вызывает сомнения, то
определить возможность выполнения
операции тебе поможет консоль: в момент
пролета над тобой птицы обломинго в консоли
появится: "Merging…Cannot add a set of brushes with a concave
hull."

Принцип действия операции Hollow (с которой мы,
кстати, уже встречались) чуть сложнее, чем
Merge: грани выделенного браша превращаются в
отдельные независимые браши. Зачем это
нужно? Дело в том, что у любой грани,
входящей в состав браша, может быть только
одна лицевая сторона, на которую будет
накладываться текстура и которая будет
прорисовываться на экране. Другая, нелицевая сторона грани никогда не будет
отображена. Когда мы создаем простой браш,
то лицевыми являются внешние стороны его
граней, а нелицевыми — внутренние, поэтому,
когда мы смотрим на него снаружи, мы видим
грани, а когда изнутри — нет. Когда мы
создаем комнату, то хотим, чтобы грани были
обращены своими лицевыми сторонами внутрь.
Этого можно достичь, если все грани комнаты
заменить на отдельные браши, что,
собственно, и делает операция Hollow.

Не впечатляет мощь этих фишек? Тогда
специально для тебя расскажу еще об одной —
о Clipper-е (обрезатель по-нашему 😉 ). Это очень
мощная штука, позволяющая любой браш
обрезать так, как ты хочешь. Как работает сей
зверь? Во-первых, как и всегда, тебе нужно
выделить подопытный браш. Потом жми батон
"X" (понимаешь, почему clipper так близок
хакерскому сердцу?) или, как вариант, батон
Clipper на панели инструментов (16-я слева).
Теперь, если ты кликнешь в каком-нибудь
фрейме проекций, то в том месте появится
синяя точка и рядом "1" — это 1-я обрезная
точка. Всего таких точек может быть 3:
четвертый клик ставит новую 1-ю точку, а все
предыдущие убирает. Скорее всего, у тебя не
получится с первого раза расставить
обрезные точки так, как надо, но не
переживай — их можно двигать грызуном даже
после расстановки. 

Принцип действия этого обрезателя
сводится к следующему: когда ты расставил
все 3 точки в пространстве, через них
проводится плоскость (считается, что она
бесконечна) и делается попытка пересечь
выделенный браш этой плоскостью. Если это
удается, и плоскость делит браш на две части,
то эти части подсвечиваются разным цветом (желтым
и красным), чтобы ты видел, как именно будет
разделен подопытный объект. Та часть
объекта, которая будет выделена желтым,
является основной: если ты посмотришь в
окно камеры, то увидишь только ее. Это
поможет тебе расставить все точки должным
образом.

Обрати внимание: пока еще с брашем ничего не
происходит — он остается целым и невредимым.
Теперь, когда все точки расставлены, как
надо, у тебя есть 3 варианта действий: 

1) Если ты хочешь оставить только основную
часть объекта (желтенькая такая 😉 ), а все
остальное удалить, то просто жми Enter. 
2) Если ты хочешь сделать наоборот: удалить
основную часть, а все остальное оставить, то
сначала жми <Ctrl+Enter>, чтобы части объекта
поменялись местами (инверсия, то есть), а
затем переходи к пункту 1.
3) Если ты хочешь просто разделить браш на 2
части и ничего не удалять, то жми <Shift+Enter>

Вот такая мощная штуковина. Когда будешь
работать с ним, не забудь про технику
безопасности, а то будешь страдать
нарушением порно-двигательного аппарата. 😉 

Крутим пальцы

Теперь самое время научится разворачивать
и масштабировать браши. Вращение
осуществляется элементарно: выделяем
нужный объект, нажимаем на кнопку Free Rotation (20-я
слева ;)) — объект станет фиолетовым. 

Теперь, удерживая левый клик и перемещая
грызуна, можно поворачивать объект по любой
из осей. При этом поворот будет дискретен и
минимальный угол поворота, определяющий
эту дискретность, будет зависеть от
текущего шага выравнивания (если ты забыл,
что это такое, прочитай 1-ю часть статьи 😉 ).

Масштабирование осуществляется
практически так же: выделаем объект,
нажимаем на Free Scaling (21-я слева), двигаем мышой
и получаем то, что хотим. Но тут есть 3
дополнительные кнопки: "X" "Y"
"Z", находящиеся справа от Free Scaling. Они
позволяют осуществлять масштабирование по
любым из осей: например, чтобы увеличить
объект только по оси Y, надо сделать так,
чтобы батон Y бал нажат, а остальные — нет. 

Ты, вероятно, заметил, что каждый раз, когда
создаешь новый браш, он представляет собой
простой прямоугольник, но ведь иногда нужно
делать треугольники, восьмиугольники и т.д.
"Как быть?" -спросишь ты. "Расслабься"
— отвечу я, ведь за тебя уже подумали
разработчики Radiant-a и предусмотрели
создание брашей с более-менее произвольным
числом сторон. Чтобы создать, скажем,
треугольную призму, нужно сперва создать
обыкновенный новый браш. Во всех трех окнах
проекций он выглядит, как прямоугольник.
Допустим, надо, чтобы в окне XY Top он выглядел,
как треугольник. Тогда делаем это окно
активным, затем выбираем: Brush>3 sided или, как
вариант, <Ctrl+3>. В результате получаем
треугольную призму:

Вместо <Ctrl+3> можно жать <Ctrl+4, 5, 6, 7, 8, 9> и
получить соответственно четырех-, 5-и-, 6-и-, 7-и-,
8-и и 9-и угольники. Но это еще не все:
существует следующий интересный пункт меню
Brush>Arbitrary sided. Если ты его вызовешь, то
сможешь ручками ввести нужное число сторон
(значения от 3х до 59-и принимаются
круглосуточно). 

Ну, раз уж мы затронули эрогенную зону меню
под названием "Brash", то не могу
удержаться и не рассказать о ее составной
части Brash>Primitives. В этом подменю кроются два
пункта, могущие понадобится тебе в процессе
создания очередного шедевра — это Cone и Sphere.
Если ты выделишь какой-нибудь браш, а затем
вызовешь Cone или Sphere, то тебе заботливо
предложат ввести число сторон будущего
объекта, и сразу после сложной процедуры
нажатия на батон ОК тот самый выделенный
браш станет пирамидой или сферой. Например,
если ты вызовешь Brush>Primitives>Cone… и введешь
3, то получишь треугольную пирамиду. При
увеличении числа сторон пирамиды,
последняя становится похожа на конус,
поэтому этот пункт называется Cone. С
командой Sphere все практически так же, но если
ты попытаешься сделать 4-х стороннюю сферу в
надежде получить кубик, то получишь кукиш с
маслом, вместо означенного геометрического
тела.

Mega Jump Pad

Если ты в каком-нибудь из фреймов проекций
кликнешь правой кнопкой грызуна, то выпадет…
хм… в смысле всплывет… э… в общем появится
полезное меню ;). С его помощью ты сможешь
сотворить массу полезных вещей. Меню это
большое, и у меня нет возможности
рассказать обо всех его пунктах,
большинство из которых создает какой-нибудь
объект. Поэтому рекомендую тебе
попрактиковаться в создании всяких
объектах и почитать про их использование в
том самом окне управления объектами,
которое можно вызвать батоном "N".
Напомню, что в том окне для каждого объекта
приводится сжатое, но конкретное описание,
которое затрагивает все основные свойства
и параметры последнего.

Сейчас я в качестве примера расскажу о том,
как сделать вполне нормальный jump pad (если ты
не знаешь, что это такое, и при этом считаешь
себя квакером — прими мои соболезнования).
Сначала сделай большую комнату (размером
примерно 1600x700x700), покрой стены текстурами,
создай несколько источников света (силой
где-то в 250) и размести их равномерно по всей
комнате на высоте примерно 280 пунктов (тут
полезно отметить, что батоном <пробел>
можно клонировать выделенный объект — жутко
удобно!). Теперь сделай браш размером именно
128х128х8, помести его в одном конце комнаты
так, чтобы он выступал над полом на 2 пункта:

Этот браш будет видимой и неактивной частью
jumppad-a. Теперь надо загрузить текстуры из
раздела sfx. Для этого вызови: Textures>sfx. Затем
выдели браш, который только что создал, и в
окне текстур (hot key: "T") выбери
анимированную текстуру джампада (я,
например, выбрал bounce_concrete). Теперь эту
текстуру надо подвинуть относительно браша,
для того чтобы круг, изображенный на
текстуре, был в центре. Делается это просто:
<Shift+стрелки>, при этом шаг сдвига
текстуры будет равен текущему шагу
выравнивания (который, как известно,
устанавливается батонами 1-7). 
ОК графическая часть джампада готова.
Можешь скомпилировать карту и посмотреть,
как все получается.

Теперь переходим к сути нашего джампада. 

Сначала убедись, что ни один объект не
выделен. Кликни во фрейме XYTop правым батоном
крысы рядом с тем брашем и выбери в
появившемся меню trigger>trigger_push. Появится
новый объект, размер которого можно менять.
Сделай так, чтобы он точно совпадал с брашем,
изображающем джампад, по размеру и
положению, но выступал над ним на несколько
пунктов. Пока этот объект прямоугольный, но,
насколько мне известно, id делала их
восьмиугольниками. Думаю, стоит
последовать их примеру, тем более, что ты
уже знаешь, как это делается (нажми <Ctrl+8>
или вызови Brush> 8 sided). Теперь проверь
остался ли trigger_push самим собой после этой
операции (нажми "N" и посмотри его имя,
если оно не trigger_push, то просто, не убирая с
него выделения, еще раз кликни правой
кнопкой крысы и выбери в меню trigger>trigger_push).

Опять убери выделение со всего и,
воспользовавшись всплывающим меню, создай
объект target>target_position. Его размеры, в отличие
от предыдущего, менять нельзя. Прикинь, по
какой траектории ты хочешь лететь,
запущенный джампадом, и перемести объект в
самую верхнюю точку этой траектории (вспомни
школьный курс физики — там говорилось про то,
что все тела на земле падают по параболе).
Допустим, ты хочешь, чтобы тебя отнесло на 500
единиц от джампада и при этом подняло на
высоту 200 единиц, тогда ставь target_position на
этой же высоте на расстоянии 250 единиц от
прыгалки.

У тебя на уровне может быть много
джампадов, поэтому надо как-то связать
конкретный джампад с конкретной точкой
позиционирования (target_position). Для этого
сначала создай для target_position параметр с
именем "targetname" и значением, скажем,
"t1", т.е. сделай идентификатор для этой
точки. Теперь для прыгалки, т.е. для объекта
trigger_push создай параметр "target" со
значением "t1". 
Улавливаешь суть связывания? Если руки тебя
не подвели, то прыгалка должна соединиться
с точкой позиционирования зеленой линией:

Все! Компиль карту и радуйся жизни!

Финал.

Сейчас пара слов о том, как сделать твою
карту полноценной в некоторых отношениях ;).
Как ты знаешь, в кваке после очередного
мясного боя выводится либо таблица
результатов, либо постамент тройки лидеров,
причем сие действо происходит
непосредственно на карте. Ты имеешь полное
право встроить такую штуку в свой левел. Это
делается с помощью объекта info_player_intermission
(info>info_player_intermission в popup меню). Его
достаточно разместить в нужном месте и
направить в нужную сторону (из него,
указывая направление взгляда, торчит
стрелочка — так что проблем не будет).

Еще одна фишка — бэкграунд при загрузке
карты. Обычно он представляет собой сильно
размытый скриншот той же карты. Когда ты
тестил свои первые левелы, то наверняка
заметил, что этот фон весьма скромен и
представляет лого Quake3. Я почти уверен, что
наиболее продвинутые перцы захотят сделать
нормальный фон. Какие проблемы? Все очень
просто!

Сначала выбери место на карте и сделай
скриншот (в кваке, а не в радианте).
Желательно, чтобы на нем не было всякого
оружия, хелса и прочих индикаторов. Теперь
этот скрин в каком-нибудь редакторе сожми
до размера 128х128 и сохрани в формате jpg.
Осталось обозвать файл так же, как и файл
карты (т.е. x1.jpg) и положить его в baseq3\levelshots.
Как ты понимаешь, в этот файлик можно
запихать все, что душе угодно: хоть фотку
любимой девушки, так что тут есть где
размахнуться твоей неудержимой фантазии.

Если ты собираешься серьезно заниматься
мепмейкингом, то имей в виду, что тебе
понадобятся внутренности кваки. Открыть их
— дело несложное: достаточно распаковать
все *.pk3, которые являются обыкновенными zip-ами.
После этой несложной процедуры ты сможешь
рыться в текстурах, звуках и пр. так же легко,
как в каком-нибудь c:\windows. 

Ну вот и все. Самое главное ты усвоил (я
надеюсь 😉 ). Это — основы, но этих знаний
вполне достаточно, чтобы сделать, к примеру,
вот такую карту: m2.zip.

(признаюсь честно: с этим элементарным
левелом я возился дня четыре). Для
самостоятельного изучения тебе остается:
операции поворота и отражения от осей,
более конкретная работа с текстурами,
подключение ботов к твоей карте, изучение
shader-ов, работа с кривыми поверхностями
(curves)… В общем, без дела не останешься. 

Где взять всю эту инфу? 

Во-первых, в каталоге Radiant-a есть файло:
Q3Rad_Manual.doc. Поскольку по его названию
совершенно невозможно догадаться о
содержимом, подскажу: это полное
руководство непосредственно от
производителя. Написано на редкость удачно,
поэтому если что-нибудь будет не совсем
понятно, то введение этого документа
перарально 3 раза в день после еды исправит
положение и восстановит проходимость
извилин мозга.

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

В-третьих, рекомендую заглянуть на http://www.quake3world.com/
— там есть секретный форум под шифрованным
названием "Level Editing", посвященный
разработке карт.

В-четвертых, рекомендую открыть файл
links.htm, лежащий там же, где и сам Radiant. В нем
найдешь еще несколько полезных линков.

Вторую карту, которую мы пытались с тобой
сделать, можно слить отсюда:  x1.zip.

Ну вот и все! Если после прочтения данной
статьи ты все еще хочешь заниматься этим
делом, то всемирная известность на ниве
мепмейкинга и безбедная старость на
островах в средиземном море тебя
обеспечена. Удачи!

(c) FINNAN 2001

Теги:

Оставить мнение

Check Also

Внутри x86-64 SystemV ABI. Как говорить с ядром Linux на его языке

Абстракция — основа программирования. Многие вещи мы используем, не задумываясь об их внут…