Пост будет о том, какие задачи и проблемы возникали, и как приходилось их решать при разработке игры Rail Lords на андроид.
Прежде всего, спасибо всем тем, кто оставил комментарии и замечания по игре, и мораль повышают и на недочёты обращают внимание.
Один или в команде
Мысли поучаствовать в разработке игры крутились достаточно давно. Во время студенчества несколько раз принимал участие в качестве 3d-моделлера в различных игровых проектах с студентами-единомышленниками. К сожалению, чаще всего такие затеи заканчивались ничем - иногда проекты были слишком тяжеловесны, иногда у участников не хватало времени, терялся интерес и т.п. Из всего произошедшего вывел то, что надо трезво оценивать свои силы и начинать с малого.Решил, что буду заниматься над несложным проектом в одиночку: и со временем попроще, и можно будет посмотреть с разных углов на разработку.
Выбор ПО
Требования к ПО были простыми: бесплатное (в т.ч. для коммерческого использования), обеспечивать необходимыми функциями, иметь большую базу уроков. Поэтому взамен изучаемых ранее 3Ds Max и Photoshop пришли Blender и Gimp. Движок взял Unity. Для звука использовал Audacity.
В голове представляется лучше
Перед паровозиками хотел сделать другую игру - аркаду. Суть: управляем рыбкой, едим рыбок поменьше и растём, уворачиваемся от рыбок побольше. 1й уровень Spore на минималках, но со своими особенностями. Так как с графикой знаком ближе, начал с моделек, текстур, анимаций рыбок. И это была большая ошибка (благо моделек мало сделал) - после создания прототипа на движке, геймплей оказался чертовски уныл, хотя в голове он рисовался интересным и динамичным. Аркаду пришлось бросить, и теперь всегда начинаю с прототипа на движке с кубиками и шариками вместо моделек.
Выбор концепции и её изменение
Идей было несколько, нужно было что-то выбирать. Условия: проект должен быть оригинальным (клонов и так полно), достаточно сложным, чтобы было интересно над ним работать, но достаточно простым, чтобы энтузиазма хватило довести его до конца.
Выбор пал на идею обратить широко распространённый жанр Tower Defence, и предложить игроку не защищать башни, а атаковать их (позже я узнал, что уже есть целый жанр и называется Anti Tower Defence). Т.к. движение юнитов шло по заданным маршрутам - юниты стали поездами, а маршруты железной дорогой. Чтобы атаковать башни, поезда обзавелись пушками, а сами башни, чтобы иметь ценность для игровых задач, обросли замками.Изначальная концепция Anti Tower Defence усложнилась и превратилась в стратегию, которая сводилась к сбору ресурсов в радиусе влияния замков игрока, на которые можно было создавать различные поезда и захватывать замки противника и напоминала упрощённую версию игры для пк из 2000-х "Дорога на Хон-Ка-Ду" (интересная игра кстати, с удовольствием сыграл бы в ремейк), однако прохождение уровня занимало много времени, а картинка сумбурной, т.к., если отображать всю карту, дисплей перегружался мелкими объектами, а при отображении части карты многое уходило из под взора игрока, к тому же в этом случае надо было писать ИИ противника и балансить карты, что в одиночку сделать не просто, к тому же хватает дополнительных задач. Стратегия превратилась в головоломку, где количество поездов и объектов было лимитировано, а ИИ отсутствовал.
Обычный стиль vs low-poly
Внешний вид игры по начальной задумке должен был выглядеть совершенно иначе. Планировалось делать полноценные 3d-модели с диффузными картами, картами нормалей, освещения и т.п. Но сделав вариант поезда (который надо было доделывать, т.к. текстура выглядела слишком реалистично и мрачновато) прикинул сколько времени ушло на одну модель, прикинул сколько моделей всего и решил изменить оформление в пользу low-poly.
Модель со всеми картами:
Без текстуры (1910 треугольников):
Упрощённая конечная Low poly версия:
Сам не любитель low-poly, но играл в игры с подобной визуализацией, которые показались достаточно симпатичными - к примеру "For The king" и "Long Dark". Преимущество такого подхода в колоссальной экономии времени на создание объекта - как на саму модель, так и на текстуру. Если на обычную модель может уйти вечер, то на простую low-poly модель тратится менее получаса.
Диффузная карта всех объектов в игре:
Важность цвета
Нельзя просто выставить цвета наобум и получить хорошую картинку. Поняв это, пришлось поверхностно изучить теорию цветов, осознать, что лучше использовать сочетаемые наборы, так же выручил сайт "colormind" где к имеющимся цветам, алгоритм добавляет подходящие. Сравните сами один из возможных вариантов цвета с финальным.
Свет и постобработка
Отдельное внимание пришлось уделить свету и постобработке, которые существенно улучшают картинку. Уроки легко находятся по соответствующим запросам.
До пост-обработки:
Графический интерфейс
Создание графической части интерфейса было новой задачей, с которой не сталкивался ранее. И так как не планировал развиваться в этом направлении решил использовать готовый вариант. Посчитав, что сэкономленное время стоит 5$, приобрёл подходящий по стилистике вариант в Unity Asset Store. Конечно пришлось дорабатывать, дорисовывая элементы, но это проще, чем начинать с нуля. Вообще существует множество ресурсов где можно отдельно приобретать ассеты - модели, текстуры, иконки и многое другое, вплоть до готовых прототипов игр, и они могут занимать пробелы в конкретных навыках.
Аудио
А вот звуковая часть была неожиданно серьёзной проблемой. Если остальные аспекты я мог худо-бедно сделать самостоятельно, то сгенерировать звуковые эффекты уже не мог. Обращаться с денежкой в студию/к фрилансерам для такого простого проекта было неразумно, покупать банки звуковые наборы тоже - отдельные нужные звуки находились в разных наборах. Пришлось довольствоваться бесплатными наборами вычленяя из них нужные эффекты. На помощь пришёл упомянутый Asset Store, где помимо платных ассетов, имеются и бесплатные, а так же сайт freesound. Причём пришлось потратить несколько вечеров на поиски подходящих звуков. Интересный факт: звук поезда в игре на самом деле звук щётки трущейся о кафельный пол, во всяком случае, такой был комментарий автора.
Время
Времени уходит очень много. Сколько ушло целиком на игру сказать не могу, т.к. много уходило на изучение некоторых вопросов. Всего потрачено около полугода. Как правило по будням сидел по 2-4 часа в свободное от работы время, иногда сидел на выходных. 2 месяца ушло на разработку работающей игровой базы объектов(код, модели, анимации, текстуры), 2 месяца ушло на создание уровней, 2 месяца на тестирование и доработку.
Разработка в одиночку: хорошо или плохо?
Если проект простой, то для самого разработчика наверно хорошо. Можно побывать в шкуре разных участников проекта, оценить их труд, подтянуть свои знания в различных областях. При этом не обязательно делать всё самому - есть ресурсы, где в свободном доступе находятся модели, спрайты, иконки и т.п.
Что касается проектов посложнее, то наверно плохо - так как нельзя достойно выступать в разных ролях на всех этапах разработки, да и физически сил на всё не хватает, что сказывается на качестве игры (к примеру, звук и оптимизация в Rail Lords плохи, а так же хотелось бы увидеть больше уровней). Так же сложные проекты превращаются в долгострой, и не всегда хватить сил довести их до конца.
Итог:
Задачей было разработать полноценную игру, которую не стыдно поместить в портфолио, получить некоторые и развить имеющиеся навыки. С задачей, считаю, справился, но расти ещё есть куда. О потраченном времени не жалею.
А что дальше?
Обычно выходит так: если ты новичок и берёшь сложный проект долгий по времени, ты в процессе прокачиваешь скилы и тебе приходится переделывать начало работы которое твоему текущим скилам уступает. И так может продолжаться бесконечно. В результате потрачено огромное количество времени, а на руках имеешь недоделанный долгострой. Причём для меня это касалось как 2d, так 3d, так и разработки игры.Или есть вариант, где ты берёшь проекты попроще и завершаешь их как есть. В таком случае, через некоторое время у тебя есть ряд реализованных идей, по которым видно, как твой навык растёт.
Поэтому, я учёл замечания и пожелания к игре и постараюсь, если хватит навыков, исправить указанные недочёты в следующей версии. Что касается дальнейшей разработки - беру паузу, хочу вернуться к проекту с новыми силами и когда будет больше опыта за плечами.