Полезное

Мы Вконтакте

Discord канал

#
Пред.
Модератор: Di-Crash
Аватара пользователя
Пользователь
Сообщения: 21
Доброго времени суток.

Я разрабатываю ActionRPG/RTS. Для проработки RPG составляющей я взял за основу правила настольной DnD 3.5 и постепенно адаптирую правила игры для переноса их из пошаговой системы в real-time. По замыслу достаточно гибкая система настольной ролевой игры позволит создавать очень гибкую систему прокачки и даст игроку простор для фантазии. Однако всё по тому же замыслу игрок сможет принимать участие в массовых баталиях (Игра Single player по этому все остальные персонажи кроме игрока NPC) до 5000 юнитов за раз.

На данный момент при разработке самого персонажа у меня уже вышло свыше 200 переменных (половина от этого числа это массивы включающие в себя до 10 дополнительных значений) характеризующих способности и состояния персонажа, и это я ещё не включил в расчёт многочисленные "отличительные черты" коими и балансируются персонажи в системе DnD, и у меня возник вопрос, а насколько много переменных лежит в персонажах обычных игр сегодня? Как много переменных закладывают разработчики в RPG персонажей и как много в юнитов для RTS?

Сможет ли движок вообще потянуть большое количество юнитов с большим количеством характеристик в одновременном бою друг с другом?

Понимаю что по идее я сам должен всё это протестировать, но сейчас я работаю на стадии концепта, и прошу совета у более опытных разработчиков, что бы сэкономить время и возможно переработать идею.
Аватара пользователя
Пользователь
Сообщения: 237
Один вертекс геометрии несет информацию о положении цвете координатах развертки, группе сглаживания и того на вскидку только это число, в районе десятков (возможно сотен) байт. Это один вертекс(!). В модели современной 20-40000 трисов, примерно столько же и вертексов. А еще окружение, где один блок в среднем 5-6000 трисов. И вполне нормально, если на камеру выдается до 1.5 миллионов трисов(!) каждый кадр. Теперь представь сколько информации несет только графика.
Твои массивы - капля в море, поверь )))
И не парься ерундой.
Аватара пользователя
Пользователь
Сообщения: 21
Я так же рассуждал, когда только начал работать над "диздоком", но недавно поиграл в Stellaris и в нём есть одна проблема, чем больше ИИ в игре, чем больше планет освоен тем ниже тем игры, постепенно из-за обилия переменных возникающих в игре скорость становится настолько медленной, что играть в принципе невозможно, и я боялся в какой-то момент дойти до такой же точки)
Аватара пользователя
Пользователь
Сообщения: 237
Цитата:
чем больше ИИ в игре, чем больше планет освоен тем ниже тем игры, постепенно из-за обилия переменных возникающих в игре скорость становится настолько медленной, что играть в принципе невозможно, и я боялся в какой-то момент дойти до такой же точки)

Это никак не относится к массивам. А относится к ИИ. Вернее особенности обработки решений ИИ.
Как правило новичками или лапухами не знакомыми с основами оптимизации, обработка ведется в каждый тик, и на каждый тик игры (каждый кадр) сотни ИИ принимают решения, путем обработки сотен операций, что и вешает ЦП, а не забивает RAM (оперативку). Нужно уметь оптимизировать работу ИИ и изучить этот вопрос.
Как правило оптимизация заключается в рассинхронизации работы ИИ, то есть чтобы ИИ принимали решение не каждый тик и не в один и тот же тик все ИИ принимали решение. Тогда на тик приходится примерно 1-10% принятий решений, что разгружает ЦП.
У тебя может быть куча свободной оперативы но полностью перегружен ЦП - тогда тоже будут тормоза.
Аватара пользователя
Пользователь
Сообщения: 4069
Можно добавить - в идеале тик лучше не использовать вообще, или использовать только тогда когда это действительно необходимо.

p.s. добавление одной активной коллизии, бьет по быстродействию сильнее чем несколько операций на тике. Вообщем быстродействие АИ легко можно запороть, либо не нужными расчетами на тике, либо активными(CollisionEnabled) коллизиями.
А количеств переменных хоть 100500, если требуется.
Аватара пользователя
Пользователь
Сообщения: 237
Цитата:
в идеале тик лучше не использовать вообще, или использовать только тогда когда это действительно необходимо.

Тик - универсальный механизм любого движка. Какой бы таймер ты не использовал он прямо или опосредовательно использует тик.
Так что явно или неявно но ВСЕГДА используешь тик. Вопрос только в том на каждом тике ты выполняешь операцию или не на каждый.
ИИ без тика ты не сможешь сделать. Перемещение NavMesh Agent (или как там его в анриале кличут) тоже использует тик.
В неявной форме.
На ранних этапах тики заменял бесконечный цикл (While(true){};) в теле которого и происходило распределение задач между исполнителями, сейчас этот цикл тоже есть, но вшит в нативное тело движка и тик это событие, которое выдает этот самый бесконечный цикл.
Впрочем, довольно лигбеза, все равно это мало кому интересно.
Аватара пользователя
Пользователь
Сообщения: 4069
да, я с тобою абсалютно согласен, но я думаю ты понял что именно я имею ввиду. Например лучше включить таймер который будет запускать какие нибуть лайнтрэйсы раз в секунду, а потом выключить, чем запускать эти же лайнтрэйсы каждый тик, всегда.
Таким образом нагрузка на тике будет облегченна, а тик в той или иной форме работает всегда.

p.s. ну а по теме автор хочет сингл плэер RPG/RTS до 5000 юнитов ,))

вот два примера

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

https://www.youtube.com/watch?v=Fx5km4fqBoo
https://www.youtube.com/watch?v=ATuOf7xDIfE

тоесть тебе нужно отказатся CharacterMovement от навмеша, и разработать гениальную логику, простую и понятную процессору, которая будет двигать твоих ботов(акторов а не чарактеров) с нужной анимацией. Для таких цифр как 5000, уже нужно использовать фокусы на уровне шейдера, или какие нибудь другие фокусы на основе Inctance.
Аватара пользователя
Пользователь
Сообщения: 21
Звучит как задача для серьёзного программиста, а не для новичка. Есть ли какие-то примеры подобных проектов? Мне на ум приходит только серия игр Total War в которой количество юнитов на сцене примерно такое же или больше... но кажется ничего подобного на UE4 я не видел(
Аватара пользователя
Пользователь
Сообщения: 237
Prytaleks писал(а):
тебе нужно отказатся CharacterMovement от навмеша, и разработать гениальную логику, простую и понятную процессору, которая будет двигать твоих ботов(акторов а не чарактеров) с нужной анимацией. Для таких цифр как 5000, уже нужно использовать фокусы на уровне шейдера, или какие нибудь другие фокусы на основе Inctance.


Ну или просто сменить движок. )))


Хотя я не представляю игры, созданной одиночкой, в которой будет больше 100 мобов одновременно на экране (подобная игра от профи уже или вышла или вот вот выйдет). А большее число можно сменить на спаун на лету (автогенерацию).
Словом, сначала нужно определить места утечки ресурсов, а после продумать механику оптимизации.
Пока же это не более чем банальное меряние письками.
Аватара пользователя
Пользователь
Сообщения: 4069
Zail94 писал(а):
Звучит как задача для серьёзного программиста, а не для новичка.

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

https://www.youtube.com/watch?v=oMIbV2rQO4k


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница