Серия «Разработка игры -> Restoration of Teim»

29

Делаю генерацию мира для своей игры. Делюсь с вами прогрессом за 3 месяца

Серия Разработка игры -> Restoration of Teim

А заодно чего-нибудь авторского в Пикабушку подкинуть)

Делаю генерацию мира для своей игры. Делюсь с вами прогрессом за 3 месяца

Бомжорно Добрый день! Я уже очень долгое время (Целый год, ага), пытаюсь реализовать свою задумку в виде приключеской игры (с налётом RPG), где мы будем исследовать множество миров-дисков (Осколков) бороздящих просторы вселенной.

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

Вот так генерация леса и окружения выглядела ранее:

А вот так это все выглядит сейчас:

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

Буквально вчера сделал эти динамические облачка через шейдеры, нраица

Модель игрока и текстурки - временные плейсхолдеры (заглушки)

Благодарю за внимание)

Показать полностью 1 2
17

Средовая игро-жаба

Серия Разработка игры -> Restoration of Teim

Добрый вечер! Успел к концу среды (почти)! Делаю первого моба для своей игры, травяная жаба, ну и как в среду жабу не выложить)

Прыгать жабь тоже умеет, для того чтобы он научился прыгать пришлось одарить его "скелетом":

Ну и язык у нее есть да, шипастый) Будет использоваться чтобы хлестать по жопе нерадивых приключенцев)

Показать полностью 2 1
33

Продолжаю развивать свою игру мечты (Часть 3)

Серия Разработка игры -> Restoration of Teim
Продолжаю развивать свою игру мечты (Часть 3)

Доброго времени суток! Это "третья" часть серии постов про разработку моей игры-мечты со случайно генерируемым миром из огромных гексов, все посты серии вот:
Процедурный мир из огромных гексагонов

И так, я долго ничего не писал потому что завозился в основном с техническими моментами. Однако на данный момент небольшой массив информации на небольшой пост по "сусекам" наскрёб и решил написать как идут дела)

  1. Разделение мира на Чанки (Chunk - Кусочек)

Да, раньше оптимизации у мира толком не было, и он чуть ли не весь рисовался... Теперь гексы мира разбиты на чанки 8 на 8 гексагонов, и отрисовываются только соседние к чанку в котором игрок, и сам чанк в котором находится игрок.

2. Первые наработки карты мира

Всё это пока выглядит максимально не очень, но база заложена, дальше "Туман войны", визуал, иконки существ, структур, как раз к следующему посту) В игре очень большой мир (128х128 чанков) и исследовать его без карты мира будет, мягко говоря, невозможно.

3. Обновлённый сосновый лес

Я наконец определился для себя с визуальным стилем, и наконец нашел около-финальный вариант дизайна 2го по величине биома в игре - Сосновый лес. Ёлки, внизу упавшая хвоя вперемешку с редкой травой и папоротником, и грибы. Лично мне очень нравится. Думаю добавить еще валуны, и пеньки.

4. Наброски руин

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

На это всё не густо. Спасибо за внимание!

Показать полностью 2 3
13

Создаю случайный мир из Гексагонов (Часть 2.8(?)) Мини-дополнение: Реки и Ландшафт

Серия Разработка игры -> Restoration of Teim

Доброго времени суток! Ещё ещё один небольшой пост-дополнение ко второй части, только даже меньше предыдущего, поэтому и не отдельная часть.

1. Реки:

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

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

К тому же при создании мира у игрока будет возможность настроить количество рек в мире


2. Ландшафт:

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

Решил это исправить:

Теперь в том числе и сами гексы неровные, холмики, маленькие яркие. Так мир смотрится интереснее

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

На этом всё, спасибо за внимание! Больше дополнений не буду лепить, а сделаю прям третью часть когда наберется массив доработок)

Предыдущие посты:
Создаю случайный мир из гексагонов (часть 2.5) Дополнение - Маска генерации, Структуры

Создаю случайный мир из огромных гексагонов (Часть №2)

Процедурный мир из огромных гексов (ч.1)

Показать полностью 2 1
13

Создаю случайный мир из гексагонов (часть 2.5) Дополнение - Маска генерации, Структуры

Серия Разработка игры -> Restoration of Teim

В дополнение к посту:
Создаю случайный мир из огромных гексагонов (Часть №2)

Добрый день/утро/ночь/вечер! Решил дополнить предыдущий пост своими доработками, их не так много чтобы писать отдельно, но они есть и захотелось о них написать)

1. Маска генерации - прошлом посту я похвастался что мир у меня теперь стал в форме диска, но я не указал как я это сделал, а на самом деле все довольно просто

Сама карта данных мира это 2д сетка, с ячейками по X и Y координате, которая при генерации уже конвертируется в гексагональную поверхность, вот мир если не использовать "округление":

А знаете что ещё является "2д сеткой"? Да любое растровое изображение в формате png, jpg и.т.д.

Поэтому я прошёл к невероятно простому решению, сделать картинку 128×128 пикселей (а это размер игрового мира), где цвет каждого пикселя будет нести в себе какие-то данные для генерации, красный например заблокирует ячейку для генерации

Вот сама маска:

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

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

Ну и вышло здорово, вот кину повторно картинку для наглядности:

2. Структуры - я сделяль. Причём довольно гибкую и удобную систему генерации лёгких и сложных структур.

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

Так вот, "сложная структура" это когда она состоит из нескольких гексов, Замок например:

Причём Замок не просто расползается на 3 гекса, он подстраивает под себя биом и ландшафт, выравнивая его вокруг себя.

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

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

Ну и в дополнение к дополнению:
Дубовый лес, просто дубовый лес

Всем спасибо за внимание! Продолжаю работу, впереди ещё гора идей как сделать мир лучше и визуально и функционально!

Показать полностью 7
17

Создаю случайный мир из огромных гексагонов (Часть №2)

Серия Разработка игры -> Restoration of Teim

В продолжение к посту: Процедурный мир из огромных гексов (ч.1)

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

(Раньше он был квадратным)

(Раньше он был квадратным)

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

А как по этому перемещаться?

Проблема в том что игроку нужно же как-то бегать по миру, а так как мир большой, и акцент в игре планируется на исследовании, бегать надо будет много. И как бегать по миру состоящему из групп склонов с углом в 90 градусов на разных высотах в диапазоне от 10 до 50? Никак, удаляй

У меня было несколько идей:

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

Но попробовал так перемещаться по миру, я задушился об это говно решение. Игрок минут за 10 может перебежать через десятки гексагонов и групп высот, и унылое лазанье отобъет всё желание в эксплоринге мира.

Ну и пришел к идее "Склонов", градусов под 40-45. Не без подсказок от читателей:

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

Кадр из видео, если лень смотреть.

Кадр из видео, если лень смотреть.

Ну и само видео. На нём можно заметить что ёлочки генерируются прям в склоне, но это я поправлю чуть позже.

Теперь мы можем с комфортом перемещаться по миру, не прерываясь на бесконечное скалолазанье и винтовые лестницы. Как по мне отличное решение!

Так же в мире появилась заготовка под море и водичку. Пока страшненькая но есть (Раньше воды вообще не было, а кроме суши была "пустота"):

Ну и наконец я начал работать над механизмом генерации структур, замки, руины, деревни, вот это всё. Вот например один сегмент Замка игрока (их всего 3), сгенерировавшийся в мире:

Но о генерации структур я подробно опишу когда её доделаю, в следующем посте. Спасибо всем за внимание!

Показать полностью 7 1
24

Процедурный мир из огромных гексов (ч.1)

Серия Разработка игры -> Restoration of Teim

Как я создаю себе несложный процедурный мир не привлекая внимания санитаров

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

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

Сделать мир из огромных гексагонов? Звучит как хуета отличная идея! 💡

1. Генерируем двумерную карту

Перед тем как создавать гексагоны надо сначала создать/сгенерировать сам ландшафт в виде двумерной матрицы, где будет вообще ландшафт, перепады высот, какие будут в каком биоме и.т.д.

Предварительно я разделил для себя мир на несколько "слоёв":

1. Карта поверхности, на ней будет определена структура мира, в каких ячейках гексы вообще будут существовать собственно. База одним словом

2. Карта высот. На этой карте будут заданы группы высот для гексов, чтоб мир был не "плоский"

3. Карта биомов. На этой карте мы сформируем будущие группы биомов.

4. Карта рек и озер. Несмотря на "крупногексагональный" форм-фактор будущего мира, я хочу чтоб по нему текли реки и были озера. Эта карта пометит условный гекс (или же ячейку массива) как имеющую реку, а там разберёмся

Вот они, слева направо, их боялся весь проект

"Чё ты там нахуевертил" - Скажите вы щурясь как азиат из мема

Я художник! Я так вижу! На самом деле это техническая визуализация уже сформированного мира в 2D матрице, мне же надо было как-то смотреть на то что там выходит вообще.

"И шо ты, пёс, даже не расскажешь как ты это генерировал?" - спросит моя воображаемая аудитория.

А я вам отвечу! Нет. Сейчас все обьясню! И так, А-а-а-а-втомобиль лгоритм в студию!

Смотрите, существуют адекватные разработчики, которые, когда речь заходит за процедурную генерацию, в первую очередь думают в сторону шумов, тот же Шум перлина (Perlin Noise) это идеальный способ выстроить и попиксельную 2д карту ландшафта, с перепадами высот (чем темнее пиксель тем выше). Выглядит он вот так:

Но причём тут адекватные разработчики, и я)

Я сделал это по принципу который придумал себе ещё на первом курсе, саморастущие ядра (шо?)

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

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

Выглядит это вот так, и в принципе формируется нормальный +- ландшафт:

Жёлтые - ядро
Синие - захваченные ядром ячейки

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

Создаются группы высот которым назначаются высоты, которые при генерации самих гексов собсна говоря и передадутся.

В этот раз ядра, это ромбики, а разным цветом обозначеныгруппы высот:

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

Круто! Теперь у нас есть карты двумерных массивов содержащие все необходимые данные для генерации крупногексагонального мира

Используя гайды из Habr свои навыки и умения, я написал скрипт в котором циклом производится проходка по, сохраненным ранее в двумерные массивы, картам данных, и на основе этих данных формируется... Пока только гексагональная 3д структура с разными высотами:

Красиво, но пусто, а давайте запустим туда нашего персонажика которого я создал "за кадром"

Теперь вообще и пусто и некрасиво... Миша все хуня давай по новой! Тебе так никто денег не даст!

Добавим генерацию биомов, чтобы гексам относительно их адреса в карте биомов присваивался соответствующий биом:

Во, уже лучше! Это правда "биомы" пока условные, просто гексы те же, с разными структурками, на итоговый вид это особо не повлияет. Так что нужно на гекс навесить деталей. Tiling time!

Во, так лучше, только надо вот эти стыки на ровной поверхности убрать.

А ещё добавлю "детали" какие нибудь, пусть будут ёлочки в биоме "лес", пока с временной графикой, пара текстурок.

Сделаю банальной "россыпью" этих елочек на каждый гекс

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

+ Мне ещё предстоит решить проблему как игроку перемещаться между гексами с сильными перепадами высот... Лестницы? Винтовые пещеры? Прыгучие платформы? Лианы? Надо думать...

p.s. У самих гексов реализован LOD, и их детализация уменьшается на отдаленном расстоянии от игрока, а дальше и вовсе отключается. Так же я сделаю с деталями на гексах я думаю.

Спасибо всем тем двум людям которые дочитают эту тягомотину до конца!

Показать полностью 11
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества