- Про важливість мобільної платформи
- специфіка рендеру
- Особливості розробки під різні платформи
- Особливості розробки для web (HTML5)
- Плани на майбутнє
Наша взаимовыгодная связь https://banwar.org/
У березні цього року компанія Epic Games анонсувала на Games Developers Conference ряд нових фіч Unreal Engine і традиційно провела кілька доповідей. У цій статті мені хотілося б приділити особливу увагу одному з них, а саме презентації керівника команди розробки платформи Джоша Адамса (Josh Adams) « Unreal Wherever You Go », Присвяченій мобільного та веб-розробки.
Тема актуальна як ніколи, Unreal Engine 4 (UE4) щосили використовується в розробці для iOS і Android в midcore-жанрі, а багато студій розглядають UE4 для веб-розробки. Зокрема, це стосується мультиплатформових проектів.
після оголошення про безкоштовну моделі поширення UE4 навколо технології та методів її застосування в професійному середовищі виникло багато питань. Матеріал підготовлений на основі даних з презентації на Games Developers Conference і доповнений деякими авторськими міркуваннями. Сподіваюся, він зможе відповісти на більшу частину ваших питань.
Про важливість мобільної платформи
Сегмент мобільних ігор заробив третину всіх грошей в рамках ігрової індустрії в минулому році і продовжує рости. Everything goes mobile. Зростають обсяги, росте продуктивність пристроїв, з ростом продуктивності розширюються можливості. Це дозволяє використовувати переваги Unreal Engine в розробці по максимуму, як з точки зору високоякісної графіки, так і з точки зору виробництва.
UE4 дозволяє будувати розробку проектів високої якості невеликою групою розробників за рахунок потужного інструментарію (зокрема, візуального скріптованія допомогою Blueprint), відкритого вихідного коду і постійного зростання ком'юніті.
Однак цілком зрозуміло, що розробка для мобільних пристроїв і інтернету має свою унікальну специфіку. Крім очевидних питань, пов'язаних з пам'яттю, споживаної енергією і специфікою тач-інтерфейсу, мені хотілося б докладно торкнутися питання відмінності рендеру UE4 для мобільних платформ, ПК і консолей.
специфіка рендеру
- На мобільних пристроях використовується так званий форвард-рендеринг (forward render) або пряма візуалізація. Його головна перевага - це найпростіший і легко реалізується алгоритм візуалізації. Програма візуалізує тільки те, що бачить віртуальна камера в даний момент, тому прорахунок відбувається швидко і займає мінімум пам'яті.
- Проводити стрес-тести краще на ранніх стадіях розробки - при візуалізації сцен зі складними шейдерами і освітленням продуктивність може різко падати. Пост-процеси в мобільних системах також значно спрощені на увазі можливих обмежень продуктивності.
- Матеріали при цьому підтримують PBR (Physically Based Rendering) і шейдинг, для їх складання використовується той же нодів редактор. У порівнянні з Unreal Engine 3 матеріали в Unreal Engine 4 не мають спеціальної мобільної гілки. Однак при створенні матеріалів необхідно тримати в голові той факт, що GL ES2 має ряд обмежень, які потрібно враховувати при їх побудові.
- UE4 використовує багатоплатформений транслятор стандарту HLSL, який дозволяє транслювати шейдера в GLSL або Metal SL. На сьогоднішній день стандартом є OpenGL ES2, але вже доступний OpenGL ES3.1, який розширює стандарт ES2 і робить його значно цікавіше. Також існує відома проблема, пов'язана з тим, що програми, засновані на системі ES, сильно навантажують центральний процесор, але тепер у нас є Metal, який переносить основне навантаження на GPU.
В цілому, ми вкрай рекомендуємо проведення повноцінного препродакшена перед запуском повного циклу розробки. Варто також виробити розуміння, в який з основних чотирьох профайлів рендеру, наведених нижче, ви можете визначити ваш проект.
- LDR (iPhone 4) - освітлення і пост-процеси не використовуються, але при цьому зберігається повний доступ до редактора матеріалів.
- Basic (iPhone 4S) - можна використовувати статичні джерела світла і деякі пост-процеси.
- HDR (iPhone5S) - обчислення кольору і освітленості відбуваються за допомогою чисел з плаваючою точкою. Додалися тіні, якість яких прораховується в залежності від відстані до камери.
- Desktop - рендеринг з підтримкою статичного і динамічного освітлення і фізично коректного шейдинга.
Зазвичай рівень продуктивності вибирається з найбільш вразливими пристрою, який ви хочете підтримувати, але пам'ятайте про те, що завжди є місце для оптимізації і самостійного удосконалення модулів коду. Говорячи про категоризації, варто торкнутися і питання масштабування на різноманітні мобільні пристрої, для чого використовуються профілі.
У профілі пристроїв можна зберігати налаштування рендера під кожен гаджет окремо або ж під клас пристроїв з подібними параметрами. Для iOS задається профіль під кожен пристрій. Для Android профілі створюються за швидкістю обробки тайлів і / або за типом графічного процесора.
- Загальний принцип створення профілю.
- Завдання загальних параметрів рендера.
- Налаштування параметрів для всіх мобільних пристроїв.
- Додавання параметрів, характерних для всіх пристроїв кожної платформи.
- На основі базової конфігурації iOS-платформи додаються параметри для кожного iOS-пристрої.
- На основі базової конфігурації Android-платформи створюються профілі для низького, середнього і високого якості.
- Додавання параметрів для конкретного графічного процесора.
Само собою, розробка під iOS і Android мають свої особливості.
Особливості розробки під різні платформи
Говорячи про iOS, ми маємо на увазі в деякому сенсі «просту» платформу, навіть незважаючи на складності з системами Provision-сертифікатів і електронного підпису. Для більш зручної роботи з цими системами в UE 4.7 була додана можливість бачити список всіх зареєстрованих сертифікатів і підписів розробника.
Проекти для iOS можна збирати як на комп'ютерах з Mac OS, так і на Windows. Само собою, в останніх поколіннях пристроїв від Apple додана нова графічна система Metal, яка дозволяє підняти графіку на зовсім новий рівень. Говорячи про роботу з Metal, в голові варто тримати наступне:
- Використовує простіший менеджер ресурсів.
- Підтримує нову компресію текстур ASTC (Adaptive Scalable Texture Compression), яка дозволяє отримати файли текстур невеликого розміру, але з високою роздільною здатністю (вимагає процесор А8 і вище).
- Додана підтримка режиму паралельного рендеринга, яка поки ще не підтримується в Unreal Engine 4, але в найближчих версіях підтримка з'явиться.
- Має дуже гнучку систему налагодження і перевірки в Xcode: перегляд ресурсів, перекомпіляція шейдеров «на льоту», профілювання шейдеров і багато іншого. Для підтримки Metal потрібно набір предкомпіленних шейдеров, тому скомпілювати проект поки можна тільки на Mac OS.
- Все ще вимагає переходу на проміжні мови програмування для остаточного складання.
З Android все набагато складніше через проблеми фрагментації за наступними категоріями:
- CPU - ARM 32, ARM 64, x86, x64;
- GPU - Adreno, PowerVR, Tegra, Mali, які, в свою чергу, використовують різні компресії текстур: ATITC, PVRTC, DXT, ETC1, ETC2, ASTC;
- версії ОС - 2.3 → 5.1.1;
- варіанти ОС - Android, Amazon і так далі.
Це призводить до наступних проблем сумісності:
- Компіляція шейдера - один і той же шейдер може працювати з помилками чи не працювати взагалі. Виробник може випускати свою власну версію компілятора шейдера, щось міняти від версії до версії, і через це можуть відбуватися збої.
- Графічний процесор може отримувати доступ до різного об'єму пам'яті, що робить скрутним оптимізацію.
- Згладжування. Деякі пристрої підтримують тільки вісім інтерполятора, а деякі не можуть прорахувати і восьми.
- Невірні опису розширень в коді. Наприклад, система говорить, що texCubeLodEXT існує, але, за фактом, ця команда не працює.
Як же вирішити проблему сумісності?
- Позбутися від найпроблемніших типів пристроїв. Залишити 10 базових пристроїв з різними центральними і графічними процесорами. На інших пристроях перевіряти додатково. Ніколи не позбавляйтеся від застарілих пристроїв.
- Використовувати програми для автоматизації тестування (AppThwack, TestDroid і інші). У цих програмах вже занесені профілі сотень пристроїв.
- На даний момент в розробці знаходиться UE4 Readiness App - програма, що показує параметри пристрою. Додаток написано на Java і буде поширюватися через Google Play.
- Додавання групи розширень GL ES3.1 - геометричний шейдер, ASTC текстури і так далі.
Також, в якості окремого зауваження, варто пам'ятати про те, що в Unreal Engine використовується дуже тонкий Java-клієнт. Іноді виникає необхідність зміни деяких початкових кодів C ++, але найчастіше цього можна уникнути.
З точки зору розміру програми для ігор, обсяг яких перевищує 50 Мб, використовуються спеціальні файли ресурсів з розширенням .obb. Amazon вимагає упаковувати всю гру в один .apk-файл, в настройках проекту перед упаковкою можна вибрати один з цих режимів. Збірка Android-версій на MacOS стала можлива з версії 4.7, збирати білд можна, не виходячи з редактора.
Особливості розробки для web (HTML5)
Найкрутіший момент полягає в тому, що в UE4 використовуються рішення без застосування плагінів - тільки JavaScript. На поточний момент використовується транслятор Emscripten, який конвертує скомпільований код С ++ в ASM.JS. Отриманий код в браузері може працювати мінімум з 50% швидкістю від базової. Без браузера (як самостійний додаток) швидкість роботи програми залежить від JavaScript-компілятора.
Розподіл пам'яті проводиться браузером, причому виділяється відразу потрібний обсяг пам'яті. Це одна з проблем сумісності різних браузерів. Браузери для 64-бітових систем можуть спокійно запускати проекти, а ось 32-бітові іноді зазнають труднощів.
Поточний графічний стандарт для HTML5 - це WebGL, який сумісний зі стандартом OpenGL ES2. Різні браузери мають різні розширення для підтримки цього стандарту. Перевага перед мобільними системами в тому, що є можливість максимально використовувати обчислювальні потужності настільної системи.
Новий стандарт WebGL 2 буде сумісний з ES3.0. В даний момент розробка триває.
Віртуальна файлова система дозволяє значно збільшити швидкість роботи з файлами, але вимагає дуже великої кількості оперативної пам'яті. Emterpreter - це транслятор, який дозволяє переводити з коду C ++ в JavaScript і назад. Він також здатний інтерпретувати асинхронний код, як синхронний. Не потрібно предзагрузкі контенту. Підтримка цього розширення поки тільки анонсована і знаходиться в розробці.
Проекти на HTML5 працюють практично у всіх браузерах, але потрібні додаткові сесії тестування, так як різні браузери мають різні розширення і по-різному використовують пам'ять.
32-бітові браузери не можуть виділяти великий обсяг пам'яті, тому потрібно використовувати в основному 64-бітові версії. Ігри для HTML5 користуються великим попитом, і впровадження Emterpreter допоможе мінімізувати багато незручності.
Плани на майбутнє
Unreal Engine 4 продовжує активно розвиватися на мобільні та веб-платформи, вже найближчим часом вийде версія 4.8, будуть заявлені нові фічі в цьому напрямку, триває робота по підтримці Metal MRT, оптимізація, додавання нових функцій.
Якщо ви розглядаєте Unreal Engine 4 як технологію для розробки свого наступного проекту, але у вас є які-небудь технічні питання, задавайте їх тут . Якщо у вас є які-небудь питання загального характеру, ви також можете написати мені за адресою [email protected] .
Щоб написати колонку для ЦП, ознайомтеся з вимогами до опублікованими матеріалами.
Як же вирішити проблему сумісності?