Xeus — девблог #9
Что с проектом?
Так, последний девблог был в мае, да?
Всё лето я уделял время работе и другим делам, поэтому на проект немного не хватало времени. После чего в конце лета возобновил команду и продолжил работу.
В течении всего июля я переписывал почти все системы на новый лад.
Закончилось это очередным выгоранием ближе к концу августа.
После чего я решил за 2 недели сделать процедурную генерацию мира.
Процедурная генерация мира
Один раз я увидел комментарий под своим постом: "А это все процедурно генерируется?". Я задумался над тем, что очень много времени потратил на создание карты, хотя это помогло понять как должен выглядить мир игры.
Создавать новую карту на каждое обновление — гиблое дело.
Любой процедурный мир — это всего лишь набор шумов. В случае майнкрафта — 3D и 2D шумов, в случае Rust — 2D шумов.
Конечно, одного шума не достаточно для полноценного мира. Чаще всего мир делят на биомы (как и я), а для этого нужно сделать карту биомов.
Самое правильное решение для меня — два шума температуры и влажности
Эта смесь двух значений в одной точке и диапазонов — дает адекватную карту биомов.
Определенно, каждый биом должен обладать своим рельефом.
Правда если эти нойзы будут сильно разные, еще и с разной высотой.. будут артефакты на границе биомов
Да, с помощью математики можно понять на границе каких я биомов, но это вызывает возвышения на пересечении.
Конечно, можно блендить весь мир, как это делает майнкрафт.
Но я придумал намного лучше алгоритм, который определеает какой биом в точке с помощью вычисления расстояний. Так, на одном биоме может быть хоть 10 биомов, и каждый будет влиять с разной силой.
В Xeus передвижение игрока ограничивает холод, вокруг игровой карты.
Биомы биомами. . но нужно налаживать текстуру, а еще лучше — смешивать её.
После небольшой настройки биомов, я пришел к такому варианту расположения биомов на карте.
Пришло время деревьев, куда же в мире без растительности?
Первые тесты дали следующее результаты:
- Коллизия на сервере очень много занимает оперативной памяти
- Рендер новых деревьев занимает очень много времени
Поэтому пришлось написать систему, при которой на сервере есть только коллизия, а на клиентах — дешевый рендер. Эта система в будущем потерпела много изменений. Теперь, средний мир занимает 2гб на сервере и 3.5гб на клиенте.
Генерировать деревья в первую очередь не лучшая идея, будет плохо если они застрянут прямо в камнях.
Камни тоже между собой могут входить в друг друга, для этого пришлось использовать алгоритм Халтона
После нехитрых тестов, я понял что моя идея не совсем работает правильно.
Но теперь в мире есть текстуры биомов, хоть и деревья не совсем понимают на каком биоме они находятся.
Проблема проверки коллизиции заключалась в том, что на клиенте не все коллизиции прогружаются(оптимизация серверной логики) .
Поэтому клиенты и серверы должны обладать уникальными коллизиями, а после завершения генерация клиент выключает все коллизии.
Некоторые объекты должны прилегать к ландшафту(камни, трава) , а другие вовсе появляться только на определенных границах угла наклона (скалы)
В целом без новой системы коллизии все выглядело приятно, кроме скал
Пришлось исправлять это дерьмо, заодно исправил определение биома растительностью.
С большой дальностью прорисовки это выглядит куда красивее
В Xeus есть уникальный биом - вулкан. Он всего один на карте, и должен занимать 1/4 игровой зоны. Для этого пришлось дописать систему определения биомов.
И наконец можно заняться травой. Это была самая интересная часть, так как нужно было синхронизировать позицию на клиентах без участия сервера.
Кроме этого пришлось немного дописать появление растительности.
Это сильно повлияла на скорость генерации, но все же это всего лишь вход на сервер.
Да, когда травы мало это очень странно выглядит...
Пришлось конечно еще переписать систему смены дня и ночи, теперь она работает и в процедурном мире, в дальнейшем меня ждет система сохранения серверной информации..
Один из последних штрихов в создании полностью процедурно генерируемоего мира было использование виртуальных текстур (когда камни принимают текстуру биома)
Уверен в будущем эта система потерпит колосальных изменений, как минимум мне предстоит еще добавить спавн ресурсов и животных.
Это всё?
На фоне работали 3д артисты и художники, мне очень нравятся некоторые арты, зацените
Существа
Один из 3D-художников активно занимался существами.
Что дальше?
Ближайшие планы:
- Система персонажа
- Система оружия с новым персонажем
Раз такая тема, то хотелось бы узнать есть ли на примете какие-нибудь хорошие курсы на ютубе (или с торрентов) для новичков в UE?
Советую своего знакомого - Cyberstars. Там конечно информация для полных новичков, но она даёт небольшой старт для самообучения
хм. Я бы посоветовал таки накинуть LOD'ы, особенно на траву. Вплоть до того, что на каком-то расстоянии заменять траву "маревом" на шейдере.
Всё-таки трисов дофига.
И да, по что хомячка в крысу превратили? Моделлер творит чушь.
Не совсем понял, что ты имел ввиду под маревом, возможно импостеры? Это кстати одна из причина, почему vegetation на Unreal из ассет-паков дохуя жрет - шейдер прозрачности который используют для экономии пары полигонов - жрёт гораздо больше, чем даже сотни тысяч таких полигонов.
А вообще, автор, если работаешь на UE5 - лучше всю траву сделать из полигонов и подрубить nanite.
А вообще, учитывая что это генерация - какие полигоны, пчел? Це воксели.
Лоды есть на всем. Система инстансов жрет ничего. 235-300 дравколов. Учитывая что на экране 3млн полигонов и 100 фпс.
Насчёт крысы. Животное называется ратрум, от слова rat и mushroom. Поэтому задача моделлеров была нарисовать Крыму с Грибом. Он прекрасно справился с задачей.
Мир симпатичный генирируется, но есть вопросы. Во первых что с живостью мира? Из статей понял что есть оружие/крафт/враги, и это всё? Тип какие-нибудь симуляции жизни животных или природных явлений? Или основной упор на мультиплеер чтобы игроки сами себя веселили? Ну и главный, наверное, вопрос почему анрил, а не юнити? Я тоже процедурно-генерируемую игру делаю и основной выбор был в пользу юньки из-за шарпа, писать кучу генераций на крестах звучит ультра-хардкорно