DemianIzvolgar

DemianIzvolgar

Пикабушник
поставил 175 плюсов и 9 минусов
Награды:
5 лет на Пикабу
187 рейтинг 1 подписчик 6 подписок 3 поста 1 в горячем

Попытка совместить 2D и 3D. И нет, получилось не совсем традиционное 2.5D

Приветствую.


В очередной раз игрался во второй фоллаут. И возникла мысль: а что если еще и прыгать, стрелять в любое место и приседать? Добавить вертикальных перемещений: лазить по лестницам, ходить по этажам, спускаться в канализации. Это есть в фолыче, но в виде отдельных уровней. Подумалось мне, что средствами 2D это будет трудно реализовать. Значит 3D. Но я не особо дружу с 3D – создавать модели в каком-нибудь 3D-max, экспортировать в unity, делать UV развертки. В общем, мне не хотелось заниматься 3D. И подумалось, а нельзя ли использовать объемную физику и при этом использовать 2D спрайты? Нечто подобное есть в fallout shelter, zero city, hustle castle.


Начал работать в этом направлении. Решено было остановиться на изометрии. Для физики использовал объемные примитивные коллайдеры, rigidBody, физические материалы. Для графики, соответственно, спрайты. Причём можно было бы использовать плоскость (quad) и на нее натягивать картинку, но это был бы полноценный 3D объект. Я же применял именно sprite 2D, потому что спрайты быстрее обрабатываются.


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


Самый существенный недостаток, на мой взгляд, это переменная глубина спрайтов. То есть, спрайт, который ближе к камере загораживает дальний. Что логично и в 2D мире полностью оправдано. Но в данном случае не всегда приводит к желаемым результатам. Потому что эта самая глубина в 3D мире переменчивая. Пусть, например, персонаж идет вдоль стены. В определенный момент времени получается так, что спрайт стены ближе к камере, чем спрайт персонажа. И тогда стена загораживает персонажа. Это, наверное, одна из самых сложных и капризных вещей во всей этой концепции. Как бороться? Универсальных методов я не обнаружил. Но парочку более-менее действенных есть. Первое: сделать спрайт стены полноценным 3D объектом. То есть не sprite, а quad. Такие объекты уже не участвуют в тесте глубины. Но это немного увеличивает производительность. В случае со стенами ничего страшного, так как на сцене их мало. Следующее – увеличить размеры коллайдеров. Опять же, увеличивать можно в пределах разумного. Видео ниже.

Так как это 2D, то освещение становится бессмысленным. Хотя вроде бы есть ассеты, которые делают освещение спрайтов. Тени приходится имитировать, или вовсе отказываться. Так, например, у бетонного забора отсутствуют тени. Из-за сложной формы они будут ложиться неправильно и мне не удалось подобрать удачный вариант.


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

Одной из особенностей стало то, что изображения должны быть уже искаженными, что бы правильно выглядеть в перспективе. Это дополнительные действия. Например, на видео ниже показан ящик как он выглядит в игре, затем как это сделано в редакторе unity, и в конце как он нарисован в графическом редакторе.

Ещё пример. Куст помидоров и земляная куча. Так как куст расположен вертикально, то он не подвергается перспективным искажениям. Выглядит так же, как и нарисован. Земляная куча почти «лежит» на земле. То есть очень горизонтальна (если можно так выразиться). Поэтому, что бы в игре выглядеть нормально, она нарисована с существенными перспективными искажениями.

Попытка совместить 2D и 3D. И нет, получилось не совсем традиционное 2.5D Indiedev, Unity, Gamedev, Видео, Длиннопост

И ещё один пример. Книга.

Попытка совместить 2D и 3D. И нет, получилось не совсем традиционное 2.5D Indiedev, Unity, Gamedev, Видео, Длиннопост

Скорость и простота разработки выше по сравнению с полноценной 3D игрой. И хотя я не занимался 3D, мне кажется это так. Нарисовать спрайт легче, чем развертку. Не надо работать с полигональными моделями. Производительность выше, чем 3D. Отрисовка 2D спрайтов происходит быстрее, чем 3D моделей. Особенно актуально для мобилок и браузерок.


Если вначале создания игры сомневался в таком подходе, то сейчас нет. Решающим моментом было вот что. Человекоподобный персонаж состоит из множества спрайтов. Рассмотрим плечо. Это кожа, татуировки, футболка, куртка, броня. То есть 5 слоёв. И так на каждой из частей тела по нескольку слоёв. Из-за теста глубины они постоянно располагались не так как хотелось бы. Поэтому пришлось использовать quad. Но это уже серьезно влияло на производительность. Да и вообще нарушалась сама концепция – все сделать спрайтами. Например, на сцене 50 зомби, у каждого по 60 слоев, хотя и активны около 20. Проседания фпс были существенные. Пока вдруг не додумался развернуть всех персонажей перпендикулярно к камере. Тогда у всех слоев тест глубины был такой какой я и планировал. Значит можно отказаться от quad’ов в пользу спрайтов. И действительно, фпс повысился, а спрайты отображались как задумано. Казалось бы, очень простое решение, но я до него долго не мог дойти.

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


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


Теперь, собственно, сама игра. Аркада в стиле crimsonland с элементами рпг. Трое друзей приехали на дачу отдохнуть. Внезапно приключается зомби-апокалипсис. Вам надо бегать-прыгать, собирать патроны-оружие-броню и уничтожать зомби. Зомби, в свою очередь, тоже могут быть хорошо вооружены и опасны.


Игру делал один в течение 3 лет по вечерам и выходным, с небольшими перерывами. Среда разработки: unity. Дополнительные ассеты не использовал, графику рисовал сам. Музыку и звуки брал из свободных источников. Язык: русский, английский.


Страница игры на итче: https://demian-homeless.itch.io/crimson-dacha

Показать полностью 2 4

Старенький фанарт по второму фолычу

Приветствую! Как-то давно был у меня блог, посвященный Второму Фаллауту. И спецом для него сделал вот такую картинку:

Старенький фанарт по второму фолычу Fallout 2, Олдфаги

Называется "Выехали с друзьями на шашлыки. Главное чтоб дождя не было"

Отличная работа, все прочитано!