![](https://habrastorage.org/getpro/habr/upload_files/442/cca/cdc/442ccacdc4eb65080bde5a82f6b40797.png)
Всем привет!
Это Денис Вебер и какое-то время назад мне пришла в голову идея создать уровень из культовой игры Battletoads / Double Dragon в 3д. Эта серия стала интересна достаточно большому количеству людей, поэтому я решил продолжить создавать уровни из Battletoads в 3д.
Если вам больше нравится формат видео, ссылка на ролик я, как и всегда, оставлю в конце статьи.
![](https://habrastorage.org/webt/mw/us/ua/mwusuaz3lezziazcjb9dcllpmsk.png)
В этот раз я расскажу про создание, наверное самого популярного уровня вообще во всей игре. Это уровень с мотоциклами, который я сам проклинал бесконечное количество раз, когда проходил игру в детстве. По сути второй уровень - это внутренности Крысолёта - корабля, который я создавал в прошлых видео. Эти части уровня достаточно небольшие, но в них нет ничего похожего на части Крысолёта, поэтому пришлось всё создавать с нуля.
![](https://habrastorage.org/webt/zx/-q/my/zx-qmy5mgkqhexcofb8_56e91jo.png)
Сегодня я полностью повторю весь уровень, создам модельки врагов, мотоциклов и главного босса Big Blag или как я всегда его называл - Крыса. Именно создание крысы мне понравилось больше всего, но обо всём по порядку.
![](https://habrastorage.org/webt/ll/2o/nz/ll2onzc0v9kgw8zhzym9paysn18.png)
Если вы играли в Battletoads, то точно знаете тот самый уровень с мотоциклами. Я представлял, что он больших размеров, но не настолько.
![](https://habrastorage.org/webt/3u/yq/cl/3uyqclrohxjvax_unpe3tmpgyes.png)
Во всех трёх локациях используются плиты, колонны и разные модельки, которые подвешены к потолку. Плиты различаются по цветам, а к колоннам добавляются трубы. Для похожих элементов достаточно было сделать одну модельку, а другие размножить с помощью массива. Для плит сверху я сделал то же самое. Подогнал размер, создал скосы и размножил их.
![](https://habrastorage.org/webt/22/at/9q/22at9qqinx1hujirhbm_jbhos60.png)
На самом деле 3д само по себе включает в себя множество профессий. 3д моделлер и скульптор и архитектор и строитель и конструктор и много кто ещё. Можно быть кем-то одним, но обычно приходится заниматься всем сразу понемногу.
![](https://habrastorage.org/webt/u2/cq/nz/u2cqnzpdhtvb5uuvnguwh3waujy.png)
Как и в первом видео, для углублений я использовал более тёмные и более светлые цвета и не надеялся на освещение и тени. Если для разработчиков оригинальной игры эта была необходимость, для современных дизайнеров это один из приёмов, которые используют в восьмибитном арте.
![](https://habrastorage.org/webt/yx/rl/od/yxrlodjwp9qch8tt7vzxge9a6eu.png)
Для боковых панелей я сделал текстуру, примерно похожую на оригинальную. Здесь я использовал процедурную генерацию и настроил расположение текстуры с помощью шейдеров. Кстати, в видео с повторением ещё одной рекламы Яндекс GO я делал точно также.
Для самих панелек я слегка изменил геометрию. Это всё равно мало кто заметит, но достаточно того, что об этом буду знать я. Ведь так уровень ещё больше станет похож на оригинал.
![](https://habrastorage.org/webt/ze/nn/m-/zennm-5uym_cgubv0avbhdlkpgu.png)
Для поддержки этой конструкции инопланетные архитекторы решили использовать колонны. Для них я добавил похожую текстуру и болтики, на которых крепится большая часть деталей Крысолёта. Ну что сказать, хорошо, что для этого не используют клей.
На стенах большое количество панелей разных форм и размеров. Я создал первую панель и использовал её как основу для остальных. На некоторые панели прикреплены светящиеся стрелки, которые показывают направление движения для игрока и его врагов. Все эти безумные персонажи гуляют по отсекам и палубам и если вдруг забудут куда идти, посмотрят на стрелки и сразу пойдут в нужную сторону.
![](https://habrastorage.org/webt/d2/kb/qw/d2kbqw94_nchnfumz0hfhddufeu.png)
Иногда мне кажется, что главный враг в таких играх типа Battletoads или той же Streets of Rage сам игрок. Персонажи игры спокойно ходят по уровню, а игрок догоняет их и пытается всех перебить.
Я добавил стрелки и чуть позже подсветил их с помощью анимации и ключевых кадров, изменяя силу свечения.
![](https://habrastorage.org/webt/ym/or/fe/ymorfece33tthbw7jdhj__hxvwk.png)
На стенах висят сетки разных цветов. Для них достаточно было создать плоскость с ячейками, развернуть под нужным углом и применить модификатор Wireframe. А для труб вокруг я использовал обычную кривую, увеличив ей диаметр и добавив несколько промежуточных вершин. Я скопировал уже созданную сетку, слегка поменял её геометрию и покрасил в зелёный цвет. А для ещё одной сетки, выгнул трубу с помощью инструмента Spin.
![](https://habrastorage.org/webt/4a/fy/hs/4afyhsfykcsbufzmrivzwij1go8.png)
Враги, да и сам главный герой используют лифт для перемещения между локациями. На нём даже есть индикация и всегда можно отследить когда появится новая порция врагов. Можно было сломать двери лифта или чем-то их подпереть и часть злодеев просто не смогла бы напасть на игрока, но у этой игры свои правила, которым нужно следовать.
![](https://habrastorage.org/webt/l8/o8/a7/l8o8a7tguiyr8bpg_26czratsqo.png)
Я взял за основу готовую панельку и вырезал в ней отверстие для дверей. По шахте лифта враги перемещаются на деревяшке, которая передвигается каким-то неведомым образом. Я создал небольшой закуток в задней части стены, чтобы враги без проблем смогли добраться до героя. Несколько индикаторов и стрелка украсили панельку для лифта и оставалось создать только саму дверь.
![](https://habrastorage.org/webt/th/np/tp/thnptplaijgdqt_e3swdxpecauw.png)
В основном, части корабля не вызывали у меня вопросов, но для чего тут эти щупальца или подобие труб я так и не понял. Если кто-то знает зачем они используются, напишите об этом в комментариях. Я создал их с помощью кривых и примерно подогнал их положение под положение на картинке из игры.
![](https://habrastorage.org/webt/rl/kh/nn/rlkhnnrlqcmlaucjfqnpntx5s2g.png)
Если на Крысолёте вентиляторы используются, чтобы... честно сказать не знаю зачем они там были, здесь для вентиляции используются щитки разных цветов. Для них я создал квадратную панельку со скошенными углами и вырезал прямоугольные отверстия, через которых в общем-то и должен проходить воздух или космический вакуум. А вырезанные отверстия накрыл стильными защитными крыльями.
![](https://habrastorage.org/webt/0t/vw/sk/0tvwskqjntvzgzqy3frsmm9is94.png)
Вы можете помнить ещё одного врага на уровне. Если верить дословному переводу, его зовут Швейцар Судьбы. Этот тот самый персонаж, которого нужно убивать его же оружием. Игрок подбирает выброшенную динамитную шашку и бросает швейцару в будку. Дверь у него открыта, шашки взрываются не сразу, не знаю на что он вообще рассчитывает. Для будки врага я взял готовую панельку с дверями лифта и вырезал в ней окно, куда потом посадил Швейцара. Я создал для него целую комнату, откуда он будет выпрыгивать, когда поймёт, что игрок не оставил ему никаких шансов.
![](https://habrastorage.org/webt/tk/q4/w2/tkq4w2msu6qwd0t5bsyxbaqj820.png)
Вторая часть уровня в чём-то похожа на первую. Я взял за основу уже готовые панельки и покрасил их в другой цвет. Кстати, чуть позже для панелей на стенах и на полу я добавлю шероховатость и потёртость. Если присмотреться, то на стенах даже есть сколы и вмятины. Откуда они взялись, даже не спрашивайте.
![](https://habrastorage.org/webt/_m/gh/qa/_mghqae4rgeosbe42sn4aj4-1hc.png)
Сетка расположилась почти на протяжении всей длины стены, а в нескольких местах к ней прилегают лестницы, чтобы игроку было удобнее собирать бонусы. Для лестницы я создал одну часть из кривых и размножил её с помощью того же массива.
![](https://habrastorage.org/webt/cj/1x/fd/cj1xfdmxhbvszfqt5nxjxg4apbu.png)
На ютюбе есть полно видео в стиле, Как создать лестницу, как создать пончик, как создать всё что угодно. На самом деле почти все модельки в блендере создаются одинаково, из куба, плоскости или кривых и в этих видео, как мне кажется, нет вообще никакого смысла. Вы смотрите на референс и создаёте модельку. Всё делается именно так.
![](https://habrastorage.org/webt/s9/89/4g/s9894g0b1rq1fxwbvtx8mqeykjg.png)
Для оставшихся частей я скопировал уже созданные модельки и некоторые из них немного изменил и перекрасил, а в нижнюю часть добавил трубы, которые служат тут подпорками для пола.
Если в первой части уровня под потолком висели странные щупальца, здесь всё гораздо понятнее. Спасибо тайловой графике, которую использовали в восьмибитных играх. Мне всё так же достаточно было создать один набор труб, а остальные размножить.
![](https://habrastorage.org/webt/dx/qt/ed/dxqted4c3zgvjra99emsyp6abhi.png)
Как я уже говорил, на стенах есть сколы и потёртости. Самое простое - создать их с помощью процедурной генерации. Достаточно добавить и настроить несколько нод.
![](https://habrastorage.org/webt/z4/ju/h6/z4juh664jicit2gtixs7n6chuhc.png)
Камера в игре не меняет своё положение, но я подумал, что можно добавить возможность смены положения камеры, чтобы при повороте, справа не отображалась пустота. Я решил немного разнообразить уровень и добавил панели, щитки с вентиляцией и трубы на противоположную стену. То же самое я сделал и для остальных частей уровня.
![](https://habrastorage.org/webt/ss/45/_i/ss45_i4s09fzvyknlvyeke8qyoo.png)
Вот и пришло время коридора с мотоциклами. Я подумал и решил, что повторять эту часть целиком просто нет никакого смысла. Если вам понравится этот проект и я буду делать анимацию геймплея, то уровень можно будет подогнать под нужную анимацию. Если присмотреться, то можно увидеть, что панельки повторяются и всё оказалось не настолько страшно как я подумал в начале.
![](https://habrastorage.org/webt/eo/in/xp/eoinxp0ewmxblsumhzjeokdsw7g.png)
В этой части панели на полу уже фиолетового цвета. А на стенах всё такие же стрелки и щитки. Под потолок я повесил ещё одну разновидность местной вентиляции в виде розовых труб, а ещё пару часов ушло на то, чтобы расставить, поменять и покрасить остальные детали. Единственное различие - надпись Fight в самом конце коридора. Но и с ней никаких проблем не возникло.
![](https://habrastorage.org/webt/lx/sp/es/lxspes46_jwkghdaxliy5zacwgo.png)
Ах, да, на уровне есть ещё цилиндры, которые внезапно появляются, когда игрок на мотоцикле на полной скорости летит по коридору. Я отзеркалил все панели на противоположную сторону и все части второго уровня готовы.
![](https://habrastorage.org/webt/qi/ry/ev/qiryevygvwfgpglmqu7qezl36_k.png)
Крыса Биг Благ - босс второго уровня. Автоматический перевод снова не подвёл и дал просто исчерпывающую информацию о ней. Это один из лучших силовиков Королевы, командующий ее крысиной армией. По всей видимости, это сильная и болезненно тучная коричневая крыса с неопрятными черными волосами. Опустим то, что я увидел у Биг Блага зелёные волосы, но выглядит он действительно устрашающе.
![](https://habrastorage.org/webt/pc/it/t4/pcitt4cx8ulvvzk0tvbycwt_kw4.png)
Казалось бы, что трудного в том, чтобы сделать точно так же как на картинке. Не знаю как у других, но у меня иногда возникают с этим проблемы. Вот смотрю на свою модельку, потом на картинку и понимаю, что в чём-то не сильно похоже, а как это поменять - непонятно. Сейчас крыса больше похожа на китайского дракона, но поверьте мне, всё изменится к лучшему.
![](https://habrastorage.org/webt/kd/dt/wc/kddtwc83wj_ixqbp5cbzev31mf8.png)
Я добавил руки, ноги и когти. В рот вставил острые зубы и крыса начала приобретать свой мерзкий и пугающий вид. Так как это боевая крыса, то она одета как настоящий боец. В синюю майку-алкоголичку с вырезом для хвоста.
![](https://habrastorage.org/webt/zv/ao/c6/zvaoc6nhorqvjzqdw74jeoi_hka.png)
Почти всё готово и я решил доделать волосы, которые создал с помощью системы частиц. В блендере для этих целей есть настройка, которая так и называется - волосы. Вообще делать волосы для моделек - это ещё то веселье. Я какое-то время пытался безуспешно причесать крысу, но это не помогало.
![](https://habrastorage.org/webt/20/de/cu/20decu6_kqrah7weiggv3mglnua.png)
В итоге я создал один волос из кривой, который потом использовал как основу для системы частиц и выставил настройки таким образом, чтобы волосы были больше похожи на настоящие, а не на палки, торчащие из головы.
![](https://habrastorage.org/webt/vz/2v/9d/vz2v9d_hdqyfiu1zr1347johuqi.png)
Игрок передвигается на космическом мотоцикле, заботливо припаркованном в самом начале коридора. Видимо у мотоцикла нет тормозов, а с каждым пройденным метром он ускоряется, иначе как объяснить эту безумную скорость в самом конце поездки.
![](https://habrastorage.org/webt/mc/hu/lw/mchulwyf4hecskqf4bkcmrxqtxo.png)
Возможно когда-нибудь я сделаю фотореалистичный мотоцикл, Рэша, Крысу и других обитателей Крысолёта, но сейчас я ориентируюсь на восьмибитную игру и просто переношу то, что вижу в 3д. Ведь мне самому было интересно посмотреть на оригинальную игру с другого ракурса.
После того как с геометрией мотоцикла было покончено, я покрасил его в блестящий синий цвет, а какие-то части, по старой схеме, выделил более светлыми и более тёмными цветами. Я решил его совсем чуть-чуть разнообразить и добавил отверстия в задней части, через которые мог бы выходить горячий воздух от двигателя.
![](https://habrastorage.org/webt/hd/r-/po/hdr-pozbixu5x0g9n1md7j34w40.png)
На самом деле на уровне не так много врагов. Для меня Walker или как я его называл - Цапля, всегда был самым интересным во всей игре. Мало того, что его было трудно убить, он ещё разлетался на части, которые можно было использовать как оружие в бою. По сути это робот со стеклянной головой, который пытается запинать игрока. Для него я создал купол, для которого потом добавил текстуру стекла. Приделал пару механических ног и Walker готов.
![](https://habrastorage.org/webt/px/s5/cg/pxs5cgjk72q2dzaptz0whgxorhm.png)
Ещё один враг уровня - Гидо. Честно сказать, он напоминает мне какого-то опухшего бомжа, но если отогнать от себя эти мысли - Гидо в прекрасной физической форме. Его моделирование было чем-то похоже на создание Абобо из первого уровня. Достаточно добавить геометрию, похожую по форме на его тело и накинуть модификаторы, которые её сгладят. Маленький лайфхак. Когда вы видите модельку в штанах, необязательно создавать под ними ноги. Если вы не планируете потом менять одежду, достаточно просто создать штаны.
![](https://habrastorage.org/webt/kc/b8/or/kcb8orqiv3hx_gssh9uxjyzb4fw.png)
Я уже отвесил Гидо несколько комплиментов, но мне по-прежнему кажется, что его покусали пчёлы. На скриншоте из игры у него даже не видно глаз. И чтобы враг не выглядел совсем странно, я добавил ему глаза. Если посмотреть на геймплей оригинальной игры, в каких-то моментах он всё-таки показывает свои глаза. Его лохматую шевелюру я создал так же с помощью частиц, успев примерить до этого несколько интересных вариантов.
![](https://habrastorage.org/webt/rc/bm/rt/rcbmrtmrufrwcrtiudxzaouwlz4.png)
И последний по счёту, но не по значимости враг второго уровня - Швейцар Судьбы или в оригинале Doorman of Doom. Для него я уже создавал будку и пришло время его туда посадить. Швейцар чем-то похож на Гидо поэтому не буду врать, я просто взял модельку Гидо и немного поменял её. У этого врага чуть более вытянутое лицо, видимо он успел убежать от пчёл, поэтому выглядит не таким опухшим, другая форма обуви и штанов и подтяжки, как у босса Крысы.
![](https://habrastorage.org/webt/rc/4v/cy/rc4vcy-4f24p8vzhxsr6vy5tvek.png)
Я по быстрому накидал скелет для всех врагов, ещё раз проверил геометрию моделек и расставил их по уровню. Цаплю и Гидо поставил на пути главного героя, а Швейцара засунул в его каморку.
![](https://habrastorage.org/webt/lm/le/_n/lmle_noy2qzllhhuulucwhog-cm.png)
Мне оставалось расставить свет, камеры и настроить их перемещение. А вы скорее смотрите то, что получилось в итоге.
![](https://habrastorage.org/webt/pt/8a/71/pt8a71i_-oqfgihx241ariicakw.png)
Battletoads по-прежнему остаётся одной из моих самых любимых игр на приставках. Не знаю, почему, но видимо в детстве воспоминания воспринимаются более ярко и остаются с нами такими на всю жизнь.
С каждым новым проектом я набираюсь опыта в 3д. И этот не был исключением.
Если вам понравилась статья и видео и вы хотите посмотреть на то, как Рэш будет раскидывать врагов, а потом выживать в адской гонке на космических мотоциклах, обязательно пишите об этом в комментариях. Так я пойму, что эта тема вам интересна и сделаю ещё один проект с анимацией геймплея.
Оригинальное видео: