Unreal Engine — игровой движок, разрабатываемый и поддерживаемый компанией Epic Games. Первой игрой на этом движке был шутер от первого лица Unreal, выпущенный в 1998 году. Хотя движок первоначально был предназначен для разработки шутеров от первого лица, его последующие версии успешно применялись в играх самых различных жанров, в том числе стелс-играх, файтингах, массовых многопользовательских ролевых онлайн-играх и многих других (см. также список).
В прошлом движок распространялся на условиях оплаты ежемесячной подписки; с 2015 года Unreal Engine бесплатен, но разработчики использующих его приложений обязаны перечислять 5 % роялти от общемирового дохода с некоторыми условиями.
Технические характеристики Написанный на языке C++, движок позволяет создавать игры для большинства операционных систем и платформ: Microsoft Windows, Linux, Mac OS (Mac OS X); консолей Xbox, Xbox 360, Xbox One, PlayStation 2, PlayStation 3, PlayStation 4, PlayStation 5, PSP, PlayStation Vita, Wii, Wii U, Dreamcast, GameCube и др., а также на различных портативных устройствах, например, устройствах Apple (iPad, iPhone), управляемых системой iOS и прочих. (Впервые работа с iOS была представлена в 2009 году, в 2010 году продемонстрирована работа движка на устройстве с системой webOS).
Для упрощения портирования движок использует модульную систему зависимых компонентов; поддерживает различные системы отрисовки (Direct3D/DirectX, OpenGL, Pixomatic; в ранних версиях: Glide, S3 Metal, PowerVR SGL), воспроизведения звука (EAX, OpenAL, DirectSound; ранее: A3D), средства голосового воспроизведения текста, распознавание речи, модули для работы с сетью и поддержки различных устройств ввода.
Для игры по сети поддерживаются технологии Windows Live, Xbox Live, GameSpy и прочие, включая до 64 игроков (клиентов) одновременно. Таким образом, движок адаптировали и для применения в играх жанра MMORPG (один из примеров: Lineage II).
Иерархия объектов Все элементы игрового движка представлены в виде объектов, имеющих набор характеристик, и класса, который определяет доступные характеристики. В свою очередь, любой класс является «дочерним» классом object. Среди основных классов и объектов можно выделить следующие:
Актёр (actor) (жаргонное выражение, принятое в среде 3D-моделлеров, разработчиков, заменяющее выражение «действующий объект» или «субъект» — являющееся переводом — тот, кто действует — ) — родительский класс, содержащий все объекты, которые имеют отношение к игровому процессу и имеют пространственные координаты.
Пешка (pawn) — физическая модель игрока или объекта, управляемого искусственным интеллектом. Название происходит от — тот, кем манипулируют (или пешка, поэтому такой объект без какой-либо модели выглядит как пешка). Метод управления описан специальным объектом, такой объект называется контроллером. Контроллер искусственного интеллекта описывает лишь общее поведение пешки во время игрового процесса, а такие параметры как «здоровье» (количество повреждений, после которых пешка перестаёт функционировать) или, например, расстояние, на котором пешка обращает внимание на звуки, задаются для каждого объекта отдельно.
Мир, уровень (world, game level) — объект, характеризующий общие свойства «пространства», например, силу тяжести и туман, в котором располагаются все «актёры». Также может содержать в себе параметры игрового процесса, как, например, игровой режим, для которого предназначен уровень. Для работы с простыми и, как правило, неподвижными элементами игрового пространства (например, стены) используется двоичное разбиение пространства — всё пространство делится на «заполненное» и «пустое». В «пустой» части пространства располагаются все объекты, а также только в ней может находиться «точка наблюдения» при отрисовке сцены. Возможность полного или частичного помещения объектов в «заполненную» часть пространства не исключается, однако может привести к неправильной обработке таких объектов (например, расчёт физического взаимодействия) или неправильной отрисовки в случае помещения туда «точки наблюдения» (например, эффект «зала зеркал»). Все пешки, попадающие в «заполненную» часть пространства, сразу «погибают».
Поверхность (surface) является основным элементом двоичного дерева пространства. Эти элементы создаются на грани пересечения между «заполненной» и «пустой» частями пространства. Группа элементов двоичного дерева пространства называется нодом (node, ). Этот термин, как правило, употребляется в контексте node count — количество нодов на экране или в игровом пространстве вообще. Количество нодов, одновременно видимых на экране, влияет на производительность при прорисовке сцены. Если какой-то нод не попадает на экран или перекрывается целиком другими нодами, он не обсчитывается — это служит для повышения производительности, особенно в закрытых пространствах. Разбиение всего пространства на группы нодов называется зонированием.
Для этого иногда используются порталы — невидимые поверхности, которые служат для того, чтобы вручную разделить крупный нод на два меньших (в версии движка Unreal Engine 3 ввели поддержку аддитивной геометрии, что позволило отказаться от зонирования). Кроме порталов, используются антипорталы.
Описание «заполненных» и «пустых» частей пространства выполняется с помощью набора замкнутых трёхмерных объектов, составленных из непересекающихся поверхностей — брашей (brush, ). Этот принцип построения пространства называется конструктивной сплошной геометрией. Геометрия может быть «аддитивной» (всё пространство изначально «пустое») и «вычитательной» (изначально заполненное материей пространство).
Браши делятся на три типа:
сплошные (solid) — полноценно участвуют в двоичном разбиении пространства. аддитивные (additive) — «заполняют» двоичное пространство. вычитательные (substractive) — «вырезают» объёмы в пространстве. полусплошные (semi-solid) — не влияют напрямую на двоичное дерево пространства, однако влияют на её физическую модель. Могут только «заполнять» пространство. Служат для создания «невидимых» препятствий, а также снижения числа полигонов и нодов. пустые (non-solid) — только создают поверхности, не влияют на двоичное дерево пространства. Используются преимущественно для создания объёмов (volume) — часть пространства, которая обладает свойствами, отличными от свойств игрового мира. Объёмы имеют приоритет, свойства объёма с большим приоритетом применяются к находящимся в нём актёрам. Игровой мир всегда имеет минимальный приоритет. При помощи объёмов можно изменить гравитацию, вязкость, туман и тому подобное. Объёмы, начиная с версии движка Unreal Engine 2, используются для создания воды (но не водной поверхности).
Средства разработки
Движок комплектуется инструментарием (SDK), в том числе и редактором уровней UnrealEd.
Версии Unreal Engine и модификации
Unreal Engine 1 В 1998 году Unreal Engine 1 был одним из первых игровых движков подобной универсальности; он совмещал в себе графический движок, физический движок, искусственный интеллект, управление файловой и сетевой системами и готовую среду разработки для игр — UnrealEd. Учитывая уровень производительности большинства компьютеров того времени, разработчики несколько упростили некоторые элементы движка: систему обнаружения столкновений, сетевой код, код контроллера для игрока.
Некоторые технологии движка Unreal Engine были революционно новыми для того времени: например использование динамического графа сцены. Эта технология позволяла добавить ряд эффектов для наложения на поверхности:
Частично или полностью зеркальные поверхности. Технология варпинга (warp) — возможность при прорисовке заменять изображение одной поверхности проекцией изображения на другую, ей параллельную поверхность. Несмотря на то, что ряд объектов мог беспрепятственно переходить через варп-зоны (например, пущенная игроком ракета), присутствовало большое число ограничений на работу таких зон. Данная технология выглядела в игре как порталы (через которые можно было стрелять и проходить, но они не пропускали звуки), существенно опередившие своё время. Дизайнеры игры добавляли к таким порталам великолепный динамический эффект переливающейся и светящейся поверхности, в результате чего порталы были одной из заметных особенностей Unreal 1. Скайбокс (Skybox) — проецирование на поверхности отрисовки с другой точки (которая обычно помещалась в небольшую «коробку» с наложенной текстурой неба, отсюда и название Skybox). Таким образом, отображение не лицевой грани полигонов, а обратной, с заранее наложенной текстурой «неба» на объект. В игре широко использовался приём масштабирования текстур таким способом, что приводило к реалистичным видам окружающей среды.
Движок стал одним из первых, в котором появился эффект гало вокруг источников света, которые плавно затухали, будучи перекрыты краями стен по мере движения игрока; лава и некоторые текстуры луж воды, в которые падали капли, сделаны динамическими благодаря использованию не шейдеров, как в поздних играх, а процедурных текстур; и фотореалистичное анимированное небо.
Первоначально движок был выпущен с поддержкой двух платформ: Windows и Macintosh. Благодаря модульной системе движка была заявлена возможность портирования движка на приставки «нового поколения» того времени и позже был успешно использован на таких платформах как GameCube, PlayStation 2 и Xbox. Также поддерживалась независимость сетевого кода от платформы клиента — пользователи Mac OS могли играть в многопользовательском режиме Unreal с пользователями Windows.
Unreal Engine 1.5 В 1999 году вышла улучшенная версия движка Unreal, предназначенная для современных (на то время) компьютеров и консолей Dreamcast и PlayStation 2, часто называемая Unreal Engine 1.5. Были внесены значительные дополнения в числе которых: поддержка лицевой анимации для персонажей; максимальное разрешение текстур увеличено до 1024×1024, расширяемая система «частиц», технология S3TC. Также была интегрирована вторая версия редактора UnrealEd.
Эта версия движка используется в многопользовательском шутере Unreal Tournament, и в приключенческих играх Harry Potter and the Philosopher’s Stone и Brother Bear.
Через несколько лет группа независимых разработчиков UTPG обратилась к Epic Games за доступом к исходным кодам исполняемых файлов Unreal Tournament, чтобы продолжить поддержку игры. Epic Games приняли предложение и некоторое время команда разработчиков выпускала неофициальные патчи для игры.
Unreal Engine 2
Вторая версия Unreal Engine увидела свет в 2002 году с появлением Unreal Tournament 2003, America’s Army: Operations и Unreal Championship. В ней были практически полностью переписаны ядро и механизм рендеринга, а также интегрирована новая (третья) версия редактора UnrealEd. Помимо этого, в него была интегрирована физическая подсистема Karma, поддерживающая физику тряпичной куклы и другие новшества, что позволили добиться более реалистичного поведения персонажей и взаимодействия с окружающим миром. Другие части движка были также улучшены или изменены для лучшей совместимости с PlayStation 2, GameCube и Xbox.
Появились следующие технологии:
Жидкая поверхность (fluid surface) — плоский объект, состоящий из большого числа полигонов, имитирующий поверхность жидкости. Такой объект можно поместить на границу с объёмом воды и он будет искажаться под действием проходящих через него объектов (например, ныряющего игрока). Листва (foliage) — генерируемые на лету объекты, которые декорируют ландшафт (например, трава). Поддержка VoIP — возможность переговоров через микрофон с другими игроками во время игры. Распознавание речи — перевод голоса в текст и обработка как команды (например, возможность отдавать ботам команды голосом). Эта технология использовала Microsoft Speech API и поэтому поддерживалась только в 32-битной версии Windows.