Разрешение для фонов игр и всего 2D арт-контента

Как выбрать разрешение для фонов игр, персонажей и окружения в Unity?

Частый вопрос: «Я делаю 2D-игру в Unity для PC и мобильных: какое разрешение выбрать для своего контента?», «Какое разрешение для фонов игр, бэкграундов (backgrounds) выбрать?», «Как выбрать разрешения для разных элементов игры?». На эти вопросы нет простого ответа, который подошёл бы во всех случаях. Попробуем определиться, как лучше поступить в ваших проектах.

Договоримся о понятиях. Реальность такова, работая с Unity, мы часто в речи не переводим названия понятий, функций и т. д., а скорее транскрибируем. Например, редко можно услышать как Tilemap называют «Карта плиток», зато чаще «Тайлмап». При первом упоминании, я буду стараться приводить оба варианта, а дальше то, которое употребляется чаще.

В последние время, Unity работает над большим количеством фич, которые помогают создавать 2D игры в Unity: атласы спрайтов (Sprite atlassing), 2D физика, карты плиток (Tilemap) для прямоугольных, шестиугольных и изометрических миров, основанные на кривых формы спрайтов (Sprite shape), 2D анимация, и т. д.

Пиксели не главное!

Unity не выражает размеры объектов в пикселях и это может запутать художников, которые создают контент для 2D игр. Насколько большими изображения должны быть? Какое разрешение для фонов игр выбрать? Как обычно в разработке игр, ответ на этот вопрос «Зависит от…». Давайте рассмотрим несколько моментов, которые помогут выбрать решение.

2D бэкграунд в Unity

Если ты пиксель-арт художник, должен предупредить: большинство советов не в полной мере применимы к тебе. В пиксель-арт графике используют очень низкое разрешение. Обычно нужно, чтобы оно было кратно 2х, 4х, 8х, или больше, чем оригинальное разрешение. Это означает, что один пиксель оригинального изображения отображается как квадрат 2×2, 4×4 или 8×8 реальных пикселей на экране.

Так что в целом, в пиксель-арте, тебе не нужно слишком сильно беспокоиться о разрешении экрана. Стоит сосредоточиться на арте, и ощущениях, которые вы хотите передать (old-school, NES-эра, новый пиксель-арт высокого разрешения и т. д.) и затем масштабировать его в несколько раз.

У Unity есть решение Pixel Perfect в виде пакета. Оно поставляется как простой компонент, который добавляется на камеру и будет делать тяжелую работу за тебя. Можешь быть уверен, что графика останется четкой и выровненной по сетке, с маленькими аккуратными пикселями на любом экране.

Масштабирование вниз, а не вверх

Прежде чем мы углубимся в рассмотрение вопроса о выборе разрешения, стоит помнить, что когда ты создаёшь контент, лучше выбрать более высокое разрешение, даже если на самом деле это не нужно для изображений, которые пойдут в игру. Ты всегда сможешь уменьшить разрешение графики, но не сможешь увеличить разрешение без потери качества. Например, когда выбираешь разрешение для фонов игр, начинать с высоты меньше 2160px точно не стоит.

Случаи бывают разные: возможно, тебе придется распечатать несколько артов для игры, или понадобится увеличить размер элементов на экране, или ты захочешь создать «HD-версию» своей игры для 4К мониторов позже.

По этим причинам, когда начинаешь работать над контентом, надо обдумать использование рабочих файлов, которые будут с большим разрешением, чем действительно нужно. При экспорте можно уменьшить их перед добавлением в Unity, или использовать параметры импорта, чтобы уменьшить их размер, перед импортом в проект.

Импорт изображений в Unity
Параметры импорта для любого изображения позволяют вам увеличить максимальное разрешение

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

Совет: Unity предлагает способ объединить несколько спрайтов в один через атласы спрайтов (Sprite Atlases). Помимо того, что это способ сэкономить на размере текстур, атласы также предлагают единый способ управления максимальным размером, вместо того, чтобы устанавливать его индивидуально для каждого спрайта в проекте.

Определение разрешения для вашей платформы. Разрешение для фонов игр должно быть больше!

При определении размера контента, важно учитывать платформы и устройства, на которых выйдет игра. У людей очень разнообразные устройства и экраны, и они увидят игру в разных разрешениях и соотношениях сторон.

4K и Full HD

На момент написания этого поста, подавляющее большинство пользователей имеют 2 разрешения. В основном «Full HD» (1920×1080 пикселей, часто называют 1080p) и много 1280×720 (часто называют 720р). Небольшой процент людей также имеют мониторы 4K (3840×2160) или мониторы Retina на компьютерах Mac. Современный 15-и дюймовый MacBook Pro будет иметь максимальное разрешение 3360×2100. Это очень много пикселей!

Для телефонов тоже разброс огромный. Некоторые старые устройства могут быть менее 720 пикселей по вертикали, а некоторые будут достигать и 4K.

Retina (товарный знак Apple) и другие современные экраны с высокими разрешениями, в то время как их реальное аппаратное разрешение очень высокое (например 4К), могут симулировать пониженное разрешение (как правило, половину, например, Full HD, а не 4К), но потом, при рендере изображений и текста, используют вдвое больше пикселей, поэтому изображение отображается довольно чётко.

Примечание: DPI (точек на дюйм) или PPI (точек на дюйм, или пикселей на дюйм) это разные названия (взаимозаменяемы) от разных производителей. Означают они одно и то же: сколько пикселей содержит линия длинной в дюйм на экране. Традиционно, экраны имеют 72 DPI. Сегодня высокий DPI экранов, как правило, 144 точек на дюйм, но можно найти телефоны, которые могут похвастаться 400-ми точками на дюйм или более, они содержат много пикселей на относительно маленьких экранах.

Обдуманный выбор

Для этих экранов, у тебя есть два варианта. Первый: стремиться к тому, чтобы предложить впечатление от 4K в полном объеме. Недостатком является то, что производимый 4К-совместимый контент потребует много лишней работы. В этом случае, надо не забыть похвалиться в своих маркетинговых материалах :). Владельцы консолей, типа PS4 Pro и Xbox One X, которые совместимы с 4K, будут рады, что игра использует их оборудование на полную мощность.

Второй вариант: можно спроектировать игру для Full HD. Пользователи с более высоким разрешением мониторов не получат преимуществ от разрешения их экранов. Они будут видеть игру в Full HD качестве. Это не супер, но хорошее решение, если ты также пытаешься сохранить размер игры под контролем.

Суть такова: нужно выбрать максимальное разрешение, которого хочешь достичь (на основе текущих потребностей рынка, желания и сил), и установить его в качестве целевого для всего проекта.

Измерения на сцене в Unity

Unity измеряет расстояния и размеры просто в юнитах (unit), а не в пикселях. Хорошая практика, когда соответствие такое: 1 юнит (unit) в Unity = 1 метр. Например, модель среднего человека между 1,7 и 1,8 юнита в таком случае. Это не обязательно, но это будет гарантировать, что игры с физикой (3D и 2D) будут вести себя корректно. Потому что физика в Unity (по умолчанию) настроена использовать 1 юнит на метр. Также это будет хорошо для 3D освещения. Световые параметры рассчитаны на это и останутся верными реальности.

В 2D это правило размеров является менее важным, но хорошая практика, если используешь физику в своём проекте. Если используется тайлмап, неплохо сохранить масштаб 1 плитка (tile) = 1 юнит (unit), просто для простоты.

Камера в Unity

Теперь, когда мы закончили с единицами, перейдём к камере. Unity 2D камеры (ортогональные или, если хотите, ортографические, т. к. в Unity это просто камеры без перспективы) имеют параметр называемый «Размер» (Size), который определяет, сколько юнитов (будет удвоено!) поместится по вертикальной оси этой камеры.

Размер камеры в Unity
Параметр «Размер» (Size) в инспекторе ортогональной камеры

С размером 5, мы получим вьюпорт (видимое пользователем поле), который имеет 10 юнитов Unity по вертикали. Горизонтальная ось будет просто следовать за вертикальной. Так как мы не знаем, каким соотношением сторон будет обладать экран пользователя. Но, это легко рассчитать: на обычном ПК или телефоне, с соотношением сторон 16:9, можно так: 10 (Вертикальный размер) x 16 / 9 = 17.7 (Горизонтальный размер)

Так мы знаем, что с этими параметрами, наш вьюпорт примерно 17.7 на 10 юнитов. На Маках (которые обычно 16:10) это будет 16 к 10 (т. е. меньше видно по горизонтали). На 16:9 телефоне, если держать его вертикально (так он становится 9:16), та же камера будет показывать только площадь 5.6 на 10 юнитов.

Примечание: мы не будем разбирать всё о соотношении сторон тут. Если ты стремишься сделать игру для разных пропорций, нужно не только думать о графике, но также нужно сделать много геймплейных ухищрений, чтобы убедиться, что игра не играется по-разному на устройствах с различными соотношениями сторон. Например, игрок в любой игре, которая прокручивается по горизонтали будет иметь преимущество на горизонтальных пропорциях, потому что игрок сможет увидеть больше опасностей впереди. Иногда сделать игру, которая прекрасно работает на горизонтальных экранах нельзя. Игроки получат рамки, черные полосы для заполнения пространства, которое нельзя использовать во время игры.

Пикселей на юнит

При импорте графики, спрайтов, Unity отображает параметр, называемый пикселей на юнит (PPU). Теперь, когда мы знаем о юнитах, всё должно быть очень понятно. Он выражает сколько пикселей вашего спрайта помещается в юните на сцене Unity, когда игровой объект в масштабе 1,1,1.

Скажем для примера, у меня есть спрайт камня 218 на 175 пикселей, и я задаю пикселей на юнит в 100, когда я перетащу спрайт на сцену, мой объект по умолчанию будет 2.18 на 1.75 юнитов, занимающих приблизительно одну пятую из 10 юнитов по вертикальной оси экрана.

Юниты (units) контента и на экране камеры Unity
С этими параметрами, мы можем уместить более чем пять камней по вертикали вьюпорта

Возьмём Full HD экран, как нашe тестовое разрешение. 1080 пикселей по вертикали, а камень менее пятой части экрана. Можно увидеть, как полупрозрачные камни помещаются больше, чем 5 раз на изображении выше. Мы используем 175 точек исходного изображения для отображения более чем 200 пикселей. Это означает, что мы будем иметь немного размытые камни.

Чтобы исправить это, у нас есть несколько вариантов: мы можем уменьшить масштаб камня в половину, сделать размер кадра камеры больше, до 10,8 (это приведёт к приближению) или мы можем изменить значение PPU спрайта до 108 (это произведёт тот же эффект, уменьшит камень на экране). Во всех трех случаях, если мы хотим, чтобы камень быть четким, он должен быть меньше.

Как определяется размер камеры и значение PPU? Для размера камеры, если мы импортируем нашу графику как 100 PPU, нам потребуется 10.8 камеры, потому что 10.8×100 равна 1080. Это позволяет нам охватывать всю высоту экрана. И наоборот, для расчета правильной PPU, где размер камеры остается на 5, если мы хотим охватить Full HD экран с 10 юнитами Unity по вертикали, то у нас 1080/10 = 108. Это количество пикселей, которые мы должны запихивать в один блок, если не меняем размер камеры.

Правила можно нарушать

Когда ты работаешь над игрой, опасно смешивать все настройки. Это может закончится тем, что ты запутаешься, и какая-то графика будет размыта. Хорошо придерживаться рекомендации: одна настройка PPU для большинства контента в проекте, и типовой размер камеры.

После, можно нарушить эти правила. Возможно в процессе тестирования выяснится, что твои фоновые изображения велики. Разрешение для фонов игр сложно подобрать сразу. Оставить тот же PPU не получится, иначе в итоге получатся огромные текстуры. В этом случае нормально уменьшить PPU для таких элементов и импортировать уменьшенные спрайты.

Предпросмотр игры

Unity приятно удивляет тем, что разрешение, которое видно через предварительный просмотр «Game View» довольно точное превью целевой платформы. Большинство вариантов, которые нужны, будут в верхнем выпадающем меню и слайдере рядом с ним.

Пропорции в предпросмотре Unity

Пропорции определяют соотношения между шириной и высотой, но они будут использовать текущее разрешение вашего вьюпорта «Game View», который, в свою очередь, зависит от вашего экрана. И они хороши для настройки пользовательского интерфейса и объектов на экране, но не для тестирования контента.

Пока отмечен флажок на чекбоксе Low Resolution Aspect Ratio будет имитироваться низкий DPI. Если отключишь его, он будет отображать стандартное разрешение и DPI твоего экрана.

Настройка разрешения и соотношения сторон в Unity

Подстройка под разрешения, сильная сторона Unity для отображения окна точного размера.Можно расширить «Game View» или развернуть его на полный экран. При этом ползунок «Масштаб» (Scale) может подогнать высокие разрешения под твоё окно «Game View». Ещё можно добавить собственные разрешения и соотношение сторон.

Совет: надо помнить, что до конца основываться на том, что видно во вьюпорте не стоит. Всегда делая сборку игры, надо обязательно проверять на целевом устройстве или экране.

Итоги

Понятно, разрешение изображений, размер камеры и размеры экрана на котором будет игра, всё тесно связано. Не бывает одного размера пикселей или PPU, которые подходят для всех случаев. Исследуй целевую платформу, определяй нужное разрешение. Делай контент в более высоком разрешении в любом случае, это пригодится позже! А по необходимости, уменьшай перед импортом в Unity.

И последняя мысль. Возможно, что в твоей игре некоторые объекты иногда находятся в пониженном разрешении. Особенно, если много мелких деталей на экране. Может быть, прозрачные перекрытия, какой-то туман, дождь или пост-обработки поверх. Поиграй в игру на нормальной скорости и обрати внимание, видно ли это и будут ли какие-то проблемы со слегка размытыми изображениями? Если не видно разницы, то, возможно не стоит тратить дополнительные силы, дисковое пространство и лишние вычислительные мощности на визуализацию твоего контента в высоком разрешении.

Рисовать уровень целиком сложно не зависимо от того какое разрешение для фонов игр ты выбрал. Всегда есть возможность попробовать создать 2D-уровень основанный на картах тайлов (плиток). Система «Tilemap» отличный выбор для начинающих.