На що здатні мобільні пристрої? Як потрібно планувати свою гру? Якщо гра гальмує, і профайлер показує що проблема в рендеринге, як дізнатися що саме потрібно змінити? Як зробити так, щоб ваша гра виглядала краще і залишалася швидкою? Ця сторінка присвячена загальним, що не технічного викладу методів. Якщо ви шукаєте щось специфічне, см. Оптимізації візуалізації.
Що можна реалізовувати на поточних користувальницьких пристроях:
- Лайтмаппінг статичної геометрії. Остерігайтеся:
- Використання безлічі альфа-тест шейдеров
- Бампмаппінга, особливо використовуючи вбудовані шейдери.
- Великої кількості полігонів
- Анімовані персонажі, навіть з химерними шейдерами. Остерігайтеся:
- Величезні натовпи або високополігональні персонажі
- 2D гри зі спрайтами. Остерігайтеся:
- Overdraw, or, lots of layers drawn on top of each other.
- Ефекти частинок. Остерігайтеся:
- Високої щільності великих часток (безліч частинок отрісовиваємих поверх один одного, це інша ситуація овердрафту).
- Безглуздий кількість частинок або коллайдеров частинок.
- Фізика. Остерігайтеся:
- Меш коллайдеров.
- Безлічі активних тел.
Що НЕ ПОТРІБНО реалізовувати на поточних користувальницьких пристроях:
- Графічні ефекти в повному екрані (такі як світіння і глибина різкості).
- Динамічне попіксельне освітлення (безліч джерел світла з позначкою Important НЕ запечені в карти освітлення)
- Для динамічного освітлення кожен отрісовиваємих об'єкт буде вимагати додатковий час, це швидко сповільнить гру.
- Тіні в реальному часі на всіх
- Unity has support for real time shadows on mobile platforms, but their use must be very judicious, and likely limited to higher-end devices.
Приклади - як зроблені першокласні мобільні ігри
Shadowgun - чудовий приклад того, що може бути зроблено на поточному мобільному програмному забезпеченні. Більш конкретно, це хороший приклад того, що не слід робити і як обійти обмеження. Тим більше що невелику частину гри зробили загальнодоступною тут повідомлення в блозі.
Ось основні речі, які реалізує Shadowgun для збереження продуктивності:
- Динамічне освітлення майже не використовується.
- Замість реальних тіней використовуються blob тіні і карти освітлення.
- на персонажах lightprobes, а не реальне джерело світла.
- Спалахи пострілів додані в lightprobe через скрипт.
- Для обчислення BRDF на персонажах використовується тільки динамічне попіксельне освітлення, довільний напрямок світла.
- Карти рельєфу (bumpmapping) використовуються рідко.
- Справжній бампмаппінг використовується тільки на персонажах.
- Якнайбільше контрасту і деталей випікається в дифузних текстурних картах. Випікається інформація про висвітлення з карт рельєфу.
- Хорошим прикладом є їх текстура статуї, або їх стіни, які блищать якщо дивитися на них з правого боку. Для їх візуалізації не використовуються бампмапи (карти рельєфу), видимість дзеркальності створюється шляхом запікання в текстуру. Щоб надати цим моделям блискучий вигляд, карти освітлення скомбіновані із дзеркальною підсвічуванням, заснованої на висвітленні вершин.
- Якщо хочете навчиться створювати подібні текстури, перейдіть на сторінку Оптимізації рендеринга
- Уникають щільні частинки.
- Замість щільних частинок використовується UV-скролінг текстур.
- Уникає ефекту туману.
- Їх промені бога смоделлени вручну.
- Поодинокі площині, які з'являються і зникають використовується для досягнення кінематографічного ефекту туману, створюють його видимість.
- Це швидше, тому що площин кілька і вони далеко один від одного (це має на увазі що кожен піксель туман не обчислюється кожним шейдером).
- Світіння уникає.
- Щоб створити видимість світіння на певних об'єктах, використовуються змішані спрайт - площині.
Це демо створено для того, щоб показати на що здатна Unity на high-end android пристроях.
- Не використовується динамічне освітлення.
- Тільки карти освітлення.
- Карти рельєфу використовуються
- На цеглинах карти рельєфу, висвітлені спрямованими картами освітлення. Це в повній мірі буде видно на high-end пристроях.
- Відображення в реальному часі обмежена.
- Вони розміщували відображають в реальному часі поверхні обережно, окремо і в віддалених один від одного областях, тому вони не працювали більше одного одночасно. Оточення, яке повинно було бути двічі відрендерене, могло легко бути оброблено функцією occlusion culling.
Підсумок - Що це означає для вашої гри
Чим більше ви будете приділяти уваги і краще розуміти обмеження мобільних пристроїв, тим краще буде виглядати ваша гра, і тим краще буде продуктивність. Якщо ви хочете зробити гру високого класу для мобільних, ви отримаєте чималу користь від розуміння того, як будується графіка в Unity і будете здатні написати свої шейдери. Якщо ж ви хочете використовувати вже готові шейдери з ShadowGun, вони доступні тут.
Чи не імітуйте! Запікайте!
Немає сумнівів що ігри намагаються слідувати законам природи. Рух параболічного снаряда і колір кожного блискучого пікселя написаним за формулами, що імітує спостереження в реальному світі. Але наукова симуляція - тільки одна частина гри, є ще інша - малювання. На мобільному маркеті ви не зможете конкурувати з фізично точно відтвореної візуалізацією; апаратна частина не дозволяє цього зробити. Якщо ви занадто захопитеся в імітації реального світу, ваша гра може бути необмеженою, сірої та залагованной.
Малюйте свої полігони і змішуйте фарби як художник.
Запікання карт рельєфу в Shadowgun відмінний приклад цього. Дзеркальне освітлення там вже в текстурі, людське око не помічає того, що вони насправді не збігаються з напрямом світла, по текстурі це просто контрастні деталі, повністю сфальсифіковані, але, в кінцевому підсумку виглядають чудово. Це поширені "обманки", які використовуються в багатьох успішних іграх. Порівняйте шолом в перший скріншот з Halo, до релізу з цим шоломом релізний скріншот. Створюється видимість того, що виступи броні відображаються в шоломі, але насправді це відображення запечене в текстуру шолома. У Лізі Легенд (League of Legends), є невеликий ефект. створює видимість пиксельного освітлення, але насправді там змішана площину з текстурою, яка можливо створена в момент запису знімка екрана, піксельний світло, сяючий на землі.
Що добре працює:
- Карти освітлення статичної геометрії
- Динамічне освітлення і не змішування великих динамічних елементів оточення. Виберіть або одне, або інше.
- Lightprobes для рухомих об'єктів
- Поточне мобільне обладнання ігнорує деякі джерела динамічного світла і не може робити тіні. Lightprobes - витончене рішення для складних ігрових світів зі статичним освітленням.
- Спеціалізовані шейдери, висококонтрастні текстури
- Шейдери в ShadowGun мінімізують обчислення кожного пікселя і використовують складні, високоякісні текстури. Див. Оптимізації рендеринга для того, щоб дізнатися як зробити добре виглядають текстури навіть з простим шейдером.
- мультяшна графіка
- Хто сказав що ваша гра повинна виглядати як на фото? Якщо ви покладете освітлення і атмосферу на художника текстур, а не на движок, вам навіть не доведеться турбуватися про оптимізацію візуалізації.
Що не спрацює:
- Світіння і інші ефекти постобробки
- Коли це можливо, такі ефекти досягаються змішаними квадами, Shadowgun - відмінний приклад цього.
- Бампмаппінг, особливо з вбудованими шейдерами
- Використовуйте його обережно, тільки на важливих персонажів або об'єктах. Не обов'язково робити бампмаппінг для всіх об'єктів на екрані.
- Замість використання карт рельєфу запікайте більше деталей в дифузні текстури. Ефект в Лізі Легенд - відмінний приклад того, як це може успішно використовуватися в індустрії.
Але як я зможу це зробити?
Практичний посібник з оптимізації для мобільних