Смотря что генерировать. Тунели/Коридоры, города, ландшафт? Это все довольно разные алгоритмы. На сайте есть видео урок по генерации дорог, советую поглядеть.
_________________ Мои работы. Youtube Channel Форум по геймдеву.
Как насчет космоса? А вообще я хочу понять как писать алгоритм генерации для всего (мира, пещер, города, ландшафта, ресурсов...) на C++. Буду благодарен за любую информацию.
Проблема не в алгоритме, проблема в том, что все это будут динамические объекты, с динамическими тенями и освещением. То есть такой уровень будет с резкими тенями, не будет на нем GI - глобального отсвещения (отраженного света) статического. А все динамическое жрет ресурсы "мама не горюй". При больших объемах в итоге ты получишь пошаговую стратегию а не шутер с FPS в 5-10 кадров в секунду... Сначала реши эту проблему - размести на уровне туеву хучу моделей с динамическим освещением, добейся адекватного освещения и FPS не ниже 60-ти. Размести столько, сколько хочешь чтобы было в поле зрения игрока. Тогда будешь думать о генерации. В противном случае я тебе предрекаю разочарование самое великое и горестное после того как ты придумаешь и реализуешь таки систему генерации нарвешься на проблемы с оптимизацией ))
Сама же генерация банальна. Делаешь блоки, в заранее определенных габаритах, чтобы понимать как ставить на поверхность, и разрабатываешь сначала алгоритм генерации ландшафта из карты высот, которая в свою очередь генерируется из алгоритма получения карты шума Perlin вроде. После того как сгенерируешь поверхность приступаешь к расположению блоков конструкций на нем трейсером и алгоритмом расчета положения и возможности постановки.
Сам расчет и генерация может вызвать падение FPS так как задействуется много ресурсов ЦПУ в основном... Алгоритмы генерации можно найти в сети, если нужно, потом адаптировать под Анриал. Хотя Анриал, как по мне не предназначен для такого применения...
Как насчет космоса? А вообще я хочу понять как писать алгоритм генерации для всего (мира, пещер, города, ландшафта, ресурсов...) на C++. Буду благодарен за любую информацию.
Hello Games своим "No Man's Sky" уже эпически зафейлили саму идею процедурной генерации. Посему я бы не стал озвучивать слово "процедурный" еще лет 5 как минимум...
Проблема не в алгоритме, проблема в том, что все это будут динамические объекты, с динамическими тенями и освещением. То есть такой уровень будет с резкими тенями, не будет на нем GI - глобального отсвещения (отраженного света) статического. А все динамическое жрет ресурсы "мама не горюй". При больших объемах в итоге ты получишь пошаговую стратегию а не шутер с FPS в 5-10 кадров в секунду... Сначала реши эту проблему - размести на уровне туеву хучу моделей с динамическим освещением, добейся адекватного освещения и FPS не ниже 60-ти. Размести столько, сколько хочешь чтобы было в поле зрения игрока. Тогда будешь думать о генерации. В противном случае я тебе предрекаю разочарование самое великое и горестное после того как ты придумаешь и реализуешь таки систему генерации нарвешься на проблемы с оптимизацией ))
Это справедливо только для слабых машин. Для любого современного нормального железа это не проблема.
Вот тут процедурный ландшаф и на GeForce GTX 960 примерно 60-80 фпс.
При этом проект не доделан до конца и оптимизации никакой нет вообще. Если все сделать нормально с LODами и оптимизацией то можно с процедурального ладншафта и 100 fps снять.
Последний раз редактировалось epic_slowpoke 24 ноя 2016, 11:38, всего редактировалось 2 раз(а).
оптимизация в таком проекте очень серьезная,скорей все написан свой вариант рендера( точнее выборки того что будет обрабатываться в видеокартой), написан свой вариант модели коллизий. Не зная тонкостей оптимизации хорошей производительности не получишь.
Но не все так печально, в UE достаточно инструментов что без углубления в такие вещи как рендер, получить неплохие результаты.
1 из каторых использование инстансов для дублирующихся объектов. 2 - Мержинг объектов( не уверен, что это можно делать в реалтайме)
Да, динамическое освещение действительно может оказаться довольно тяжелым, особенно это критично если у вас типичная "индюшатина" и игра, по идее, должна хорошо идти на далеко не топовых машинах.
Решение этого вопроса может зависеть от геймплея. В моем случае геймплей несколько айзекоподобен, то есть уровни состоят из небольших румов (room), которые можно динамически подгружать/выгружать. Только вот сами румы тоже динамически генерируются, поэтому вместо стандартного стриминга Unreal приходится спаунить и удалять все объекты из своих структур данных. Никто не подскажет, можно ли создавать .uasset уровни "налету" из генерируемых данных? Мне не удалось найти способ.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4