Как я в одного сделал игру за 4 месяца ни разу не купив ассеты

Дорогой читатель! Я бы хотел описать тебе свой личный опыт в создании компьютерной игры в одиночку. Прошу тебя не повторять этот опыт – это опасно для здоровья.

Резкое желание сделать самостоятельно игру пришло в конце августа 2020 года из-за невозможности устроиться на работу художником: я был очень зол, что имея большой багаж знаний, рекрутеры даже крупных компаний попросту игнорировали мои письма. Так получилось, что я беру это очень близко к сердцу.

Первая неделя

Необходимо было сделать игру, максимально дешевую и максимально упрощенную в плане производства; идти по пути наименьшего сопротивления, создав при этом неповторимую атмосферу, которая цепляла бы игрока, не прибегая к готовым решениям. Были установлены формальные рамки по геймплею (около 1 час) и разработке (около 2,5 месяца). Жанр, очевидно, стал пазлом, ибо работа с NPC и оружием требовало бы много времени.

Первое, что пришло в голову — панельки. Сделать все дома в игре панельными оказалось крайне выгодным вложением. К визуальному сожалению, город — это не только дома; это и дворы, и улицы. Единственное, что пришло на ум, так это завалить снегом весь город, подобно Норильску или Якутску. Именно так наш герой попадает в небольшой вымышленный город где-то в Сибири. Для экономии времени, было принято решение не делать развертку для моделей и отказаться от текстур – вместо этого я решил использовать паттернезированные текстуры общего назначения: камень, снег, лёд, бетон и т. п.

Панельный дом 606-серии был выбран только потому, что я в нем живу.

Из софта: игровой движок – Unreal Engine 4.21, моделлинг — Maya 2017, звук — Ableton Live 9, текстуры — Substance Painter 2019.

Как я в одного сделал игру за 4 месяца ни разу не купив ассеты

Невозможно представить, что в невероятно™ крутом™ игровом движке не реализована система полуфабрикатов, которая бы упрощала построение уровней. Blueprint-префаб из StaticMesh даже с пустым конструктором и static mobility гарантировано дает просадки фпс и фризы, когда количество экземпляров на уровне превышает тысячу. Из-за чего пришлось по старинке собирать дома с помощью GroupActor на отдельной карте ¯\_(ツ)_/¯

Ночное освещение было выбрано в игре не случайно: темные места скрывали халтурную работу; там, где сокрыть не получалось, в ход шел снег и пост-процессинг.

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

Вторая неделя

Эта неделя стала экспериментом, чтобы оценить, как быстро можно сделать одну игровую карту до альфа-версии. Работал я 5 дней по 8 часов с перерывом на обед.

нормаль-карта на снегу – простой шум
нормаль-карта на снегу – простой шум

Помните Зен в Black Mesa? Все эти острова сделаны из дисплейсментов — некий аналог Landscape. Unreal Engine не умеет сшивать два куска Landscape (!); хотя движок 2004 года может (!!). Вдвойне забавно то, как работает Landscape: вместо того, чтобы использовать технологию Vertex Color, пускай и с ограниченным числом слоев, вам предлагается делать большее количество слоев с помощью отдельного (!) шейдера, который является комбинацией этих слоев и компилируется каждый раз, когда вы применяете его на ландшафт; при этом сами слои идут отдельными файлами в sharedassets.

Я примерно понимаю зачем так делать. Это оправдано в играх открытого типа как Crysis, но, блин! Это ведь универсальный движок.

Под конец недели я начал делать геймплей. Оказалось, что логики тут попросту не существует: нет механизма смены карт, нет дверей, в этом движке нет даже воды! Это все кажется свирепой шуткой, ведь все вышеперечисленное есть в Id Tech 2 1997 года прямо с коробки.

Тут стоит сделать отступление, что всю игру мне пришлось реализовать на Blueprint вместо С++. Visual Studio попросту не ставился на Windows 7 и писал ошибку; я не смог найти решения и положил болт. Я еще никогда так не ошибался (он все же нужен для упаковки приложения).

Работать с Blueprint это невероятное наказание людей за все смертные грехи. Это псевдоязык программирования, очень громоздкий в оформлении и на нем нет части важных функций из движка, в нем нельзя делать наследования структур, он без указателей, в нем нельзя делать Volume акторы; и даже ребиндить клавиши на клавиатуре. Если ты хочешь делать что-то быстро, то он будет невероятно не интуитивен, и через сутки `код` станет попросту нечитабельным.

код двери, похожий на php фреймоворк 11-летнего школьника
код двери, похожий на php фреймоворк 11-летнего школьника

К концу недели карта была готова, но геймплей был весь на костылях, а головоломка попросту не работала как надо. Мне пришлось отказаться от выходных, в пользу создания базовых логических акторов на подобии тех, что есть в Source Engine.

Первый месяц

После удачного эксперимента я приступил к созданию тестового прототипа игры. Из-за функционала Blueprint оказалось абсолютно бессмысленным создания плавных переходов между уровнями, равно как и имплементацию системы сохранении и загрузок.

Все это время я продолжал делать функциональные акторы, логику, двери, триггеры. После, я сделал временное меню с минимальным функционалом.

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

Нужно было как-то описать место действия. Сначала я задействовал стандартное клише, где ты писатель, попавший в автомобильную катастрофу и случайно оказавшийся на берегу речки вдали от города. Затем, совершенно того не предвидя, я вписал место действия во вселенную, которую сам же и придумал для своей не вышедшей книги. Чтобы не портить вселенную, место действия игры я отодвинул в отдаленное будущее. Вымышленные механизмы стали конкретными в рамках этого мира. Но философии в игре все ещё не было.

Второй месяц

Второй месяц разработки был полностью отведен для создания альфа-версии игры. Я решил, что игра на 1 час геймплея поместится на 6 картах, и это суждение было ошибочным — в итоге игра растянулась до трех часов.

местный диздок
местный диздок

Нужно было придумать головоломки, и я опять позаимствовал идею из не вышедшей книги. Только взял частный случай — не делать игру с плавными перемещением в прошлое, будущее и настоящее, а ограничился двумя крайне отдаленными и ничем не связанными пространствами (настоящее – будущее), где игрок свободно перемещаться между ними.

Как я в одного сделал игру за 4 месяца ни разу не купив ассеты

Я всегда подшучивал над теми, кто придумывал и разрабатывал геймплей. Я считал, что их работа малозначимая, по сравнению с программистами, например. Мне стыдно, что я имел наглость так думать. Именно на стадии создания головоломок мозг начал рассыпаться на части — необходимо было быстро придумать что-то такое, что не заставит заскучать игрока. Нужно было считаться со всеми головоломками в игре, и, плавно наращивать сложность.

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

местная тикет-система; вся игра обошлась в 42 страницы, около 300 пунктов
местная тикет-система; вся игра обошлась в 42 страницы, около 300 пунктов

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

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

Третий месяц

Альфа-версии карт (сырые, почти без геймплея) были уже готовы. Необходимо было заново пройтись по всем картам, чтобы исправить все недочеты, сделать ночное освещение, и реализовать нормальный геймплей. Из-за повышения запросов, пришлось делать текстуры и модели для панельных блоков, дерева, асфальта, и тому прочее. Также пришлось использовать собственные пропы из другого проекта, чтобы хоть как-то заполнить пустоту уровней.

О звуковом сопровождении. Для музыки я использую личную библиотеку сэмплов, для всего остального — в основном freesound.org и Hollywood Edge. Для игры были с нуля записаны звуки ходьбы по снегу и щелчок для фонарика на телефон Sony Xperia XZ1 Compact. Некоторые звуки не были сэмплированы, а синтезированы на FM8. Иногда я позволяю себе шуточки, и ресэмплю до неузнаваемости маленькие фрагменты различных известных композиторов. В этот раз выбор пал на Сергея Бобунца.

звук двери default_move.wav из Half-Life 2 – в геймдеве редко кто записывает с нуля абсолютно все звуки
звук двери default_move.wav из Half-Life 2 – в геймдеве редко кто записывает с нуля абсолютно все звуки

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

Вместо сохранений появились чекпоинты, длинною в карту. Вместо настроек клавиатуры — лишь список, какие клавиши надо нажимать. Некоторые геймплейные элементы были попросту вырезаны из игры из-за сложности реализации – я хотел сделать магнетизм электрических линий, чтобы игрок мог баловаться с физикой игры. Некоторые головоломки были либо отклонены, либо переработаны из-за своей сложности или неочевидности. Обстановка менялась динамично.

Как я в одного сделал игру за 4 месяца ни разу не купив ассеты

Необходимо было добавлять сюжетные детали. Для игры пришлось по-быстрому сваять свою гарнитуру шрифтов через FontForge и спрятать скрытые послания, добавив некоторые элементы примитивной расшифровки.

И тут, к концу месяца моя крыша поехала совсем.

Я перестал ощущать реальность. Отдых фактически отсутствовал, массовые переработки вызывали панику и чрезмерную тревогу. График 5/2 стал плавающим, мне приходилось сдвигать выходные из-за переутомления. Я начал употреблять кофеин в чрезмерных дозировках, но и это не помогло. Я стал заметно больше спать и больше употреблять пищи, а утомление было сродни тому, что я какой-то грузчик и прихожу домой после очень тяжелой смены. У меня начались первые бредовые идеи, что игра невероятно унылая и скучная, что мне лучше забить и сдаться. Но я не сдавался.

Каким-то невероятным образом я смог сделать бета-версию игры к концу месяца. Я взял передышку на 3.5 дня.

Четвертый месяц

Это был самый сложный месяц в моей жизни.

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

Как я в одного сделал игру за 4 месяца ни разу не купив ассеты

Мне постоянно казалось, что игру нужно срочно исправлять. Было предпринято с десяток попыток сделать игру лучше, но все они были провальными. И если раньше я придумывал хитрые иллюзии (чего стоит добавить сугроб автомобиля), то сейчас все идеи лишь ломали атмосферу и делали игру заметно хуже.

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

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

на самом деле, композиция оказалось крайне простой – 3 дорожки и стандартный пресет FM8
на самом деле, композиция оказалось крайне простой – 3 дорожки и стандартный пресет FM8

Оставалось совсем чуть-чуть. Я сделал текстуру для гвоздемета, релокатора, добавил человеческих костей, и мне осталось только одно – оптимизация. Игра должна была быть доступной для среднего пользователя. Я пытался выжать хотя бы 24 fps на ноутбуке шестилетней давности. Мне пришлось уменьшить количество снега, сделать LOD’ы везде, где только можно и нельзя, стараясь опираться в цифру не более 500,000 треугольников на кадр. Пришлось отказаться от ряда фич пост-процессинга, такие как блики. Также на картах, где есть куча панельных домов, луна перестала отбрасывать динамичные тени, давая +3ms к кадру.

На четвертой карте я выявил масштабную проблему, решение которой был полный отказ от CableActor в пользу самописного костыля. В двух словах — длинная электрическая цепь изначально была односегментной веревкой с текстурой, у которой отключена физика. По какой-то причине если было создано порядка 100 таких веревок и затем, они были удалены, где-то происходила неправильная работа сборщика мусора, из-за чего фпс пилообразно поднимался и резко спускался в течении длительного времени.

4,5 месяц

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

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

Как я в одного сделал игру за 4 месяца ни разу не купив ассеты

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

Личные выводы:

  • Изначальная цель проекта провалилась. Зато получилась искренняя и самобытная во всех отношениях видеоигра
  • Все сроки безнадежно были провалены
  • Также мне пришлось использовать свои наработки, которые уже были и ждали своего часа
  • Unreal Engine в коробке без всяких дополнений – это больше рендер-движок, чем игровой
  • Blueprint – это десятки тысяч часов работы программистов, потраченных в пустую. Это абсолютно неудобная и не практичная вещь, и я не думаю, что она хоть сколько-нибудь значима в коммерческой разработке
  • Переработки сильно вредят здоровью

Я только начинаю приходить в себя. Писать эту статью – первый шаг к выздоровлению.

Всем здоровья!

350350
158 комментариев

Комментарий недоступен

67
Ответить

больше скажу - ...я столько не выпью!

6
Ответить

Unreal Engine в коробке без всяких дополнений – это больше рендер-движок, чем игровойПроблема не в движке, а в твоих скиллах

46
Ответить

да там чувак два тайла мировой карты сшить не смог) о чем речь то вообще

9
Ответить

Я ещё знатно охерел с его описаний блупринтов - сложно, неудобно и т.д. Просто шта...

3
Ответить

Мда чел, сочувствую. Кранчить, когда на тебя никто не давит, кроме себя - неудивительно когечго, но прискорбно.

А что за игра-то? Можно поиграть?

17
Ответить

в игре надо ходить вокруг 9 вите эташек с таким лицом:

58
Ответить