Вступление
В прошлом уроке нашей целью было преодоление первоначального страха перед LED. Мы можем создать наш первый уровень, не используя большинства технических сложностей.
Слишком много времени прошло с тех пор, как я написал то первое руководство. Сообщество Блейдеров продолжает существовать, несмотря на, то, что Rebel Act Studious закрылась. Среди них есть и те, кто решил создавать свои собственные карты. Но у нас все еще очень мало уроков о создании карт в Blade. Но есть еще те, кто продолжает работать в LED после первой попытки.
Теперь мы попробуем немного углубиться в мир создания уровней с LED. Не на много, а на чуть-чуть. Но даже так, у нас все равно будет несколько проблем, не сомневайтесь.
Изначальный замысел в том, чтобы создать дверные проемы и окна в нашей комнате. Мы увидим, что снаружи и что происходит, когда мы работаем с несколькими секторами. Под конец мы немного поиграем с наклонами пола и крыши.
Порталы
Движок Blade основан на порталах, этот технический прием, несомненно, популярен сейчас в мире 3D программирования. Портал - это просто объединение двух секторов. В прошлом уроке мы выяснили что сектор - это некая яма, которую мы "выкапываем" чтобы построить нашу карту. Когда эти две "ямы" объединяются, их общее пространство, становится порталом, пространством, через которое может проникать свет, так сказать, прозрачной зоной.
Вопреки нашим желаниям, когда мы объединяем две комнаты, мы получаем не две комнаты с дверным проемом между ними, а одну большую комнату. Посредством данного урока, мы постепенно рассмотрим это; Это наша главная задача.
- Важно понимать то, что каждый раз как мы объединяем два сектора, создается портал, сквозь который проникает свет. Движок Blade, как и все остальные основанные на порталах, использует точку обзора камеры как источник света и движку нужно выполнить необходимые вычисления, для того чтобы нарисовать текущий сектор. Далее движку необходимо посчитать все сектора, которые соединены с первым порталами. И это продолжается до тех пор, пока движок не "пересчитает" все сектора. Чем меньше сектора, через которые проникает свет, тем меньше времени потребуется движку на вычисления, и тем быстрее будет происходить визуализация. Эта тема за пределами этого урока, но вам будет интересно узнать, что желательно сократить число видимых секторов, тем самым увеличив производительность вашей карты.
Визуализация текстур в редакторе
Когда я написал первый урок, у нас еще не было bmp проассоциированных с текстурами RAS.
Благодаря Sergio Garces у нас есть прекрасный инструмент mmp_dump [ www.kraki.narod.ru/led.html ] для извлечения bmp из mmp файлов.
В нашей рабочей папке создайте папку 'textures'. Копируем сюда экзешник mmp_dump.exe и ragnar.mmp и в окне MS-DOS переходим в эту папку. Вводим команду: mmp_dump ragnar.mmp
Увидим, как программа извлекает все bmp, связанные с текстурами в mmp. Имена bmp - это внутренние имена текстур.
Гораздо проще перетянуть нужный mmp файл на mmp_dump(drag&drop), и он тут же извлечет все текстуры - более разумный способ, правда иногда он извлекает их куда захочет, потом нужно просто найти куда. Как альтернативу можете использовать удобную программу SGIMMPWorkStation за авторством sgi1981...........SLADER
ragnar.mmp переместите в нашу рабочую папку 'test'.
Теперь скажем LED, где искать bmp. Выбираем File - > Properties и находим вкладку Directory:
Вводим в поле Texture полный путь к папке, в которую мы извлекли текстуры из ragnar.mmp.
Нажиимаем OK и закрываем LED, сохранив карту. В следующий раз, открыв карту, мы сможем увидеть все текстуры, когда
нажмем кнопку palette :
Также в окне свойств мы увидим текстуры:
Короче, закрываем LED и открываем нашу карту: File - > Open ... tonta.mp.
- LED открывает окно Led1 после запуска. Закрой это окно перед открытием нашей карты. Наиболее удобно открыть карту в LED можно, дважды щелкнув мышью по файлу tonta.mp. LED загрузит карту и установит её папку как рабочую. Очень удобно при визуализации карты в 3D-Окне.
- Если хочешь вернуть начальную настройку LED ты должен удалить файл Led_d.ini в папке Windows.
1 + 1 = 3
Мы начнем работу, открыв tonta.mp в LED.
Если у вас ее нет, можете скачать ее отсюда [ http://www.uco.es/~cc0galej/tonta.mp ], хотя там находится только .mp файл, вам придется добавить файл уровня(lvl), текстуры ragnar.mmp и скайбокс casa_d.mmp.
Если ссылка не рабочая, или лень скачивать, просто создайте сектор с полом(Floor) 0.0 и высотой(Ceiling) 4.0, 8x8 ячеек при масштабе решетки(grid) 1.0..............SLADER
Рядом с первым сектором, оставив немного места, мы создадим новый сектор, существует два способа - создать новый сектор, или скопировать первый. Остановимся на втором способе, так мы узнаем, как копировать сектора.
Поменяйте масштаб решетки, выставив значение на 1.0, и кликните по инструменту выбора секторов , затем выбирайте ваш сектор.
Теперь удерживая Shift, выделите сектор и перетащите его вправо, не отпуская клавиши Shift. Мы увидим, что исходный сектор стоит на месте, в то время как второй сектор идентичный первому движется вправо, когда мы отпустим клавишу мыши, мы получим два одинаковых сектора, разделенных пространством:
- В LED нет возможности отменить изменения, так что если вы допустили ошибку, лучше всего выйти из LED, не сохраняя изменений, и просто загрузить карту заново.
Мы оставили промежуток между двумя секторами величиной в 2 единицы(2 клетки), то есть около 2 метров, в самой игре. То, что мы видим сейчас - это две идентичные "ямы" разделенные, сплошным пространством. Если мы закрасим сплошное пространство, то увидим следующее:
Теперь нужно сохранить карту и перекомпилировать. В 3D-Окне мы не заметим каких-либо изменений с картой. Хотя, вторая комната все же существует, она все же невидима из первой комнаты. Чтобы проще понять, где находится вторая комната, давайте поменяем текстуру ближайшей стены. Щелкнув по инструменту выбора стен мы выбираем правую сторону первой комнаты. Нажмите V и поменяйте текстуру на grec1. Выставьте масштаб(zoom) на 20 и угол наклона(angle) на 90:
Чтобы увидеть изменения, мы снова должны сохранить и перекомпилировать карту. Если мы закроем 3D-Окно, то у нас не будет возможности открыть его снова; Придется закрыть LED и запустить его снова. Если мы держим 3D-Окно открытым, то мы должны "обновлять" его, загружая образ перекомпилированной карты(tonta.bw). Мы активируем 3D-окно и, щелкнув по нему правой клавишей мыши, выбираем "Actualize bw":
Если все прошло хорошо, то мы сможем четко различить стену, которая принадлежит к правой стороне нашей первой комнаты.
С помощью стрелок, мы сможем "поместить себя" перпендикулярно стене и попытаться пересечь ее. Все станет темным, и будет оставаться таким до тех пор, пока мы не пересечем сплошное пространство, вскоре мы окажемся в нашей второй комнате.
- Находясь в 3D-Окне, можно легко потерять ориентацию в пространстве. Если мы "войдем" в сплошное пространство, то вполне возможно, что мы застрянем. Я надеюсь, что вы не потерялись "в двух комнатах", так как все усложнится еще больше, когда в вашей карте появятся сотни комнат, но к счастью, чтобы помочь вам ориентироваться в пространстве, LED включает в себя одну интересную функцию. Если вы поместите окно редактора и окно 3D-обзора так, чтобы была возможность видеть оба окна одновременно, тогда, двигаясь в 3D-Окне, вы увидите линию в окне редактора, которая рисует траекторию вашего движения. Очень полезная функция!
Я полагаю, что тут вы захотите, объединить две комнаты, чтобы увидеть, что произойдет. Не стоит ждать чего-либо эффектного. Стена, разделяющая две комнаты, просто исчезнет.
Давайте вернемся к Редактору и выберем сектор справа. Не удерживая клавишу Shift, тащим его с помощью мыши, по направлению к левому сектору, до тех пор, пока оба сектора не объединятся/состыкуются.
Если мы активируем решетку , то будет довольно просто объединить оба сектора. Если решетку не активировать, то есть возможность того, что вершины будут наложены неточно.
- Если вершины были наложены друг на друга неточно, то в дальнейшем это может привести к проблемам. Созданный портал, будет с изъяном, и станет показывать странные результаты, всякий раз как свет будет пересекать его. Даже текстуры могут появляться там, где должна быть прозрачность.
При объединении двух секторов, наложенные друг на друга стороны, становяться порталом. В редакторе нет ничего, что бы говорило нам о том, что это портал, мы просто знаем это и можем проверить это в 3D-Окне. После записи, компиляции и перезагрузки карты.
Теперь, у нас есть прямоугольная комната, увеличенная вдвое, созданная, путем объединением двух секторов. Центральная стена, та, что является порталом, невидима, и мы можем пересекать ее так, как будто ее и не было.
Мы можем использовать инструмент выбора стен , чтобы выбрать портал и вызвать окно свойств. Мы увидим, что настройки не показаны:
Это, потому что мы выбрали одновременно две стороны, составляющие портал. И если мы изменим свойства, то они изменятся для обеих сторон.
Чтобы выбрать, только одну из сторон, мы должны дважды кликнуть с "включенным" инструментом выбора стен . Итак, появится окно выбора секторов:
В этом окне мы можем выбрать сторону, свойства которой нам нужно изменить. Когда мы выбираем сторону, мы увидим, что соответствующий сектор немного изменяет цвет. Если мы выберем сторону, объединенную с левым сектором, т.е. нашей первой комнатой, мы увидим, что она сохраняет текстуру назначенную ей ранее - greс1.
Если мы выберем другую сторону, текстура будет точно такой же, как и на остальных стенах? то есть bronce(цвет меди/латуни). И ни одна из двух текстур не появляется на стене, с тех пор как стена стала порталом. В принципе, если две комнаты одной и той же высоты, то текстура, назначенная на стороны, составляющие портал, является не нужной.
Но что произойдет... если мы изменим высоты? Продолжит ли портал существовать? Ответ - Да, но только в общем пространстве, между двумя секторами. Давайте сейчас представим вид сбоку нашей карты, это то, что, к сожалению, отсутствует в LED.
Снова, мы закрасим желтым цветом сплошное пространство. Левый(первый) сектор, мы оставим с высотой в 4 единицы. Высоту правого сектора мы снизим до 3. Теперь портал ограничен пространством, обозначенным зеленым цветом.
Чтобы воспроизвести эту ситуацию в LED, мы выбираем правый сектор и в окне свойств выбираем высоту потолка(ceiling) равную 3.
Когда мы перезагрузим карту, мы можем заметить, что только общее пространство стало прозрачным. Теперь, только это пространство является порталом.
Мы также, можем увидеть, что остальная стена, то есть, та часть, которая не является порталом, демонстрирует текстуру, соответствующую, стороне присоединенной к первому(оригинальному) сектору: grec1
Такое поведение логично, так как этому месту, в этом секторе мы назначили именно эту текстуру. Текстура становится прозрачной только в пространстве, общем для двух секторов, но она видна в оставшемся месте на стене.
Сейчас мы скопируем первый сектор на другой конец, это будет первым шагом к тому, чтобы соединить оба сектора дверным проемом.
Мы выбираем первый сектор и, удерживая Shift, мы тащим его по направлению к правому сектору, с включенной решеткой(DM). Итак сектора, должны быть в следующем порядке:
Проделав эту операцию, мы получим 3 сектора, средний – высотой(Ceiling) в 3 ячейки, два других сектора, с обеих сторон центрального - высотой в 4 единицы, соответственно. Вертикально(сбоку) результат будет следующим:
В 3D-Окне, мы отчетливо можем видеть два портала и эффект, который был создан. Вы увидите коридор между двумя комнатами. Как только мы скопируем первый сектор, текстура grec1 появится внизу, но... что за текстура присвоена верхней части Портала B? Хорошо, я надеюсь, ваш ответ - bronce, то есть, та же самая текстура, что и на левой стене первого сектора. Если это не так, то не стоит волноваться. Мы сменим ее таким образом, что вы лучше поймете, которая из текстур покрывает это пространство.
Мы дважды щелкнем в области Портала B, который разделяет центральный и правый сектора, так чтобы появилось окно выбора секторов. Мы выбираем сторону, принадлежащую к новому сектору, и меняем текстуру на cala. Эта текстура с таким оформлением, что мы сразу обнаружим ее, после компиляции карты. Теперь она именно там где вы ожидали... не так ли?
При помощи этой операции, мы подошли ближе к нашей цели - объединению двух секторов дверным проемом. В настоящий момент этот сектор не похож на дверной проем, скорее является какой-то разновидностью коридора, но я надеюсь, что вы поняли, что чтобы построить наш дверной проем, нам нужен третий сектор, потому что дверной проем - та же яма, тот же сектор. Если мы объединим два сектора, прямо сейчас, тогда образовавшийся портал, сольется со стенами. По этой причине, необходимо вставить этот третий сектор, должным образом.
Конечно же, для того чтобы сектор выглядел, как дверной проем, нужно сделать его уже, и это наша следующая задача.
Прежде чем мы приступим к этому, мы должны узнать, немного дополнительной технической информации. Мы начнем с попытки отделить центральный сектор от двух остальных, то есть, разъединив порталы. Существует несколько способов сделать это. Первый - выбрать центральный сектор и сдвинуть курсор по направлению к центру Портала A. Когда курсор станет горизонтальной двусторонней стрелкой <--> Мы "оттянем" сторону с помощью мыши немного вправо. Мы увидим, что сторона отделилась от портала.
Мы проделаем ту же операцию с Порталом B, используя похожую технику, но при помощи вершин. Мы дважды щелкнем по верхней вершине Портала B с активированным инструментом выбора вершин . Выбираем вершину принадлежащий к центральному сектору(помните, что выбранный сектор меняет цвет) и тянем его влево.
Мы проделаем эту же операцию с нижней вершиной, так мы получим два отделенных портала.
Вторая процедура, явно медленнее, но нашей целью было показать, как отделить вершину от портала.
Следующий шаг - добавить вершины на стороны секторов. Эти вершины "сообщат" движку Blade, где начинается сектор. Мы установим курсор на правой стороне первого сектора, приблизительно на 2/3 высоты, затем щелкнем правой клавишей мыши. Выбираем Insert vertex(вставить вершину) и мы увидим, что новую вершину появился.
Мы повторим эту операцию ниже, и на левой стороне третьего сектора.
Эти вершины послужат точками образования нового портала.
Чтобы сделать это, мы должны выбрать инструмент выбора вершин и перетащить четыре вершины центрального сектора на новые вершины, только что созданные нами.
Таким образом, мы получим три сектора, объединенных двумя новыми порталами, но теперь, они больше не занимают всю ширину стены.
Самое время, перекомпилировать и увидеть, что произошло в нашей карте. Результат немного отличается от того, к чему мы стремились, хотя, похоже, что текстуры, немного "сбились".
В принципе, мы объединили наши две комнаты дверным проемом. Возможно, это больше похоже на коридор, нежели на дверной проем, и текстуры нужно немного привести в порядок, но первый шаг, все-таки сделан: Мы "вышли" из комнаты.
Текстурирование
Теперь, когда мы достигли результатов, необходимо узнать больше о текстурировании. Основной замысел карты - построить ее, искусно затекстурировав, не обладая, при этом, большими возможностями. Не каждый наделен этой способностью, но мы можем компенсировать этот недостаток, великолепными текстурами, поставляемыми вместе с картами Blade, и большой долей терпения.
Ваша карта может выглядеть по-разному, с различными текстурами представленными здесь. Вы можете установить любую текстуру по умолчанию. Я объясню это немного позже.
Пока что, мы будем акцентировать внимание, на улучшении внешнего вида, нашего дверного проема. Как вы уже знаете из нашего предыдущего урока, вы можете изменять текстуры в 3D-Окне, но прежде чем делать что-либо, мы должны узнать что произошло.
Всякий раз как вы добавляете сектору вершины, сторона этого сектора делиться на две, и на каждую из них можно назначить любую текстуру. Одна из сторон, сохраняет текстуру оригинала, в то время как на другую сторону назначается текстура по умолчанию.
Что-то подобное, можно было наблюдать еще в первом уроке, но важно понять это, так как это будет основой для получения хороших комбинаций текстур. Иногда, мы будем добавлять секторам вершины, не для того чтобы изменить их форму, а для того чтобы иметь возможность присваивать различные текстуры.
Чтобы убедиться в этом, обратим внимание на Портал A, находящийся в исходном секторе. В Редакторе мы выбираем сторону, находящуюся точно под этим порталом и в окне свойств присваиваем ей текстуру grec1, масштабом(zoom) в 20, углом наклона(angle) равным 90, и X,Y=0.
Весьма вероятно, что нам и не нужно было что-либо менять, потому что параметры и так уже были проставлены. Эта сторона "наследует" оригинальные настройки, законченной стороны нашего Первого Сектора, до того как он был разбит, добавлением вершин.
Давайте проделаем то же самое с верхней стороной. Несомненно, сейчас мы должны довести изменения до конца. Наконец мы выбираем центральную сторону. Когда мы дважды кликнем по ней, появится окно выбора секторов, Так как эта сторона является порталом. Мы выбираем сектор слева. Открыв окно свойств, убедитесь, что текстуры и параметры соответствуют параметрам двух предыдущих сторон.
Сохранив и перекомпилировав карту, мы увидим, что результат был улучшен.
Безусловно, результат имеет сходство с дверным проемом, но немного поиграв с текстурами, мы можем улучшить внешний вид. Мы попытаемся сделать это в 3D-Окне. Как мы знаем, мы можем использовать Select surfaces(опцию выбора поверхностей), которая активируется правой клавишей мыши), а также кнопки вспомогательной клавиатуры("калькулятор"), чтобы присваивать текстуры, двигать их, вращать....Но когда мы выберем одну из сторон составляющих Восточную стену, нашей первой комнаты, мы будем приятно удивлены: три стороны выбраны, как одна. Если окно свойств видимо, то мы увидим, что, действительно, выбрано три стороны.
Такое поведение может пригодиться, во многих случаях. Если две или более соседние стороны, делят общую текстуру, они будут выбраны как одна. В других случаях, такое поведение интересует нас, как возможность присваивать различные текстуры каждому сегменту.
Затем нам придется использовать Редактор, так мы сможем выбирать поверхности по отдельности. Мы можем улучшить назначение некоторых текстур. Например, текстура ad1 с масштабом(zoom) 20 и углом наклона(angle) 90, дает лучший результат для нашего дверного проема.
В данном случае, мы выбрали комплексную текстуру, она вполне соответствует нашим требованиям. Когда мы будем немного опытнее, мы сможем использовать две или более текстур таким образом, что вместе они будут давать желаемый результат.
- Когда мы выбираем несколько соседних сторон, находясь в окне 3D-Обзора, LED имеет склонность запоминать их как одну целую поверхность. Хотя мы и изменяем текстуры в редакторе и присваиваем различные текстуры каждому сегменту, мы будем продолжать видеть одну и ту же текстуру на трех сторонах(поверхностях). Чтобы разрешить эту проблему, необходимо внести все изменения, сохранить карту и перезагрузить ее в 3D-Окне.
Например, объединение текстуры flw с обеих сторон дверного проема, и текстуры1(странное название) по центру(а точнее над дверным проемом), с масштабом(zoom) в 20, углом наклона(angle) 90 и некоторыми "настройками" центральной текстуры, может дать следующий результат.
Еще хуже. Этот дверной проем еще более скучный, чем предыдущий, но он показывает нам, как присваивать различные текстуры отдельным стенам. Мы можем извлечь из этого пользу(выгоду) чтобы улучшить результат.
В действительности, центральная текстура, на самом деле является аркой. Как так вышло, что она является только частью этого "представления". Это случилось, вследствие того, что две вершины, которые были включены, для создания дверного проема, не "разгладили" текстуру для эстетического восприятия.
Сейчас мы добавим нашей стене две другие вершины:
Внешним сегментам, 1 и 5, мы присвоим текстуру flw с x,y=0, масштабом(zoom) в 20 и углом наклона(angle) 90. Внутренним сегментам 2,3,4 мы присвоим текстуру 1 с x=-95, y=-107, масштабом(zoom) в 13, и углом наклона(angle) 90.
Сохраним, перекомпилируем и перезагрузим карту. Результат будет похож на тот, что приведен ниже.
Дверной проем стал выглядеть немного лучше, между тем, у нас появилась проблема - узор на текстуре изогнут, а дверной проем имеет форму прямоугольника. Вскоре мы решим эту проблему, но сначала нам нужно уяснить еще пару вещей.
Добавляя новые вершины(vertexes), важно помнить о том, решетка(grid) должна быть включена. Если же она не включена, то вполне вероятно, что вершина разделит стороны на два сегмента, которые не могут быть идеально выровнены. И только при максимальном увеличении этот дефект можно увидеть:
Уверяю вас, это может стать источником множества проблем. Как мы вкратце увидели в предыдущем уроке, все сектора должны быть выпуклыми и из-за того дефекта может случиться так, что один из секторов не будет таким(тот левый сектор на рисунке не является выпуклым). Расположение текстур и последующее поведение карты станет настоящим кошмаром. С включенной решеткой этого не случится.
Другая важная деталь заключается в том, чтобы учитывать степень увеличения, которую мы выбрали для границ решетки и соотнести ее с функцией выбора. К примеру, если мы выставили увеличение на 1.0, то чтобы выбрать сторону, которая размером точно 1.0, или меньше, может быть очень сложной задачей. Разрешение проблемы заключается в том, чтобы уменьшить масштаб решетки, например на 0.5 и выбрать стороны сектора, а затем выставить масштаб на 1.0 снова. Другой возможностью является отключение решетки, это сделает выбор возможным. Как мы видели ранее, важно не забывать активировать решетку снова, перед тем как вы продолжите.
Исходные значения
Исходные значения многих свойств можно настроить, используя опцию Tools -> Default Properties/ Доступ к этой опции возможен только, из окна Редактора, но не 3D-Окна. Появится окно и у нас будет возможность изменить большинство исходных свойств.
Но обычно мы не следуем этой процедуре, чтобы задать исходные значения. Вместо этого, например, чтобы назначить исходные значения стен мы можем выбрать в Редакторе одну из подходящих нам сторон сектора и, кликнув правой клавишей мыши выбрать Put defaults(Задать умолчания) Затем, появится окно выбора.
В этом окне, мы жмем All(Все) таким образом, скопировав все отмеченные свойства. Затем нажмите кнопку OK. Теперь всем сторонам, которые мы создадим, например, когда будем добавлять вершины, будет присвоена текстура этой стены. Так же мы можем проделать это с секторами, несмотря на то, что свойств, которые нужно скопировать очень много. Таким образом, когда мы работаем в области с определенными требованиями высоты, текстур, увеличения...мы изменяем исходные значения, так, что все новые сектора будут равны между собой. Далее, в 3D-Окне мы сможем откорректировать расположение текстур.
Улучшение дверного проема
Наш дверной проем выглядит странно, потому что он прямоугольной формы, а присвоенная ему текстура - это арка. В Blade есть возможность "изогнуть" верх и низ сектора, чтобы добиться эффекта симуляции гор или для того, чтобы создавать арки, дверные проемы или окна различными способами.
К несчастью, LED эти особенности не очень волнуют, поэтому здесь можно столкнуться с проблемами. Мы попытаемся разрешить некоторые из них, чтобы добиться наилучших результатов кратчайшие сроки.
Сначала мы выберем сектор, из которого состоит наш дверной проем(имеется в виду коридор). Мы изогнем верхнюю часть сектора. Мы вызываем окно свойств и активируем вкладку Ceiling(потолок)
Мы видим, что она допускает 3 разные формы: Сферическую(Spheric), Овальную(Elliptic) и Плоскую(Flat). Выбрав одну из них, мы сможем сделать верх сектора плоским, сферическим или овальным.
Плоская форма очень знакома, и она не требует каких-либо дополнительных параметров, у нее есть только параметр высота потолка(Ceiling), который мы уже изучили. Сферическая форма работает в LED не стабильно. Это из-за бага в самом LED. Как бы то ни было, можно очень легко понять, как сделать потолок сектора сферическим, уровняв значения высоты и ширины.
Сферические своды/потолки хорошо работают в пещерах и подобных им местах. Любой сегмент, который не работает должным образом, только усиливает эффект............Prospero.
Овальные формы - это самое интересное. Сначала нужно показать Редактору, что мы хотим сделать потолок сектора овальным. Вы должны выбрать опцию в окне свойств и нажать Enter. Как всегда, эта процедура необходима. Если мы не нажмем Enter, редактор не узнает, что мы хотим сделать овальный потолок.
Далее, мы нажимаем на маленькую серую кнопку справа от опции Elliptic, должно появится новое окно.
Выбирая в этом окне радиусы арки X и Y, мы также выбираем то число сегментов, которое движок использует для построения арки. Чем выше это число, тем более плавным будет изгиб арки. Это отразится на производительности в худшую сторону. Вы можете выставить значение сегментов на 4 или 6.
На что влияют значения X и Y лучше всего продемонстрировать на примерах, которые мы позаимствовали из великолепного урока созданного SlayerDDD.
Если мы выставим значения X=1 и Y=1, а ширина нашего сектора составляет 2 ячейки, тогда результат будет следующим:
Если же ширина сектора составляет 4 ячейки, а значения X и Y = 1, то арка будет выглядеть так:
Если значение X будет отличаться от значения Y, то у нас получится настоящая арка овальной формы. Таким образом, результатом для сектора шириной в 2 ячейки и значениями X=1 Y=2, станет всем хорошо известная Готическая арка:
Лучше всего использовать целые числа, но как всегда, вы можете поэкспериментировать с различными комбинациями. К примеру, чтобы создать сферическую арку в секторе шириной в 3 ячейки, мы должны выставить следующие значения X=Y=1,5.
Важно помнить, что, всякий раз изменяя один из параметров, нужно нажимать Enter. Вы итак уже знаете, что LED нужно постоянно подталкивать посредством этой клавиши, иначе он ничего не будет делать.
В нашей карте у нас есть коридор, чей потолок был, изогнут. Ширина этого коридора составляет 2 ячейки. Мы можем получить эту информацию, установив значение решетки(grid) на 1.0, и удостоверившись, что боковая сторона равна 2 квадратам. Мы также можем выбрать одну из боковых и проверить ее длину(lenght) в окне свойств(properties window).
Следовательно, чтобы получить полностью сферический потолок, мы должны установить следующие значения X=1 Y=1, а число сегментов на 4. После сохранения и компиляции, у вас должно получится нечто похожее на:
Неплохо, однако, вы еще можете улучшить результат. Во-первых, есть возможность того, что текстура сместилась. В этом случае, простейшим решением будет вызвать окно свойств и из окна 3D-Обзора снова установить значения сегментов, составляющих арку. Учитывая то, что 3 сегмента имеют одинаковые значения, и они регулируются вместе, мы должны выбирать их с зажатой клавишей Ctrl. Таким образом, можно выбрать сразу несколько поверхностей одновременно. Любые изменения сделанные в окне свойств, повлияют на выбранные поверхности. Свойства, которые мы оставили без изменения не поменяются.
В данном случае мы знаем, что параметры 3 сегментов одинаковые, поэтому мы выставляем следующие значения X=Y=0 zoom(масштаб)=15 angle(угол наклона)=90 и текстура 1. Когда мы нажмем Enter, 3 сегмента сольются воедино, и мы сможем работать с ними как с одной целой поверхностью. Мы воспользуемся клавишами калькулятора, чтобы подобрать нужный масштаб и размещение текстуры подходящее для созданной нами арки. Эти значения могут подойти X=-124, Y=-104, zoom=11, angle=90.
Теперь единственный заметный дефект нашего дверного проема - это неестественный переход от одной текстуры к другой. Мы можем сделать колонны в текстуре арки рельефными, таким образом, они будут играть роль границ между 2 текстурами. Мы должны сдвинуть вершины отделяющие текстуры нашего "дверного косяка".
к примеру, можно установить масштаб решетки = 0.5 и пододвинуть две вершины на 0.5 единиц ближе к дверному проему:
Также мы можем поменять текстуру арки нашего дверного проема на bronce, установить zoom(масштаб)=20 и angle(угол наклона)=90, чтобы придать наилучший вид нашему дверному проему. В конце концов, мы можем сделать наш дверной проем короче, или иными словами, превратить наш коридор в настоящий дверной проем.
Чтобы достичь этого, мы используем инструмент выбора вершин , и при помощи мыши обводим и выделяем все вершины справа от коридора:
Установим масштаб решетки на 0.5, и начинаем перетаскивать выделенные вершины влево. Мы видим, что все вершины движутся одновременно.
В результате мы сократим наш коридор, скажем на 0.5 единиц:
Наш дверной проем приобрел конечный вид. После сохранения, компиляции и повторной загрузки.....выглядит весьма многообещающе!
Однако, другая сторона нашего дверного проема еще не закончена, но оставим ее для упражнения, конечно, если только вы не забыли пройденный материал.
Эксплуатация нашей карты
Невзирая на опыт, полученный от проделанной работы, вы никогда не приобретете должной сноровки, если не поймете одной важной вещи - мы можем использовать какую-то уже созданную часть нашего уровня, чтобы расширить его, не прибегая к ручной выделке каждой комнаты.
Если группа двух комнат выглядит довольно интересно, мы можем просто добавить третью комнату, путем копирования секторов.
Для начала выберите сектор справа, вместе с тем, который является дверным проемом. Чтобы выделить оба сектора вы можете обвести их мышкой, но возможно удобнее будет зажать Ctrl и щелкнуть по каждому из секторов.
Иногда выделить маленькие секторы не удается, LED просто не видит их. Чтобы исправить эту проблему, установите масштаб решетки(Grid) на 0.25 и попробуйте снова............SLADER
Выбрав оба сектора, зажмите Shift и перетащите их вправо.
Важно помнить, что для создания портала, не достаточно просто "состыковать" новый сектор со старым. Чтобы сделать это правильно, сначала нужно создать вершины(vertexes) в местах состыковки. Это довольно распространенная ошибка - объединять сектора и думать, что вершины создадутся автоматически.
- Компилятор LED'а способен добавлять вершины автоматически. Вполне вероятно, что в законченной карте из нескольких сотен секторов, компилятор добавит несколько вершин. Иногда этого удается избежать, иногда нет. Подобные вмешательства со стороны Редактора могут отразиться даже на поведении врагов.
В первом примере не было вершин, поэтому они были созданы одновременно с двух сторон, образовав тем самым портал, когда мы вставили их. Сейчас, одна из этих сторон уже имеет вершины, так, что лучше добавить их оставшейся стороне заранее.
Для этого мы установим масштаб решетки на 0.5 и добавим четыре вершины правой стене нашей второй комнаты подобно тому, как мы это сделали в прошлый раз.
Эти новые вершины станут точками опоры для нового дверного проема и позволят нам присвоить текстуру арки, как в прошлый раз. Снова выбираем два сектора справа(новый дверной проем и комната) и тащим их влево до тех пор, пока они не объединятся вершинами:
Убедитесь, что вы идеально состыковали вершины(для этого максимально приблизьте точки состыковки), малейшее отклонение может серьезно отразится на дальнейшей работе, в худшем случае портал просто не создастся. Проверьте, включена ли эта кнопка Никогда не выключайте ее.......SLADER
Мы закончили создание нашей новой комнаты. Теперь нужно убедится, что сторонам образованным новыми вершинами присвоены подходящие текстуры. Мы проверяем, только эти две стороны, так как остальные текстуры скопировались вместе с сектором.
Если все прошло удачно, то при перекомпиляции мы увидим 3 комнаты объединенные друг с другом:
Окна
Похоже мы совершаем новый логический шаг. Создание окон не представляет такой большой сложности, как создание дверных проемов. Важно лишь помнить, что значение высоты подоконника(здесь Floor) должно быть выше, чем высоты пола комнаты. Таким образом, сектор(который впоследствии станет окном) будет удален от земли.
Для начала, расчистим место под наше окно во втором секторе. Включаем инструмент выбора вершин и обводим мышью вершины, составляющие второй дверной проем, установите значение решетки на 0.5 и перетащите все вершины немного вверх, тем самым слегка подвинув дверной проем.
Теперь второй дверной проем не находится на одной линии с первым, тем самым предоставляя нам место для создания окна. Если вам интересно, что же все-таки произошло, проверьте это в 3D-Окне, ведь не так уж и сложно подвинуть дверной проем, перекомпилировать и проверить это.
Что? Текстуры сдвинулись! Боюсь, что это последствия смещения. Но вы ведь уже знаете, как выделять поверхности и двигать текстуры в 3D-Окне. Для вас будет нетрудно это исправить. Если вы зажмете Ctrl во время использования вспомогательной клавиатуры в 3D-Окне, текстуры будут двигаться быстрее.
Теперь мы приступим к окну. Мы создадим новый сектор в сплошном пространстве, которое отделяет центральную комнату с комнатой справа. Установим масштаб решетки на 0.5 и вставим нужные вершины.
Для того, чтобы сделать это выберите инструмент выбора вершин наведите мышь на стену, а затем rightclick->insert vertex.......SLADER
Затем мы создадим сектор, объединив четыре созданные вершины. Вид наших стен будет примерно следующим:
Новый сектор был создан на вершинах находящихся ниже дверного проема. В действительности, если мы дважды щелкнем по одной из этих вершин, то появится окно выбора вершин, которое показывает, что каждая вершина принадлежит к двум сторонам. Это как мы знаем, означает, что новый портал был создан, портал, который вскоре станет нашим окном.
- Если мы не создали вершины заранее, а вместо этого сразу же построили сектор, портал все равно будет создан, так как компилятор берет на себя ответственность добавления тех вершин, которые вы пропустили. Но я не устану повторять вам, что подобная халатность к созданию вершин с вашей стороны может вызвать кучу проблем. К примеру, наша дальнейшая попытка создать окно в неоготическом стиле, может привести к непредвиденным результатам.
Какова вершина этого сектора? Естественно та, что стоит в свойствах по умолчанию в разделе секторов. Так как наши комнаты начинаются от 0 и достигают высоты 4, то окно может, к примеру, начинаться с 1.2(Floor) и заканчиваться 3(Ceiling). Выбираем наш новый сектор и в окне свойств меняем параметры Floor(пол) и Ceiling(потолок).
Сохраним нашу карту, перекомпилируем и увидим примерно следующее:
Эй, а ведь совсем неплохо?..Хорошо. Возможно, следует немного подкорректировать текстуры. Мы также изменим текстуры "оконной рамы". По бокам можно использовать текстуру flw с масштабом 10 и углом наклона 90, а также углом наклона 0 для нижней и верхней части окна. Это более менее соответствует окну.
Мы можем сменить стиль нашего окна на Готический. Сместите две вершины окна, чтобы сделать его уже. Скажем, пусть будет равно 1 единице. Выбираем сектор во вкладке Ceiling(потолок), выбираем Elliptic(Не забудьте нажать Enter) и установим следующие значения X=1,Y=1.3, Segments=4.
Результат таков:
Как вы видите, постепенно мы достигаем результатов. И снова мы воспользуемся готовой работой. Мы скопируем окно на другую стену, к примеру, на нижнюю сторону. Конечно же, будет необходимо развернуть его...
ВНИМАНИЕ!!! Хотя в данном уроке дальше пойдет речь об этом приеме, я бы все же порекомендовал вам в дальнейшем не использовать его. Так как при развороте существует большая вероятность того, что вы ошибетесь на пару градусов, и тогда состыковки не произойдет и портал не будет создан. Поэтому если вы собрались разворачивать скопированный сектор, то гораздо проще и быстрее будет создать новый. YOU'VE BEEN WARNED!!!..........SLADER
Сначала, мы выбираем наше окно и при помощи зажатой клавиши Shift, перетащим его по направлению к нижней части нашей карты. Мы получим копию нашего окна.
Выбираем новый сектор, таким образом, чтобы только он был выбран, и щелкните по нему правой клавишей мыши.
Должно появится контекстное меню, включающее в себя помимо прочих опций, Moving(Перемещение) Rotate(Вращение) Scale(Масштабирование),...
- Вызвать данное меню, работая с маленькими секторами, непросто. Максимальное приближение, или уменьшение масштаба решетки могут помочь нам.
Если мы выберем опцию Rotate(Вращение), то появится новое окно, где мы можем выбрать оси вращения и угол наклона. Мы изменим лишь угол наклона на 90:
Таким образом, у нас появляется возможность вращать окно, нам осталось только создать 4 вершины на нижней стене и перетащить на них новое окно. Но...Нижней стены не существует! На самом деле, это не стена, как та разделяющая наши комнаты. Это скорее сплошной блок, простирающийся до бесконечности или, по крайней мере, настолько обширный, что мы устанем искать другой конец.
Так, что мы просто создадим две вершины и перетащим на них окно.
Компилируем и смотрим, что вышло.
Результат тяжело показать на картинке. Возможно вы надеялись увидеть дыру в стене или нечто схожее по форме с первоначальным окном. В сущности это и произошло, но когда портал не создается, движок Blade старается применить эффект овального(Elliptic) свода к данной стороне.
Чтобы избежать этого мы должны выбрать сторону нового сектора, которая является частью портала, она же верхняя часть нашего нового окна.
В окне свойств мы снимаем галочку с опции Include Ceiling(Включаяя Потолок) и обязательно жмем Enter.
Есть! Мы исправили странный изгиб, формировавший эту сторону. Но сторона в самом низу, которая так сказать является нижней стороной окна в карте, также страдает от этой проблемы. Вы должны проделать ту же самую операцию с этой стороной, чтобы получить окно в законченном виде.
Но, так как мы все еще не создали сектор с другой стороны, мы не сможем сформировать портал, так чтобы окно стало прозрачным и проницаемым, как другое окно. Но мы можем просмотреть текстуры и назначить подходящую для оконного пространства. Мы снова выбираем нижнюю часть нашего окна и меняем текстуру на zad3, масштабом(zoom)=10, и углом наклона(angle)=0.
Теперь наше окно выглядит вот так:
Солнце и Луна
Вдоволь позабавившись с окнами, вы, возможно, захотите увидеть внешнее пространство. Это нетрудно сделать в Blade, но иногда немного тяжело объяснить.
Все карты загружают файл со специальными текстурами, составляющими небесный свод. Как мы уже заметили в нашем первом уроке, это строка подобного типа:
WorldDome->casa_d.mmp
Файл с расширением .lvl сообщает движку Blade, где искать текстуры, которые он будет использовать для создания неба. Этот файл содержит шесть текстур (DomeUp, DomeFront, DomeLeft,..) для каждой из шести поверхностей куба, который окружает карту. В самом деле, небо в Blade генерируется, при помощи этих шести текстур, которые создают видимость сферической проекции, и складывается впечатление, будто мы и вправду находимся под небесным сводом.
Эти текстуры - пейзажи в низком разрешении, так как предполагается, что игрок не сможет приблизиться к ним достаточно близко, и будет видеть их только издали. К примеру, вот фронтальная текстура DomeFront неба:
Как таковые эти текстуры не появляются в LED, но существует специальная техника для их наложения: это текстура NULL. Все карты регистрируют NULL текстуру, и неважно, какая bmp'шка к ней приписана. Если присвоить NULL текстуру какой-либо поверхности, то движок Blade продемонстрирует проекцию небесного свода.
В палитре текстур мы можем видеть все доступные текстуры. Очень важно, чтобы эта текстура носила имя NULL, а не Null, null, или другие любые сочетания заглавных и прописных букв. Если в нашей палитре текстур она называется не NULL, то это легко исправить
Гораздо проще показать это на примерах. Давайте вернемся к нашей карте и снова выберем нижнюю сторону нашего окна.
Давайте сменим текстуру окна (zad3) на текстуру NULL. Скомпилируем и увидим результат:
Великолепно! настоящее окно! Да, очень хорошо. Можно заметить, что если мы движемся вокруг окна, пейзаж меняется, как в настоящем окне. Иными словами, текстура NULL не совсем статичное изображение, просто Blade сам показывает нужный ракурс. По этой причине, параметры масштаба, угла наклона и прочее никак не влияют на текстуру NULL.
Хотя результат и итак верен, чтобы назначать текстуру NULL прямо на окно не принято. Лучше создать целое открытое пространство, которое можно увидеть из окна. Вскоре мы этим займемся. Непосредственное назначение подобного рода может быть интересным для нас только в том случае, если мы присвоим эту текстуру каким-либо окнам или дырам, находящимся далеко от места действия игрока. С определенной дистанции практически невозможно отличить текстуру NULL от открытого пространства.
Выход наружу
Мы трансформируем одну из наших комнат в открытое пространство. Вернемся к нашей карте и сменим текстуры трех отмеченных сторон на NULL.
Перекомпилируем, и теперь сможем достичь наружной стороны. Хорошо. Выглядит немного странно, так как пейзажу несвойственно иметь крышу. Давайте взглянем, что произошло.
Сектор, который мы изменили, начинается с 0(Floor) и заканчивается 4(Ceiling). Потолку назначена текстура techo(крыша), следующее, что мы сделаем, так это сменим эту текстуру на NULL. Таким образом, пейзаж будет окружать нас со всех сторон.
Как мы сказали ранее, желательно чтобы текстуры создающие видимость небесного свода, текстуры NULL, были как можно дальше от места действия. Мы поднимем потолок, скажем, на 20 единиц. Текстуру на полу мы сменим на более подходящую. Файл ragnar.mmp предоставляет нам широкий выбор текстур, поэтому мы выберем sig1 с масштабом 20.
Мы также расширим наш внешний сектор, задействовав инструмент выбора вершин и перетащив две крайние вершины справа пока не получим, что-то похожее на это:
Мы расширили пространство без добавления новых вершин, сохранив тем самым выпуклость сектора.
Давайте вспомним, что все секторы в Blade должны быть выпуклыми. Иначе у нас будет проблем больше, чем сможем исправить. Сектор считается выпуклым, если из любой из его вершин вы можете провести линию ко всем остальным вершинам, не покидая сектора. Считайте, что вас предупредили!
Мы увидим результат.
Все это выглядит по-прежнему немного странно. По двум простым причинам. Первая заключается в том, что открытое пространство не окружает нашу конструкцию полностью. Вторая - высота. Стены непрерывно тянутся вверх.
Расширение внешнего пространства
Создание открытого пространства было несложным, так как все было уже заранее приготовлено. У уже нас был сектор, и нам оставалось только сменить текстуры. Если мы попытаемся проделать ту же самую процедуру со сторонами нашей конструкции, мы столкнемся с некоторыми концептуальными проблемами. Я надеюсь, они не представляют для вас большой сложности, и проделанные действия покажутся вам логически верными.
Первое, что следует помнить это то, что когда мы объединяем стороны двух секторов, они всегда трансформируются и становятся полностью прозрачными и проницаемыми. Следовательно, чтобы создать новое открытое пространство, мы должны оставить часть сплошного пространства, которое и будет служить стеной. Поэтому, планируя эту стену, мы должны учитывать углы, чтобы результат был весьма убедительным.
Давайте начнем с угла. Мы немного изменим наше недавно созданное открытое пространство, сменив масштаб решетки на 0.5 и немного сместив левую нижнюю вершину.
И вновь, чтобы стало еще понятнее, я закрасил сплошное пространство желтым цветом:
Теперь, мы уже можем создать наш новый сектор, охватывая все закрашенное пространство, за исключением пространства, которое и будет стеной:
Теперь вы видите, что Южная и Восточная стены были сформированы, не занимая нужные нам пространства. Разграничение между двумя смежными секторами образовывает стену. Дверные проемы и окна также взяты во внимание. Следует отметить, что, чтобы создать сектор мы использовали не четыре вершины, а шесть. Две дополнительные, для южного окна, соответственно:
Если этих вершин нет, то у нас могут возникнуть проблемы с сектором, который составляет окно. Кстати, текстура NULL на нижней части этого окна больше не нужна, так как мы объединили два сектора, вследствие чего был сформирован портал. Как мы знаем, присвоенные текстуры не играют в этом случае никакой роли. Но я считаю, что желательно не оставлять NULL текстуры, где попало, хотя они и являются частью порталов. В случае если мы изменим планировку нашей карты, мы можем увидеть NULL текстуры там, где их быть не должно. Поэтому лучше сменить их на какие-либо другие текстуры.
Вместе с этим новым сектором, мы также создали портал справа, который объединяет этот сектор с ранее созданным открытым пространством, что позволяет нам пойти и прогуляться по обоим секторам.
Теперь нам осталось только позаботиться о текстурах: NULL на потолок и нижнюю часть сектора, sig1на пол. Верхняя часть этого нового сектора составляет видимую часть стены нашего дома. Выберем, к примеру, текстуру flw с масштабом(zoom) 20 и углом наклона(angle) 90. Текстура левой стороны не важна, так как она исчезнет, когда мы создадим следующий внешний сектор. И напоследок установите значение высоты потолка(ceiling) на 20.
Чтобы добавить два новых внешний сектора, удобно будет изменить исходные значения секторов. Выбираем последний созданный сектор, щелкаем правой клавишей мыши и выбираем Put Defaults(Задать умолчания). Далее выбираем All(Все) и жмем OK.
Новые сектора будут нуждаться в таких же настройках как у последнего созданного нами сектора. Нам не придется менять настройки высот, текстур,...
Финальный результат будет таков:
До или после создания верхнего сектора, мы должны помнить, что нужно подкорректировать верхний правый угол, по аналогии с нижним углом.
Время компиляции...
Проделывая дополнительную работу, мы можем изменить текстуры в 3D-Окне. Необходимо помнить, если мы назначим текстуру NULL в 3D-Окне, мы не увидим пейзаж, пока не перекомпилируем карту.
Что ж, похоже, что осталась только проблема с высотой...
Поговорим о крышах
Подход к крышам, точно так же как и к стенам - мы оставляем некое пространство, чтобы их создать. Но это гораздо тяжелее себе представить.
На данный момент, в нашей карте имеется открытое пространство, окружающее нашу конструкцию. Его высота - 20 единиц и важно понять, что выше этой высоты находится сплошное бесконечное пространство даже, невзирая на то, что вы назначили ей NULL текстуру. По сути, нечто похожее произошло с NULL текстурой нашего окна: несмотря на то, что мы видели пейзаж, через него, за ним всегда было сплошное бесконечное пространство.
Наш дом сейчас представляет собой две ямы, высотой в 4 единицы. Все что над ними до 20 и выше - сплошное пространство. По этой причине вы созерцаете эту своеобразную колонну. Поэтому мы "выкопаем" другую яму над нашим домом.
Как вы можете видеть на изображении, внешние сектора простираются до 20 единиц вверх, в то время как внутренние сектора достигают только 4 единиц. Оба сектора разделены сплошным пространством, которое и формирует стены.
Сейчас мы создадим новый сектор(он выделен красным цветом), над секторами, образующими наш дом.
Этот сектор будет начинаться с высоты немного большей, чем 4 единицы, к примеру 4.2 и будет простираться до 20 единиц вверх. То сплошное пространство в 0.2 единиц и станет нашей крышей. Также, этот новый сектор объединит свои четыре стороны с четырьмя внешними секторами тем самым, образуя порталы и позволяя свету свободно светить над домом.
Это означает, как мы видели на изображении, что новый сектор как бы накладывается на вершины внешних секторов, то есть на четыре их угла. Поэтому при помощи этих четырех вершин, мы получим новый сектор. Устанавливаем масштаб решетки на 0.5 и сделаем следующее:
Сектор будет создан со значениями, заданными по умолчанию, так что мы должны проверить его параметры, прежде чем компилировать. Сначала необходимо выбрать его. Если мы сейчас кликнем на него, мы выберем не только этот сектор, но еще и некоторые из тех, что создали ранее. Однако, дважды щелкнув, мы сможем выбрать интересующий нас сектор.
В окне свойств мы меняем высоту пола(Floor) на 4.2 а высоту потолка(Ceiling) на 20. Присваиваем полу текстуру ad4 с масштабом(zoom) 20 и углом наклона(angle) 90.
Теперь мы сменим текстуры всех стен одновременно. Для этого, снова выбираем наш сектор. В окне выбора мы увидим, что рядом с именами секторов находятся их высоты, пола и потолка соответственно. Это поможет нам определить нужный сектор.
- Как я упоминал в предыдущем уроке, назначать определенные имена секторам может оказаться полезным. К примеру, если сектор нашей крыши называется Sector26, мы можем сменить его на Roof26. Добавление чисел необходимо, прежде всего, чтобы удостовериться, что название сектора не повторяется.
Выбрав сектор, щелкнем по нему правой клавишей мыши. Выбираем опцию Select->Edges(Выбрать->края). Все стороны выбраны. В окне свойств мы меняем текстуру на flw. В действительности не важно, какую текстуру вы выберете, потому что, как я уже говорил, все стороны объединятся с секторами, формирующими открытое пространство, поэтому они станут прозрачными и проницаемыми, они станут порталами.
Давайте посмотрим, что у нас получилось...
С каждым разом это нравится мне все больше...Я бы не стал жить здесь, но это лучше, чем у нас вышло в первый раз. Крыша смотрится не особо эффектно, но почти все на месте. Отсутствует только одна важная деталь: скаты на крыше. Но прежде чем мы продолжим, было бы полезно изучить дополнительный способ работы с секторами разных высот.
Наверху
Существует великое множество игровых редакторов, которые работают непосредственно в 3D. В LED, картоделам приходится прикладывать дополнительные усилия, чтобы вообразить у себя в голове, что он проделывает в Редакторе. Это непросто, а 3D-Окно помогает лишь, когда все секторы уже четко построены. Если мы допустим ошибку, то результат, отображающийся в окне 3D-Обзора, может привести нас в замешательство.
Работать в редакторе в двух измерениях сложно вдвойне. С тех пор как наша карта включает в себя сектора разных высот, да и к тому же наложенные друг на друга, все стало еще запутанней.
Как мы заметили, двойной щелчок вызывает окно выбора секторов, в котором показаны различные наложенные друг на друга(ярусные) сектора и их высоты. Это очень полезная функция, но все еще немного запутанная.
Чтобы снизить эту сложность, LED позволяет устанавливать границы высот отображающихся секторов(фильтровать). Действительно, в тулбаре под координатами, мы можем видеть два поля, которые играют роль фильтров высот:
По умолчанию стоят значения -1e+006/1e+006, которые мы можем рассматривать как неограниченную дальность высот. Если мы изменим эти значения на 0/4, в редакторе будут отображаться только сектора, чьи высоты находятся в промежутке от 0 до 4. Иными словами, сектор крыши не отображается, так как он начинается с высоты 4.2. Остальные сектора полностью(внутренние сектора) , или частично(внешние сектора) вписываются в этот промежуток. Поэтому они отображаются в Редакторе.
И наоборот, если мы установим значения на 4.2/20, наша карта сократится до:
То есть, только сектора частично или полностью находящиеся в этом промежутке отображены. Если мы установим значения на 4/20, то будет видна вся карта, за исключением секторов образующих окна и дверные проемы, так как сектора составляющие комнаты частично находятся в этом промежутке(их высота 4)
Играя с системой фильтров, очень легко заблудится где-нибудь в сплошном пространстве. Если опция View->View All(Вид->Отобразить Все) включена, то фильтры высот не будут работать.
- Это очень полезная функция, но следует быть осторожным. Легко забыть, что фильтр активирован, и думать, что пространство ограничено секторами, которые мы видим. Особенно проблематичен тот факт, что когда мы добавляем вершины, они должны быть добавлены ко всем секторам. Если же сектора не отображаются, то новые вершины не будут добавлены этим секторам.
Наклон, пожалуйста
Мы вернемся к нашей карте и попытаемся создать крышу со скатом. Устанавливаем значение фильтра на 4.2/20 и ставим масштаб решетки на 0.5.
Выбираем сектор крыши. Мы попытаемся разбить его на две части. Двигаем курсор к нижней части сектора пока он не изменится на двойную стрелку <-->, оттянем сторону мышкой, тем самым, уменьшив сектор на половину.
Теперь, продолжая работать с выбранным сектором, мы перетащим его вниз с зажатым Shift, тем самым, сделав его точную копию:
Теперь у нас есть два идентичных сектора, которые вместе выполняют ту же самую функцию, что выполнял и исходный сектор крыши. Важно, чтобы решетка была включена, а ее масштаб был установлен на 0.5, чтобы новый сектор идеально вписался на место дыры, которая осталась, после того как мы уменьшили первый сектор.
Если мы сейчас перекомпилируем, мы не заметим никаких изменений в карте.
- Я только, что испортил свою карту. LED сошел с ума. Похоже, что сектор вышел с дефектами и из-за этого я не могу продолжать...Здесь я хотел бы напомнить вам, делать резервные копии ваших карт. Для меня резервирование карт - крайняя необходимость. Они занимают мало места, по крайней мере, сначала. Регулярное копирование карт поможет сохранить вам нервы.
Мудрые слова!............Prospero
(Всегда можно убедится, объединены ли сектора верно при перетаскивании их на новое место, взглянув на стену образующую портал. Она смениться на тонкую линию(более темную), если она остается толстой(красной), то отодвиньте сектор и попробуйте снова. Если он все равно отказывается объединяться с другим сектором должным образом, то возможно лучше будет создать новый сектор в нужном месте, а проблемный сектор естественно удалить. Я считаю, что это хорошая идея - работать маленькими шажками в одной части карты в то же время. Не старайтесь успеть везде сразу. Иначе вам будет трудно вычислить проблемный сектор.......Prospero)
Следующий шаг - сделать наклон пола каждого сектора, чтобы сделать крышу из двух частей:
Каждый сектор можно наклонить пол(Floor) или потолок(Ceiling). Сначала это не очень понятно. К примеру, в нашем секторе крыши нам нужно наклонить пол. Это может звучать несколько странно, но если вы хорошенько обдумаете это, то поймете что это вполне логично. Каждый из наших двух секторов крыши начинается с высоты 4.2 и заканчивается высотой 20. Наша задача "наклонить" пол(Floor) с 4.2 до 6, к примеру. Если мы захотим наклонить потолок(Ceiling), то, по сути, мы будем пытаться наклонить небо!
- Наклоны - очень полезная функция. В некоторых ситуациях мы можем захотеть сделать наклон вниз, иначе говоря, наклон, начинающийся с 4.2 и врезающийся в пол на глубину 3.8, к примеру. Нужно помнить об этом, занимаясь мапперством.
Чтобы проделать это с нашей крышей, выбираем нижнюю сторону нижнего сектора крыши. Убедитесь, что вы выбрали только эту сторону, а не две стороны формирующие портал(крыша - открытое пространство).
- Если опция вызова меню Slope(наклон) отключена, значит, вы выбрали стороны больше чем одного сектора
Выбрав нужную сторону, щелкаем по ней правой клавишей мыши и выбираем Slope->Floor(Наклонить->Пол). Кажется, будто ничего не произошло, но LED ждет, когда вы укажете вершину(vertex) в сторону которой вы хотите сделать наклон. В нашем случае это может быть любая из верхних вершин сектора. Щелкнем, к примеру, на левую вершину(ту на которой мышь на скриншоте):
ВНИМАНИЕ!!!Никогда не указывайте на вершину другого сектора, иначе ваша карта может накрыться. Конечно, это происходит не всегда, но все же лучше не рисковать. YOU'VE BEEN WARNED!!!...........SLADER
После нажатия появится окно, в котором нас спросят задать высоту. По умолчанию оно показывает нынешнюю высоту пола сектора(4.2) и, если мы не изменим ее, то ничего не произойдет. Но чтобы сделать крышу мы изменим значение на 6.0 в качестве новой высоты.
Откомпилировав карту, мы уже сможем увидеть нашу первую "склоненную" половину крыши.
Надеюсь, это то, что вы ожидали увидеть. Теперь проделаем то же самое с другой половиной.
Выбираем верхнюю часть верхнего сектора. Щелкаем правой клавишей мыши и выбираем Slope->Floor. Укажите ту же вершину, и снова установите значение высоты на 6.
Перекомпилируем и получим результат схожий с тем, что ниже.
Это то чего мы хотели, но с нежелательным побочным эффектом. Текстура арки над дверным проемом простирается вверх...Как это исправить? Вы поймете это вскоре.
Но сначала, несколько комментариев...
В LED не существует способа проверить наклон сектора. Все что вы можете сделать - это выбрать сектор и убрать наклон. Также, при изменении формы сектора, добавлении или смещении вершин наклон "пропадает". Это означает, что прежде чем делать наклоны, рекомендуется сначала создать план на бумаге. Мы должны учитывать все данные о величинах, сторонах и используемых вершинах, чтобы потом мы могли с легкостью все переделать. Создание карты - трудоемкий процесс и после нескольких месяцев работы, непросто вспомнить, как было создано то или иное пространство. Если мы упустим что-либо, или нам придется что-нибудь переделывать, то дополнительная информация на бумаге придется очень кстати.
Кстати! Чуть не забыл, касательно наклонов секторов. Очень часто наклон выходит не таким, как мы хотели бы его видеть. Поэтому нередко приходится переделывать его. Если вы каждый раз будете выбирать одну и ту же сторону сектора и изменять наклон, то в будущем это может отразиться в худшую сторону на карте. LED запоминает все эти наклоны одного сектора, и может потом просто впасть в ступор и отказываться открывать вашу карту. Каждый раз создавать новый сектор и испытывать на нем наклоны тоже не выход. Гораздо проще отменить наклон. Для этого выберите многострадальный сектор и, кликнув по нему правой клавишей мыши, выберите Quit slope->Floor/Ceiling(здесь же обязательно укажите иммено то, что вы "наклоняли" пол(Floor) или потолок(Ceiling)). Проделав эту нехитрую операцию, можете снова экспериментировать со Slopes(Наклонами).........SLADER
Вертикальные текстуры
Мы уже видели как добавление вершин(vertexes) на сторону позволяет нам помещать различные текстуры на отдельные части одной и той же стороны. Таким образом, стена может принадлежать к одному сектору, но демонстрировать несколько текстур рядом друг с другом. Посредством этого метода мы построили дверные проемы.
Теперь нам нужно нечто работающее по тому же принципу, но только вертикально. И это самое сложное, потому что вы не можете добавлять вершины, по той простой причине, что редактор работает в горизонтальной плоскости. Вы должны добавить сектора.
В самом деле, имея сектор, который начинается 0 и простирается до 20, мы сможем присвоить только ему одну текстуру. Если же разбить сектор на три части, то мы сможем назначить три различные текстуры.
Теперь запомните текстуру, которую вы видите над дверным проемом. Это текстура арки, 1, которая назначена внешней части стены. Это назначение не является чем-то уникальным, просто, скорее всего, каждая вершина определяет границы различных текстур. Поэтому мы получили эффект арки с колоннами по бокам и частью стены.
Вот способ поменять текстуры вертикально. Нужно добавить новый сектор. Мы сделаем это, разбив внешний сектор на два одинаковых сектора, наложенных друг на друга: Величины первого сектора 0(Floor) и 4(Ceiling), а второго 4(Floor) и 20(Ceiling). Так как остальные свойства идентичны, мы можем быстрее приступить к методу копирования секторов, который мы использовали ранее.
Важно "сбросить" по умолчанию значения фильтра(-1e+006/1e+006) иначе мы не увидим всех секторов. С зажатой клавишей Shift, мы перетащим этот сектор немного вправо, пока он не отделится от исходного сектора.
Теперь выберем только исходный сектор и сократим его высоту(Ceiling) с 20 до 4.
- Если мы выберем несколько секторов и щелкнем по одному из них, ничего не произойдет. Чтобы выбрать, только один, мы должны кликнуть по любому невыбранному сектору и затем снова выбрать тот, который нас интересует.
Далее, мы выбираем новый сектор и выставляем значение высоты пола(Floor) на 4, а потолка(Ceiling) на 20. И наконец, мы перетаскиваем его до тех пор пока он не “ляжет” идеально на старый сектор. Для этой цели включенная решетка как всегда жизненно необходима.
- Как я уже неоднократно говорил, активируйте решетку
и навсегда забудьте о ней. Никогда ее не выключайте, это поможет избежать лишних проблем.
Что мы получили? Мы сможем лучше это понять, перекомпилировав карту и открыв ее в 3D-Окне. Теперь вы можете проверить, удастся ли вам выбрать верхний треугольник, который формирует независимо от нижней части(та что простирается от 0 до 4). На самом деле, текстур составляющих этот треугольник пять, потому что нам пришлось разделить его несколькими вершинами в некоторых местах. Проще всего выбрать их все, удерживая Ctrl пока треугольники не будут выглядеть как единая поверхность. Далее, в окне свойств, смените текстуру на pvolcan, с масштабом(zoom) 10, углом наклона(angle) 90, x=-155 и y=0. Результат будет следующим
Я надеюсь, созданный вами дом выглядит примерно так. Кроме того, я надеюсь, вы улучшили что-то, поменяли текстуры, добавили второе окно, к примеру, и сделали сам дом лучше. Я также хочу, чтобы этот урок показался вам очень легким. Еще я думаю, что мы достигли поставленной задачи. И если вы все еще чего-то не поняли, не расстраивайтесь, это непросто, но вы можете попытаться снова в другой раз. Если вы хотите пойти быстрым путем вы можете скачать завершенную версию этой карты отсюда и взглянуть на нее. Уверен, вы решите вашу проблему.
Еще одно Прощание
Я признаю, что результат не очень красивый дом, но это и не было нашей целью. Мы оставляем финальный вариант в ваших руках, чтобы вы довели его до блеска, потому что мы считаем, что если вы смогли дойти до этого места, вы уже обладаете многими навыками, которые позволят вам создавать настоящие шедевры. Все же, еще остается много тем, которые нужно объяснить, некоторые относящиеся к LED и многие, возможно даже очень многие, к программированию на Python.
Когда-нибудь кто-нибудь объяснит все это. А пока что, мы закончим здесь.......
| Благодарности
Сегодня уже и не вспомнишь, кто раскрыл все тонкости и премудрости LED. SlayerDDD продолжает снабжать нас информацией(боюсь, уже нет - прим. Slader), хотя он и делает много того, чего мы не видим.
BirdMadBoy предоставил нам целую кучу ответов от Rebel Act Studious, и мы всегда будем у него в долгу.
Люди проэкта MoriaMod всегда оказывали неоценимую поддержку. Видение того, как выдающиеся проекты таких людей как Prospero и CrazyDwarf получают известность за границей, вдохновило их на доработку своего MOD'а.
Форумы BODArena продолжают быть хорошим источником информации(хотя форумы BODArena, сейчас почти и не посещаются, там все же еще осталась куча полезной информации по LED и Python - Slader), еще больше информации находится на форумах Blade Forever(К сожалению Blade Forever превратился в Blade Never, около года назад этот ресурс приказал долго жить....Slader). Именно на этом форуме и зародилось этот руководство. Видеть то, как новые люди, как Khamen, Deladar, esfumato, Luthor, Silver, CK, Panzer_II, 7318....и многие другие, которых я сейчас и не вспомню, ломают голову над тем как работать с LED, и стало основной причиной, по которой это руководство вышло в свет.(Из названных людей на форуме остался только esfumato, да и то я не уверен, что это тот самый - прим. пер.)
И снова Prospero помог мне воплотить свою вторую мечту в реальность.
Спасибо им всем.
_______________________________________________
Примечание:
В испанском оригинале, Masklin называет нашу первую карту 'La Caja Tonta', термином, который переводится на литературный язык как 'The Silly Box'(Нелепая Коробка). Как бы я не старался адаптировать это словосочетание под подходящее английское выражение, мне все же пришлось заменить его словосочетанием 'First Sector'(Первый Сектор), которое относиться к карте, которую мы использовали для обучения.
!Usted no tiene que ser tonto hacer esto, pero ayuda!(Говорит по-испанскиЧто означает эта фраза известно одному Prospero - прим. пер.)
.........Pro
Послесловие:
Несмотря на то, что Masklin и собирался написать третье руководство(урок), его уже, скорее всего не будет. Да и от самого Masklin'а ничего давно не слышно. У Prospero нет времени писать руководства. Впрочем, дальнейшие пособия по LED могут вам и не понадобиться, в тех 2 уроках описаны практически все аспекты LED.
Сообщество понемногу уменьшается, что печально. Новых карт становиться все меньше. По сути, настоящие карты делает один Prospero, остальные выпускают лишь гладиаторские карты, переделывают старые, или вовсе делают безликие моды. Грустно все это...
Надеюсь, я не зря потратил свое время, переводя это руководство, и в скором времени начнут появляться новые карты и от русского сообщества! Здесь я закончу. Удачи в вашем творчестве!
...........................SLADER
© Masklin - Octubre 2002 - Revision - 0.2
© Prospero - November 2002 - English version.
© SLADER - Август 2005 - Русское издание.
| |