NO RETURN: Мои 3д-поползновения
Я снова и снова обращаюсь к околотрёхмерной графике. Ещё в 2014 году я предпринял попытку сделать свою игру в 3д. Это был протомариуполис. В общем, если считать релиз мариуполиса не с первой сценарной версии, а с первой стилистической, когда это была просто игра про роботов, сценарий которой писал я, то игра делалась не 3.5, а четыре года. Это демка из тех времён.
Тогда всё упёрлось в то, что если со стенами всё было нормально, графический стиль идеально подходил (в комнаты ещё можно было заходить — игрока «выталкивало» в следующую комнату), то для окружения подходили только «округлые» вещи, которые могли прокручиваться перпендикулярно виду игрока без потери естественного вида при повороте. Для остальных вещей нужно было несколько видов спрайтов с разных ракурсов. Нарисовать это было довольно сложно. Я забросил эту версию, но всё же был очень доволен тем, что смог что-то в 3д (несмотря на то, что это выглядит как рейкастинг, гамак всё делает в честном 3д).
Снова 2014. Я думал, что делаю какую-то необычную вещь, сделав пакмена в 3д, а оказалось, что это ещё в id Software проворачивали. Призрак был только один, и он просто преследовал игрока по стандартному гамаковскому алгоритму поиска пути. Киллер фичей этой технодемки было передвижение как в играх жанра dungeon crawler новой волны (Legend of Grimrock),
Вы слышали про MegaKerma? Да, это GameMaker наоборот. Когда-то автор этого движка начинал с надстроек над гамаком, а в итоге сделал свой конструктор трёхмерных игр с бейсикоподобным языком для скриптинга. Эту штуку я сделал в 2015, кажется, году. Нужно подобрать коробку и прочитать текст. Игра была сделана на день рождения Etc Yc, который является автором графики и сценария для игр Team Mariupolis. Штука не очень гибкая, но для коротких зарисовок без лишних кастомных скриптов подойдёт. К сожалению, нет поддержки кириллических шрифтов.
К трёхмерности я вернулся спустя три года, после релиза Мариуполиса. Это было на одном из гаминаторов. Игра развивала концепцию первой части. Я только что запустил эту демку, чтоб сделать скриншот, и могу сказать, что кроме того, что там нет игры, сама навигация в 3д довольно криво сделана, а модель аппарата, улавливающего звуки из прошлого, которая и без того похожа на какой-то готический крест, улетает при взгляде вверх чуть ли не за пределы видимости. С другой стороны, сама идея мне нравится, у меня есть некоторые наметки по сюжету и геймплею. В общем, итч глубок и разнообразен и тут, как и в случае с пакменом, меня могли опередить, но всё же среди известных игр никакая ещё не использовала то, что я задумал. Возможно, эта идея не выдержит проверки геймплеем и будет отброшена, но мне интересно её попробовать. Если я продолжу работать в этом направлении, то расскажу об этом подробней.
Последней попыткой отрёхмерить собственную игру было неуверенное ковыряние движка GZDoom… для создания технодемки Dark Grim Mariupolis в 3д. Меня в какой-то момент так сильно увлекла идея, что я на неделю забросил работу над Армагеддополисом. Суть ремейка в том, чтобы перенести квест на экшен движок. Убрать многословность, добавить экшена, адаптировать головоломки. Благодаря игре Strife GZDoom умеет делать диалоги, думовский редактор весьма удобен и позволяет делать довольно сложную архитектуру, через костыли реально сделать некоторые головоломки из игры, а некоторые можно убрать и/или заменить. Но самому такой проект сделать тяжело, особенно в перерывах между работой над основным Армагеддополисом, плюс оказалось, что игре нужны персонажи, отрисованные с разных ракурсов — и тут мы возвращаемся к проблеме из 2014 года. Конечно, можно сделать трёхмерные модели всех персонажей Мариуполиса, анимировать, отрендерить их в разных ракурсах
К дум-ремейку мариуполиса, как и к NO RETURN, меня привело чтение книги Д. Кушнера Masters of Doom. История id Software меня вдохновила на создание игр посильнее Indie Game: The Movie в разы.
Сделать рейкастинг в 2д совсем не сложно, но когда началась тригонометрия с трёхмерным проецированием отброшенных лучей, я решил обратиться к туториалам. Самый простой (и на русском) — вот. Я адаптировал туториал с Python на lua, плюс учёл особенности TIC-80. С коллизиями на TIC-80 всё оказалось очень просто — я проверяю тайлы, уже расставленные в существующем редакторе карт встроенной функцией mget. Фактически каждый тайл — трёхмерный блок с равной длиной и шириной. Я планировал ввести в игру спрайты, но с ходу даже с учётом туториала не понял, как реализовать это на TIC-80. Суть в том, что спрайты, как и стены, нужно отрисовывать по кусочкам, где каждый луч — один такой кусочек, отрисованный согласно расстоянию игрока от объекта. Первое пришедшее в голову решение — извлекать посредством poke-функций значения пикселей спрайтов из видеопамяти показалось переусложнённым и костыльным.
На TIC-80 есть игра с рейкастингом и спрайтами, но она сильно тормозит, а её исходники со множеством манипуляций по созданию z-буфера очень уж запутаны. У меня не было времени, около трёх часов дня воскресенья я уже должен был ехать на работу. Я принял самое простое решение — сделать блоками всё. В итоге это оказалось не лучшим решением, т.к. собирание монеток превращается в ад толкания в стены. Увы, у меня было не так уж много вариантов.
Изначально игра была более хоррорной, а красные блоки преследовали игрока. Это была самая первая идея. Мне пришлось отказаться от этого по нескольким причинам. Первая — когда блок настигал игрока, игра намертво повисала. Видимо, была какая-то ошибка, связанная с тем, что все лучи уже были внутри стены. Конечно, это было решаемо. Но вот причина два — если блок двигался очень медленно, он не представлял никакой опасности, а если быстро — игрок просто очень быстро умирал, не имея представления о дальности опасного блока. Тогда я решил сделать так, чтоб игрок сам оставлял свой след, который убивал бы его в случае возвращения. Игра демонстрировала, что нельзя войти в одну реку дважды. Это решало обе указанные выше проблемы и подходило под тему конкурса. Но времени было в обрез, нужно было выдать хоть какие-то уровни. Я успел сделать до работы несколько уровней, но если пользоваться картой (мне очень хотелось добавить карту, как в старых идовских играх), они легко проходятся. Но делать было нечего, время близилось к трём, так что я решил показать игру в таком виде. Судя по тому, что я прочитал от игроков, игра без карты с оставлением следов имеет весьма хорроровый оттенок (плюс я нагнал жути отвратно гудящими звуками — это намеренно, прошу прощения у всех завявших ушей). Возможно, стоило работать в этом направлении, но меня осенило в другом. У меня есть монеты, но они геймдизайнерски не работают. Можно не прикоснуться к монетам и пройти дальше. За них не купить бонусов, а очки, которые они давали, выглядели рудиментом аркадной эпохи. Тогда я решил переделать уровни, чтоб можно было собрать все монеты не убиваясь и поставил условия собирания всех монет. Теперь увеличилось влияние карты, а хоррорность заменилась головоломностью. И это тоже неплохо, но вот головоломка оказалась не очень удобная и простая. У меня есть идеи по поводу добавления ролевых элементов и ограниченного использования карты, но беда с идеями в том, что на базаре их можно купить за рупь штуку.
- 14 августа 2020, 12:55
- 013
Когда читаю такие ретроспективы, создается ощущение, что наблюдаю за богом, создающим разнообразные миры прямо на моих глазах и переберающим их как карточки в картотеке. Не успел я ещë понять, что это за место такое — ему уже всë ясно, и мы вступаем в следующий…
Здорово понимать, что существует такой вялотекущий, но вместе с тем интереснейший процесс! Почему бы тебе не попросить у кого-нибудь помощи с этим 3D, если ты так мечтаешь о нëм?
Есть Etc Yc, который умеет в 3д (собственно, Армагеддополис устроен на трёхмерном пререндере) и мы подумываем сделать следующий проект трёхмерным, так что с этим проблем нет.
Ну и я просто получаю удовольствие (иногда специфическое) от своих технодемок. Вот однажды добавлю спрайтов в NO RETURN, покажу на гамине - и станет хорошо-хорошо.
Для спрайтов без z-буфера никак, видимо
Z-буфер нужен, чтобы сортировать попиксельно. Если это не обязательно, например, нет таких ситуаций, что палка в арке, и один её конец поверх арки, а другой - под ней, тот можно сортировать спрайты целиком. В случае с аркой можно её порезать на составные спрайты.
А ещё Z-буфер не очень хорошо работает с полупрозрачностью, но какие-то изобрели трюки для этого, по идее.
ну я исхожу из того, что при рейкастинге для каждого столбца пикселей на экране будет кидаться луч. Если проверять пересечение луча сразу ещё и со спрайтами, а не только со стенами, то может быть можно и без него, смотря че там по ресурсам и так далее.
Эм... А кто может?
Ну, если просто достаточно времени сидеть в блендере, то оно станет легче.
Эм... А зачем его делать?
Там уже есть встроенный чайник вроде. Или это в 3ds max?
Да, у нас только обезьянка есть.
Поставь 3ds max. Поставь там стандартный чайник, экспортни в obj.
Импортируй в блендер. Готово.
В нём чая не будет...
В общем, расскажу историю этой неудавшейся шутки.
Сначала я написал про чашку - туториалы чашки в сообществе моделлеров являются одними из самых популярных для начинающих, насколько мне известно, так как создание её довольно простое, но при этом комплексное. Потом я подумал, что будет смешнее, если я исправлю чашку на чайник. Я просто запамятовал, что в блендере действительно вместо чайника обезьяна, из чего можно сделать выводы по поводу моего опыта в программах для трёхмерного моделирования.