Полезное

Мы Вконтакте

Discord канал

#
Пред.
12345 ... 13
Модератор: Di-Crash
Аватара пользователя
Пользователь
Сообщения: 60
Данная тема долгоиграющая.
В том смысле, что я сейчас разбираюсь с работой NavMesh и оптимизацией работы AI. И по мере получения интересной инфы, буду рассказывать тут.
Сам работаю на Unity, но это одинаково подходит и к Анриалу, так как системы навигации у этих движков схожи в части NavMesh точно.
Если у вас есть инфа о том как оптимизировать работу с AI - велкам ))

Итак...

Выяснилось, что для того, чтобы разгрузить процесс и поднять Fps, нужно чтобы агент не рассчитывал путь каждый тик.
То есть агент увидел цель и пошел к ней через MoveTo(). Если цель сместилась на определенное расстояние агент пересчитал путь - снова вызвал метод MoveTo().
Как правило в уроках показывают другую технику, когда каждый тик выполняется команда MoveTo(), а расчет пути - затратная штука, и если она выполняется каждый тик, то это может сильно просадить fps, при большом количестве мобов.

Нужно также исключать расчеты на тике в мобах. Лучше ввести контроллер поведения мобов, который на тике будет принимать решение и передавать его агентам. В самих агентах нужные им лично вычисления проводить шагами больше тика (30-40 кадров пропускать, например, а не каждый кадр).
Последний раз редактировалось ХеруВам 23 авг 2017, 12:36, всего редактировалось 3 раз(а).
Аватара пользователя
Пользователь
Сообщения: 1341
да, еще при динамическом NavMesh если поворачивать объект который влияет на NavMesh - тоже ужасно тормозит.
_________________
прикрепленные картинки с radikal не смотрю.
Аватара пользователя
Пользователь
Сообщения: 60
Noob256 писал(а):
да, еще при динамическом NavMesh если поворачивать объект который влияет на NavMesh - тоже ужасно тормозит.

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


Еще немного инфы по оптимизации:
Есть такой прием, зависящий от дистанции до цели.
К примеру, если враг находится на расстоянии 100 м до цели, то проверяет положение цели раз в 60 кадров.
на расстоянии 50 метров - раз в 30 кадров, на 10 метров раз в 5 кадров.

Если камера типа TopDown, то можно отключать анимацию у агентов, на определенном расстоянии до цели, так как агента на таком расстоянии всеравно не видно. Или скрывать мешь совсем. Отключать способность отбрасывать тени. Если OcclusionCooling не охватывает видимость данного агента, то таким образом можно оптимизировать тоже.
Но, возможно техника оптимизации объектов за пределами камеры стоит по дефолту в Анриале, нужно проверить.
Если есть детальная статистика по тому сколько времени уходит на что, нужно глянуть на анимацию, сколько милисекунд на нее уходит.
Но в любом случае отключение анимации весчь полезная.

Частенько устраивайте краштесты на 200 и более агентов. Если FPS падает ниже 20, значит с оптимизацией что-то не так )
При этом ВСЕ агенты должны преследовать цель а не тупо стоять - проверять оптимизацию на неактивных агентах неверно.

Используйте LOD на агентах. Помогает очень серьезно.
Аватара пользователя
Пользователь
Сообщения: 4069
ХеруВам писал(а):
Как правило в уроках показывают другую технику, когда каждый тик выполняется команда MoveTo(), а расчет пути - затратная штука, и если она выполняется каждый тик, то это может сильно просадить fps, при большом количестве мобов.

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

p.s. я не в коем случае не говорю что это верно, но это тот тест который легко провести.
Аватара пользователя
Пользователь
Сообщения: 4069
ХеруВам писал(а):
Частенько устраивайте краштесты на 200 и более агентов.

какой же должен быть комп что бы 200 штук и фпс до 20 не просело?

p.s. сам то в движении 200 акторов вытянешь?

p.p.s. надо на досуге сделать такой тест, 200 кубов по нав мешу запустить, и 200 кубов тиком толнкуть, любопытно однако.
Аватара пользователя
Пользователь
Сообщения: 60
Цитата:
какой же должен быть комп что бы 200 штук и фпс до 20 не просело?

p.s. сам то в движении 200 акторов вытянешь?

Посмотри мой последний видос. Там 200 мобов, еще не до конца оптимизировано.
Оставил в качестве реперной точки, для сравнения с тем что буду делать дальше.
Спорить не собираюсь, бо такая цель не стоит.
Не хочешь слушать или не верится - трусы в парус, я не напрашиваюсь.
Аватара пользователя
Пользователь
Сообщения: 4069
ХеруВам писал(а):
Посмотри мой последний видос. Там 200 мобов, еще не до конца оптимизировано.

посмотрю, интересно
Аватара пользователя
Пользователь
Сообщения: 4069
Посмотрел, мощно однако, у меня точно не вывезет такое, толи дело в компе, толи в движке, но скорее всего в сразу двух причинах дело.
Аватара пользователя
Пользователь
Сообщения: 60
Цитата:
Посмотрел, мощно однако, у меня точно не вывезет такое, толи дело в компе, толи в движке, но скорее всего в сразу двух причинах дело.

До тех преобразований, что я описал выше максимальное количество мобов на моем компе при FPS 30 было 50, а-то и меньше.
В Redemption уже при 30 тормозило страшно.
Все тот же комп, тот же движок. Стало быть дело не в них.
Я уже сказал, если не получается забить гвоздь, виноват совсем не молоток ))
Аватара пользователя
Пользователь
Сообщения: 4069
ХеруВам писал(а):
Я уже сказал, если не получается забить гвоздь, виноват совсем не молоток ))



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


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

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