01 октября 2004
Обновлено 17.05.2023

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - изображение обложка

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

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - фото 1

Рис. 1. Немного терпения, и вот — уютный бункер типа “барак” готов к сдаче под ключ.
закрытые помещения на нашей карте. Как это (и не только это) сделать, мы рассмотрим в сегодняшней статье. Внутренние помещения _Геометрия _ Внутренности зданий в игре создаются без особых ухищрений с помощью заранее подготовленных кусочков пола, потолка, стен. Все они находятся на закладке Objects панели RollupBar под кнопкой Brush в папке glm. Чтобы не мучиться с подгонкой частей друг к другу, заранее включите на панели инструментов кнопку-список Snap to Grid , установив размер ячейки в 0.5 единиц, и кнопку Snap Angle — так объекты будут перемещаться строго с заданным промежутком и поворачиваться с шагом в 5 градусов. Также в некоторых случаях намного удобнее будет работать над “коридорными” уровнями в окнах плоских проекций ( Top , Left , Front ), особенно при создании зон видимости, описанных ниже. Все модели, составляющие помещение, можно поделить на четыре типа: полы ( Floors ), стены ( Walls ), потолки ( Ceilings ) и “внутренние” модели, такие как колонны ( Pillars ), части, из которых составляются дверные проемы ( Doors ). Они находятся в подкаталогах с соответствующими названиями. Модели первых трех типов почти все представляют собой покрытый текстурой квадрат, видимый лишь с одной стороны. Остальные также имеют дыры — для экономии полигонов у них отсутствуют “задние” грани. Поэтому, создавая уровень, следите, чтобы на нем не появлялись окна в пустоту. Так как внутренние помещения, скорее всего, будут спрятаны под землей, то вам понадобится создать проход в земной поверхности, иначе игрок просто не сможет пройти ни в один бункер. Для этого нужно перейти на закладку Terrain и нажать кнопку Holes. Тут все просто. Кнопка Make Hole создает дыру в земле. Remove Hole — закрывает дыру. Радиус кисти задается бегунком под кнопками. При создании подобного прохода нужно позаботиться о маскировке стыков земной поверхности и выпячивающихся из земли деталей — чтобы не было щелей и нигде не торчали “висячие” полигоны. Зоны видимости

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - фото 2

Рис. 2. Пример размещения зон видимости на схеме уровня.
__ Поскольку все помещения создаются из статических моделей, не идет речи о каком-либо автоматическом разбиении пространства на зоны видимости. Игре придется обрабатывать абсолютно все помещения, а также объекты на поверхности, которые будут в пределах зоны видимости игрока, даже если эти объекты заслонены стенами подземного бункера. А это приведет к большим потерям в производительности. Поэтому зоны видимости необходимо установить вручную. Это делается с помощью объектов VisArea и Portal (скрываются под кнопкой Area на закладке Objects ). Первый как раз и является зоной видимости, позволяя игроку, попавшему в эту зону, видеть лишь те объекты, которые также находятся в данной зоне. Порталы же являются “окнами” между зонами видимости и позволяют смотреть наружу (если вы находитесь внутри VisArea ) или наоборот — внутрь (если вы находитесь вне VisArea ). Во избежание проблем с размещением порталов лучше использовать прямоугольные зоны видимости. Смежные зоны видимости должны быть расположены вплотную друг к другу, без зазоров. Редактировать размер и форму любой зоны можно, выделив ее и щелкнув по кнопке Edit Shape на закладке Objects. Перемещаются точки левой кнопкой мыши. Добавляются также левой кнопкой при зажатом Ctrl. Удаляются двойным левым щелчком по удаляемой точке. Высоту можно настроить в параметре Height. Лучше, чтобы у зоны был некоторый запас по размерам, чтобы модели, составляющие ограничиваемую комнату, наверняка оказывались внутри этой зоны. Те объекты, которые находятся прямо на границе зоны, не всегда отображаются корректно. Пример расположения зон можно увидеть на рис. 2.

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - фото 3

Рис. 3. А вот так следует располагать порталы.
Порталы создаются и редактируются точно так же, как и зоны видимости. Их нужно располагать прямо на стыке двух зон, чтобы они полностью перекрывали место их соприкосновения. Но не следует делать порталы чрезмерно объемными, наоборот — старайтесь делать их по возможности более плоскими ( рис. 3 ). Корректируя габариты и положение портала, старайтесь добиться того, чтобы можно было увидеть соседнюю зону видимости из любой точки текущей зоны. _Текстурирование _ “Кирпичики”, из которых собирается очередная секретная лаборатория, уже имеют свои текстуры. Но текстуры эти весьма однообразны, да и вариантов моделей с разными текстурами не так уж и много. Что же делать, если вы захотите сменить серые бетонные стены на сверкающие металлические или еще на что-либо? Для начала следует открыть уже знакомое окно базы данных, обитающее в меню Window\Show Data Base View , и там перейти на закладку Materials. Как и в подробно изученной в прошлой статье закладке Entity Library , все наборы текстур (а точнее — материалов) содержатся во внешних библиотеках. Чтобы открыть библиотеку, щелкните по кнопке Load Library и выберите желаемый набор в появившемся окне. Открыв библиотеку, выделите один из приглянувшихся вам материалов. Затем в окне обзора Perspective выделите текстурируемую модель и нажмите кнопку Assign Material to Selection. Вернуть стандартную текстуру модели всегда можно кнопкой Reset Material On Selection. К слову, текстуры вовсе неспроста называются материалами. Ведь в библиотеке содержатся не только стандартные “диффузные” текстуры. Материалы содержат и карты отражений, и рельефные текстуры, и всевозможные их сочетания. С их помощью вы можете придать любой поверхности какой угодно вид. Освещение Освещение — важная часть в создании подземных уровней. Это вам не залитые солнечным светом пляжи. Существует два типа освещения: динамическое (обрабатываемое в реальном времени) и статическое (предназначенное для компиляции карт освещения на статических моделях). Оба типа могут также иметь

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - фото 4

Рис. 4. Здесь компилируются карты освещенности.
свойство fake (муляж; задается в параметрах). От обычных источников света fake-лампочки отличаются тем, что освещают лишь статические объекты и не принимают участия в освещении движущихся моделей, экономя тем самым ресурсы компьютера. По умолчанию все внутренние помещения освещены весьма ярко, что категорически неправильно — ведь солнечный свет туда не проникает, а других источников света там пока еще нет. Погрузим их в сумрак. Для этого откройте меню Game\Generate Lightmaps. В открывшемся окне ( рис. 4 ) в поле Quality настраивается разрешение карт освещения — бегунок Texel Size настраивает масштаб пикселей, а в списке Texture Resolution вы можете выбрать разрешение текстуры. Чтобы скомпилировать карты освещения на всех статических объектах карты, надо нажать кнопку All в поле Recompile в нижней части окна. Кнопка Selection обновит карты освещения только на предварительно выделенных объектах, а кнопка Changes — лишь на объектах, подвергшихся каким-либо изменениям со времени предыдущей компиляции карт.

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - фото 5

Рис. 5. Пример неправильного освещения — свет от лампы не освещает область за порталом.
Теперь можно заняться искусственными источниками света. Как статическое, так и динамическое освещение задается одним и тем же типом объектов — DynamicLight из раздела Entity , папка Lights. Установите этот объект в одной из комнат и обратите взор на набор его параметров. В свитке Entity Params включено два параметра — CastShadowMaps и RecvShadowMaps. Они означают, что объект (точнее, его модель) может отбрасывать динамическую тень, и тени от других объектов могут падать на него. Их можно отключить: тень от абажура лампы, появляющаяся лишь при наведении второго источника света, вряд ли очень необходима, а ресурсы процессора небесконечные. Если включить параметр CastLightmap , то объект перестанет быть динамическим источником света и будет проецировать обычные карты освещенности (конечно, лишь после того, как вы заново откомпилируете их). Цвет излучаемого света изменяется в параметре Diffuse в свитке Entity Properties. Яркость — в параметре DiffuseMultiplier. Расстояние, на которое распространяется свет, — в параметре OuterRadius. Статический источник света светит равномерно во всех направлениях. Динамическая же лампочка испускает конус света в заданном направлении (хотя, включив параметр ProjectInAllDirs , можно и их заставить светить во все стороны). Ширина этого конуса задается параметром ProjectorFov. А вот параметр ProjectorTexture позволяет изменить вид пятна света с обычного расплывчатого круга на что-нибудь более интересное (например, светлое пятно будет перечеркнуто решеткой,

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - фото 6

Рис. 6. Участок маршрутной сетки с одного из оригинальных уровней.
загораживающей лампу). Задавая различные значения параметру LightStyle , можно заставить лампу моргать, периодически гаснуть и вообще вести себя так, как приличные лампы не ведут. Чтобы источник света был по-настоящему движущимся, надо задать ему шейдер в параметре LightShader (шейдеры лампы в списке можно найти по названию, каждое из которых начинается на light ). После этого, кроме условного обозначения источника света, вы также сможете видеть модель, которая будет изображать лампу в игре. Если текущая модель вас не устраивает, выберите другую в параметре Model3. Можете дополнительно настроить скорость затухания колебаний качающейся от какого-либо толчка лампы в параметре damping. Чем выше значение, тем быстрее лампа успокоится, но если установить 0 или меньше, лампа не прекратит качаться никогда. Расставляя лампы, имейте в виду, что свет не проникает сквозь порталы между зонами видимости ( рис. 5 ). Если статическое освещение можно продублировать, расположив по лампочке с каждой стороны портала, то с динамическим освещением такой фокус не пройдет. Поэтому не располагайте динамические светильники слишком близко к порталам. Вейпойнты Вейпойнты — это сеть из точек маршрутов, предназначенных для того, чтобы управляемые AI персонажи могли ориентироваться в нестандартных для них зонах. Нестандартными в Far Cry считаются все зоны, кроме земной поверхности на открытых участках уровня. То есть, все ступеньки, мосты, закрытые помещения и прочее. Так как возможность автоматической генерации вейпойнтов в редакторе не предусмотрена, все придется делать вручную. Вейпойнты находятся в разделе AI , объект AIPoint. Они бывают четырех типов — Waypoint (стандартные точки маршрута, из которых и составляется основная сетка), HidePoint (точка, в которой персонажи прячутся в случае опасности; их следует устанавливать за углами, колоннами и т.д.), Entry Point (точка входа и выхода из нестандартной зоны; нужна, чтобы персонаж, обычно находящийся вне сетки маршрутов, мог при необходимости перейти на нее и затем выйти) и Exit Point (точка только выхода). Типы переключаются в свойствах объекта в свитке AIPoint Parameters. Расставлять точки следует равномерной сеткой с промежутком между соседними объектами в пределах 2-4 метров. После расстановки вы должны соединить вейпойнты в единую сеть, так как персонажи могут перемещаться только между теми точками, что соединены между собой. Присоединить одну точку к другой можно, щелкнув по кнопке Pick в нижней части свитка AIPoint Parameters , а затем кликнув на присоединяемую точку. Пример расстановки вейпойнтов вы можете видеть на рис. 6. Обратите внимание, как разрежены точки на более открытом участке и как они “уплотняются” в более тесном и сложном месте. Окружение Возводя всевозможные над- и подземные сооружения, мы совсем не обращали внимания на окружающую среду — небо, туман, воду. А ведь и их можно настраивать по своему вкусу. Не вечно же стоять ясной и солнечной погоде? Чтобы отредактировать параметры окружения, нажмите кнопку Environment на закладке Terrain. Внизу откроется свиток с набором параметров, разделенных на несколько групп. Важнейшие из них — Fog и Shaders. В разделе Shaders выбираются шейдеры (скрипты, содержащие команды — что и как отображать в игре), задающие внешний вид неба, воды, волн, накатывающих на берег, и отражения солнца в воде. Большинство параметров можно оставить как есть. Но если карта, которую вы создаете, — не очередной райский остров, а что-то более мрачное, то можно выбрать и более мрачное небо. За шейдер неба отвечает параметр SkyBox. Нужные шейдеры находятся в самом верху списка и имеют названия, соответствующие названиям уровней игры, на которых они используются. В группе Fog настраивается туман, дымка, заволакивающая объекты по мере их удаления. Параметр Color позволяет выбрать цвет дымки (лучше, чтобы он совпадал с основным цветом неба). Параметр Start отвечает за расстояние между ближним краем тумана и игроком. Параметр End — за расстояние, на котором туман становится абсолютно непрозрачным. ViewDistance — устанавливает дальность обзора. При изменении параметров окружения возникает одна существенная проблема. После того, как вы выберете новые шейдеры, параметры тумана и прочее, вам придется создать новый скрипт уровня, чтобы изменения вступили в силу. Делается это нажатием кнопки New Mission в нижней части панели инструментов. В

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - фото 7

Рис. 7. Кто сказал, что на первом уровне всегда полдень? У нас вот — вечер.
списка слева вы выбираете, какой из скриптов в данный момент активен. Проблема же в том, что при создании нового скрипта вам придется создавать с нуля практически всю карту — создавать объекты, прописывать дополнительные скрипты. Также желательно будет обновить параметры освещения уровня и текстуру ландшафта. Поэтому редактировать параметры окружающей среды лучше в самом начале работы над новым уровнем. Подробнее о триггерах В прошлой статье мы с вами уже изучили базовые принципы создания триггеров. Сегодня же рассмотрим два конкретных способа их применения — организацию автосохранений и создание транспорта, управляемого оппонентами. _Автосохранения _ Так как сохраняться в любой момент в игре нельзя, необходимо добавить на уровне точки автосохранения, дабы облегчить игроку прохождение уровня. Основной объект, отвечающий за сохранение игры — GameEvent из раздела Entity , папка Others. Чтобы объект сработал, надо активировать его каким-либо триггером. Это можно сделать таким же образом,

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - фото 8

Рис. 8. Точка автосохранения.
каким мы активировали цели миссии в прошлой статье. Но, вообще, поводом для автоматического сохранения может стать абсолютно любое событие в игре, вплоть до самых рядовых (смерть NPC, уменьшение запаса здоровья у какой-нибудь машины и т.д.). Мы же сделаем “традиционное” сохранение, происходящее по прибытии игрока в условленную точку на уровне. Поместите GameEvent в месте предполагаемого сохранения, задав ему уникальный номер в параметре Id (это необходимо для правильной работы). Также добавьте объект AreaTrigger и создайте зону (объект Shape из раздела Areas ), при входе в которую будет происходить сохранение. В свойствах зоны в список Target Entities добавьте объект AreaTrigger , щелкнув по кнопке Pick и затем по триггеру в окне обзора. В свойствах самого триггера в списке Input/Output Events выделите событие On Enter и присвойте ему объект GameEvent. Также, чтобы сохранение в данной точке

Острова в океане, ч. 3. Создание закрытых уровней и шлифовка карты - фото 9

Рис. 9. Редактирование карты еще не закончилось, а самые нетерпеливые NPC уже начали патрулировать.
происходило один раз, а не повторялось при каждом прохождении игрока через скриптовую зону, включите параметр триггера TriggerOnce. _AI и транспорт _ Враги в игре могут не только бегать с автоматами наперевес, но также ездить на всех видах транспорта, метко отстреливая гранатометом и давя колесами зазевавшихся игроков. Но чтобы NPC залезли в тот же джип, необходимо создать отдельный триггер. Расположите где-нибудь на карте (можно даже на воде) машину (или лодку) и поставьте рядом с ней двух наемников (у транспорта и солдат при этом должен быть одинаковый номер Groupid в свойствах). Затем создайте очередной AreaTrigger с присоединенной скриптовой зоной. Сделайте так, чтобы при входе в зону триггер отправлял сигнал машине, активируя либо событие On Chase , либо On Patrol. В первом случае солдаты верхом на машине будут гоняться за игроком, как только тот появится в пределах видимости (разумеется, лишь после активации триггера). Во втором — транспортное средство отправится патрулировать территорию по заданному маршруту. Маршрут задается с помощью объектов TagPoint. Просто расставьте их в ключевых точках и задайте однотипные названия с указанием номера контрольной точки (например, patrol1 , patrol2 и т.д.), чтобы выделить данный маршрут среди других. Водитель транспорта сам “подцепит” ближайший маршрут и будет неустанно колесить по нему. *** На этом мы заканчиваем цикл статей о редакторе Far Cry. Хотя руководство не смогло охватить всю ширину возможностей редактора, но все ключевые моменты создания уровней были изучены подробнейшим образом. Остается пожелать вам творческих успехов и ну ооочень хорошего коннекта — иначе как же вы пошлете увесистые уровни, созданные вами, на наш адрес gamezone@igromania.ru?

Комментарии
Чтобы оставить комментарий,Войдите или Зарегистрируйтесь