Version: 5.3 (switch to 5.4b)
Практическое руководство по оптимизации для мобильных
Приёмы в коде и игровом процессе

Графические приёмы

На что способны мобильные устройства? Как нужно планировать свою игру? Если игра тормозит, и профайлер показывает что проблема в рендеринге, как узнать что именно нужно изменить? Как сделать так, чтобы ваша игра выглядела лучше и оставалась быстрой? Эта страница посвящена общему, не техническому изложению методов. Если вы ищете что-то специфическое, см. Оптимизации визуализации.

Что можно реализовывать на текущих пользовательских устройствах:

  • Лайтмаппинг статической геометрии. Остерегайтесь:
  • Использования множества альфа-тест шейдеров
  • Бампмаппинга, особенно используя встроенные шейдеры.
  • Большого количества полигонов
  • Анимированные персонажи, даже с причудливыми шейдерами. Остерегайтесь:
  • Огромные толпы или высокополигональные персонажи
  • 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 - замечательный пример того, что может быть сделано на текущем мобильном программном обеспечении. Более конкретно, это хороший пример того, что не следует делать и как обойти ограничения. Тем более что небольшую часть игры сделали общедоступной здесь сообщение в блоге.

Вот основные вещи, которые реализует 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 - отличный пример этого.
  • Бампмаппинг, особенно с встроенными шейдерами
  • Используйте его осторожно, только на важных персонажах или объектах. Не обязательно делать бампмаппинг для всех объектов на экране.
  • Вместо использования карт рельефа запекайте больше деталей в диффузные текстуры. Эффект в Лиге Легенд - отличный пример того, как это может успешно использоваться в индустрии.

Но как я смогу это сделать?

См. Оптимизации рендеринга

Практическое руководство по оптимизации для мобильных
Приёмы в коде и игровом процессе