Xeus — девблог #9

Что с проектом?

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

Самодельный мушкет
Самодельный мушкет

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

Xeus — девблог #9

Процедурная генерация мира

Один раз я увидел комментарий под своим постом: "А это все процедурно генерируется?". Я задумался над тем, что очень много времени потратил на создание карты, хотя это помогло понять как должен выглядить мир игры.
Создавать новую карту на каждое обновление — гиблое дело.

Первый тест "шумов"
Первый тест "шумов"

Любой процедурный мир — это всего лишь набор шумов. В случае майнкрафта — 3D и 2D шумов, в случае Rust — 2D шумов.

Xeus — девблог #9

Конечно, одного шума не достаточно для полноценного мира. Чаще всего мир делят на биомы (как и я), а для этого нужно сделать карту биомов.
Самое правильное решение для меня — два шума температуры и влажности

Xeus — девблог #9

Эта смесь двух значений в одной точке и диапазонов — дает адекватную карту биомов.

Xeus — девблог #9

Определенно, каждый биом должен обладать своим рельефом.

Xeus — девблог #9

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

Xeus — девблог #9

Да, с помощью математики можно понять на границе каких я биомов, но это вызывает возвышения на пересечении.

Xeus — девблог #9

Конечно, можно блендить весь мир, как это делает майнкрафт.

Xeus — девблог #9

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

В Xeus передвижение игрока ограничивает холод, вокруг игровой карты.

Xeus — девблог #9

Биомы биомами. . но нужно налаживать текстуру, а еще лучше — смешивать её.

Xeus — девблог #9

После небольшой настройки биомов, я пришел к такому варианту расположения биомов на карте.

Xeus — девблог #9

Пришло время деревьев, куда же в мире без растительности?
Первые тесты дали следующее результаты:

  1. Коллизия на сервере очень много занимает оперативной памяти
  2. Рендер новых деревьев занимает очень много времени
Xeus — девблог #9

Поэтому пришлось написать систему, при которой на сервере есть только коллизия, а на клиентах — дешевый рендер. Эта система в будущем потерпела много изменений. Теперь, средний мир занимает 2гб на сервере и 3.5гб на клиенте.

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

Xeus — девблог #9

Камни тоже между собой могут входить в друг друга, для этого пришлось использовать алгоритм Халтона

После нехитрых тестов, я понял что моя идея не совсем работает правильно.

Xeus — девблог #9

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

Некоторые объекты должны прилегать к ландшафту(камни, трава) , а другие вовсе появляться только на определенных границах угла наклона (скалы)

Xeus — девблог #9

В целом без новой системы коллизии все выглядело приятно, кроме скал

Xeus — девблог #9

Пришлось исправлять это дерьмо, заодно исправил определение биома растительностью.

Xeus — девблог #9

С большой дальностью прорисовки это выглядит куда красивее

Xeus — девблог #9

В Xeus есть уникальный биом - вулкан. Он всего один на карте, и должен занимать 1/4 игровой зоны. Для этого пришлось дописать систему определения биомов.

Xeus — девблог #9

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

Xeus — девблог #9

Да, когда травы мало это очень странно выглядит...

Xeus — девблог #9

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

Xeus — девблог #9

Один из последних штрихов в создании полностью процедурно генерируемоего мира было использование виртуальных текстур (когда камни принимают текстуру биома)

Xeus — девблог #9

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

Это всё?

На фоне работали 3д артисты и художники, мне очень нравятся некоторые арты, зацените

Xeus — девблог #9
Xeus — девблог #9

Существа

Один из 3D-художников активно занимался существами.

Что дальше?

Ближайшие планы:

  • Система персонажа
  • Система оружия с новым персонажем

Описание игры — клик
Предыдущий девблог — клик

2626
19 комментариев

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

Ответить

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

2
Ответить

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

И да, по что хомячка в крысу превратили? Моделлер творит чушь.

Ответить

Не совсем понял, что ты имел ввиду под маревом, возможно импостеры? Это кстати одна из причина, почему vegetation на Unreal из ассет-паков дохуя жрет - шейдер прозрачности который используют для экономии пары полигонов - жрёт гораздо больше, чем даже сотни тысяч таких полигонов.
А вообще, автор, если работаешь на UE5 - лучше всю траву сделать из полигонов и подрубить nanite.
А вообще, учитывая что это генерация - какие полигоны, пчел? Це воксели.

Ответить

Лоды есть на всем. Система инстансов жрет ничего. 235-300 дравколов. Учитывая что на экране 3млн полигонов и 100 фпс.

Ответить

Насчёт крысы. Животное называется ратрум, от слова rat и mushroom. Поэтому задача моделлеров была нарисовать Крыму с Грибом. Он прекрасно справился с задачей.

Ответить

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

Ответить