Бесконечный, бесшовный ландшафт. Инди кооперация

Продолжу публикации, пока не уйду в глубокий минус. Когда читать никто не будет)).

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

1. Главное. Ландшафт бесконечный и бесшовный. Надо про все забыть на время чтения. Просто это понять. Забыть про сетки террейнов, про их формирование и т.д. Точка.

2. Для чего?. Это создается для игры, где важен большой, расширяемый, изменяемый(по необходимости), дополняемый ландшафт. Можно его делать сколько душе угодно, с любой площадью, пока не устанет рука и не кончится кофе. Конечно для игр с маленькой локацией он не нужен вообще. Но когда главными ресурсами являются территории, то это как раз для этого написано. Я делаю игру именно когда важные ресурсы игры не палочки и камешки, а территории, поселения, люди(позже будет про них).

2. Масштабы. По ландшафту можно идти бесконечно, ограничено значением float (может переделаю в double, но это не важно потому что территория формируется блочно)

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

4. Как?. Рельеф для больших ландшафтов создавать сложно. Можете попробовать. Как правило используют известные редакторы, формируют сетку. Да это удобно, вытягивать кистью высоты. НИКТО НЕ СПОРИТ. Но для больших ландшафтов это долго, но возможно. Я так и начинал.

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

Теперь сама техника создания ландшафта:

1. Сначала создается карта, любая, как душа пожелает. Закрашивается дружественными цветами, расчет высоты идет по цвету Red системы RGB. Красный выбран, так как с ним можно подобрать именно дружественный цвет для рисования ландшафта.

Бесконечный, бесшовный ландшафт. Инди кооперация

2. Выделяется сегмент. Сегмент должен соответствовать определенным параметрам , так как его данные используются подпрограммкой для формирования высот для участка ландшафта. Пока с разрешением 5121x5121pxl, потом может сделаю интерполяцию. Такое разрешение позволяет, по опыту наиболее продуктивно использовать программы. Но это не окончательно, можно переделать и до 6x6 кв. км. и т.д.. Меня устраивает.

Бесконечный, бесшовный ландшафт. Инди кооперация

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

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

Можно сушу:

Бесконечный, бесшовный ландшафт. Инди кооперация

Можно море:

Бесконечный, бесшовный ландшафт. Инди кооперация

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

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

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

Бесконечный, бесшовный ландшафт. Инди кооперация

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

Хочу еще написать, что ландшафтный движок, это всего лишь часть игры. Как я писал ранее, но решил более его подробно описать из за моей недосказанности и недопонимания. Еще раз хочу сказать я не собираюсь соревноваться с известными движками, не надо рекламировать их и тем более из победить. С основной функциональностью движков я знаком. Если кто то считает что такое уже там есть, но пожалуйста в комментарии ссылки, мне это важно. Логика где подгружается локация с сеткой ландшафта (как в UE) не интересна от слова совсем. Да там удобно, красиво, популярно, но не для больших ландшафтов. Я попытался сделать другой подход и проект будет развиваться и улучшаться.

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

Спасибо за внимание и конструктивные комментарии. Много полезного.

3131
269 комментариев

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

9

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

18

Простите

9

Где DTF это сегмент большой карты. Где озеро типовой сегмент, который будет по умолчанию. если не редактировать сегмент где DTF. Сегменты типовые будут по умолчанию. А если вы отредактируете сегмент, то будет ваш.

 можно сделать и за несколько часов свой большой, бесшовный бесконечный

пустой, скучный, неиграбельный, а самое главное, никому не нужный 

 ландшафт.

7

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

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

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

4

уже все советовали ему. почитай его предыдущие посты. Либо мы не понимаем..  либо он не понимает... интересно знает ли автор о No Man's Sky. тут он хоть пытается пояснить, что делает.. но все равно не понимаю, что он пытается добиться когда все это есть. 

4