НовостиСтатьиФорумСкачатьГалерея
На главную страницу

Навигация

Список статей



поиск по сайту


Реклама:

Статьи → Все статьи

Воплощение в жизнь онлайновых миров, создаваемых и модифицируемых игроками


"Через мгновения у игроков появится удивительная возможность оценить объемы своих возможностей" - из выступления Уилла Райта (Will Wright) на PCForum в 2003 году.

Сроки и интенсивность погружения людей в игры определяют скорость потребления ими игровой информации. Игроки быстро привыкают к игровой среде и требуют от разработчиков создания:
  • огромного количества игрового контента для изучения (Final Fantasy);
  • перепроходимого контента, чтобы продлить время игры (GTA3, Gran Turismo);
  • возможностей, которые появляются от взаимодействия игроков с другими игроками (Quake, Ultima Online).
Онлайн-игры с постоянным виртуальным миром тоже дифференцируются подобным образом по способности преподносить игрокам большое количество постоянно обновляемой информации. Игры, предлагающие 100 часов исследования контента, могут быть с легкостью "проглочены" игроком за первый месяц, а то и пару недель игры - таким образом, станет проблематично вынудить пользователя платить ежемесячную абонентскую плату за возможность остаться в игровом мире.

Карта мира Second Life (Вторая Жизнь). Кроме того, это диаграмма взаимосвязи серверов. Каждый квадрат на карте показывает 16 виртуальных акров земли в Second Life. Каждый квадрат также представляет собой один "сим" (sim) - сервер на базе Linux, соединенный с четырьмя соседними серверами. Игровой мир территориально расширяется при добавлении нового "сима".



Модификация игры силами разработчиков и игроков - это стратегия, которая уже продлила жизнь многим играм жанра FPS, но применение этого подхода в ммо-проектах вызывает ряд сложностей. Что касается одиночных игр, создание видоизмененного контента не сложнее описания форматов файлов игрокам (в ряде случаев, предоставления игрокам возможности самим разобраться с файлами), в случае с ммо-играми, появляется ряд технических проблем. Игровой контент (графика, звуки, формы, анимация, поведение), связанный с контентом, созданным самими игроками, должен передаваться другим игрокам, желательно в режиме реального времени. Должны быть созданы различные ограничения, связанные с возможностью владения и передачи контента между игроками. Если созданные игроками объекты обладают каким-то поведением, то ресурсы, затрачиваемые на описание этих объектов, должны быть грамотно лимитированы и сбалансированы.

Для нашего первого проекта Second Life компания Linden Lab предоставила нам Распределенную Модель-Сеть для обсчета и редактирования игрового мира, поддерживающую большой масштабируемый мир с неограниченным количеством контента, создаваемого игроками, редактируемого в режиме реального времени. Кроме того, мы чувствуем, что она демонстрирует уровень производительности и сложность игрового контента, способные состязаться с лучшими из существующих "статичных" игровых миров. В этой статье мы расскажем, как работает наша система и как она положительно влияет на разработку игры.

Трудности с шардами



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

Преимущество шардового деления состоит в том, что оно позволяет создателям преумножать количество созданного контента посредством его повторного использования на разных группах пользователей. Минус же состоит в том, что пользователи разбиваются на несвязанные невзаимодействующие группы. Друзья не смогут играть вместе, если не подсоединятся к одному серверу. Кроме того, шарды не балансируются автоматически - кто угодно может сам выбрать сервер, на котором будет играть, а остальные сервера будут пустовать и приносить убыток. С тех пор, как некоторый создаваемый игроками контент (счета, содержимое инвентаря, выпадающие предметы) появился даже в самых простых ммо-играх, нет адекватного метода балансировки миграции игроков между серверами. Малонаселенные шарды становятся бесполезными в играх, где многое зависит от социального взаимодействия игроков. Такие сервера, как правило, закрываются, оставляя недовольных "бездомных" игроков.

Шардовая система определяет фундаментальное разделение статичного и динамичного контента: мир становится статичным, в большинстве случаев, а игрок - динамичным. Статичный контент может быть продублирован, а динамичный - мигрирует. А что если вы хотите сделать динамичным весь мир? Тогда вам либо потребуется очень много шардов, либо придется каким-то образом сделать один большой мир.

Масштабы проблемы



Онлайновый мир, представляющий собой одно большое пространство, состоящее из набора маленьких, населенное игроками, способными в большой степени создавать, редактировать, манипулировать объектами - это большая проблема для создания базы данных такого мира. Всего через два месяца после старта количество игровых объектов в нашей игре достигло сотен тысяч штук, не предметов, находящихся в инвентаре игроков. Каждый из этих объектов потенциально имеет уникальную текстуру, физические свойства, размеры, свойства, цену и модель поведения. Стремление предоставить пользователю весь игровой контент Second Life, доступный в настоящее время, в одной упаковке потребовало бы, по крайней мере, 100 компакт-дисков, а попытка "патчить" игру каждый день при входе в игру требовала бы по 10 мегабайт трафика в день (и эта цифра растет линейно при появлении новых игроков).

Тысячи игровых объектов позволяют пользователям украшать свое жилице внутри…



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

Введение в понятие Распределенной Модели-Сети



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

Как при использовании шардовой системы, так и при введении сети серверов, все ммо-игры пользуются не одной, а множеством машин для управления игровыми мирами. Чтобы решить проблему с контентом, создаваемым игроками, в игре Second Life мы создали сетку из машин, соединенных со своими "ближайшими соседями" на базе топологии игрового мира. Каждая машина ("сим") обсчитывает физику, отслеживает перемещения всех объектов, осуществляет работу скриптов и управляет свойствами местности игрового мира в пределах фиксированного региона (примерно 16 акров на машину). Каждая машина "общается" только с четырьмя своими ближайшими соседями, так что не возникает проблем в передаче информации, когда мир становится слишком большим. Типичный канал, необходимый для обмена информацией между соседними серверами, - это несколько сотен Кбит/сек, так что сервера могут находиться на расстоянии друг от друга и их необязательно соединять гигабитным каналом.

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

Физическая симуляция (которая является большой проблемой из-за нелинейного роста количества необходимых обсчетов в связи с ростом игрового мира) производится без сложностей - каждый "сим" отвечает только за действия над объектами, относящимися к его "территории" и воздушному пространству над ней. Так осуществляется поддержка объемной динамики, тщательного отслеживания графического уровня и полноценной автоматической симуляции таких процессов, как создание реалистичных ветряных потоков и облаков, которые видоизменяются с течением времени и движутся над игровым миром, как это происходит в реальности, - таким образом, достигается уровень, недоступный для одиночной машины.

При передвижении по игровому миру вы получаете потоки информации только от "симов", рядом с которыми находитесь. "Симуляторы" обсчитывают объекты и события, которые вы в данный момент видите, и своевременно передают информацию только о новых или измененных объектах. Такой подход дает возможность использовать недорогие сервера на базе Linux и небольшой клиент, который игрок должен скачать и установить.

С ростом мира увеличивается количество серверов по краям. В настоящее время каждый "симулятор" использует Linux-1U и отвечает за квадрат земли и воздушное пространство над ним, со стороной 256 метров (примерно 16 акров). Linden Lab создает игровую местность одновременно большим количеством машин (ограничения накладываются энергопотреблением) и развертывает новые части игрового мира большими объемами. Это дает нашим пользователям возможность вступать с другими игроками в гонку за возможность исследовать новые участки земли для постройки там своего игрового жилища.

…и снаружи.



Население игрового мира



В то время как распределенная модель-сетка позволяет существовать большому онлайновому миру, состоящему из сопряженных частей, и способному вместить в себя огромное количество создаваемого игроками контента, сам мир нужно еще этим контентом наполнить. Было несколько моментов при создании Second Life, когда разработчики готовы были закричать "эврика!". Первый из них был, когда поняли, что если разработали динамичную систему, когда весь игровой мир может передаваться пользователю в режиме реального времени, то нет причин, по которым игровой контент не мог бы быть высокодинамичным, текучим, меняющимся, вместо того, чтобы состоять из одного комплекта предметов, записанных на компакт-диск. Вторая и гораздо более важная наработка состояла в том, что если контент должен быть таким динамичным, то нужно дать пользователям возможность самим его создавать и изменять.

Самой большой проблемой на пути создания такого мира были в том, что без строгих ограничений игроков или без системы одобрения каждого созданного игроком предмета мир просто взорвался бы - возникло бы слишком много некачественного или незаконченного материала. Мы понимали важность этой проблемы и создали систему игровой экономики для ее решения.

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

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

Проблему усугубляет то, что если целью разработки является возможность создания, видоизменения объектов и передача информации о них в режиме реального времени, то обычные технологии для первичной обработки, такие как определение потенциально видимых наборов объектов для создания геометрической насыщенности или метод излучательности (прим.: техника моделирования световых потоков для построения и визуализации трехмерных изображений сцен) для моделирования освещения не подходят ввиду сложности и высоких системных требований для реализации этих методов. Когда мы осознали эту проблему, мы поняли, что нам нужно найти методы для решения задач передачи информации о геометрии, текстурах, звуках и анимации игрокам в режиме реального времени. Это также натолкнуло нас на мысль, что следует создать инструменты для объемного моделирования и создания текстур Second Life, которые были бы встроены в клиент и использовались бы как пользователями, так и командой художников-разработчиков.

Передача информации



Топографическая структура Second Life в виде сети, создает "бесшовный" однородный мир с нагрузками по обсчету и передачи информации, распределенной по многим машинам-симуляторам. Она также позволяет создавать контент в режиме реального времени. Тем не менее создание большого количества предметов в режиме реального времени порождает проблему передачи информации. Даже при наличии "умной" системы, которая передает игрокам только ту информацию, которая необходима им в данный момент, все равно остается проблема с пропускающей способностью каналов связи. Для того, чтобы увидеть на экране новые предметы, игрок должен получить информацию формах, текстурах, звуках и анимации каждого объекта, попадающего в поле зрения, это должно происходить быстро. Время загрузки и постоянные паузы сделали бы невозможным плавное движение по большому миру, создаваемому сетью симуляторов, так что требуется подход "непрерывного движения". Это необходимо также если вы хотите привести в действие "Священный Грааль" игрового мира - возможность не только создавать, модифицировать, покупать тли продавать интересные предметы, но и возможность делать это вместе с кем-то, кто будет смотреть на это со стороны или делать что-то сообща с другими игроками. Ощущение погружения и единения с сообществом, которое появляется при помощи другому в починке виртуальной машины и последующей совместной поездке на ней - это нечто, что нужно испытать на себе, чтобы поверить. Поэтому мы сконцентрировались на "непрерывной" системе передачи информации, вместо сиcтемы "патчей" для нашей игры, потому что только она могла передать игроку всю необходимую информацию в режиме реального времени.

Первым решением было требования широкополосного подключения - так поступают все больше и больше разработчиков. Средняя ширина канала для игрока Second Life - это примерно 100 Кб/с, но игроки с лучшим соединением могут позволить себе "скачки", в несколько раз превышающие нормальную передачу данных, если позволяет оборудование.Даже при широкополосном соединении требуется сильное сжатие. Каждый "симулятор" Second Life может отвечать примерно за 10000 объектов, и хотя вы не можете увидеть все эти объекты одновременно, часто вы можете наблюдать большой процент общего объема. Существующие методы сжатия для передачи информации никогда не смогли бы передать информацию о стольких объектах на скорости, необходимой для создания плавного текучего эффекта, так что было принято решение переключиться на подход конструктивной цельной геометрии, построенной на базе геометрических примитивов. Эти базовые формы представлены алгоритмически, таким образом достигается гибкость масштабирования, урезания, скручивания, комбинирования множества примитивов, информация о которых может быть передана в сжатой форме.

Еще один ключевой момент - это передача информации о текстурах и звуках. В Second Life используется прогрессивная системы, позволяющая пользователям применять тысячи крупных текстур и огромное количество звуковых источников, а потом задавать необходимый уровень детализации. Игрок может приблизить участок и увидеть царапины на металле или зайти в джунгли, полные различных звуков. Игра также плавно передает информацию о движущихся объектах в очень сжатом виде, таким образом игрока окружает множество движущихся предметов. Игровая картина, когда происходит массовое действие, например сражение может быть осуществлена только за счет симуляции процесса сервером и высокой степени сжатия, - таким образом игроки могут видет сотни быстроперемещающихся объектов.

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

Это может повлечь за собой дюжины разных потоков информации примерно от девяти серверов. Чтобы сделать эту систему настолько надежной, насколько это возможно, мы решили построить сетевой код именно на UDP, чтобы избежать проблем с TCP, возникающих при накоплении задерживающихся команд. Это потребовало постройки нашей собственной надежной системы, но привело к интересному открытию на ранней стадии разработки, которое заключалось в том, что TCP-разработки - это совсем не то, что нужно при создании динамичной среды, как наша, потому что к тому моменту, когда пакет перепередан, информация успевает устареть. Большая часть игровой надежности строится вокруг отслеживания потерь, что позволяет корректировать информацию в новых потоках.

Предстояло еще одно решение: будут ли несколько серверов из сети параллельно передавать информацию клиенту или этим должна заниматься только одна машина. Оригинальная разработка включала в себя понятие "прокси", которые должны были вести себя подобным образом, но в итоге мы от них отказались за ненадобностью. Одним из последствий этого решения стало то, что мы передаем информацию на многие порты компьютера с установленным клиентом. Иногда это приводит к тому, что игра блокируется старыми NAT или фаерволлами, настроенными на блокировку или фильтрование UDP пакетов. Это также затрудняет передачу данных в виде HTTP.

Second Life разрабатывалась так, чтобы распространяться через всемирную сеть, так что требовался маленькая, удобная для закачки клиентская программа. Клиент или "программа-смотрелка" в настоящее время является частью 10-мегабайтной закачки, осуществив которую, пользователь оказывается в игровом мире спустя минуты после посещения сайта. Благодаря тому, что функциональность клиентской программы сводится к минимуму, а основная нагрузка, насколько это возможно, приходится на сеть серверов, клиент Second Life способен очень быстро скачиваться, устанавливаться и запускаться, а также предотвращать использование "читов" и сторонних программ, упрощающих игру. Сообщения в игре вводятся при помощи клавиатуры, симуляторы проверяют правдоподобность запроса, а также то, приходят ли запросы от той программы, от которой должны приходить. Игроки также защищены друг от друга, т.к. никакая информация не передается напрямую от одного пользовательского компьютера к другому. Клиентская программа не отвечает за симуляцию и игровую логику, она должна выполнять задачи декомпрессии и предоставления информации зрителю одновременно. Балансировка загрузки клиента (а также CPU и GPU клиентских машин) по-прежнему является областью в которой требуются доработки и совершенствования.

Разработать, а не купить?



Linden Lab создала систему симуляции и передачи данных для Second Life. Не смотря на то, что существовали продукты и платформы от других производителей, которые могли выполнять часть необходимых функций, ни один из них не соответствовал всем нашим требованиям.

Одновременно с Second Life существовал ряд похожих проектов (Butterfly, Zona), которые использовали другие схемы соединения серверов и создания и управления информацией. Мы решили, что те системы не годились для поддержания большого количества объектов, созданных игроками, и моделей поведения, которые создает наша игра, или же они не включали в себя технологий для передачи информации об объектах в режиме реального времени, позволяющих совместно создавать объекты, - а этого очень хотели наши игроки. Эти возможности, в действительности, так сильно слились со схемой управления объектами и физическим движком, что мы не видели смысла в попытках добавить их к существовавшим платформам.

Непрерывно перемещающиеся люди:



Существовавшие механизмы обработки данных не могли справиться с огромным количеством перемен, происходящих в Second Life, когда в поле зрения плавно движутся сразу множество объектов. Обычно обработка трехмерных объектах строится на возможности массового ускорения сложного статичного контента - малого числа высокополигональных объектов. Second Life, позволяя пользователям строить игровой мир, создает большое количество низкополигональных объектов, огромное количество текстур и источников освещения. В Second Life требуется иной подход к системе освещения, теней, иерархии объектов, нежели в существующих платформах.

Linden Lab использовала существующие технологии там, где это имело смысл. Графика и UI Second Life построены на OpenGL, потому что требовалась поддержка Macintosh и Linux. Для физической симуляции и отслеживания взаимодействия твердых объектов Linden Lab лицензировала Havok из за его высокой производительности и огромного количества физически активных объектов, которые требовалось симулировать. Для прогрессивного сжатия текстур был использован стандарт JPEG2000, мы выбрали Kakadu из-за скорости и стабильности. Second Life использует аудиоформат Ogg Vorbis, а для поддержки мультиплатформенных разработок недавно был осуществлен переход на FMOD аудио-библиотеку. Для отслеживания работы серверной сети используется Nagios.

Соединение



Second Life объединяет уникальный набор технологий, таким образом игрок получает абсолютно новый игровой опыт - совместное создание и использования живого объемного онлайнового мира. При использовании сети симуляторов, соединенных гранями на основе топографического строения, типичные проблемы биения на кластера исчезают, появляется возможность создать единое большое пространство. Технология плавной передачи данных позволяет создавать и изменять мир быстро, интерактивно, объединенными усилиями множества пользователей со всего мира.

Что же получают игроки? Представьте себе мир, простирающийся до горизонта, где виртуальные деревья колышутся на виртуальном ветру, который дует сквозь все "симуляторы". В отдалении вы можете увидеть удивительный большой город, дюжины летающих объектов направляются к нему и из него. Огни освещают детали зданий. Ваша подруга приезжает к вам и выходит из своего летающего автомобиля. Вы делаете ее моментальную фотографию и играючи показываете ее так, что она отражается в зеркальной поверхности ее солнечных очков (она может увидеть фото сразу же, после того, как вы его сделали). Она просит о помощи с кодом, управляющим ее автомобилем - вы кликаете по корпусу машины, открываете код, правите уровень тяги, сохраняете изменения и предлагаете девушке оценить результат. Она дает вам сережку, которую носит - драгоценный камень в ней освещает татуировку на ее щеке. Вы садитесь рядом с ней, она везет вас в небезопасный район в километрах от города. Вы достаете винтовку, которую взяли с собой, уверенные в том, что ее производитель знает свое дело. Рев мотоциклов смешивается с гулом ветра, когда вы спускаетесь в темный каньон, облетая мост, который еще не был достроен в прошлый раз, когда вы летали этой дорогой. Это то, что вы можете делать в нашей игре, во многом благодаря адаптации серверной сети.

Перевод: Ольга Яковлева mmogame.ru

Опросы

Что Вы делаете в Second Life?







Все права защищены © 2006-2009.
Копирование любых материалов запрещено.