Здесь через некоторое время после выпуска журнала будут выложены, собственно, статьи. Всем ленивым можно не качать сам журнал. Желающим же причаститься... ----- Выпуск №1 (08.2010) -----
Сравнительно недавно вышел 17 патч конструктора FPSCreator X9. Патч действительно очень хорош, но на первый взгляд. Давайте рассмотрим пациента поглубже. Итак, в 17 патч наконец-таки включили бесплатно распространяемый AirMod, который раннее был встроен в модификации. В патч добавили команды DarkAi, увеличили производительность, добавили экранные шейдеры и многое другое. Но только ли хорошее есть в патче?
Для начала рассмотрим экранные шейдеры. Увы, но они не автоматизированы, и в любой момент игры вы не сможете их сменить. Но можно регулировать "мощность"; что было реализовано в самом конце (напомню, что до єтого были выпущены аж 6 бета-версий патча). Єто введение весьма полезно, потому как bloom (от английского- цветение) со стандартными настройками (без изменений) делает взгляд на игровой мир глазами наркомана со стажем. Впрочем, bump шейдер ставит уровень графики сравнимым (и даже соперничающим) с графикой конструктора FPSCreator X10.
Отдельно стоит заметить, что долгожданным нововведением стало введение скриптовых команд DarkAI. Они позволяют реализовать умных противников и даже соратников, которые борятся друг с другом. Последним, на мой взгляд, полезным нововведением стала интеграция AirMod. Для незнающих или забывших напомню, что с помощью него можно реализовать правильную перезарядку для оружия (для дробовиков и револьверов- сколько выстрелили, столько и перезарядил), более лучшую и аккуратную систему прицеливания "Simple Zoom", возможность заблокировать летящую пулю, также он создает кровавые струйки из врага при попадании в него. Более подробно можно прочитать в инструкции к моду. Но все ли так уж хорошо в моде? Увы и ах, но нет. Если вы заметили, то я не упомянул в плюсах так называемый липсинк (От английского LipSync, дословно- синхронизация губ). Почему? Давайте поясню.
Для сравнения я возьму движок Source, на котором сделана игра HalfLife 2 и Team Fortress. Сравнивать будем говорящего Heavy Weapon Guy и говорящего Colonel X. Проблема состоит в 3 частях: в особенности движка, в модельной составляющей и в реализации. В Source все до банальности просто и примитивно- управление идет вручную, каждый раз назначая новые координаты для вертексов (точек) модели, к тому же модель одна и та же. Теперь рассмотрим FPSCreator. В первую очередь, анимация губ происходит костями (ключевой момент- слово "анимация" не было сказано!). То есть существует множество костей, к каждой из которых привязывается свои части лица. То есть уже можно понять, где будут тормоза- движок просчитывает движение частей модели за костью, а не сразу движение, как было рассмотрено в Source. Вторая проблема- это модель. Количество полигонов губ больше, чем на самой модели! Учитывая, что общая полигональность уровня ограничена- думаю понятно, где возникнут проблемы.
Ну и, наконец, 3. Єто форма установления и обработки Липсинка. Поскольку FPSCreator претендует на универсальный конструктор без требований программирования, то в комплекте с патчем присутствует программа, создающая анимацию Липсинка. Увы, но нормальных настроек у нее нет как таковых, а требует она только один единственный wav файл, который позднее будет преобразован в файл, понятный FPSCreator как команда Липсинка. Увы, но обрабатывает она абсолютно все звуки, записанные в звуковой файл, поэтому персонаж будет также губами выделывать лай собаки или звон сковородок, случайно записавшиеся вместе с вашим текстом. Каков вывод? Уровень с говорящим персонажем будет жрать несколько больше самого эффекта оптимизации. К тому же, эта самая оптимизация, на самом деле (Автор статьи заглянул в исходный код FPSC-Game.exe), идет в комплекте с AirMod. В оптимизацию от разработчиков можно записать только то, что теперь конструктор кое-как (даже вполне успешно) использует многоядерность компьютера.
Что же еще можно сказать плохого? Ну, например, все еще отсутствует поддержка мультитекстуры на статических 3D моделях при отсутствии освещения или при статическом освещении (замечу, что этот баг идет с 16 патча) (статическое освещение и динамическое различаются, различаются "визуально" тем, что статический свет идет из "статической лампочки", а на самом деле - различным просчетом освещения и некоторыми техническими составляющими). Это плохо тем, что, конвертируя модели из старых движков или создавая свои с мультитекстурой, у вас на статической такой модели будет отображаться всего одна текстура, указанная в FPE файле или стоящая в приоритете в самой модели (при отсутствии указания текстуры в FPE файле). Еще- все та же корявость Экранных шейдеров. Кушают оперативной памяти они несколько больше, чем те же самые шейдеры в Project Blue Mod для 15 патча (без учета оптимизации, разумеется). К тому же нельзя, как я уже раннее говорил, их сменять скриптом прямо во время игры. Технически в EffectBank вы можете их поменять, но разница, думаю, понятна. Сперва автор хотел записать в минусы ragdoll (от английского ragdoll, "тряпичная кукла), но не стал, поскольку он, реализован вполне прилично. Но, увы, попинать тушку монстра после смерти не получится- такова цена нормальной и не тормозящей смерти персонажа. По сравнению с Ragdoll Mod для 15 и 16 патча, монстр вполне даже отлетает от выстрелов из ружья в упор, в то время, как модификация сначала проигрывала анимацию смерти персонажа, а потом уже "регдоллила" до приземления персонажа на землю.
Отдельно хочу заметить про регдолл для персонажей, у которых некоторые части тела не скреплены (что бы при анимации смерти данная часть тела отваливалась), при регдолле часть тела действительно отваливалась, но за ней следовали какие-то растягивающиеся модельные сопли, что не придавало модели привлекательности после смерти (какая уж привлекательность после смерти, а? ). Аналогично и для персонажей с липсинком- его челюсть (напомню, что липсинк реализован костями) увеличивается до размеров персонажа и увлекает его далеко под землю. Но это проблема липсинка.
Конечно, у этого патча много плюсов, много и минусов. Один из гигантских плюсов (и основных - глобальных)- это DarkAI. Возможно, работая с конструктором, вы замечали, что некоторые персонажи тормозят сильнее остальных. Єто случается тогда, когда персонаж не прет напролом к игроку, а когда "высчитывает" положение его в пространстве. Єтот самый пересчет прибавляет персонажу ума для поимки игрока и голода для съедения больше компьютерной оперативки, что, впрочем, только способствует поимке игрока . Так вот DarkAI помогает персонажу не только "высчитывать" положение игрока в пространстве, но и "понять" собственное положение и синхронизировать с остальными персонажами, как мирными, так и вражественными. Причем реализовано все так, что с DarkAI тормоза вообще отсутствуют! Минусы может обойти грамотный и уже освоившийся в FPSCreator человек. Но минусы не смертельные, и даже порой малозаметные. В целом очень даже отличный патч, которые дает массивного пинка FPSCreator'у далеко вперед по сравнению с тем, чем он был раньше. Но, он, на взгляд автора, не может пока еще являться кульминацией возможностей для реализации. Конечно, большая часть статьи- описание ошибок, но скажите сами- что лучше, петь дифирамбы великому регдоллу с липсинком, или описать проблемы, что бы их можно было избежать?
Надеюсь, я вас не отпугнул от 17 патча- в хороших руках он станет мощным орудием для создания современных красивых игр, но недолго. Ведь на подходе уже 18 патч!
-----
Итак, сегодня мы с вами поговорим об обработке и чтении модели. Конечно, дизайнерство уровней и скриптование- єто хорошо, но без осознания, что есть модель, каким образом она обрабатывается и прочего вы мало продвинетесь. Начнем с основ. Какие основные составляющие модели? Єто грани, вертексы (точки), полигоны.
Полигон образуется из 3 точек, которые попарно соединены гранями. Таким образом, полигон- "треугольник" в пространстве. Разумеется, одна точка может принадлежать не только одному полигону. Сам полигон имеет "поверхность" только с одной стороны, с другой стороны он прозрачен. Разумеется, єто не научное и непрофессиональное объяснение, но более-менее, думаю, понятно. Но модель без анимации, в основном, ничего не значит. Что же такое анимация?
Анимация говоря грубо- єто движение модели и/или ее частей в пространстве. Анимация бывает 2 видов-вертексная и костная. Говоря технически, 1 кадр анимации (а точнее-переход с 1 на 2 кадр) (да, анимация идет также, как и в фильме-по кадрам)- єто запись того, где находилась модель в начальный момент и конечный. Именно в єтот момент и идет различие между вертексной и костной анимации. Для вертекстной записаны координаты всех вертексов. Єтот метод был удобен во времена низкополигональных моделей (у которых было не очень много вертексов). Второй вариант-костный. Создается скелет (логично ведь, из костей создается скелет), и к каждой кости "привязываются" некоторые вертексы. Таким образом, двинув кость- мы двигаем все привязанные к нему вертексы. Єта анимация делается проще, но обрабатывается чуть дольше.
FPSCreator (а точнее- модель формата DirectX "*.x") не поддерживает вертексную анимацию. Но как же так, вы делали коробку патронов, а получился белый кубик? Тут начинается главная часть модели- текстура. Создание модели- єто дело плотника, создание текстуры- дело художника. Рассмотрим текстурирование поподробнее.
Тут, опять же, есть 2 варианта. Конечно, вы можете сказать, что у вас табурет полностью деревянный, и "натянуть" на него простую картинку- фотографию среза дерева. Но тогда будет выглядеть, что табуретка сделана из одного сплошного куска, что есть не так. Тогда создается развертка модели- назначение по координатам, какая часть картинки будет "лежать" на определенном полигоне. Тогда уже и начинается мастерство- подготовить развертку так, что бы было красиво, что бы табуретка выглядела реалистично. Развертка также может помочь в детализации текстуры. Предположим, что вы хотите, что бы одна ножка стола была запачкана кровью. При первом варианте "текстурирования) кровь может быть как на ножке, так и на обратной стороне сидушки. Разверка (или анврап, от английского unwrap- развертка) же позволит вам испачкать только ножку.
Но вот мы импортировали нашу модель в FPSCreator. Сразу замечу, что чем выше качество и разрешение текстуры, тем сильнее она "грузит" движок. Также кушает оперативную память Альфа-Канал, который позволяет сделать прозрачной часть модели. Но, предупрежу- если вы используете альфа-канал в текстуре, то оно будет выглядеть как дыра в модели (вы еще не забыли, что обратная сторона полигона прозрачна?). В данном случае лучше использовать для создания прозрачности "Абсолютно черный" (0,0,0). На заметку- формат TGA также дольше обрабатывается, чем DDS. В самом движке FPSCreator с моделью можно выполнить много еще различных хороших действий. Я не говорю о воспроизведении анимации, я говорю об улучшении качества модели. Основной инструмент для єтого- шейдеры (от английского shade- тень, оттенок). Шейдер- скрипт обработки модели. В комплекте с FPSCreator идет набор шейдеров, которые позволяют сгладить модель и наложить на нее Alpha, Detail и Bump (Normal) Map. Detail Map в FPSCreator почти не используется, он позволяет наложить на модель иллюзию детализированности. Альфа и Бамп используются чаще.
Давайте представим, что вы делаете окно. И окно с прозрачным стеклом. Как я уже говорил, альфа-канал на текстуре делает простую дырку, а по пикселям (на текстуре) делать шахматную серо-черную сетку (что бы было видно, что стекло, а не дырка в куске фанеры) плохо, поскольку текстура при наложении может исказиться, если модель геометрически больше или меньше накладываемой на нее текстуры. Тогда либо пикселы станут слоновьего размера, либо уменьшатся, что тоже не придаст модели привлекательности. Альфа-канал позволяет с малыми затратами на оперативную память создать прозрачное стекло, с грязью/коррозией (делается єто усилением и уменьшением прозрачности).
Теперь поговорим про Bump (или, как ее еще называют- Normal Map). Ну, для начала- почему же Normal или Bump? Давайте вспомним школу, и тему по геометрии- Метод Координат. Так вот, помните- вектор нормали к прямой? Єто перпендикулярный вектор. А еще Bump, в переводе с английского- вмятина.
С помощью Bump карты вы можете создать иллюзию неровности. Если создать на самой модели трещину, то она может добавить от 2 до 500 полигонов. Bump позволяет сделать иллюзию трещин, неровностей и прочего, причем, также, как и Alpha- ест мало оперативки. С помощью шейдеров можно сделать еще много чего- отражения света на стенах, например. Но помни, игродел, что шейдер- єто не изменение модели, єто только иллюзия изменения модели! FPSCreator позволяет настроить материал для модели. Єто нужно только для того, что бы "осознавать"- какой тип "дырки" останется на модели после выстрела. Оговорюсь- дырки от пуль остаются только на статической модели: Модель в игре может быть статической и динамической. Статическая модель- исключительный объект интерьера, никогда не меняющий формы, свойств и не выполняющий скриптов. Динамический же выполняет скрипты, взаимодействует с игроком и так далее. Последнее, пожалуй, что стоит сказать о модели в движке- єто коллизия (от английского- collision- столкновение)- просчет соприкосновения модели, игрока и других моделей.
Обсудим о 3 основных типах- Без коллизии, боксовая и полигональная. Приведу пример на модели арки. При боксовой коллизии (от английского- Box- коробка) вокруг модели создается невидимый твердый "куб". То есть через арку мы не пройдем. При полигональной коллизии твердость создается на самой модели- разумеется, єто откусывает больший (по сравнению с остальными) кусок оперативной памяти. Отсутствие коллизии позволит игроку пройти сквозь модель. Задание вам на проверку- что будет, если (в FPSC-Editor) одна динамическая модель "наедет" на другую.
Конечно, стоило бы сказать о просчете освещения, но не буду. Єто скорее относится к работе движка, чем к моделям. Замечу только, что при тесте уровня генерируется LightMap (от английского- Карта света), и он дольше генерируется от динамического света и на динамических моделях, и, соответственно быстрее от статического света и на статических моделях (єффект статичности для света аналогичен статичности для модели).
Вот все, что вам необходимо знать о модели и об чтении и обработки модели. На последок скажу, что при компиляции/тесте уровня FPSCreator создает модели BIN и DBO. Первый используется как превью модели в FPSC-Editor, второй- в самой игре. Позже, если модель Х изменилась, а DBO-нет, то конструктор будет использовать раннее созданный DBO. Что бы видеть уже измененную модель, просто удалите DBO файл.
-----
Итaк, ceгoдня oбcyдим знaмeнитyю мoдификaцию для FPSCreator- Project Blue Mod для пaтчa 1.15. Этoт мoд oбъeдиняeт в ceбe Ply's Mod V.1.09, Airmod V0.6, S4Mod V1.09, Lemur V2, XRMod. Taк вoт, чeм жe oн тaк знaмeнит?
Дaвaйтe paзбepeм мoд пo чacтям- пo мoдaм, кoтopыe в нeгo вxoдят. AirMod cлишкoм знaмeнит, чтo бы гoвopить o нeм eщe paз. Для тex, ктo нe пoмнит или нe знaeт -пoяcню. AirMod- мoдификaция c oткpытым иcxoдным кoдoм, дoбaвляющaя мнoжecтвo нacтpoeк в gunspec (фaйл нacтpoйки opyжия), тaкиx, кaк oтдaчa, simplezoom ("Пpocтoe пpиближeниe", тoчнee-пpицeливaниe), блoкиpoвкa opyжиeм пyли и дpyгoe. Taкжe oнa дoбaвляeт струйки крови из тела персонажа, если вы в него попали.
Гораздо более интересна основа Project Blue Mod- Ply's Mod. Как ни странно, но Ply's Mod широко известен тем, что позволяет взять оружие во вторую руку. Но это не самое главное достижение этого мода. Технически, гораздо больший прорыв для FPSCreator он делает, позволяя скриптовать поведение оружия. А точнее, привязав скрипт к оружию (с соответствующими новыми скриптовыми командами и условиями), стандартное поведение оружия отключается, и работает оно исключительно по настройке в скрипте. Таким образом можно реализовать, например, "оружие"-бутерброд и так далее. Впрочем, есть еще несколько технических достижений, как то, например, создание камер. Как журналист, я провел небольшое исследование и попытался сам сделать собственную систему создания камер. Для начала, замечу, что новая камера- это новая нагрузка на движок, причем весьма и весьма ощутимая. Plystire (автор мода) не только создал оптимизацию так, что количество камер в наименьшей степени влияет на быстродействие, но и позволил юзеру добавлять собственные камеры без ограничений. Как вы понимаете, такие возможности позволяют реализовать множество самых безумных идей, вплоть до вида от 3 лица.
Но, уже с этого момента возникают недочеты- при создании камеры можно случайно задеть камеру "из глаз игрока", в результате чего весь движок придет в негодность. К сожалению, у крупных планов иногда бывают крупные провалы- очень давно заявленная команда, активирующая так называемый noclip для главного игрока провалилась- она действительно отключает коллизию, но вместе с ней обрушает всю физику движка даже после отключения команды.
Ply's Mod также позволяет создавать и редактировать переменные типа Real, то есть дробные числа (говоря проще). Таким образом также можно даже редактировать переменную, отвечающую за патроны и за жизни. И, напоследок замечу, что прямо в игре можно менять экранный шейдер скриптовой командой, не говоря уже о вводе экранных шейдеров в работу. Поподробнее о понятии шейдера можете прочитать в статье "Обработка и чтение модели".
Lemur Mod повышает производительность. S4Mod. Мод, улучшающий работу игры на более-менее старых машинах, но не это главное. С помощью этой части мода вы сможете сделать Командный Мультиплеер. Вообще S4Mod изначально позиционировался как мод для создания мультиплеера. Он добавляет в игру чат, лог убийств, насмешки при убийстве. Последнее- это XRMod. Добавляет компас и погодные эффекты. Увы, при использовании этих погодных эффектов вся оптимизация и ускорение сводится на ноль.
В совокупности мод показывает отличные результаты. На самом деле, если постараться, то можно сделать игру даже более качественную по графике и возможностям, чем на 17 патче. Возможность накладывать скрипты на оружие и создание и манипуляция камеры открывает множество самых необыкновенных возможностей. Но какие есть минусы? Помимо тех, которые уже были оговорены, есть еще несколько. Например- операция деления. Переменные и числа можно делить на числа и переменные. Но что случится, если переменная-знаменатель вдруг окажется нулем? Правильно- движок закроется, причем, если случилось это в откомпилированной игре- она "сломается". Либо перекомпилируйте, либо удаляйте. Но это -вырожденный случай, а есть и более явные баги.
Есть хорошая команда для привязки модели к камере. Хорошо работает для создания ног внизу персонажа, но оно отключает физику объекта. При умирании объект уничтожается и обратно уже не появляется, как пример. При попытке отвязки модели от камеры физика не восстанавливается. К тому же некоторые команды даже не тестировались разработчиками, о чем они признаются, совершенно не стесняясь. К тому же настройка имени в командных и просто мультиплеернах играх работает не всегда верно. *Примечание: Все, что описывается в минусах, было отслежено лично авторами. Если у вас не так и такого минуса у вас нет, значит, видимо, вам повезло.
Всем ли хорош мод? Нет. Новичку он не подойдет, да и не всякому профессионалу тоже. Увы, некоторые скриптовые команды могут повредить движок, некоторые- затормозить. В целом -отличный мод. Но, без обучения и дополнительных объяснений с ним не справиться. Главное управление возможностями этого мода идет через скрипты, и не зная азов скриптования, вы не сможете работать со всеми функциями мода. Но для умного скриптовальщика и опытного программиста это истинное орудие, выводящее его на новые уровни возможностей. Разумеется, если он не будет наедятся на то, что "Авось эта команда у игрока заработает нормально" ;)