{"id":2386,"title":"\u0420\u0435\u0437\u0430\u043b\u0438 \u043f\u0435\u0441\u043e\u043a \u0438 \u0434\u0430\u0432\u0438\u043b\u0438 \u043a\u0440\u0435\u043c \u2014 \u0438 \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432","url":"\/redirect?component=advertising&id=2386&url=https:\/\/tjournal.ru\/promo\/437972-go-to-viral&placeBit=1&hash=e6d32eb9f11d24f6c41bf1fb857925632cc9d8a9c7d22f158ef2e9201b5e8f15","isPaidAndBannersEnabled":false}
Инди
Никита Лукьянов

Процедурно генерируемое безумие

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

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

Почему процедурная генерация? Потому что это весело и позволяет нанести игрокам больше удовольствия за счет меньшего количества контента (что особо важно для соло разработки). Все игры над которыми я до этого работал были основаны на конечном контенте. И самое неприятное в таких играх, это то что они рано или поздно заканчиваются. Поэтому решил попробовать что-то новенькое для себя.
Расскажу немного про лор игры и чтобы не нагружать лишней терминологией все будет обрисовано общими красками.
События происходят в ближайшем будущем. Некая компания открыла удивительный и особо эффективный источник энергии, но проблема оказалась в том, что для создания этих генераторов требуется крайне редкий металл, который практически не встречается на земле. Поэтому семимильными шагами началось строительство космических кораблей, которые смогли бы добывать металлы в космосе и доставлять их на землю. Не без помощи чудесных генераторов, у них это получилось и первые корабли успешно слетали на луну и доставили на землю достаточно большое количество породы. Но на луне не оказалось нужного металла, поэтому разработки продолжились и спустя некоторое время корабль послали на Марс. По неизвестным причинам, первый корабль вышел из строя и был заброшен на марсе. Но зато он обнаружил тот самый металл под поверхностью. Тогда вслед за ним отправили ещё один корабль, который успешно "загрузился" и полетел домой. Хоть во время полета и были выявлены множественные неполадки, но в компании решили что все обойдется и доставить заветный металл надо любой ценой. Но не обошлось. Во время входа в атмосферу корабль начал буквально рассыпаться на части и орошил достаточно большую территорию вокруг космодрома радиоактивными обломками.
Вокруг места крушения был организован кордон и начата немедленная эвакуация населения, однако вскоре все работы внутри кордона были приостановлены, а количество патрулей и вышек вокруг места крушения удвоено. Помимо самой радиации на месте крушения солдаты и спасатели столкнулись с необъяснимыми вещами: дикие звери вели себя странно, а те что получали несовместимые с жизнью ранения продолжали ходить как ни в чем не бывало. Оказалось, что помимо металлов космолет захватил с марса и некую псевдо-органическую дрянь, которая стала катализатором мутаций на месте крушения.
События игры проходят через несколько лет после катастрофы, когда уровень радиации в ближней к кордону области стал уменьшаться. Первоначально туда начали прорываться мародеры с целью наживиться на заброшенных домах и обломках космолёта, однако вскоре они натолкнулись и на различные артефакты, порождённые беспрерывными мутациями.
На этом моменте вы скорее всего подумали: "Да он просто очередной сталкер делает!". И да, и нет. Я планирую различных мутантов и артефакты, но с точки зрения механик это совершенно иная игра.
Начать хотя бы с того, что это "псевдо-платформер": все локации это сосиски по которым ходишь влево-вправо. Каждая сосиска длинной в 1км и имеет "проходы" на соседние сосиски. Всего в игре генерируется порядка 300-500 игровых сосисок, которые соединены между собой в один большой сосисочный мир.

Извиняюсь за неинформативное месиво, это отладочная отрисовка карты

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

Хрущевки генерируются процедурно

Хоть игра и предполагается как песочница-выживалка, но это ложь и провокация! На самом деле это рогалик (рог-лайт для тех кто передергивает на корректность терминологии). В самом простом сценарии у игрового персонажа проблемы с законом и ему не остается ничего, кроме как скрыться за кородоном и заработать денег, чтобы вернуться назад и сделать себе "новую личность". Цель простая и прямая как палка: заработать миллион денег и подкупить военных, чтобы тебя пропустили в цивилизованный мир. Итак, с каждым прохождением игрок будет пополнять базу данных об артефактах, открывать новый шмот и новых персонажей со своими сценариями.
И чтобы скрасить времяпрепровождение игрока за зарабатыванием денег, как раз таки начинается процедурное безумие!

Процедурное безумие в естественной среде

Первое на что надо обратить внимание это погода в игре. У каждой локации она своя собственная: температура, ветер, давление и т.д. Погода перемещается по глобальной карте за счет фронтов и циклонов. Чтобы все не сводилось в полный хаос, у игры имеется определенный "прогноз погоды" в зависимости от сезона. И в соответствие с ним добавляется больше теплых/холодных циклонов, чтобы менять происходящее в ту или иную сторону. Но честно признаться, система получилась на столько инертной и хаотичной, что эти самые "прогнозы" зачастую не успевают воплощаться в жизнь, как приходят новые и начинают менять погоду уже в другую сторону.

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

До непосредственно боевки я ещё не дошел, но уже есть механика оружия (оно собирается из разных модулей) и динамической одежды (любая шмотка может быть создана из разных материалов вроде ткани, сетки или гладкого пластика, а также красится в разные цвета и камуфляжи)

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

Сами болванчики (внезапно!) тоже процедурно генерируемые. У меня получился отменный генератор уродцев по заветам Тода, но не бейте сильно, я же один над этим тружусь. И вообще, у меня игра не от первого лица, и камера никогда не приближается достаточно близко к нпс чтобы игроки получали психологическую травму.

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

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

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

{ "author_name": "Никита Лукьянов", "author_type": "self", "tags": [], "comments": 40, "likes": 25, "favorites": 29, "is_advertisement": false, "subsite_label": "indie", "id": 613489, "is_wide": true, "is_ugc": true, "date": "Mon, 18 Jan 2021 11:11:26 +0300", "is_special": false }
0
40 комментариев
Популярные
По порядку
Написать комментарий...
9

Комментарий удален по просьбе пользователя

Ответить
3

А в чем проблема? Биндинг оф айзек аналогично процедурно генерируется и я бы не назвал его не интересным.

Ответить
7

Сама по себе процедурная генерация это просто инструмент, и он не гарантирует интереса сам по себе.

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

Если же в игре будет РАЗНАЯ ДРЕВЕСИНА или РАЗНОЕ СОСТОЯНИЕ ДРЕВЕСИНЫ, тогда да, безусловно, генерация будет изменять расклад сил в игре.

Ответить
0

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

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

А вообще, так можно на что угодно натянуть: "Осталось только придумать как сделать шутер интересным", "осталось только придумать как сделать градостроительный симулятор интересным".

Ответить
1

Я нигде и не писал, что процедурная генерация = безудержное веселье.

Ну, так он про то ж самое.

Ответить
1

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

Ответить
0

Комментарий удален по просьбе пользователя

Ответить
7

уже есть полностью процедурно генерируемые (да-да) деревья! Они динамически растут, разрушаются, меняют цвет листвы со сменной сезона и разве что не атакую игрока в ответ на попытку их срубить.

Питер Молинье, снимай маску, мы тебя узнали!

Ответить
4

Автор, конечно, молодец и всё такое. Но вот такие попытки сделать процедурно-генерируемый мир с закосом под реализм - это априори meh. Делать надо что-то со стилизацией в духе Risk of Rain или Astroneer. 

Ответить
3

Да почему это априори мех. Если руки из нужного места, есть опыт и деньги на ассеты из стора, вполне можно в реализм, имхо. Грамотную стилизацию тоже не каждый осилит. 

Ответить
0

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

Ответить
0

Тут уже придутся кстати руки из нужного места и опыт. Лично меня до сих пор вдохновляет пример Сергея Носкова с его "35ММ" (и предыдущими играми). И ещё встречались несколько примеров крайне красивых симуляторов ходьбы, запиленных в одиночку. Если человек сам умеет моделить, рисовать, имеет какое-то художественное чутьё, то реалистичная картинка в относительно небольшом проекте становится по силам.

Ответить
0

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

Ответить
0

А, ты именно про сочетание реализма и процедурной генерации? Ну хз, а в чём принципиальное отличие от нереализма? Мне кажется, и там, и там хлебнёшь проблем с реализацией, так что прямые руки в любом случае не повредят. Это, кстати, про любую игру можно сказать.

Ответить
0

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

Ответить
0

Ну, это два совсем разных проекта, с разным уровнем и количеством этой самой процедурной анимации. Разве их можно сравнивать в лоб? Так-то бахать ландшафт, раскидывать по нему заранее заготовленные деревца и комбинировать интерьеры домиков – тоже вполне себе процедурная генерация, но объём совсем не такой, как в NMS, где надо валять целые экосистемы и собирать живых существ из отдельных "кирпичиков". Плюс, помимо процедурки, 99.99% вылезет ещё куча подводных камней в плане реализации геймплея, так что это не самое страшное, имхо.

Ответить

Центральный файл

4

Ммммм, процедурно генерируемые хрущевки....

Ответить
1

В реальности они стандартизированы - их 1-2 вида. Разница лишь в остеклении который наносили граждане на балконы

Ответить
2

1-2 вида? Их огромное количество серий, и отличаются они методом постройки (панельный, панельно-кирпичный, объемно-блочный), региональными и климатическими особенностями конструкции (почитай про особые серии для дальнего севера, например для Якутска), статусными особенностями и временем постройки. Если хорошо считать, то там за несколько сотен модификаций, которые сильно отличаются между собой. 

Ответить
0

В рамках одного города серия менялась не чаще чем раз в 10 лет.
Вообще борьба с архитектурными излишествами Хрущева привела к тому что сотни хулодников и архитекторов оказались не у дел. 

Ответить
1

не чаще чем раз в 10 лет

Ты скозал? Личное наблюдение твое?
А откуда же тогда такое колоссальное разнообразие серий?
Их наверное в вакууме строили. Хотя да, по сравнению с числом брежневских серий их и правда не много, но что-то мне подсказывает, что у тебя и брежневок "1-2 типа".

Вообще борьба с архитектурными излишествами Хрущева привела к тому что сотни художников и архитекторов оказались не у дел.

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

Ответить
0

Хорошо хоть не кубы.

Ответить
2

Статья, наверное, тоже сгенерирована процедурно)

Ответить
0

Комментарий удален по просьбе пользователя

Ответить
0

Дело не в космической радиации, а в новом генераторе который они изобрели и вставили в космолет.

Ответить
0

Комментарий удален по просьбе пользователя

Ответить
1

Из-за того что c#, он гораздо лаконичней блюпринтов и с++. У меня уже в проекте 40к строк исходного кода. Если бы оно было на крестах, то я бы уже повесился давно.

Ответить
0

нанести игрокам больше удовольствия

Тяжкого телесного, судя по скриншотам, без обид)

Ответить
0

Так в статье в основном приближенные картинки из редактора, на деле камера достаточно отдалена и смотрится не так кринжово

Ответить
0

"и смотрится не так кринжово"

А зачем тогда продурка персов если их не видно на таком удалении

Ответить
0

Помимо морды лица у них цвет кожи/толстоста/накаченность меняется.

Ну и выше скрины на макс. отдалении камеры (она колесом мыши масштабируется), если приблизить, то какие-то детали вроде лопоухости или бороды различаются

Ответить

Блестящий

Никита
0

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

Ответить
0

Система анимации есть и она работает. Или вы что-то другое имели в виду?

Ответить

Блестящий

Никита
0

кожи/толстоста/накаченность 

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

Ответить
1

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

Ответить
0

Эксплорейшкн, фарм ресурсов, крафт, одна жизнь, несгораемые плюшки, кривая прогресса.

Ответить
0

В середине Галустян что-ли целится?)

Ответить
0

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

Ответить
–1

Кайфую от амбиций сделать кучу всего процедурного — прям захотелось такое потыкать.

Но простой вопрос: а как это будет в итоге грузиться все? Загрузки уровня не нужно будет ждать по часу, пока сгенерируется каждый камешек?

Ответить
0

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

Ответить
Читать все 40 комментариев
null