Войти
ПроектыФорумОцените

Niko Saves World [RELEASED][Конкурс: «Я слышу тебя!»] (2 стр)

Страницы: 1 2 3 49 Следующая »
#15
(Правка: 19:02) 18:46, 23 мая 2021

Еще хочу сказать пару слов про процедурную генерацию мира в играх.

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

GAIA
MapMagic World Generator
World Creator

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

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

Если очень упрощенно то default game выглядит так: есть граф с вершинами - городами и ребрами - дорогами. Игрок просто ходит из одной вершины в другую по ребрам-дорогам. Все. Террейн в этой схеме - всего лишь фон, не играющий особой роли. Он дает только визуал.

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

Вот эти два - MapMagic World Generator и World Creator - строят только террейн. Дороги и тем более горда - нет. Ну ок, на ассетсторе есть несколько ассетов для рисования дорог. Но блин, это ж сколько времени нужно ухлопать, что бы их нарисовать поверх террейна. И кроме того, ведь если вам очень захочется перестроить террейн, то каждый раз нужно будет рисовать дороги заново, ведь генератор перестроит террейн полностью.

Если взять GAIA, то она вроде как строит домики тоже. Но для этого нужен еще GeNa. Ок, покупаем гену. Смотрим в него и что? А ничего, там нет процедурной генерации. Он предлагает рисовать все поверх террейна ручками. Блин.. облом.

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

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

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

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

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


#16
(Правка: 20:20) 20:11, 23 мая 2021

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

Нико исследует свое новое место жительства:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

Покатушки ночью:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#17
11:56, 24 мая 2021

Отлично выглядит, дороги правда широковаты, будто каждая улица в городе главная.

#18
14:09, 24 мая 2021

Olagarro
> Отлично выглядит
Спасибо :)


>дороги правда широковаты, будто каждая улица в городе главная.

Главные дороги - 4 полосы в каждую сторону (23 метра), второстепенные - две полосы в каждую сторону (12 метров). Это вполне по стандарту.
Я и так хотел еще шире сделать. Потому что там по краям будут машины еще припаркованы. И движение двустороннее. А в игре предусматриваются гонки и вообще активная езда по городу. А там на дороге не то что гонки, а вообще протиснуться сложно будет.

#19
(Правка: 15:37) 15:36, 24 мая 2021

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

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

Таким образом, пожертвовав некоторой долей независмости гексов можно повысить интересность генерации.

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

-———————————--
Принцип "сперва генерируем контент, потом под него натягиваем ландшафт" - не тот путь, чтобы получить интересный результат.
Если позалипать на карты реальных городов, то можно увидеть, что на равнинах идёт однообразная генерация застройки (как тут уже заметили, похоже на Москву), а интересное начинается там, где "IRL генератор" натыкается на естественные препятствия - холмы, реки, побережье. Они разбивают монотонность генератора и позволяют получить всякие оригинальные штуки - никто не будет прокладывать улицу змейкой или спиралью если она не должна забираться на гору.

#20
(Правка: 17:10) 17:05, 24 мая 2021

pacos
Спасибо за коментарии.

В принципе я почти со всем согласен. Но хочу уточнить по пунктам:

У тебя есть два противоречащих требования: локальная независимость и интересный результат

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

Если слегка поступиться правилом локальной независимости

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

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

Ну на самом деле этот подход не противоречит моей схеме. У меня тоже можно объявить гекс "морем".
Только нужно ввести правило, что делать гекс "особым" можно только если все его сосдение гексы "не особые". Иначе - может нарушиться связность мира.

Есть набор правил, по которым происходит развитие городов в реальности:

Оно то да. Только у меня не симулятор реального мира. У меня игра. Игрок может и не заметить насколько логично построен мир. Его это не особо волнует. Интересность мира != его логичность.
К тому же, игра не может генерировать реальный мир. Игра это всегда упрощение. Весь фокус в том, что бы выдать простые алгритмы за настоящий мир.
Построить мир "по правилам" оно конечно можно. Но в данном случае цель не это. Цель - сделать мир похожий на настоящий минимальными усилиями.

Идею с генерацией имён и названий городов не понял

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

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

Вот здесь я не согласен.

а интересное начинается там, где "IRL генератор" натыкается на естественные препятствия

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

#21
19:09, 24 мая 2021

Из интереса, засунул в генератор имен список американских компаний.
На выходе получил:

+ Показать

Ну, не так уж и плохо :)

#22
22:30, 24 мая 2021

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

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

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

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

> К тому же, игра не может генерировать реальный мир. Игра это всегда упрощение.
> Весь фокус в том, что бы выдать простые алгритмы за настоящий мир.
> Построить мир "по правилам" оно конечно можно. Но в данном случае цель не это.
> Цель - сделать мир похожий на настоящий минимальными усилиями.

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

> А с городами такая история, что если брать настоящие города, то может
> получиться такая штука, что село из сарая и трех домов будет называться
> "Нью-Йорк". И это будет очень напрягать игрока. А если имя вымешленное - то оно
> ни к чему не обязывает.

Я не писал, что вымышленные названия это плохо, я писал что алгоритм генерации не подходит для городов. Нужен крафтовый. Например, я генерирую советские названия городов из кусочков:
[Лосино][городск][-Петровский]
[Высоко][вое]
[За][каменск]

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

#23
22:37, 24 мая 2021

Zeus44
> Из интереса, засунул в генератор имен список американских компаний.

Замечу, что Dole это реальная компания. Так что если твой генератор выдаст реальное название (деревню назовёт Нью-Йорк), то это не обязательно будет воспринято негативно. Это может быть и пасхалка, а может быть и просто совпадение (IRL названия городов не уникальны и встречается много городов-тёзок).

#24
0:16, 25 мая 2021

А ничего, что по правилам конкурса не подходит проект? Помимо генерации нужен звук, только звук как ОСНОВНАЯ часть геймплея.

#25
2:09, 25 мая 2021

Zombrine
> А ничего, что по правилам конкурса не подходит проект? Помимо генерации нужен
> звук, только звук как ОСНОВНАЯ часть геймплея.

Где там такое написано? Ничего подобного там нет.
Впрочем, я не настаиваю. Я проект буду делать в любом случае, хоть с конкурсом, хоть без.

#26
2:35, 25 мая 2021

Zombrine
> только звук как ОСНОВНАЯ часть геймплея.
это не так, в игре должен быть звук и генерация. можно генерацию звука, но это не условие.

#27
(Правка: 9:08) 9:07, 25 мая 2021

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

#28
14:40, 25 мая 2021

Zeus44
Я не знаю размер твоих гексов, так что возможно мои размышлизмы тут вообще не применимы.

Кстати, советую потрогать True Crime: Streets of LA, возможно она подскажет как нужно и как не нужно делать. Там взяли реальную дорожную сетку ЛА и нагенерили по ней одно-двух этажной застройки. Даунтаун с небоскрёбами и всякие достопримечательности там были сделаны вручную, но бОльшая часть площади города сильно похоже на то, что ты хочешь сделать.

#29
17:47, 25 мая 2021

pacos
> советую потрогать True Crime: Streets of LA

Не, не буду пока смотреть. Врядли я в одиночку смогу сделать также как они.
Не хочу расстраиваться :D

Страницы: 1 2 3 49 Следующая »
ПроектыФорумОцените