Unreal Engine — ігровий рушій, який розробляється та підтримується компанією Epic Games.

Перша гра, створена на цьому рушії — Unreal, з'явилася в 1998 році. Відтоді різні версії цього ігрового рушія використали у більш ніж сотні ігор, серед яких: Deus Ex, Lineage II, Thief: Deadly Shadows, Postal 2, серія ігор Brothers in Arms, серія ігор Splinter Cell, Tom Clancy's Rainbow Six, а також у відомих ігрових серіях Unreal та Unreal Tournament від самої Epic Games. Пристосований насамперед для шутерів від першої особи, рушій використовувався і для створення ігор інших жанрів.

Написаний мовою програмування C++, рушій дає змогу створювати ігри для більшості операційних систем і платформ таких як Microsoft Windows, Linux, Mac OS і Mac OS X, і консолей: Xbox, Xbox 360, PlayStation 2, PlayStation Portable, PlayStation 3, Wii, Dreamcast і Nintendo GameCube. У грудні 2009 Марк Рейн продемонстрував як працює рушій Unreal Engine 3 на iPod Touch і iPhone 3GS. А у березні 2010 робота рушія була продемонстрована на комунікаторі Palm Pre, що базується на мобільній платформі webOS.

Для спрощення портування, рушій використовує модульну систему залежних компонентів: підтримує різні системи рендерингу (Direct3D, OpenGL, Pixomatic; раніше підтримувалися Glide API, S3 Metal, PowerVR SGL), відтворення звуку (EAX, OpenAL, DirectSound3D, раніше підтримувалася A3D), засоби голосового відтворення тексту, розпізнавання мовлення (тільки для Xbox 360, PlayStation 3, Nintendo Wii та Microsoft Windows , також планувалося для Linux і Mac), модулі для роботи з мережею й підтримання різних пристроїв вводу.

Для багатокористувацького режиму гри підтримуються технології Windows Live, Xbox Live і GameSpy, що дає можливість під'єднати до 64 гравців (клієнтів) одночасноUnreal Technology Overview  — Unreal Engine 3. Попри те, що офіційно засоби розробки не містять у собі підтримки великої кількості клієнтів на одному сервері, рушій використовувався для створення MMORPG-ігор.

Основна термінологія

Усі елементи ігрового рушія представлені у вигляді об'єктів, що мають набір характеристик і клас, який визначає доступні функції. Так само, будь-який клас є «дочірнім» класом об'єкта. Серед основних класів і об'єктів можна виділити такі:

Актор (actor) — базовий клас, що містить усі об'єкти, які стосуються ігрового процесу й мають просторові координати.

Пішак (pawn) — фізична модель гравця або об'єкта, керованого штучним інтелектом. Назва походить від  — той, ким маніпулюють (pawn можна перевести також як пішак, тому такий об'єкт без якої-небудь моделі виглядає, як пішак). Метод керування описаний спеціальним об'єктом, що називається контролером. Контролер штучного інтелекту описує лише загальну поведінку пішака під час ігрового процесу, а такі параметри як «здоров'я» (кількість пошкоджень, після яких пішак перестає функціонувати) або, наприклад, відстань, на якій пішак звертає увагу на звуки, задаються для кожного об'єкта окремо.

Світ, рівень (world, game level) — об'єкт, що характеризує загальні властивості «простору», наприклад, силу тяжіння й туман, у якому розташовуються всі актори. Також може містити в собі параметри ігрового процесу, як, наприклад, ігровий режим, для якого призначений рівень. Для роботи з простими та, як правило, нерухомими елементами ігрового простору (наприклад, стіни) використовується бінарна розбивка простору — увесь простір ділиться на «заповнене» й «порожнє». У «порожній» частині простору розташовуються всі об'єкти, а також лише в ній може перебувати «точка спостереження» під час рендерингу сцени. Можливість повного або часткового поміщення об'єктів у «заповнену» частину простору не виключається, однак може призвести до неправильної обробки таких об'єктів (наприклад, розрахунки фізичної взаємодії) або некоректного рендеру у випадку поміщення туди «точки спостереження» (наприклад, ефект «залу дзеркал»). Усі пішаки, що потрапляють у «заповнену» частину простору, відразу «гинуть». Поверхня (surface) є основним елементом бінарного дерева простору. Ці елементи створюються на грані перетину між «заповненою» й «порожньою» частинами простору. Група елементів бінарного дерева простору називається нодом (node, ). Цей термін, як правило, вживається в контексті node count — кількість нодів на екрані або в ігровому просторі взагалі. Кількість нодів, одночасно видимих на екрані, впливає на продуктивність під час промальовування сцени. Якщо якийсь нод не потрапляє на екран або повністю перекривається іншими нодами, він не обраховується — це допомагає підвищити продуктивність, особливо в замкнених просторах. Розбивка всього простору на групи нодів називається зонуваннямЗонування  — Unreal Wiki . Для цього іноді використовуються портали — невидимі поверхні, які служать для того щоби вручну розділити великий нод на два меншіНе слід плутати ноди Unreal Engine із ключовими точками (power nodes) з ігрових режимів Onslaught і Warfare в іграх серії Unreal TournamentУ версії рушія Unreal Engine 3 ввели підтримку аддитивної геометрії, що дозволило відмовитися від зонування. Крім порталів використовуються антипорталиОптимізація рівнів за допомогою антипорталів  — Unreal Developer Network , які обмежують зони рендерингу.

Опис «заповнених» і «порожніх» частин простору виконується завдяки набору замкнених тривимірних об'єктів, складених із непересічних поверхонь — брашів (brush, ). Цей принцип побудови простору називається конструктивною суцільною геометрією. Геометрія може бути «адитивною» (увесь простір початково «порожній») і «попередньо прорахованою» (початково заповнений матерією простір, пререндерених, ). Браші діляться на три типи: Суцільні (solid) — повноцінно беруть участь у бінарній розбивці простору. Адитивні (additive) — «заповнюють» бінарний простір. Віднімальні (subtractive) — «вирізають» об'єми в просторі. Напівсуцільні (semi-solid) — не впливають напряму на бінарне дерево простору, однак впливають на його фізичну модель. Можуть тільки «заповнювати» простір. Слугують для створення «невидимих» перешкод, а також зниження числа полігонів і нодівSemisolid  — Unreal Wiki . Порожні (non-solid) — тільки створюють поверхні, не впливають на бінарне дерево простору. Використовуються переважно для створення об'ємів (volume) — частина простору, яка має властивості, відмінні від властивостей ігрового світу. Об'єми мають пріоритет. Властивості об'єму з великим пріоритетом застосовуються до акторів, що перебувають у ньому. Ігровий світ завжди має мінімальний пріоритет. За допомогою об'ємів можна змінити гравітацію, в'язкість, туман тощо. Об'єми, починаючи з версії рушія Unreal Engine 2, використовуються для створення води (але не водної поверхні).

Версії рушія

Unreal Engine 1 Дебютувавши в 1998 році зі грою Unreal, Unreal Engine 1 сполучав в одному рушієві графічний рушій, фізичний рушій, штучний інтелект, керування файловою і мережевою системами та готове середовище розробки для ігор UnrealEd. З огляду на рівень продуктивності більшості комп'ютерів того часу, розробники дещо спростили деякі елементи рушія: систему виявлення зіткнень, мережевий код, код контролера для гравця .

Деякі технології рушія Unreal Engine були революційно новими, наприклад використання Dynamic scene graph (DSG). Ця технологія надавала змогу працювати низці ефектів для накладення на поверхні: Частково або повністю дзеркальні поверхні. Технологія «варпінгу» (warp) — можливість під час промальовування змінювати зображення однієї поверхні проєкцією зображення паралельною їй поверхнею. Попри те, що низка об'єктів могла безперешкодно переходити через варп-зони (наприклад, пущена гравцем ракета), була присутня велика кількість обмежень на роботу таких зонWarpzoneinfo — Beyondunreal Wiki . Ця технологія виглядала в грі як портали (через які можна було стріляти та проходити, але вони не пропускали звуки), що суттєво випередили свій час. Дизайнери гри додавали до таких порталів чудовий динамічний ефект переливчастої та світної поверхні, у результаті чого портали були однієї з помітних особливостей Unreal 1. Скайбокс (Skybox) — проєктування на поверхні рендеру з іншої точки (яка зазвичай в невеличкому «боксі» () з накладеною текстурою неба, звідси й назва Skybox). Простіше кажучи, відображення не лицьової грані полігонів, а зворотної, із заздалегідь накладеною текстурою «неба» на об'єкт. У грі взагалі досить широко використовувався метод масштабування текстур таким способом, що призводило до досить реалістичних (і найголовніше — динамічних, на відміну від ігор попередніх поколінь) картинок навколишнього середовища. Для порівняння, в Quake3 також було динамічне небо, але на відміну від Unreal, там воно абсолютно не виглядало фотореалістичним (маючи, крім того, помилку в декомпресії алгоритму S3TC, що призвела до появи градієнтів). Unreal була однією з перших ігор, що широко використовували мультитекстурування, що надавало змогу (при правильному розміщенні джерел світла й орієнтації відносно пререндерених текстур) досягти ефекту тривимірності поверхонь (хоча справжніх технологій Bump mapping у той час не було ще в жодній грі).

Особливо добре в рушія вийшли неперевершені гало навколо джерел світла, які плавно (а не миттєво) загасали, бувши перекритими краями стін у міру руху гравця; лава й деякі текстури калюж води, у які падали краплі (що виглядають надзвичайно живими й динамічними завдяки використанню процедурних текстур); і фотореалістичне небо. Загалом, гра мала своєрідну графіку, що відрізняє її від інших ігор (тому, що «епоха подібності» ігор одна на одну почалася після її появи).

Спочатку рушій був випущений із підтриманням для двох платформ: IBM PC та Macintosh. Завдяки модульній системі рушія була заявлена можливість портування рушія на приставки «нового покоління» того часу й пізніше був успішно використаний на таких платформах як GameCube, PlayStation 2 і Xbox. Також підтримувалася незалежність мережевого коду від платформи клієнта, тобто користувачі Mac OS могли грати в багатокористувацькому режимі Unreal з користувачами Microsoft Windows.

У грі Wheel Of Time рушій Unreal 1 був удосконалений додаванням деталізації текстур при наближенні до них, що забрало один із недоліків графіки — низькодетальні «замилені» поверхні (тому, що гра розроблялася в розрахунку на прискорювачі 3Dfx, що мають усього 4 MB текстурної пам'яті, і часто використовувався метод масштабування, описаний вище).

Unreal Engine 1.5 У 1999 році вийшла покращена версія рушія Unreal, призначена для тогочасних комп'ютерів і консолей Dreamcast і PlayStation 2. Були внесені значні доповнення — підтримання лицьової анімації, максимальна роздільна здатність текстур збільшена до 1024x1024, розширювана система «часток», технологія S3TC. Також була інтегрована друга версія редактора UnrealEd. Ця версія рушія використовується в онлайн-шутері Unreal Tournament, і в аркаді Гаррі Поттер і Філософський камінь.

Через кілька років група незалежних розробників UTPG звернулася до Epic Games за доступом до вихідних кодів виконуваних файлів Unreal Tournament, щоби продовжити підтримування гри. Epic Games прийняли пропозицію і якийсь час команда розробників випускала неофіційні патчі для гриUTPG  — Working to keep Unreal Tournament Alive!.

Unreal Engine 2 Друга версія Unreal Engine побачила світ у 2002 році з появою Unreal Tournament 2003. У ній були практично повністю переписані ядро й механізм рендерингу, а також інтегрована нова версія редактора UnrealEd 3. Крім цього, рушій використовував фізичну підсистему KarmaUnreal Technology — Past Versions  — Unreal Engine 2. Інші частини рушія були також поліпшені або змінені для кращої сумісності з PlayStation 2, GameCube і Xbox.

З'явилися такі технології: Рідка поверхня (fluid surface) — плаский об'єкт, що складається з великої кількості полігонів, що імітує поверхню рідини. Такий об'єкт можна помістити на межі з об'ємом води й він буде спотворюватися під дією минаючих через нього об'єктів (наприклад гравця, що пірнає). Листя (foliage) — генеровані на льоту об'єкти, які декорують ландшафт (наприклад, трава).