Игрострой

Игрострой

Игрострой — Игрострой
Разработка игр и все, что с этим связано
Игроманияhttps://www.igromania.ru/
Игрострой
Игрострой

Сдвиг по фазе

Почему аниматоры так не любят птиц и драконов

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

Некоторые считают, что корни проблемы — в значимости конкретного персонажа для игры. Те же птицы обычно делаются лишь для атмосферы, игрок видит их не слишком часто, а значит можно делать упрощенную анимацию. Верно это лишь отчасти. Дело еще и в сложных фазах движения. Взять, к примеру, человека. Когда он идет, он не только передвигает ногами и делает отмашку руками. Помимо этого он дышит, чуть-чуть «проваливает» корпус (приседает) во время каждого шага, вместе с отмашкой двигаются плечи и немного смещаются лопатки. Иногда человек оглядывается, да и длина шага иногда меняется. Реализовать все это методами скелетной анимации довольно сложно, поэтому используют motion capture, технологию захвата движений, а затем уже вручную дорабатывают детали.

Теоретически можно навесить датчики и на птицу, и на лошадь. Более того — некоторые разработчики именно так и поступают. Вот только число мелких движений у этих животных больше, чем у человека. У птицы во время полета постоянно вибрируют маховые перья, изменяет свое положение хвост, а во время приземления тело за секунды проделывает сразу несколько десятков мелких движений: крылья выворачиваются на 90 градусов, перья на груди раздуваются, голова отклоняется назад, лапы вытягиваются вперед, хвост распушается и лопатой опускается вниз (это дополнительно тормозит полет). И вот все эти нюансы датчиками движения зафиксировать очень трудно. Нужно либо прорисовывать вручную (это огромный объем работы), либо делать все по упрощенной схеме. Разработчики обычно выбирают второй вариант.

Третье измерение мышки

Как работают навигаторы для 3D-редакторов

Вы хоть раз пробовали работать в трехмерном редакторе? Например, в 3DS Max или Maya? Если да, то вам не нужно объяснять, что одна из главных проблем при освоении этих программ — навигация. Чтобы изменить масштаб или повернуть изображение, нужно либо активировать специальный режим, либо пользоваться горячими клавишами и мышкой. Если вы работаете не с мышью, а с планшетом, то ситуация еще хуже. Одновременно работать с трехмерным объектом и «рулить» камерой практически невозможно.

Зато вполне возможно распараллелить процессы. Компания 3DConnexion (это подразделение Logitech) уже довольно давно выпускает устройства (назвать эти девайсы мышками язык не поворачивается), специально заточенные под навигацию в 3D-редакторах. Выглядят эти манипуляторы (чаще всего моделлеры используют SpaceNavigator и SpaceExplorer) как коротенькие толстенькие джойстики с вращающейся ручкой, помещенные на массивное основание со множеством кнопок.

Кладете устройство под левую руку, вращением ручки поворачиваете объект на экране, двигая вперед-назад, удаляете/приближаете. Мышка и клавиатура при этом остаются совершенно свободными для работы с текстурами, полигонами или чем-то еще. Рекомендовать всем трехмерщикам разом переходить на подобного рода устройства мы не станем по одной простой причине — если вы привыкли управляться с навигацией при помощи мышки, то переучиться будет сложно. А вот если с самого начала работать в том же 3DS Max, используя такие приборы, то никаких проблем не возникнет, а моделировать вы сможете процентов на 10-15 быстрее.

Теневое развитие

Как эволюционировала технология теней

Естественное освещение и тени давно стали нормой практически для всех игр. Даже если в шутере вы отключите в меню все визуальные настройки, то главный герой, здания и растительность все равно будут отбрасывать простенькие примитивные тени. Но так было далеко не всегда. В Doom и даже Quake теней не было вовсе. Во-первых, мощности процессоров и видеокарт расходовались очень экономно и тени в «трехмерный бюджет» просто не закладывались. Во-вторых, еще не было нормальных технологий отрисовки теней. В самом деле, не помещать же под каждого персонажа просто кучку темных пикселей — выглядеть это будет крайне неестественно.

Технологию Global Illumination используют не только в играх и мультипликации, но и для рисования постеров. Пример поэтапного создания теней для постера к Hellgate: London. Кстати, многие игроки были уверены, что этот арт нарисован не в трехмерном редакторе, а в «Фотошопе».

Первой «теневой» технологией стали так называемые размытые пятна (Blob Shadow). Процедурно отрисованное пятнышко под каждым героем: в центре темное, к периферии — размывающееся. Эффект размытия достигался самым простым путем: движок оценивал, насколько каждый пиксель удален от ног героя, и в зависимости от этого задавал ему ту или иную прозрачность. Чем прозрачность больше, тем пиксель (и, следовательно, тень) светлее. Blob Shadow никак не учитывала окружающий свет, а во всех ситуациях выдавала одну и ту же тень персонажа.

Следующей ступенькой в развитии теней стал алгоритм карт (Shadow Map). Тени рассчитывались с учетом того, с какой стороны и какой именно свет падает на персонажа. Если источник освещения был точечный и располагался низко, то тень получалась длинная или, как еще иногда говорят, «перспективная» (расширяющаяся от ног героя). При равномерном верхнем освещении тень выходила маленькой и бледной. Shadow Map прожили относительно недолго: технология отъедала очень много процессорного времени, необходимо было просчитывать положение практически каждого пикселя. Если компьютер не был оснащен 3D-акселератором, то даже одна тень могла снизить fps на 15-20 единиц. Поэтому разработчики всегда делали Shadow Map отключаемыми.

В Severance: Blade of Darkness (2001) впервые был опробован совершенно новый «теневой» механизм — стенсильные тени (Stencil Shadow). Впервые просчет и обработку теней взвалили на плечи видеокарты. И все бы ничего, вот только даже самый мощный 3D-ускоритель начинал надрываться, когда источников света было больше трех-четырех. Технология Stencil Shadow учитывала при создании тени все источники света, поэтому разработчикам приходилось искусственно ограничивать их число. В результате освещение получалось очень примитивным, даже высокополигональные персонажи с детально прорисованными текстурами смотрелись как вырезанные из картона человечки. Многие девелоперы не были готовы к таким жертвам. Стенсильные тени начали активно использовать только через несколько лет, когда технологии доросли до нужного уровня.

Обратите внимание на реалистичные тени. Благодаря им лицо выглядит достоверно, а ведь сама модель довольно простенькая.

Стенсильные тени используются в играх и по сей день. Можно подумать, что эволюция остановилась, но это не совсем так. Не меняется только базовый механизм генерации теней, но на него уже «навернули» множество различных визуальных эффектов. Например, световую недосягаемость (Ambient Occlusion). Для каждой модели генерируется специальная карта, которая описывает, в какие области свету попасть сложнее всего. Даже если складки одежды или кожа лица представляют собой всего лишь плоское изображение (текстуру), все равно на одни его участки света будет попадать больше (на вершины складок, щеки, лоб), а в другие меньше (в углубления, пространство под носом, глазницы).

Некоторые разработчики используют для прорисовки теней систему Global Illumination. Каждый источник света испускает частицы (аналоги фотонов света, на экране они не прорисовываются), движок смотрит, сколько таких «фотонов» попало на разные участки модели, и в зависимости от этого затеняет или, наоборот, просветляет их. К сожалению, в играх пока невозможно использовать Global Illumination в полную силу: слишком высока нагрузка на процессор, поэтому число «фотонов» и «чувствительность» моделей сильно ограничивают. А вот в анимации этот метод используют по полной. В играх полноценная Global Illumination появится лишь через полтора-два года, когда начнут выходить игры на Unreal Engine 3.5 Gears of War 2 Global Illumination задействовали не на полную мощность).

После того как в играх начали активно использоваться шейдеры, у разработчиков появилась возможность прорисовывать даже те тени, которые персонаж (или объект игрового мира) отбрасывает сам на себя. Впрочем, все современные уловки с тенями — именно уловки. Механизма, который бы позволял рассчитывать тени по алгоритмам, аналогичным реальным оптическим законам, пока не существует. Главная тому причина  — недостаточная детализация моделей. Вместо того, чтобы увеличивать проработанность моделей, разработчики придумывают все более хитрые способы, как заставить выглядеть реалистично относительно простенькие каркасы. Многие трехмерщики уже считают, что если убрать все эти «теневые» навороты, то в играх можно будет рисовать модели в десятки раз более сложные, чем сейчас.

Музыкальная вивисекция

Как выудить музыку из игр

С незнакомыми играми MultiEx Commander работать, увы, не умеет.

С каждым годом игры становятся все более защищенными. Разработчики прячут от глаз игроков буквально все: скрипты, графику, диалоги и, разумеется, звуки и музыку. Если еще два года назад существовало множество программ, способных выдирать музыкальное сопровождение из десятков игр, то сегодня таких утилит становится все меньше. Одна из немногих программ такого рода, которая постоянно обновляется, — MultiEx Commander (скачать его можно с сайта www.xentax.com). К тому же это единственный грабер аудиофайлов, который умеет не только выдергивать их из игр, но и помещать обратно. Так что с помощью MultiEx Commander можно даже заняться переозвучкой.

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

Еще один недостаток MultiEx Commander — он намертво завязан на сайт разработчиков. Чтобы вскрыть игровой архив, утилите необходимо в течение нескольких секунд «общаться» с сетевой базой данных и подгружать необходимые файлы (к новым играм модули можно загрузить только за деньги — около двадцати центов за штуку, — но проще подождать месяц и скачать все бесплатно). Реализация, если честно, довольно странная. Каждый кряк-модуль весит относительно немного, если включить все бесплатные аддоны в исходный дистрибутив, то весить он будет немногим больше 70 Мб, что вполне терпимо.

Но главная проблема MultiEx Commander в его нестабильности. Во время работы утилита часто подвисает, вылетает с ошибкой, а иногда перезагружает систему. Некоторые люди на форумах пишут, что у них MEC убил Windows, но во время наших тестов ничего похожего не случалось.

Теперь несколько слов о том, как работать с программой. Кнопка Open открывает архив, Extract экспортирует выделенные объекты из архива, Import заменяет выделенные файлы другими. В меню Options можно включить автозагрузку всех поддерживаемых на данный момент игр с сайта (опция Get Formats from Website). Это занимает довольно много времени, но в будущем утилита будет реже обращаться к сайту. Настройки экспорта файлов можно изменить: например, запретить экспортировать файлы с нулевым объемом.

Котелок — вари!

Как работают сложные модели поведения NPC

В прошлом выпуске «Игростроя» мы вам уже рассказывали о проблеме AI в современных играх — в частности, упомянули, что в подавляющем большинстве игр искусственный интеллект построен на примитивных триггерах и с реальным человеческим мышлением не имеет ничего общего. Однако существуют алгоритмы, которые делают поведение NPC очень похожим на поведение реальных людей. Например, системы, основанные на GPS (General Problem Solver — универсальный решатель задач, не путать с GPS-навигаторами).

Этот алгоритм был разработан Алленом Ньюэллом и Гербертом Сайнмоном еще в 1959 году. GPS отчасти моделирует мыслительную деятельность человека. Он ставит перед собой задачу (задается программистом), после чего ищет различные пути ее решения, основываясь на информации о законах функционирования окружающего мира. Если какой-то вариант решения приводит в тупик, то происходит откат системы к последней стадии, с которой можно найти работоспособный вариант. Звучит немного сложно, так что лучше давайте разберемся на конкретном примере.

Предположим, в игре имеется NPC-убийца, который знает об окружающем мире то, что в нем есть магазины, в некоторых из которых могут продаваться топоры, еще в мире есть бабушки, наделенные свойством сидеть дома или перемещаться по улицам, на улицах помимо бабушек могут встречаться милиционеры, которые могут больно ударить дубинкой или выстрелить из пистолета в коленную чашечку. Программист Ф.М. Послеевский ставит перед NPC непростую задачу: свести на нет поголовье бабушек на заданной игровой территории.

Дальше — никаких триггеров. В действие вступает GPS. NPC-убийца начинает проигрывать последовательность действий. Выйти на улицу, подойти к бабушке, попытаться зарубить ее топором. Ошибка ввода! Топора нет, рубить нечем. Возврат к первой стадии. Надо дойти до магазина, поискать топор. Если в данном магазине топора нет, снова возврат к первой стадии, поиск топора в другом магазине. Топор найден, выходим на улицу. Обнаруживаем бабушку, подходим к ней, замахиваемся топором. Получаем дубинкой по голове и пулю в коленную чашечку. Возврат к предыдущей стадии (здесь, кстати, обязательно нужно задать дополнительное «знание о мире» — возможность лечиться). Идем к бабушке домой и используем топор по назначению уже без последствий для собственного здоровья.

Казалось бы, отличная система, позволяющая создавать миры, которые живут своей собственной жизнью, вне зависимости от того, есть в них игрок или нет (см. S.T.A.L.K.E.R.). Вот только все маневры персонажей необходимо просчитывать, а процессоры, увы, обладают ограниченной мощностью. Да и эффект от такой реалистичности, прямо скажем, невелик. Да, мир живет своей жизнью, вот только игрок не видит и сотой части всего этого великолепия. Именно поэтому GPS-подобные системы в играх используются крайне редко. Это просто нерентабельно.

Футбольная атлетика

Как изменить параметры футболистов в FIFA 09

FIFA 09 скрывает в себе поистине безграничные возможности для модифицирования. Разве что хоккей на льду сделать не получится, а вот мод, превращающий игру в симулятор дворового футбола или серьезный менеджер футбольного клуба, — это возможно. О том, как перекроить игру, мы вам уже несколько раз рассказывали. Сегодня же мы затронем более тонкую тему  — научимся изменять параметры физического состояния игроков. Эти величины довольно тонко влияют на игровой баланс, поэтому изменять их нужно крайне осторожно. Зато подправив всего 5-6 таких атрибутов, можно изменить геймплей до неузнаваемости.

Напомним, что любое вскрытие FIFA 09 начинается с запуска программы FIFA FileMaster. С ее помощью надо открыть архив config.dat (не забудьте снять с него пометку «Только чтение», иначе потом не сможете записать ни одно из проделанных изменений) и выудить из его недр файл career.ini, в котором находятся характеристики футболистов. Редактировать скрипты можно в любом текстовом редакторе.

Ниже мы приводим список самых интересных параметров с комментариями, как лучше всего изменять ту или иную величину.

FATIGUE_START_AT — усталость игроков команды на старте сезона. Казалось бы, самое очевидное решение максимально снизить усталость... Но куда интересней, наоборот, увеличить значение этого параметра. Дело в том, что усталые игроки быстрее развивают выносливость и в дальнейшем смогут больше проводить на поле без замены.

FATIGUE_BASE_LOSS_PER_DAY — восстановление сил футболистами с каждым днем отдыха (то есть днем без тренировки и игры). А вот это значение лучше поднять. Чем быстрее игроки будут отдыхать, тем чаще их можно будет выпускать на поле.

FATIGUE_FITT_UPGRADE_LOSS_PER_DAY — дополнительное ежедневное избавление игроков от усталости при работе с квалифицированным медиком.

INJURY_DURATION_AT_MED_UPGRADE_0 — умножитель (в процентах) сроков лечения футболиста при клубном враче низкой квалификации. Ясно, что при значении больше ста эти самые сроки сокращаются, при меньшем — продлеваются. Изменяя этот параметр, можно даже из самого никудышного эскулапа сделать отличного патологоана... спортивного медика.

INJURY_DURATION_AT_MED_UPGRADE_10 — то же самое при докторе высокой квалификации. По умолчанию здесь стоит число 80, а значит при наличии умелого специалиста сроки реабилитации больных заметно сокращаются.

INJURY_MINOR_MIN_DURATION — минимальное количество дней, которое пропускает травмированный игрок при легком повреждении. Чтобы сделать игру более реалистичной, этот параметр лучше немного увеличить. Даже легкое растяжение заживает никак не 2-3 дня, а минимум две недели.

INJURY_MINOR_MAX_DURATION — максимальное число дней при легком повреждении. Аналогично — увеличиваем. Легкая травма колена вполне может упечь игрока на больничную койку на месяц.

INJURY_MODERATE_MIN_DURATION — минимальное число дней, которое пропускает футболист при травме средней тяжести.

INJURY_MODERATE_MAX_DURATION — максимальное.

INJURY_SEVERE_MIN_DURATION — минимальный срок простоя при тяжелой травме. Тут главное не переборщить. Некоторые модотворцы ставят чуть ли не год. Да, это реалистично, но игрок пропустит целый сезон, наверстать упущенное будет практически невозможно. Вы получите команду, которая отвратительно играет только из-за одного футболиста.

INJURY_SEVERE_MAX_DURATION — максимальный срок залечивания тяжелого повреждения.

MINOR_INJURY_IMPACT_ON_FATIGUE — изменение физического состояния футболиста (чем выше число, тем оно хуже) под воздействием легкой травмы. Этот параметр напрямую связан с предыдущим. Если вы сильно увеличили срок реабилитации от какого-то вида травм, то лучше понизить значение физического состояния, чтобы футболист быстрее влился в команду и заиграл в полную силу.

MODERATE_INJURY_IMPACT_ON_FATIGUE — аналогично для средней травмы.

SEVERE_INJURY_IMPACT_ON_FATIGUE — для тяжелой.

TRAINING_ATTEND_XP — опыт, который игрок набирает за тренировку. С этим параметром можно поэкспериментировать. Изначально игроки развиваются приблизительно равномерно. В жизни так бывает крайне редко. Кто-то учится быстро, кто-то значительно медленней. Попробуйте увеличить значение параметра у одних футболистов и снизить у других. Да, с такой командой будет довольно сложно управляться, но стократ интересней — каждый игрок приобретает индивидуальность. Вы будете постоянно озабочены тем, как подтянуть новичков и как заставить профи подстраиваться под отстающих.

TRAINING_ATTRIB_XP_OFFSET — прирост тренируемого навыка.

TRAINING_FATIGUE — накопление усталости за тренировку.

TRAINING_INJURY_CHANCE — вероятность (в процентах) для футболиста получить на тренировке травму. По умолчанию она просто-таки ничтожно мала и равна 1 проценту. Но в реальной жизни повреждения на тренировках не настолько уж редкое явление. Можно смело прописывать 5 или даже 10 процентов.

TRAINING_LOW_FATIGUE_INJURY_CHANCE — то же самое для усталых футболистов (соответствующий уровень усталости устанавливается показателем TRAINING_LOW_FATIGUE). По статистике, футболисты всего после часа игры оступаются и падают в два раза чаще. Так что можете смело прописывать 15 процентов, не ошибетесь.

Рядом с параметрами, определяющими физическое состояние футболистов, находится еще несколько скриптов, которые позволяют регулировать, скажем так, уровень команды.

MIN_ACCADEMY_PLAYERS — минимальное число выпускников (за сезон) в вашей футбольной академии, готовых пополнить главную команду.

MIN_ACCADEMY_PLAYER_AGE — минимальный возраст игроков в академии. В оригинале вы можете работать с талантливыми ребятами лишь в возрасте 15-17 лет. Если же вы хотите вырастить игроков для своей команды почти с пеленок, то снижайте значение до 10-14. Это изменение будет особенно уместным при продлении карьеры с помощью параметра NUM_SEASONS_IN_CAREER.

MAX_ACCADEMY_PLAYER_AGE — максимальный возраст игроков в команде.

MIN_PLAYERS_FOR_ACCADEMY_BOOST — минимальное число игроков в вашей академии.

MAX_EXPERIENCE_PER_GAME — максимальное количество опыта, которое футболист может получить за матч (учтите, что сотня в значении этого параметра приравнивается к единице опыта в игре). Если прописать тут, скажем, 200, то тренировка в плане накопления опыта будет уступать матчам.

Комментарии
Загрузка комментариев