Gamedev Даниил Ильясов
13 456

2D-платформер Shovel Knight создавался на 3D-движке

По словам одного из разработчиков, это облегчило работу.

В закладки

В конце апреля видеоблогер Shesez, рассказывающий о разработке игр, опубликовал видео, в котором разобрал, как именно устроен 2D-платформер Shovel Knight «за кадром». В этом ему помог Дэвид Д'Анджело, один из разработчиков из студии Yacht Club Games.

Как оказалось, Shovel Knight разрабатывалась на 3D-движке, и каждая локация состоит из нескольких отдельных слоёв.

Как пояснил Д'Анджело, в начале работы студия не знала, что именно она хочет сделать, и поэтому написала 3D-движок, благодаря которому ей в итоге было проще портировать игру на другие платформы.

По ходу ролика блогер Shesez и Д'Анджело с помощью свободной камеры показывают некоторые локации из игры со стороны и поясняют, как устроены отдельные сцены. Например, в один из моментов игры игрок попадает в комнату с огромными колбами, внутри которых можно увидеть пузыри.

На самом деле на фоне уровня «плывут» целые полосы этих пузырей, а эффект, будто они только внутри сосудов, создавался банальным использованием чёрной текстуры вокруг колб.

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

Shovel Knight вышла в 2014 году и за последующие несколько лет получила три крупных дополнения. Четвёртое под названием King of Cards изначально должно было выйти в апреле 2019-го, однако разработчики отложили его на «несколько месяцев» и пока не назвали точной даты релиза.

Платформер доступен на PS3, PS4, Vita, Xbox One, Switch, 3DS, Wii U и ПК.

#shovelknight #закадром

{ "author_name": "Даниил Ильясов", "author_type": "editor", "tags": ["\u0437\u0430\u043a\u0430\u0434\u0440\u043e\u043c","shovelknight"], "comments": 71, "likes": 93, "favorites": 70, "is_advertisement": false, "subsite_label": "gamedev", "id": 48465, "is_wide": true, "is_ugc": false, "date": "Mon, 29 Apr 2019 11:31:44 +0300" }
{ "id": 48465, "author_id": 210, "diff_limit": 1000, "urls": {"diff":"\/comments\/48465\/get","add":"\/comments\/48465\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/48465"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }

71 комментарий 71 комм.

Популярные

По порядку

Написать комментарий...
46

Так это вроде нормальная практика для современных 2д платформеров, разве нет?

Ответить
15

Иногда бывает интереснее.
Бывают якобы 3д...

Ответить
2

+ Knight Lore, Alien 8, Pentagram и еще куча игр на этом движке

Ответить
0

Diablo 2 поинтереснее в этом плане.

Ответить
0

Моя первая такая игра была именно Sonic 3D Blast.

Ответить
1

Я, честно говоря, не шарю, но часто встречал мнение, что это «корявое решение», ибо 2D должно быть 2D, а не 2D в 3D. Но для игрока, имхо, разницы нет.

Ответить
12

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

Ответить
0

Раньше оно было слабое и заточенное под вывод 2д спрайтов пиксель-в пиксель.

Скорее на рисование картинки линиями с помощью электронно-лучевой трубки, которая в современным дисплеях давно отсутствует

Ответить
0

Человек ниже ответил.
Я вполне серьезно говорил, в приставках были специальные хаки под 2д. Например, чтобы плавный скролл сделать.
Просто скорости работы с экранным буфером не хватало.
Если честно, Я не уверен, на каком уровне работает Direct2D, но он определенно нужен был для ускорения вывода 2д графики.
Собственно он и сейчас никуда не делся, но распространенные движки используют 3д и не парятся.

Ответить
1

На NES и подобных приставках было ускорение вывода 2d спрайтов. И с этим были связаны такие ограничения, как максимальное число спрайтов на экране и на одной линии.

Хаки с прокруткой экрана на ПК, где этого не было, были реализованы Джоном Кармаком в Commanded Keen. Смысл в том, чтобы плавно сдвигать картинку, не отрисовывая заново все объекты.

DirectDraw это аппаратное 2d ускорение, за счет которого работали такие игры, как Starcraft, Heroes 3, Neverhood и т.д.. За счет него можно было отрисовывать области экрана с прозрачными участками в актуальных на тот момент разрешениях, т.е. 640х480 и 800х600. Там были еще какие-то заморочки с цветами, то ли 16-битный цвет, то ли вообще палитра 256 цветов, наверное, по разному в разных играх.

Ну а сейчас даже для работы Windows используется 3d ускорение

Ответить
0

Я вроде то же самое написал, не?

Ответить
0

Дело вообще не в этом. А в том что раньше было 2d ускорение в видеокартах, а сейчас его нет

Ответить
2

Авторы Cuphead передают вам привет.

Ответить
7

Спасибо за привет, но я никого из авторов не знаю :( Чем заслужил привет? :)

Ответить
21

Они просто очень веселые и общительные ребята

Ответить
2

Это не Вам, а нам. Верните.

Ответить
1

Чем дальше развиваются технологии, тем больше пространства для корявых решений. Да можно запарится и делать честное 2д, но зачем, если это будет дороже и дольше? Чтобы шло на устройствах без 3д ускорителя и ело меньше ресурсов? Такие ещё найти надо, да и требования у шовел найта такие что и так почти везде запустится.

Ответить
1

DirectDraw к сожалению неактуальна, поэтому извольте юзать 3D, как единственный возможный вариант графического ускорения

Ответить
0

Не корявое, а просто нецелесообразное.

Ответить
1

Количество затрачиваемых ресурсов обычно тупо ниже, поэтому и целесообразно. А всякие мегабайты оперативы и прочую хуйню никто не считает.

Ответить
0

Чем ниже-то? 2д и так умеет со слоями работать, так еще и не загружает лишние текстуры на оборот спрайта.

Ответить
0

Ресурсов — это в смысле пресловутых человекочасов.

Какому-нибудь левелдесигнеру будет проще расставлять объекты на фоне, эффекты рисовать проще, простор для хаков больше. Одни плюсы, короче.

Ответить
1

Сетка тайлов и в 2д есть, куда проще уже? В чем проще рисование? В 2д тоже можно просто через стены ходить если надо или летать.

Ответить
0

Полагаю так банально проще и быстрее.

Ответить
0

Практика нормальная. Но ре-косы компа жрет оно больше чем специальное решение на 2 д движке ,+ специфические глюки типа (прокаливания в текстуры чаще будут.

Ответить
28

В юнити все 2D игры это те же 3D только с видом сбоку и разными слоями. Я думал так везде делают сейчас

Ответить
9

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

Ответить
4

Разница появляется когда спрайтов дохера. 2d движки в десятки раз могут уделывать unityи unreal по производительности.

Ответить
10

Кого бы это сейчас волновало. Ну, кроме владельцев старых компьютеров...

Ответить
2

О, нет. Даже мощные компы будут тормозить. Я вот хотел сделать симуляцию в ue и думал, что раз у меня тысячи объектов (персонажей), то спрайты будут меньше нагружать видяху, а оказалось очень даже наоборот.
Т.е. ясен красен, если у тебя два статичных задника и десяток персонажей, то пох 3d или 2d движок, но если объектов реально дохера, то разница будет заметна даже на торговом компе.

Ответить
0

А теперь возьми и объясни, чем 2D движок отличается от 3D движка в отрисовке огромного количества спрайтов на плоскости.

Ответить
0

Да хер знает. Рендером? Ты если имеешь инфу полезную, то напиши. К чему эта игра в загадки?

Ответить
1

Я к тому, что рендеринг ничем не отличается. Посмотри, как рисует Unity/UE4 спрайты через sprite atlas, и как рисуют другие движки. Спойлер: одинаково, разница может быть лишь в том, сколько треугольников генерируется на спрайт (алгоритмы разные, и их можно имплементировать везде). Более того, дело за конечным API (OpenGL, DX, VK). Другое дело, как ты на отрисовку спрайты передаешь. Если по одному, то да, хуево. Но так никто не рендерит. Во-первых все спрайты собирают в атласы, чтобы экономить память и реже обращаться к разным текстурам. Во-вторых, их собирают в батчи и отправляют на отрисовку, таким образом за один вызов рисуется несколько спрайтов.

То, как ты будешь обрабатывать данные — зависит от архитектуры движка. Но нет никаких уникальных вещей у 2D-движков, чтобы они уделывали Unity и UE4 в десятки раз, и чтобы Unity и UE4 не могли делать так же.

Пиши кастомные шейдеры, оптимизируй отрисовку (для Unity можно ECS использовать сейчас), используй GPU Instancing и все будет работать.

Чтобы делать симуляции, надо нормально понимать, как рендерить много объектов максимально быстро.

Вот тебе пример с ECS: https://www.youtube.com/watch?v=lDTyCYAtQyQ

Вот тебе пример игры на Unity, которая не использует ECS, а только свои внутренние инструменты на старой версии движка (в которой не было существующих оптимизаций): https://store.steampowered.com/app/616560/Ultimate_Epic_Battle_Simulator/

Ответить
0

Вот на эту штуку я и напоролся пока гуглил батчи (чуть ниже ссыль). В УЕ4 я батчи не нашёл.
Там по ссылке есть результаты тестов как раз с разницей в эти самые десятки раз.
С тем что можно всё это добро оптимизировать, написать атласы, инстансы и даже переписать движок - я и не спорю. Просто те решения что идут из коробки, например 2D спрайты, в UE4, жутко тормозят, не поддаются инстансингу, хоть и заточены именно под 2D (например, имеют 2д физику из коробки).
В моём случае одинаково фпс жралось тысячей инстансов одной картинки (т.е. даже без анимации) и десятком тысяч инстансов меша (причём высокодетализированное).

Ответить
0

Из коробки в UE4 4.22 сейчас идет автоматический батчинг и инстансинг всего.

Ответить
0

Могут конечно.
Но 3д движки тоже могут быть быстрее Unreal и Unity когда моделей дохера. Универсальные движки нужны не для выдающейся производительности а для удобства разработки.
Тем более 2д, которое обычно менее требовательное.

Ответить
1

Чтобы самописному движку догнать Unreal и Unity в плане производительности, нужно запилить очень много фишек, индивидуальных для конкретного железа (современного), да еще и чтоб это всё сосуществовало друг с другом и включалось по мере надобности. Особенно в Unreal, но и в Unity тоже это есть. Всяческие инстансинги, распараллеливание, тайловый рендер (в Unity он есть в HDRP) и прочие подобные штуки, которые задолбаешься добавлять. Если же написать по фасту двигло, которое просто отрисовывает 3d модели общими методами, производительность может огорчить. Есть такое поверие на Gamedev.ru, что те, кто пишет 3д движки, рано или поздно попадают в дурку. Хорошо что я бросил это дело еще в 2008-м и сохранил хотя бы часть рассудка

Ответить
1

Ну Я завязал с этим (движкописательством) тоже довольно давно и плотно перелез на Unity.
Но перегнать Unreal или Unity в частной задаче (много моделей) не сложно.
Например - вывести много деревьев, именно за счет того, что можно учесть частности. Естественно для этого придется повозиться. Решая только эту частную задачу, можно избавиться от оверхеда общих частей движка - системы объектов, например.
Но вопрос то не в этом - нафига тебе быстрые деревья без всего остального удобства от крупных движков.
Их крутость не в производительности (хотя и с ней все неплохо), а в том, что за тебя написаны миллионы строк кода.

Ответить
0

Спорное заявление. Если игра пиксельная, и у неё разрешение 480x240, то, возможно, центральный процессор будет рендерить наравне с игрой на Юнити, которая рендерит спрайты сразу в родное разрешение экрана, т.е. в 2к например. Но это вопросы оптимизации конкретных игр. Можно и в Юнити выставить разрешение 240 с последующим апскейлом, а если ещё и по-правильному упаковать спрайты в атлас, разница будет в пользу 3д движка, каким бы сильным ни был цп и какой бы слабой ни была видеокарта.

Ответить
0

Я думаю, тут дело не столько в разрешении, сколько в прозрачности и дроколлах. Хотя не ручаюсь за это, так как я чужие эксперименты смотрел. Если коротко, то gamemaker studio, знатно насует и анрилу и юньке.
https://forums.unrealengine.com/community/community-content-tools-and-tutorials/55006-free-2d-sprites-demo-benchmark-low-end-template

Ответить
0

GameMaker это двиг не с софтверным рендером, насколько я знаю. Он тоже использует 3d ускорение и местами способен тормозить на слабом железе. А дроколы легко уменьшить, упаковав спрайты в атлас, это умеет делать и Юнити, и Гейммейкер. У Юнити единственный момент это работа с памятью, из-за чего могут быть просадки в производительности. Но спор был о софтверном рендере против 3д ускорения, вы немного в другую сторону отошли от этого

Ответить
0

ГПУ инстансинг и разницы в выведении количества спрайтов уже нет

Ответить
19

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

Ответить
0

Особенно дополнение про призрачного рыцаря. Сцена с сидящим на краю платформы призрачным рыцарем и замком на фоне - 10/10.

Ответить
7

Я ожидал это увидеть в "Игры", а это в "Gamedev", ну дела. Это обычная практика уже кучу лет, даже pixel-perfect игры все делаются на плашках

Ответить
0

Открою страшную тайну, но любое 2D по сути 3D ибо объекты (как видно на картинке) располагаются с определенной "глубиной". Чисто в XY системе вы не сможете расположить одновременно фон, игрока и близкие объекты.

Ответить
7

Есть чисто 2д движки, где нет квадов и текстур, а пиксели рисуются на экран напрямую. Каждый спрайт имеет порядок сортировки. В таких движках как правило нет поворота объекта.

Ответить
0

А эффект глубины достигается за счёт разной скорости передвижения линии фона. Верхние полоски двигаются как черепахи, а нижние уже близки к скорости героя.

Ответить
0

Да, но тут речь о движке. Тут можно без лишних движений просто повернуть камеру и всё это увидеть.
Если бы это был 2д движок, то к нему нужно было бы сначала написать 3д режим, а затем переписать отрисовщик графики, так как они обычно отрисовывают все спрайты в одну плоскость. Если на неё посмотреть сбоку, то она плоскостью и останется, нужно чтобы каждый спрайт согласно своей глубине создавался на новой плоскости.

Ответить
0

Сможем, это всего лишь вопрос того, в какой последовательности рисовать объекты. Как верно уже сказали раньше, просто перестали заморачиваться с оптимизацией, всё равно 3D ускоритель нынче в каждом утюге. В какой-то мере это печально.

Ответить
2

Вот это срыв покровов!

Ответить
–10

Думал тут будет про юнити, а эти уникумы собственное двигло написали...

Ответить
1

Как будто это что-то плохое.

Ответить
1

"Чёрная текстура вокруг колб" - это маска. Вроде и в геймдеве статья, а такой простой термин упустили) Но вообще интересная инфа, я вот не знал, что он в 3д движке был сделан. Так что спасибо!

Ответить
1

Насколько я понял, без маски - просто колба внутри прозрачная, а снаружи черный цветом залито. И в порядке сортировки поверх.

Ответить
0

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

Ответить
1

Просто колбы и черный фон это одна картинка. Это позволяет обойтись всего двумя большими картинками для всей сцены: 1) пузырьки 2) прозрачные внутри колбы с черным фоном.
И пузырьки скроллятся, да.

Ответить
0

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

Ответить
1

Записал видео с нашей игрой(в процессе). То же самое.
https://www.youtube.com/watch?v=M2ceZoHHMpc

Ответить
0

Так сейчас всё так делают

Ответить
0

Видимо, поэтому игра выглядит офигенно на маленьком экране 3DS с включенным 3D

Ответить
0

Hollow Knight так же устроен, никто не жалуется.

Ответить
0

Он же на Unity?

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Уве Болл вернулся в кино
и начал экранизировать flash-игры
Подписаться на push-уведомления