Сравнение State Tree и Behavior Tree
Решил-таки провести эксперимент и сравнить производительность State Tree и Behavior Tree в Unreal Engine 5.6.
То тут, то там возникают вопросы, да и сам я постоянно возвращаюсь к этой теме. Пора выяснить что и как влияет на показатели при прочих равных условиях.
Забегая вперед скажу, что оба инструмента активно влияют на процессор, но судя по показателям, у State Tree гораздо больше стабильности. Behavior Tree массивно потребляет ресурсы за счет активных тиков по веткам деревьев. Со временем он снижает напряжение, но все равно не дотягивает до результатов State Tree.
Условия
- Unreal Engine 5.6. Тестовая карта с минимальным наполнением и идентичными уровнями.
- Моя собственная система выгрузки/загрузки при которой AI работают независимо от нахождения рядом игрока: без скелетных и статических сеток, без анимационного блюпринта. Т.е. они будут на карте со всей их логикой, но их видно не будет.
- Симуляция в режиме Unlit. Чтобы снизить нагрузку видео карты и максимально исключить ее влияние на показатели.
- Логика блюпринтов State Tree полностью соответствует логике Behavior Tree, но со своими нюансами функционала.
В каждом экспериментальном видео я отмечаю персонажей точками на голове - вы можете их заметить вдали - они занимаются патрулированием.
Вводные данные
В левом углу ринга - Behavior Tree.
- 92 персонажа AI на карте.
- Behavior Tree из 6 вложенных деревьев (1 повар, 1 фермер, 1 лесоруб и 89 стражников).
В правом углу ринга - State Tree.
- 97 персонажей AI на карте.
- 2 полных State Tree (1 фермер, 96 стражников).
Влияние тика Behavior Tree на производительность
Выводы
Как и ожидалось из заявлений экспертов по Unreal и, собственное, самих специалистов Epic Games, State Tree превосходит Behavior Tree.
State Tree более стабилен и не дропает ФПС с такой скоростью, как это делает Behavior Tree. Он в целом не вызывает просадок.Behavior Tree cразу же "продавливает" фреймрейт за счет огромных тиков и, хоть и снижает нагрузку со временем, он все равно сильнее грузит железо по всем показателям.
Да, в Behavior Tree есть удобный наглядный интерфейс, да есть понятная отладка, но потенциал State Tree и его возможности гораздо выше.
Уже сейчас мы можем управлять переключением состояний из любой ветки в любую, в то время, как Behavior Tree располагает лишь последовательной проверкой веток с целью найти нужную.
Есть множество функциональных задатков: глобальные задачи, параметры, евалуаторы, а также условные операторы полностью заменяющие декораторы.
Да, у State Tree огромные проблемы с удобством отладки по причине самой сути состояний: они не выполняются последовательно в отличие от Behavir Tree и поэтому едва-ли их можно как-то свободно контролировать. Даже через контрольные точки.
Да, у State Tree по-прежнему, несмотря на обновления, есть проблемы с задачами и переходами; есть конфликты в инструментах, которые не всегда понятны... Но со временем мы к этому привыкнем или Эпики доработают.
Надеюсь.
Спасибо, что читали статью. Надеюсь было полезно.
Источник: Мой Boosty. Буду рад, если зафоловитесь или подпишитесь, я там пишу чаще чем тут.
Также буду рад увидеть вас в подписчиках в Телеграм: там я постоянно что-то пишу по разработке своей игры, а также по геймдеву в целом.