Этот сайт предназначен, прежде всего, людям, ностальгирующим по ушедшим РУССКОМУ СЛОВУ, Windows 3.1, ФОТОНУ, процессорам 486SX и иже с ними.
Конечно, времена должны идти вперед, но почему они обязательно должны уходить?
StuhlbergR 2007-2008 ©
|
"Why are there monsters?" (DOOM - Infernal Sky)
"Кровищи, кровищи побольше..." или еще раз о детализации в мапинге DOOM 3 (продолжение)
Если вы провели достаточное количество времени на картах первого и второго Quake (а я все-таки думаю, вы там бывали не раз), то после DOOM 3 наверняка подметили одну особенность: практически полностью прямоугольное оформление. Встречаются браши, выполненные путем манипуляции с вертексами, имеющие угловые искажения, но в основном все-таки уровни выполнены угловато. Правда, благодаря отличному (и не только для того времени) дизайну такой "недостаток" не бросается в глаза. Поправьте меня, если я ошибаюсь, но, по-моему, все по-настоящему закругленные элементы там выполнены в виде моделей.
Иное дело уже Quake 3. Закругленных углов значительно меньше. Quake Wars - отдельная тема, потому как действия там разворачиваются на Земле; ну а где на Земле вы видели человеческие постройки с закругленными улами?.. Я, конечно, имею в виду не изыски дизайнерской архитектурной мысли, а строго утилитарные помещения, в которых нам и приходится сражаться со строггами.
Quake. Дизайнеры избегают прямоугольности комнаты путем вертексного искажения брашей |
DooM. Закругленность углов достигается известной степенью дискретизации ломаности сектора. Получаается довольно выразительно |
Quake Wars в плане геометрии сохраняет традиции Quake 4. Но локации земного типа накладывают свой отпечаток |
Вообще же, меня всегда интересовал вопрос: почему строго прямоугольные "коробки" вдруг стали считаться недостатком в маппинге? И это - наряду с тем, что в окружающей жизни мы вряд ли повстречаем "обыденный" архитектурный объект с закругленными коридорами и/или углами. Оно, конечно, марсианская база, футуристический дизайн и все такое... Но, думается, однозначно нацеплять ярлык "плохая" к карте, построенной исключительно на прямых углах, было бы крайностью. Да и кто отметит, положа руку на сердце, усиленные закругления брашей, кроме самих мапперов? Во многих (и очень многих) современных играх все строится в большинстве своем на прямоугольниках. Но от того игры эти не проигрывают в своей популярности. Все же следует помнить, что нестандартная геометрия комнаты - это далеко не все, и геймплей по-прежнему стоит во главе угла. Но отсюда отнюдь не следует, что архитектура не важна. Иначе носились бы игроки до сих пор по ровно затекстурированным "коробкам". Известно же, что уже в Wolf 3D понятие дизайна уровней - существовал; более того, был реализован на достаточно высоком уровне.
Да-да, извечный спор "физиков и лириков": что важнее в игре - геймплей или дизайн. А на самом-то деле, спора никакого и нет. Ответ тут может быть только один: важно - все. Но геймплей выходит за рамки данной статьи, а посему не станем больше разливаться "мыслию по древу", а попробуем соорудить что-нибудь не совсем прямоугольное.
А сооружать мы будем закругленный коридор из нашей предыдущей комнаты в... скажем, в некий реакторный зал. Заодно рассмотрим, каким видоизменениям (внешним и функциональным) могут подвергаться браши и напишем несложный скрипт для вращения чего-нибудь в нашем реакторе (или турбине - как будет угодно).
Для начала "прорубим" выход из первой комнаты. Делается это, опять же, не без помощи браша. Создадим новый браш, немного больше по ширине, чем сама комната, чтобы его края выходили за пределы стен. Скажем, так:
При этом важно, чтобы этот браш не задевал прочих элементов архитектуры, кроме самих стен, равно как пол и потолок, иначе в итоге отхватим кусок не только от стены, но и у всех предметов, которые попали под выделение. Исправлять же получившиеся дыры в комнате в результате неосторожного выделения - занятие порой то еще... И жмем кнопку CSG Subtract на панели инструментов.
Удаляем выделенный браш (а выделение мы все еще с него не снимали) клавишей <Backspase>. Получаем вырезанный проем для будущей двери.
Таким образом можно наделать отверстий практически любой формы и размеров. Только пользуйтесь инструментом осторожно: легко продырявить карту совсем в неподходящих местах. К тому же, браш при этом режется на куски. Это также следует учитывать. На скриншоте ниже вырезано семиугольное отверстие в некогда монолитном прямоугольном браше. После применения CSG Subtract он разделился на несколько мелких неровных кусков.
Но не спешите компилировать карту. При попытке это сделать консоль выдаст примерно следующее:
158 flooded leafs
entity reached from outside -- no filling
**********************
WARNING: ******* leaked *******
**********************
--- LeakFile ---
5 point linefile
0 total shadow triangles
0 total shadow verts
-----------------------
1 seconds for dmap
------------- Warnings ---------------
during running dmap...
WARNING: ******* leaked *******
1 warnings
И вот это самое leaked, выделенное мной, показывает, что на карте появились дыры; а также является сигналом к тому, чтобы неотложно и немедленно искать и устранять эти дыры. Конечно, можно скомпилировать с применением bsp noflood, только зря вы будете это делать. Чем опасны дырки в карте? В основном, двумя непрятностями. 1). На больших картах и при динамичном освещении, а также приличном скоплении монстров и моделей как раз в данном месте вы рискуете получить "тормоза" неимоверные. 2). Перестанут работать виспорталы в разграничениях локаций, а также неизбежна утечка кислорода на всем уровне, если у вас есть открытое пространство Марса.
Окно консоли с грозным сообщением leaked показано ниже.
К слову сказать, свою первую более-менее обдуманную карту Barracks я забросил именно из-за присутствия дыр, а в результате - протечек кислорода. Поначалу не обращал внимания на leaked, компилируя через bsp noflood и откладывая исправление ошибок "на потом". А в результате карту пришлось бросить. Именно leaked является настоящим бичом начинающих мапперов.
Так как же действовать, узрив leaked в своей консоли? Первое: не паниковать :) Второе: искать место протечки. Для этого нужно выбрать: File - Pointfile... Увидите красную линию, которая показывает, какой объект и из какого места "высасывает". В нашем случае, это, естественно, через дверной проем - источник света; по-другому и быть не могло.
Устранив же протечку (наставив "заплатку" брашем на дыру), сохраняемся и компилим по-новой. Если дыр много, то каждую последующую находим путем: Misc - Next leak spot (Shift-Ctrl-K), а предыдущую - Misc - Previous leak spot (Shift-Ctrl-L).
Впрочем, бывалые картоделы, поднаторевшие еще на первокаваках, расскажут еще один способ поиска дыр - как бы методом исключения. Рисуется огромный браш на половину карты и проверяется на leak spot. Если протечка сохраняется - браш переносится на другую половину карты, затем поиски сужаются еще наполовину и еще... Таким образом, рано или поздно место протечки найдется, но на поиски может уйти достаточно долгое время, поэтому лучше использовать вышеописанные возможности D3 Radiant.
Ну да ладно, в нашем-то случае отверстие было сделано преднамеренно, а потому все под контролем :) Делаем коридор. Да не простой, а Его Величество Закругленный, дабы каждый, кто пробежал через него, отметил ваш профессионализм.
На самом деле, мне известны два способа создания такого коридора. Первый - не совсем "честный", ибо закругление там не настоящее, а присутствует лишь иллюзия закругления. Так я делал углы и коридоры еще в Doom Builder - редактор карт для DOOM 1-2. Способ заключается в том, что мы пристраиваем друг к другу несколько малых брашей, искажая их через вертексы (давим клавишу <E> и правим вершины, подгоняя друг к другу). Знатоки утверждают, что это опасный метод, череватый при определенных условиях неприятностями при компиляции и вообще глюками на карте. Им виднее. Но метод работает, а посему имеет право на существование. Вот только брашей придется рисовать побольше, чтобы иллюзия закругленности была полнее, и вершины соприкасающихся брашей подгонять плотно друг к другу, опять же во избежание протечек.
Важно! Во время такой операции лучше не изменять шаг сетки. Иначе можно нарваться на невозможность плотно подогнать вершины брашей.
Делаем пол...
...и стены.
Потолок же лучше сделать через выделение всех брашей пола и последующее их прямое копирование (клавиша <пробел>).
Пожалуйста, мы получили коридор с некоторой степенью закругленности. Кстати, вы только что построили комнату из отдельных брашей, как это делают настоящие профессионалы ;)
Недостатков у данного метода хватает. Для обширных реалистичных коридоров и комнат придется создавать довольно много брашей, но угловатость все равно сохранится. Да и при текстуризации придется несладко. Для первоквак, Half-Life и Counter Strike (в районе версии 1.6) он был приемлем. Но в DOOM 3 лучше поступить иначе. А именно:
Создаем браш и придаем ему: Patch - Simple Patch Mesh... Возникнет окно Patch density, в котором все параметры выставляем со значением 3.
Нажимайте клавишу <V> и редактируйте плоский браш примерно так, как выгибали трубу (см. ранее). Обратите внимание на сохранение прямых углов и расстояния между точками редактирования. Можно, конечно, выгибать браш как душе угодно, но после приготовьтесь к тому, что возникнут проблемы с изготовлением стен. Так что лучше не искушать судьбу и оставить произвольные изгибы до лучших времен, когда станем настоящими знатоками или даже профи, а это может случиться гораздо быстрее, чем вы думаете ;)
Теперь создаем браш, по размерам такой же, как и первый...
...и применим к нему Patch - Bevel. В результате получим плоский ровно изогнутый браш. Сделаем его повыше в окне проекции Z и, если линия изгиба не совпадает с полом, корректируем кнопкой на панели инструментов:
Копируем пол и приставляем в качестве потолка:
Точно так же делаем и вторую стену, подтягивая ее вершины к краям пола. Можно сделать и через копирование первой стены с последующей ее трансформацией. (Некоторое время меня приводило в бешенство, когда текстурой покрывалась лишь одна сторона стены или пола, в то время, как другая оставалась не только незатекстурированой, но и делая невидимой и неосязаемой в игре всю стену; приходилось изворачиваться, применяя всевозможные методы трансформации и поворотов, что не всегда приводило к желаемому результату. Решение же оказалось на удивление простым: достаточно было применить комбинацию <Ctrl>-<I>, чтобы текстура перескочила на противоположную сторону.)
Сравните с первым вариантом:
И все бы ничего, да поджидает здесь засада. При попытке скомпилировать карту выдается сообщение о наличии дыры. Искать ее через Pointfile бесполезно, так как, мало того, что красная линия уходит прямо сквозь пол или потолок, так еще и при удалении объекта, который "вытягивает" ее, его эстафету подхватывает следующий объект, а потом следующий... Подозреваю, что дело здесь именно в плоских брашах, которые использовались при строительстве. Изогнуть же стены каким-либо еще способом не представляется возможным (по крайней мере, мне иные варианты не известны). Выход был найден: поместить коридор в герметичную коробку - как бы внешнюю комнату. После этого протечки прекратились.
Решение, как говаривала одна из моих знакомых, не фонтан, но получается, как в том анекдоте про программиста: а если работает, то и не трогай больше ничего, сынок :)
Если же кому-то известны причины возникновения и способы решения этой проблемы, прошу откликнуться...
Моя первая карта для Counter Strike 1.6. Все очень и очень прямоугольно.
Дополнение от c4tnt. (Цитирую)
В принципе мысль про коробку вокруг этого злого коридора - абсолютно правильна. Но для текстуры этой коробки лучше всего всё-же использовать caulk. Причина этого таинственного явления известна ещё со времён Q1 (тогда ещё был vis великий и ужасный). В общем алгоритм, который создаёт bsp (а попутно находит дыры) может работать только с брашами и, соответственно, игнорирует модели, двери, кривые и всё остальное. В Doom3 не игнорируется только браш обыкновенный и браш с func_static, в более ранних играх игнорировалось всё, кроме чистого worldspawn`а. Желательно делать коробку вокруг коридора минимального размера, вдруг у вас рядом будет проходить коридор. Да и глюкам в AAS - файлах нельзя давать шансов.
Если у вас на карте из стен торчат разные декоративные элементы и это DM-карта - очень полезно сгладить все углы с помощью Player_clip. В игре чрезвычайно неприятно зацепиться насмерть (в буквальном смысле) за торчащую на миллиметр из стены трубу, скрываясь от вражеской ракеты.
Не создавайте таких коридоров, в которых пол образован двумя сходящимися плоскостями (в форме V). В такой конструкции можно очень нехило застрять.
Контрольные точки любой кривой можно притянуть к сетке с помощью ctrl-g.
По поводу квадратности комнат - суть тоже абсолютно верна, но всегда есть одно НО. И заключается оно в следующем: всё-же в реальном мире все стараются скруглять углы (если это допускает строительный материал). И такого рода скругления можно обнаружить на оригинальных картах дума (марс-сити, терминал связи около штаба. Точнее не сам терминал, а та штуковина, которая его окружает. Или, например, пол в комнате, где нам вручают PDA в торжественной обстановке). На самом деле кривых поверхностей на картах очень много.
ПРО ДЫРЫ.
Итак, что такое дыра. Дыра - это нора, а где нора - там и кролик. Но это я о чём-то своём, а теперь по сутиЖ
Что есть дыра и как эта зараза её находит:
Для ответа на такой вопрос нужно сначала долго разбираться, что такое bsp, но
если кратко - компилятор делит карту на выпуклые объёмы (одна квадратная комната без изысков - как раз такой объём)
В результате работы получается набор таких комнат (на самом деле эти объёмы могут располагаться самым неочевидным образом). Между ними (этими объёмами) есть переходы (порталы). Естественно при работе компилятора должно получится два блока - всё, что снаружи карты и всё, что внутри. Если получается только один - пора думать об утечках. Кривая поинтфайла, на сколько мне известно, идёт как раз по центрам этих объёмов. Естественно, если на карте есть объекты - они должны находиться во внутреннем объёме.
Теперь о плохом...
Что сделает любой разумный компилятор, имея отдельно два набора геометрии: ту которая снаружи и не видна, и ту, которая внутри? Скорее всего первый набор он просто удалит. Если же у него только один набор - удалить он ничего не сможет. Осталось прикинуть масштабы этого удаления. Пусть есть одна комната с четыремя стенами, полом и потолком. Наружу смотрят шесть поверхностей и внутрь столько же (при аккуратном маппинге, при неаккуратном наружу смотрит больше). Если удалить внешние стены - геометрии станет в два раза меньше.
Едем дальше...
Как было сказано выше, между объёмами самопроизвольно возникают порталы (это было ещё в первом квэйке). Соответственно, компилятор попробует создать карту видимости для этих порталов (точнее, какой объём из какого виден). Если на карте есть дырка - эта задача усложняется в разы, а именно: внутри комнаты ровно один выпуклый объём, а снаружи как минимум четыре. Хотя на сложных картах количество объёмов внутри уже превышает количество объёмов снаружи, их удаление всё же облегчает жизнь. (Кстати, bsp noflood не делает такой оптимизации).
Ну и ещё масла в огонь :) При выполнении bsp noflood не создаются AAS карты (причины всё те же), а значит монстры не смогут нормально ходить.
|
Итак, исходя из вышесказанного (благодарю товарища за развернутый ответ!), комната вокруг коридора должна выглядеть примерно так:
[1] [2] [3] [4] [5] [6] [7] [8] [9]
Ветка DOOM-ностальгияСтатьи о DOOM
|
Большинство предоставленного здесь материала является цитированием со старых номеров компьютерных журналов, таких, как
"Мир ПК" или "Весь Компьютерный Мир". К сожалению, все мои попытки связаться с этими изданиями по поводу вопроса о цитировании были безуспешны.
Издания упорно хранили молчание. Что я разрешил себе расценивать как знак согласия, указывая, тем не менее, повсюду как выходные данные
издания (с работающей ссылкой на Интернет-представительство), так и автора публикации. Тем более, что, в силу срока давности этих публикаций, вряд ли материал можно рассматривать как коммерческий или рекламный,
пусть даже названия фирм здесь и присутствуют (уж без этого никуда).
Ежели появятся какие претензии по оному поводу, прошу
издания связаться со мной
Райво Штулберг |