Perfect Pixel: Пиксель в пиксель в 2D играх.
Поиск

Perfect Pixel: Пиксель в пиксель в 2D играх.

В этой небольшой статье я расскажу новичкам, как правильно настроить ортогональную камеру в Unity, чтобы спрайты вашей 2D игры отображались правильно.

Проблема?

Практически любой начинающий, как и я, разработчик на Unity при создании 2D игры, в особенности, пиксель-арт игры, сталкивается с проблемой отображения спрайтов на экране: смещаются пиксели, дергаются анимации, неровные «лесенки».

Затем разработчик начинает методом тыка пытаться настроить камеру, чтобы пиксели отображались как положено, но как правило, ничего не выходит.

На изображении слева камера откалибрована, а на изображении справа — нет. Особое внимание стоит обратить на диагонали в прямоугольниках.

Настраиваем камеру

Для начала нужно определить, в чем разница между перспективной (Perspective) и ортогональной (Orthographic) камерой. 

Сразу скажу, что мы работать будем с ортогональной, поскольку перспективная используется в 3D играх, т.к. с такой камерой размер объекта будет зависеть от его дальности от камеры. В 2D играх это не нужно, поэтому будем использовать ортогональную. В ортогональной камере дальность от камеры определяет лишь наложение объекта среди других. По аналогии могу привести слои в Photoshop или Flash. Чем ближе объект к камере - тем больше он объектов перекроет, при этом, не изменив свой размер. 


После выбора камеры появится дополнительное свойство - Size, ортогональный размер камеры.

Что такое ортогональный размер камеры? 

Размер ортогональной камеры определяет размер зоны видимости, определяет количество юнитов (а можно сказать - метров) на высоту экрана. 
Как рассчитать размер: Orthographic Camera Size = ((Screen Height) / 2) /  Pixel Per Unit
Orthographic Camera Size - размер ортографической камеры
Screen Height - высота экрана в пикселях
Pixel Per Unit  - количество пикселей в одном игровом метре. 


К примеру, для разрешения экрана 1280*720 и размера спрайта в метрах - 1, размер камеры будет 240. 

Размер спрайта

Поскольку Unity работает в метрической системе счисления, было введено новое свойство - PPU. 
В Unity по умолчанию PPU равен 100. 
Я использую, как правило число, кратное восьми. К примеру, 32 или 48. 


Лично мне нравятся следующие комбинации, т.к. они наиболее правильно отображают пиксели:

Screen Height PPU Camera Size
720 32 11.25
1080 48 11.25
1440 64 11.25

Камеру настроили, а что дальше?

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

Для спрайта:
1. Отключаем мипмаппинг
2. Не используем никакой компрессии
А для рендера:
1. Выключаем фильтрации
2. Выключаем сглаживание. 

Как же это реализовать?

А вот тут уже за нас постарался Paul Tham и залил все это дело сюда с демо-сценой на Bitbucket
Для скачивания рекомендуется SourceTree.
Источники: blogs.unity3d.com