Демонстрация возможностей движка Unreal Engine 4

Особенности разработки MMO на Unreal Engine

Меня зовут Максим, я руководитель проекта Will To Live Online, который 5 апреля вышел в раннем доступе в Steam. Если вкратце, это классическая MMORPG в сеттинге постапа и с видом от первого лица.

Сразу хочу отметить, что у нас небольшая команда, и это первый наш игровой проект — всему приходилось учиться на личном опыте. Поэтому мы изрядно «понаступали на грабли», но вынесли множество уроков. Так что, мне кажется, нам есть, чем поделиться. Эта статья носит рекомендательный характер для тех, кто желает заняться разработкой MMORPG на движке Unreal Engine и, возможно, позволит не совершить некоторых ошибок еще на этапе геймдизайна.

Обдумывание проекта «на берегу»

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

Выбор движка

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

И тогда наш выбор пал на Unreal Engine 4 (тогда еще в версии 4.9). Движок оказался очень простым для понимания (по крайней мере того, что нужно для начала работы) и очень гибким в плане возможностей. Помимо прочего, UE4 предлагал «из коробки» множество готовых решений, подходящих к шутерам, что нам и требовалось.

Также отдельно стоит отметить возможности Unreal Engine в плане профилирования и отладки работы сервера и клиента игры. Они поистине отличные! Так, например, с помощью специального приложения Unreal Frontend можно осуществлять профилирование практически всего (кроме, разве что, GPU — для этого есть другая утилита в редакторе), что происходит в игре (как на серверной стороне, так и на клиенте) с очень наглядным отображением информации.

Большой и бесшовный мир? Забудьте!

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

Как известно, выделенный сервер на UE4 «из коробки» имеет ограничение в 64 игрока. Согласитесь, для MMO не подходит. Безусловно, эту настройку можно поменять в файле конфигурации движка. Однако просто увеличение данной настройки ничего не дает. Нужно провести еще огромное количество работы по настройке и оптимизации сетевой части. Конечно, не стоит сбрасывать со счетов опыт Epic Games с Fornite, для которой в движок было введено множество оптимизаций и улучшений. В версии движка 4.19 произведено множество доработок, которые позволяют настроить сервер на одновременную игру 100+ игроков, но все равно многое зависит именно от вас. Так что, если планируете создавать MMORPG, будьте готовы к усердной работе по оптимизации сети и нагрузки на сервер.

Следующей проблемой, с которой вы обязательно столкнетесь, будет ограничение на количество монстров (ИИ). Стоит добавить пару сотен монстров в локацию — и процессорного времени перестанет хватать на поддержание необходимых fps на сервере (обычно — 20-30 кадров в секунду). Проблема кроется в физике. Так как ИИ для перемещения по локации так или иначе использует физическую сцену, количество запросов к ней является корневым фактором производительности.

Путей решения данной проблемы нам видится два:

  1. Максимально сократить количество запросов к физической сцене за один кадр
  2. Максимально упростить физическую сцену, чтобы обращение к ней занимало как можно меньше времени.

Чтобы минимизировать обращение к физической сцене, можно применять различные механизмы, которые будут заставлять монстров, находящися далеко от всех игроков, «засыпать», переводить их в неактивные режимы перемещения или вовсе удалять за ненадобностью. Таким образом, в тех местах, где в данный момент нет игроков — нет и монстров, либо они проявляют минимальную необходимую для геймплея активность. В своей игре мы активно применяем данный подход, что позволило в некоторых случаях сократить до 50% использования физической сцены без каких-либо заметных для игрока последствий, что также однозначно хорошо сказалось на общей производительности сервера.

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

Для настройки физических свойств объектов в движке имеется ряд возможностей, в том числе — ручное создание коллизии и автоматическое генерирование на основе сетки объекта. Советов здесь можно привести тоже два:

  1. Старайтесь по возможности избегать комплексной коллизии на объектах, используйте настройку движка по умолчанию (ProjectDefault). Это позволит в большинстве случаев использовать упрощенную коллизию, но при необходимости делать запрос на комплексную (когда это действительно нужно).
  2. Если вам необходимо использовать комплексную коллизию для объекта — используйте ее по LOD’у данного объекта.

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

Не создавайте огромных локаций

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

Гораздо продуктивнее разбить мир на некоторое количество локаций поменьше, хорошо продумав переходы между ними. Это позволит существенно сэкономить ресурсы как на стороне сервера, так и на стороне клиента.

Безусловно, такой подход требует от разработчиков создания дополнительного серверного решения — т.н. «Менеджера зон», который будет управлять переходами игроков между локациями. Идея его проста: каждая небольшая локация работает на собственном выделенном сервере (dedicated server), а перемещение между ними осуществляется через «Менеджер зон», который координирует перемещение клиентов: проверяет возможность перемещения, выдает данные для подключения к нужному выделенному серверу, возможно, даже осуществляет автоматическую балансировку нагрузки и т.д.

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

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

Совет геймдизайнеру

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

История игровых движков №5 — Unreal Engine

Unreal Engine — один из самых популярных и старых игровых движков, ставший известным благодаря возможности создания на нем сцен, схожих по качеству с кинематографическими. Он работает на большинстве современных игровых платформ — это консоли последнего поколения, ПК, устройства на iOS и Android, а так же macOS, Linux и html5. К тому же заявлена поддержка и недавно вышедшей новой портативной консоли — Nintendo Switch. Такая кроссплатформенность возможна благодаря поддержке всех современных стандартов как рендеринга (API DirectX, OpenGL, а так же на устройствах iOS — PowerVR), так и воспроизведения звука (OpenAl, EAX, DirectSound3D). Как и другие движки, UE комплектуется собственным редактором — UnrealEd, однако по удобству тот заметно проигрывает Unity3D и заточен скорее под создание профессиональных, а не любительских игр и анимаций.

Unreal Engine 1

Первая версия движка вышла почти 20 лет назад — в 1998 году, и уже тогда оказалась универсальнее топового движка того времени — id Tech 3: она включала в себя графический движок, физический движок, искусственный интеллект, управление файловой и сетевой системами и готовую среду разработки игр — UnrealEd. Движок работал на macOS, Windows, PlayStation 2 и Xbox, причем сетевая составляющая была кроссплатформенной — игроки с Windows могли играть на одних серверах с игроками на macOS.

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

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

Скайбокс (Skybox) — проецирование на поверхности отрисовки с другой точки (которая обычно помещалась в небольшую «коробку» с наложенной текстурой неба, отсюда и название Skybox). Таким образом, отображение не лицевой грани полигонов, а обратной, с заранее наложенной текстурой «неба» на объект. В движке широко использовался приём масштабирования текстур таким способом, что приводило к реалистичным видам окружающей среды — к примеру, неба в игре Unreal. Так же движок позволял использовать мультитекстурирование, позволявшее (при правильной расстановке источников света и ориентации относительно пререндеренных текстур) добиться эффекта трёхмерности поверхностей, хотя до появления движков с поддержкой истинной тесселяции еще оставалось почти 10 лет (первый движок с ее поддержкой, CryEngine 2, вышел в 2007 году).

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

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

В 1999 году вышло крупное обновление — Unreal Engine 1.5. Движок обзавелся лицевой анимации для персонажей, максимальное разрешение текстур было увеличено до 1024×1024, введена расширяемая система частиц и технология S3TC (S3 Texture Compression — метод сжатия текстур DirectX с потерями). Также была интегрирована вторая версия редактора UnrealEd. Пожалуй, самой красивой игрой на Unreal Engine 1.5 была игр-демонстрация возможностей движка — Unreal Tournament:

Первая версия движка больше не доступна для лицензирования, однако исходный код, необходимый для сборки собственных исполняемых файлов, существует в свободном доступе, но не для коммерческого использования — они распространяются по лицензии «Unreal Retail» — то есть только для персонального использования. Всего на UE 1 вышло больше двух десятков игр, среди них — всем известные Unreal Tournament, Deus Ex и Duke Nukem Forever.

Unreal Engine 2

Вторая версия Unreal Engine увидела свет в 2002 году с появлением Unreal Tournament 2003. В ней были практически полностью переписаны ядро и механизм рендеринга, а также интегрирована третья версия редактора UnrealEd. Физический движок теперь от сторонних издателей — Karma. Он поддерживает физику тряпичной куклы: обработку действия на тело не как на один объект, а как на скелет с привязкой к нему частей тела. У каждого сустава персонажа появились ограничители вращения, эти ограничители бывают двух видов: шарнирные и линейные. Линейные могут вращаться только вокруг одной оси, а шарнирные по всем трём.

Основные особенности движка:

    Жидкая поверхность (fluid surface) — плоский объект, состоящий из большого числа полигонов, имитирующий поверхность жидкости. Такой объект можно поместить на границу с объёмом воды и он будет искажаться под действием проходящих через него объектов (например, ныряющего игрока).

Поддержка VoIP — возможность переговоров через микрофон с другими игроками во время игры.

Распознавание речи — перевод голоса в текст и обработка как команды (например, возможность отдавать ботам команды голосом). Эта технология использовала Microsoft Speech API и поэтому поддерживалась только в 32-битной версии Windows.

Транспортные средства — неподвижные (стационарные оборонительные установки), составленные из нескольких объектов (Karma vehicle), с использованием скелетной структуры и транспортные средства, прикрепляемые к другим транспортным средствам (например, пулемёт на башне танка). Некоторые транспортные средства могут действовать без «пилота», управляемые собственным искусственным интеллектом.

EAX 3.0 — движок трёхмерного звука, разработанный Creative Labs.

Отказ от варп-зон из-за перехода на движок Karma и 32-битной графики.

Unreal Engine 2.5

Как и версия 1.5, 2.5 нацелена в основном на оптимизацию движка под новые API — появилась поддержка DirectX 9, OpenGL 2 и Pixomatic (специальная версия рендера, умеющая рендерить изображения в основном силами процессора, то есть она подходила для компьютеров с мощным процессором и слабой видеокартой). Так же добавлена поддержка 64-битных операционных систем Windows (NT 4 и в дальнейшем XP) и Linux. Наибольшее возможное разрешение текстур поднято до 4096×4096 пикселов, добавлена полноценная поддержка юникода (16-бит), что позволило создавать полностью локализованные игры на азиатских языках (до этого часть фраз приходилось оставлять на английском).

Самой красивой игрой на UE 2.5 можно назвать Killing Floor — игра вышла в 2009 году, уже после выхода UE 3:

Unreal Engine 2X и Runtime

Это специальные версии движка — в первом случае для Xbox: были введены новые визуальные эффекты, такие как depth of field (глубина зрения), динамическая гамма-коррекция, bloom и различные вариации blur. Формат текстур был изменён для более реалистичного отображения теней в высоком разрешении, добавлена поддержка голосового чата, сервиса Xbox Live, а также функция разделения экрана. Был использован только в Unreal Championship 2. Во втором случае — урезанная бесплатная для некоммерческого использования версия движка, имевшая лишь базовый набор моделей и текстур. Полная же версия была платной — за лицензию на одну игру Epic Games просили от 350000 долларов.

Unreal Engine 3

Новая версия была сделана с упором на многоядерные процессоры — как в ПК, так и в новых (в то время) консолях PlayStation 3 и Xbox 360: теперь движок использует два параллельных потока данных — основной поток (отвечающий преимущественно за игровой процесс) и поток рендеринга. Кроме двух главных потоков могут быть вызваны второстепенные, которые выполняют разовые задачи. Так же движок обзавелся поддержкой API DirectX 10 и OpenGL 3 (от Pixomatic отказались как из-за его старости, так и из-за того, что даже самые мощные процессоры перестали справляться с графическими задачами). Появилась поддержка множества других платформ — начиная с Wii, iOS и Android и заканчивая такой экзотикой, как Windows RT.

Основные особенности нового движка:

  • Поддержка HDR, попиксельного освещения, динамических теней, Pixel Shader 4.0, геометрических шейдеров. Сам графический конвейер был переведён под управление шейдеров.
  • Физический движок сменился на PhysX, что позволило сделать эффекты тккани и улучшить эффекты жидкости. Однако аппаратное ускорение поддерживается только на Windows, поэтому эффекты на других платформах были урезаны.
  • За анимацию лиц персонажей отвечает интегрированный анимационный движок FaceFX, позволивший улучшить детальность прорисовки и реалистичность мимики.
  • Добавлена поддержка технологии SpeedTree, позволившая значительно снизить нагрузку на систему при отрисовке растительности (деревьев и травы).

Unreal Engine 3.5

Как и в предыдущих версиях х.5, тут была произведена, в основном, оптимизация — движок научился работать с DirectX 11, а так же был добавлен фильтр пост-обработки Ambient occlusion, улучшающий тени и освещения. Было увеличено число обрабатываемых персонажей в кадре. Переработана на новом уровне технология динамической водной поверхности, физика мягких тел и разрушаемое окружение также значительно улучшены.

На движке вышло больше 100 проектов, среди которых линейки Bioshock, Borderlands, Mass Effect, X-com, Mortal Combat, Battlefront и многие другие. Среди мобильных игр стоит отдельно выделить линейку Infinity Blade, до сих пор являющуюся эталоном графики под мобильные платформы:

Самой красивой игрой под ПК на UE 3 стоит назвать, пожалуй, Outlast 2 (хотя она еще в разработке):

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

Unreal Engine 4

Это самая новая и постоянно развивающаяся версия движка. Она поддерживает консоли текущего поколения (PlayStation 4 и Xbox One), API DirectX 12, а так же с недавних пор — и Nintendo Switch. Добавили достаточно много нового:

  • Поддержка очков виртуальной реальности SteamVR, HTC Vive и PlayStation 4 Morpheus (для последнего есть поддержка 120 Гц).
  • Новая система рендеринга травы и других объектов на земле вокруг игрока, которые создаются путём получения многочисленных копий одного или нескольких объектов — это сильно снижает нагрузку на видеокарту, при этом практически не портя картину (мало кто заметит, что два камня в нескольких метрах друг от друга одинаковы).
  • Иерархическая система LOD’ов (уровней детализации), которая позволяет рендерить объект на большом расстоянии с худшим качеством и меньшим числом запросов к рендереру.
  • Процедурный генератор растительности, который позволяет генерировать как огромные, так и маленькие области заполненные деревьями, кустами и травой так, как будто бы они здесь реально росли.
  • Возможность воспроизведения и перемотки последних нескольких минут геймплея в сетевых играх. .
  • Новый, фотореалистичный Depth of Field (глубина резкости), который теперь похож на боке, получаемый при съемке на камеру.
  • Отражения для полупрозрачных поверхностей (в том числе и отражения эффектов типа взрывов).
  • Автоматическое создание Convex Collision Meshes (выпуклая геометрия, на основе которой просчитываются физические столкновения).
  • Инструменты для локализации игр (в том числе — перевод фраз на текстурах).
  • Paper2D — встроенный движок для создания спрайтов.

Движок является абсолютно бесплатным для некоммерческого использования, однако если вы хотите создавать на нем игры, то вам придется платить 19 долларов в месяц за лицензию, а так же отчислять 5% от заработка создателям движка — Epic Games. Из-за таких более чем приемлемых условий инди-проектов на UE 4 много, да и крупные студии не отстают — в разработке сейчас находится больше 30 проектов, в том числе Borderlands 3, Tekken 7 и Dead Island 2. Самой красивой из вышедших игр можно назвать Gears of War 4:

Будущее движка

Об UE 5 неизвестно ничего, да и это понятно — 4ая версия вышла всего пару лет назад и активно разрабатывается, поэтому ждать крупного релиза ближайшие пару лет не стоит.

Источники:
http://www.iguides.ru/main/gadgets/other_vendors/istoriya_igrovykh_dvizhkov_5_unreal_engine/
http://pvpru.com/board/showthread.php?t=443351

Ссылка на основную публикацию