2D Pixel Perfect: Как настроить проект Unity для ретро-игр в 16-битном формате

В нашем первом руководстве по 2D Pixel Perfect для ретро-игр мы показали, как настроить инструмент 2D Pixel Perfect и как создавалась 8-битная графика в те времена. В этом посте мы перенесемся в эру 16-битных технологий. С помощью Mega Cat Studios вы научитесь создавать аутентичную графику для игр в стиле Sega Genesis (или Mega Drive) и Super NES, используя настройки Unity , графические структуры и цветовые палитры.
Поднимите свой опыт разработки 2D на новый уровень и изучите встроенный набор 2D инструментов Unity .

Компания Mega Cat Studios превратила создание невероятно точных ретро-игр в настоящее искусство. Настолько, что некоторые из их игр можно приобрести в виде картриджей и запускать на ретро-консолях, таких как Sega Genesis.
Прежде чем вы погрузитесь в эту статью, рекомендуем ознакомиться с нашим предыдущим руководством по ретро-графике , где мы рассмотрели настройки 2D Pixel Perfect и способы воссоздания графики в 8-битном стиле. В Unity 2019.2 2D Pixel Perfect теперь является частью 2D рендерера, входящего в пакет Lightweight Render Pipeline (LWRP). 2D Pixel Perfect также существует в виде отдельного пакета (с тем же функционалом) для создателей контента, которые не используют LWRP. В этом руководстве мы покажем вам, как настроить проект в LWRP.
В Unity Hub нажмите «Создать», выберите «2D» , а затем дайте название своему проекту.

2. Для импорта пакета 2D Pixel Perfect щелкните меню «Окно» на панели инструментов и выберите «Диспетчер пакетов» . Во всплывающем окне выберите пакет Lightweight RP , убедившись, что у вас установлена версия 6.9.0 или выше.

3. Далее вам нужно будет настроить 2D рендерер в редакторе и создать новый ресурс конвейера. В окне «Проект» щелкните правой кнопкой мыши по представлению «Ресурсы» и выберите «Создать» > «Рендеринг» > «Облегченный конвейер рендеринга» > «Ресурс конвейера» .
4. В окне «Проект» в разделе «Ресурсы» создайте новый 2D рендерер, щелкнув правой кнопкой мыши и выбрав «Создать» > «Рендеринг» > «Облегченный конвейер рендеринга» > «2D рендерер» .

5. Выберите созданный вами ресурс конвейера. Выберите «Общие» , затем измените тип рендерера с «Прямой рендерер» на «Пользовательский» .
6. Присвойте созданному вами 2D рендереру соответствующее поле данных.

7. В настройках графики установите параметры конвейера рендеринга с поддержкой скриптов таким образом, чтобы они использовали созданный вами новый ресурс конвейера.
Теперь необходимо настроить 2D рендерер, включая 2D Pixel Perfect .
В Unity 2019.2 2D спрайты могут иметь материал «Sprite-Lit», который позволяет им реагировать на условия 2D -освещения. Если в вашем проекте не используются 2D источники света, убедитесь, что у вас есть материал, для отображения спрайтов в котором не требуются 2D источники света. В этом случае вы можете изменить материал на «Sprites-Default».

Вам необходимо добавить компонент Pixel Perfect Camera к вашей основной камере. Рекомендуем выбрать опцию «Запуск в режиме редактирования».
Разрешение консоли Sega Genesis составляет 320x224 пикселей (или сетка из 40x28 плиток размером 8x8 пикселей). Это версия NTSC. В версии для NTSC консоль Super NES имеет разрешение 256×224 (30x28 плиток по 8x8 пикселей).
Для обоих графических стилей рекомендуется использовать разрешение по высоте 224 пикселя и создавать элементы с 8 PPU (пикселями на единицу площади).

Если вам нужно освежить в памяти, что делает каждая опция в компоненте 2D Pixel Perfect Camera, ознакомьтесь с нашей предыдущей записью в блоге о ретро-играх .
В этом разделе мы рассмотрим процесс создания графики, имитирующей внешний вид различных консолей, как мы это делали в нашей статье о NES в блоге . В отличие от 8-битных проектов, здесь меньше ограничений и больше свободы в работе с цветом, но у Genesis есть и свои ограничения. Мы также считаем важным объяснить, как работает оригинальное оборудование, чтобы вы могли учесть эти ограничения в своем собственном ретро-проекте.
Переход с 8-битных на 16-битные консоли открывает больше возможностей на более совершенном оборудовании. Тем не менее, основные принципы создания великолепных иллюстраций для NES по-прежнему актуальны. Вся графика по-прежнему хранится, например, в виде плиток размером 8x8, а затем собирается в более крупные изображения, будь то спрайты или элементы фона. Вам по-прежнему придётся работать в рамках ограниченных подпалитр с общим прозрачным цветом, хотя 16-битная архитектура в некоторых аспектах предоставляет большую свободу в выборе палитр. Вероятно, вас обрадует новость о том, что 16-битные консоли, как правило, не имеют жестко заданной цветовой палитры, в отличие от своих 8-битных аналогов, а это значит, что доступная цветовая гамма значительно расширена по сравнению с NES.
Далее, Genesis может похвастаться дополнительными палитрами, содержащими 15 цветов, а также общий цвет, используемый для прозрачности спрайтов и слоев. Однако одним из недостатков при создании иллюстраций для Genesis является наличие подцветовых палитр. Подпалитры можно свободно назначать либо спрайтам, либо фоновым плиткам, но Genesis позволяет использовать одновременно только четыре подпалитры. Поэтому художникам необходимо внимательно относиться к тому, какие цвета используются в подпалитре, чтобы максимально эффективно использовать их как для спрайтов, так и для фона. В дополнительной палитре для Genesis обычно содержатся цвета, используемые как для фонов, так и для спрайтов, чтобы всё выглядело гармонично.


Для создания палитры для любой 16-битной платформы необходимо работать с индексированной палитрой. В этом случае Gimp может стать альтернативой Photoshop с открытым исходным кодом, позволяющей выполнять множество манипуляций с индексированной палитрой.
Чтобы создать индексированную палитру в Gimp, перейдите в меню Изображение > Режим > Индексированная …

Открывается окно «Преобразование индексированного цвета».

Установите максимальное количество цветов равным 15 . Можно использовать автоматические шаблоны дизеринга, но те, которые созданы вручную, обычно выглядят лучше.

Цвета изображения теперь проиндексированы. Эта информация автоматически сохраняется вместе с изображением, чтобы можно было использовать цветовой индекс. Если вам нужно изменить порядок цветов в индексе, вы можете просто щелкнуть правой кнопкой мыши по цветовой карте и выбрать «Изменить порядок цветовой карты»...

Появляется всплывающее меню, позволяющее перетаскивать цвета и располагать их в новом порядке.

Один из популярных приемов для создания большей глубины цвета — это управление палитрой вдоль заданной растровой линии, подобно тому, как это делалось при параллаксной прокрутке на NES. Genesis способен изменять выбор подпалитр для изображения вдоль заданной растровой линии. Этот трюк часто используется для создания иллюзии, что часть уровня находится под водой. Цвета «подводного мира» добавляются в совершенно отдельную подпалитру, и эта подпалитра загружается после того, как определенная растровая линия отобразится на экране.
В целом, 16-битные консоли загружают графические тайлы не так, как 8-битные консоли. 8-битные консоли загружают спрайты и фоновые изображения отдельно и большими блоками данных, чтобы избежать чрезмерного использования вычислительной мощности, в то время как 16-битные консоли обладают достаточной вычислительной мощностью для большей гибкости. Они позволяют загружать и заменять отдельные тайлы на лету, что дает возможность загружать только необходимые графические элементы в нужный момент. Это позволяет использовать более широкий спектр графических элементов на одном уровне или экране игры.
Ещё одна уникальная особенность Genesis/Mega Drive заключается в том, что во время игры в видеопамять консоли загружаются не только данные графических тайлов и палитры. Это может усложнить разработку графики для консоли, поскольку количество графических тайлов, которые могут быть загружены в память одновременно, варьируется в зависимости от того, что ещё происходит в игре. В целом, большинство игр предоставляют достаточно места для загрузки примерно 1000 тайлов, и если в игре присутствует динамический элемент, то тайлы всегда можно свободно заменять.

Хотя в видеопамять можно одновременно загрузить большее количество доступных тайлов, чаще всего эта дополнительная свобода резервируется для спрайтов, чтобы обеспечить более разнообразную анимацию и большее количество типов спрайтов на экране одновременно. Это означает, что основная философия дизайна, заключающаяся в использовании повторяющихся сегментов плиток, по-прежнему широко применяется в 16-битной графике, чтобы фон не занимал слишком много доступного пространства. Разрешение экранов NES, Genesis и SNES довольно схоже, поэтому для подобных разработок обычно используются сегменты 16x16.

В консолях Genesis/Mega Drive можно одновременно отображать на экране два фоновых слоя. Это означает, что многослойные элементы легче использовать для создания фоновых изображений. Тем не менее, это всего лишь два слоя, поэтому художнику и разработчику, возможно, придётся прибегнуть к некоторым приёмам работы с растровыми линиями, чтобы создать большую глубину в сцене. К счастью, поскольку все эти элементы можно разместить на втором слое, дизайнеры могут свободно размещать объекты переднего плана перед фоном, не нарушая иллюзию.
Наличие второго слоя также делает ненужным использование приемов с приоритетом спрайтов для создания объектов переднего плана. Вместо того чтобы постоянно менять приоритеты спрайтов на лету, теперь вы можете просто установить второй фоновый слой для отображения перед игроком, хотя более сложные операции наложения слоев могут по-прежнему требовать быстрой манипуляции приоритетами спрайтов. Вторая панель фона также имеет дополнительную панель, которую можно использовать для отображения информации на лобовом стекле (HUD). Вложенная панель будет заблокирована и никогда не будет прокручиваться.

При работе со спрайтами переход на 16-битную архитектуру предоставляет большую свободу действий. В Genesis/Mega Drive можно одновременно отображать 80 спрайтов на экране, примерно 20 из которых располагаются в одну горизонтальную строку, прежде чем прекратится отрисовка новых спрайтов. Кроме того, спрайты больше не считаются отдельными плитками размером 8x8. Genesis способен генерировать отдельные спрайты, состоящие из нескольких тайлов. Они могут быть как очень маленькими, размером в одну клетку, так и очень большими, размером 4x4 клетки. Для чего-либо большего все равно потребуется создать это из нескольких спрайтов.

Одной из определяющих особенностей графики эпохи 16-битных технологий является использование дизеринга. В те времена игры отображались на ЭЛТ-мониторах, где пиксели на экране имели тенденцию сливаться друг с другом. Художники использовали это свойство, применяя в своих работах технику дизеринга, благодаря чему, когда один пиксель плавно переходил в другой по повторяющемуся шаблону, создавалась иллюзия большего количества цветов, чем было доступно на самом деле. Несмотря на модернизацию дисплеев, сглаживание (дизеринг) до сих пор широко используется в пиксельной графике для поддержания точной эстетики.

Из двух основных 16-битных консолей Genesis/Mega Drive отображает цвета с гораздо большей контрастностью. Об этом также следует помнить при выборе подпалитр. Использование более приглушенных и тусклых тонов в конечном итоге не даст ожидаемого результата при фактической отрисовке изображения на аппаратном обеспечении. Как правило, при создании произведений искусства следует использовать высококонтрастную цветовую палитру, чтобы конечный результат соответствовал первоначальному замыслу художника.
В проектах для Super NES мы по-прежнему работаем с тайлами/сеткой размером 8x8 пикселей, поэтому работа с повторяющимися тайлами чрезвычайно полезна. В общем случае, их количество будет кратным восьми.
Первое принципиальное различие между Genesis/Mega Drive и SNES касается цветовой палитры. Как и Mega Drive, SNES не имеет жестко заданной цветовой палитры, поэтому вы можете выбирать цвета самостоятельно.
Сложность SNES заключается в том, что она использует 5-битную цветопередачу на пиксель (BPP), которая сегодня встречается нечасто. Эту проблему можно решить, используя Gimp для создания графического изображения, а затем просто преобразовать его в 32 оттенка RGB, что в итоге даст 5 цветов BPP, даже если вы не сохранили изображение в таком формате. Это позволяет точно отображать цвета изображения на консоли.

В Gimp эту опцию можно найти в меню «Цвета» > «Постеризация…». Появится всплывающее окно, где вы можете установить уровень постеризации на 32, чтобы создать 5 цветов, совместимых с форматом BPP.

Следующее существенное различие между двумя системами касается разрешения экрана. Поскольку SNES является преемником NES, обе системы имеют схожее разрешение экрана. Внутреннее разрешение SNES составляет 256x224. Это позволяет отображать любые обрабатываемые изображения в безопасных зонах большинства ЭЛТ-телевизоров, поэтому ни одна часть изображения не будет обрезана. Это разрешение никогда не меняется, поэтому именно этот размер изображения художнику придется использовать в качестве эталона.

В этом разделе представлен краткий справочник по возможностям различных режимов экрана.

Наиболее существенное различие между системами заключается в том, что SNES может отображать фоновую графику в семи различных режимах экрана. В некоторых режимах экрана SNES способна отображать на экране одновременно до 256 цветов в рамках одной подпалитры. Вот некоторые из самых популярных режимов экрана:
- Режим 1: Это один из наиболее часто используемых режимов экрана на SNES. Она демонстрирует наилучшие средние показатели производительности консоли. В режиме 1 можно использовать три фоновых слоя, два из которых имеют собственную 16-цветную подпалитру, а последний слой — 4-цветную подпалитру.
- Режим 3: Этот режим обычно используется для больших статических изображений, таких как заставки и экраны с сюжетом. На изображении присутствуют две фоновые плоскости. Первый вариант использует полную 256-цветную подпалитру, а второй допускает 16-цветную подпалитру.
- Режим 7: Это была одна из главных особенностей SNES. Режим 7, продемонстрированный в большинстве рекламных материалов консоли, впервые позволил домашней консоли применять преобразования к изображению в реальном времени, обеспечивая масштабирование, вращение, растягивание и искажение в плоскости фона. Это использовалось для создания псевдо-3D эффектов, которые можно увидеть во многих гоночных и авиасимуляторах для SNES.
В режиме 7 обработка единственной фоновой плоскости значительно отличается от всех остальных режимов экрана, что позволяет использовать эти функции. Во-первых, в распоряжении имеется только одна 256-цветная фоновая плоскость, а это значит, что все спрайты должны использовать цвета, общие с подпалитрой фоновой плоскости. Далее, вместо работы со стандартным размером экрана SNES, в режиме 7 используется фоновая плоскость размером 1024x1024 пикселей. Затем размер и настройка изображения подгоняются под экран в соответствии с пожеланиями дизайнера.

После сложности режимов фонового экрана правила для спрайтов относительно просты. На SNES, как и на Mega Drive, есть несколько различных режимов отображения спрайтов, но с жёстким ограничением: на протяжении всей игры можно использовать только два разных режима.
Размеры спрайтов могут быть 8x8, 16x16, 32x32 или 64x64. Более того, дизайнеры должны выбирать из заранее определенного списка комбинаций размеров спрайтов. В играх для SNES могут использоваться следующие комбинации:
- 8x8, 16x16
- 8x8, 32x32
- 8x8, 64x64
- 16x16, 32x32
- 16x16, 64x64
- 32x32, 64x64
Эти размеры становятся «фиксированными» после их выбора, и все спрайты в игре должны им соответствовать. SNES способна отображать 32 спрайта на одной горизонтальной растровой строке одновременно, но имеет внушительное ограничение в 128 спрайтов на то, что может отображаться на экране одновременно. Всё, что выходит за эти рамки, на экране отображаться не будет.

Спрайты имеют восемь подпалитр по 16 цветов каждая. Как и во всех ретро-консолях, первый цвет любой подпалитры — это общий цвет, используемый для прозрачности. По сравнению с другими представленными консолями, большее количество подпалитр дает вам большую свободу при выборе цветов для спрайтов. Просто нужно помнить, что существует жесткое ограничение в 256 цветов.
Надеемся, вам понравилась эта статья о том, как создавать ретро-игры в 8- и 16-битном формате с помощью 2D Pixel Perfect в последней версии Unity.
Мы еще не закончили работу над функцией 2D Pixel Perfect , поскольку она будет проверена для использования в Unity 2019.3 и также будет лучше совместима с Cinemachine 2D.
Расскажите нам о результатах работы над вашим собственным проектом 2D Pixel Perfect и не забудьте посетить 2D форум , чтобы пообщаться с сообществом Unity и командой разработчиков 2D .
