Лекция #12. AI. Подходы, тимплей, взаимодействие с миром, оптимизации для большого мира. [Лектор - roman_p] (2 стр)
Автор: Арсений Капулкин
[23:11] <CEMEH> brain - кастомизируется condition'ами?
[23:12] <roman_p> в скриптах задавались - все наборы perception, condition, behavior для мозга.
[23:12] <kas> которые предварительно были захардкодены?
[23:13] <CEMEH> Я переформулирую вопрос. Brain изначально был приспособлен к кастомизацци разными condition'ами? Это использовалось?
[23:13] <roman_p> Конечно же perception, condition, behavior - были на C++.
[23:14] <roman_p> семен: brain костомизировался различными conditon-ами и perception-ами и параметрами для них.
[23:14] <CEMEH> А perception'ами почему?...
[23:14] <CEMEH> Они же в NPC?...
[23:15] <roman_p> ошибся. condition, behavior - задавались внутри brain.
[23:15] <CEMEH> Т.е. не кастомизовались? Каждый brain их хардкодил?
[23:15] <roman_p> методы для изменения параметров perception в скрипте - можно предусмотреть теоретически.
[23:16] <roman_p> Вот как примерно кастомизировался.
[23:16] <roman_p> На скрипте:
[23:16] <roman_p> Brain "Looter" {
[23:17] <roman_p> Condition_SomeoneNearMe (4.5) : Behavior_RunAway (20).
[23:18] <roman_p> Condition_Slepper (10) : SetNPCFromCondition, Behavior_Attack.
[23:18] <roman_p> 0 : Behavior_Playthefool.
[23:18] <roman_p> }
[23:18] <CEMEH> Понятно. Спасибо.
[23:19] <roman_p> условия - могут возвращять не просто bool - а диапазон. тогда получиться fuzzy logic.
[23:20] <Zeux> roman_p: к каким жанрам применим подход? Если взять стратегии, скажем - придется ли что-то добавить? поменять?
[23:20] <Zeux> имеются в виду RTS
[23:20] <roman_p> это обобщенный подход.
[23:20] <roman_p> к чему угодно применим.
[23:20] <dotprod> есть подозрения что для RPG сложной он не очнеь то применим
[23:20] <Zeux> насколько я понимаю, данный подход - это AI с позиции юнита?
[23:21] <Zeux> Как добавить сюда некое глобальное видение ситуации, которое нужно в стратегиях?
[23:25] <roman_p> групповое взаимодействие - это потом. позже расскажу.
[23:21] <roman_p> если вынести часть game API в скрипт - на самом скрипте можно уже писать поведение.
[23:21] <CEMEH> Есть подозрения, что целый уровень сложности в организации Brain'ов.
[23:22] <kas> может, мега персепшн
[23:22] <kas> с офигенным приоритетом
[23:22] <kas> которым командует мегааи
[23:22] <kas> стратегический
[23:22] <kas> + локальные персепшены
[23:23] <kas> другое волнует меня
[23:23] <kas> вот, стратежка
[23:23] <kas> мега, 500 юнитов
[23:23] <kas> прям на икране 500
[23:24] <_TwilighT_> kas: а в казаках каких-нить и все 10 тыщ :)
[23:24] <roman_p> kas: ты про тормоза? ;)
[23:25] <roman_p> насчет казаков - там униты - группировались. AI работало сразу с целым полком. а уже внутри полка было понятие - сколько в нем осталост живых человек.
[23:26] <roman_p> kas: а если считать 500 унитов сразу - упреццо все не в AI, а в pathfinder ;))
[23:26] <kas> ну, ето смаря у кого какой пасфайндер ;)
[23:27] <dotprod> астар+лод+хаки
[23:27] <dotprod> а вообще было бы неплохо сорцы старика зоценить
[23:27] <roman_p> тогда уж и Ai строится на LOD-е и на хаках.
[23:27] <roman_p> LOD на Brain::DoWork (dt) ложиться идеально.
[23:27] * kas нипанимает
[23:27] <roman_p> смотри
[23:28] <roman_p> вокруг меня 500 NPC
[23:28] <roman_p> тем кто поближе - я вызываю Brain::DoWork (dt) - каждый кадр.
[23:28] <roman_p> тем кто подальше - через кадр или еще реже. dt - всегда передаю правильное.
[23:28] <roman_p> dt - время, какое прошло между вызовами DoWork.
[23:28] <kas> ага, т.е.
[23:29] <kas> будут скачки такие нифиговые
[23:29] <kas> через кадр
[23:29] <kas> да?
[23:29] <roman_p> какие еще скачки? скачки на принятие решения?
[23:29] <dotprod> аи работает на относительно небольшой скорости
[23:29] <kas> ну, раз в кадр
[23:29] <kas> в 2 кадра
[23:29] <dotprod> ну раз в 2 секунды приянтие решения не так критично
[23:29] <kas> оно будет считаться для всех
[23:30] <dotprod> имхо аи не должен соображать слишком быстро - этого просто не заметить
[23:30] <roman_p> kas, посмотри в исходники базового класса LOD-а в BloodMagic-е ;)
[23:30] <kas> не, ну я так не играю :)
[23:30] <kas> я мог взять и сразу туда смареть, тыж рассказываешь :)
[23:30] <roman_p> один из параметров этого LOD-а -- сколько за кадр можно вызвать функций.
[23:31] <roman_p> т.е. считаем что за кадр - не больше 15 вызовов Brain::DoWork.
[23:31] <kas> я просто уточняю что можно менять
[23:31] <roman_p> где-то там и было в BloodMagic-е
[23:31] <kas> понял, да, tnx
[23:32] <roman_p> причем у Pathfinder-а был свой LOD.
[23:32] <dotprod> ы. ф патхфиндере сколько лодов?
[23:32] <roman_p> т.е. задержку в пару секунд для Brain::DoWork - никто не замечает.
[23:32] <roman_p> а делать задержку для Pathfinder-а больше 0.5 сек - некрасиво уже.
[23:33] <roman_p> dp: все настраивается по вкусу ;)
[23:30] <Qiller> Можно ли сказать, что этот подход больше реактивный AI - анализуется ситуация, и принимается решение которые актуально в принципе только на данный момент. Чем чаще анализируем обстановку - тем "умнее" AI?
[23:34] <roman_p> чем чаще вызывается Brain::DoWork - тем быстрее AI реагирует на изменения в мире.
[23:34] <roman_p> "умнее" оно не становится - становиться просто быстрее.
[23:35] <dotprod> значит есть такие персы, для которых скорость должна быть выше, и соотвественно выше приоритет обработки?
[23:35] <roman_p> задержки в 0 сек, и задержки в 1-2 сек - на глаз вообще не заметны.
[23:35] <roman_p> dp: это уже варианты реализации LOD-а, вводить понятие приоритета.
[23:36] <CEMEH> И в стратегии будут не заметны?
[23:36] <kas> рома а какие изменения надо делать чтобы добавить командные действия7 как в фаркрае там или лучше как в фире
[23:36] <roman_p> semen, kas : чичас расскажу про групповое взаимодействие. доставайте блокноты ;)
[23:37] <roman_p> все что я раньше говорил - относилось к одиночному поведению.
[23:39] <roman_p> ... т.е. NPC жил независимой жизнью и на всех остальных не обращял особого внимания.
[23:39] <roman_p> главное в тимплее - это event-ы. события.
[23:39] <roman_p> с помощью event-ов все NPC обмениваются между собой информацией.
[23:39] <roman_p> есть 2 типа постоения тимплея.
[23:40] <roman_p> 1. с выделенным главным мозгом.
[23:40] <roman_p> 2. без него. все равноправны.
[23:40] <roman_p> в первом случае - главный чувак (master) выдает команды остальным (slave).
[23:41] <roman_p> master может быть как и физическим лицом - вожак стаи (убей его и тимплей сразу развалиться, все будет действовать по одиночке).
[23:42] <roman_p> также есть ситуация - переходный вожак стаи (определяется перс, если его убивают другой становиться главным).
[23:42] <roman_p> master может вообще не существовать в реальном физическом мире игры, а быть безтельной сущностью.
[23:43] <roman_p> вариант N2 - без master-а сложнее. но в некоторых ситуацих возможно более реалистичнее.
[23:44] <roman_p> какие могут быть event-ы:
[23:44] <roman_p> Event_IseeEnemy - я увидел врага
[23:44] <roman_p> Event_Attack - давайте атаковать
[23:44] <roman_p> Event_HoldTerritory - охраняем территорию
[23:45] <roman_p> Event_RunAway - сматываемся отсюда
[23:45] <roman_p> Event_Go - идти в точку.
[23:45] <roman_p> на основе этих event-ов можно построить AI для командной игры типа CounterStrike
[23:46] <roman_p> буду рассматривать случай с выделенным master-ом, который всех координирует.
[23:46] <roman_p> любой NPC - обнаружил врага через perception, тогда он кидает event: i see enemy.
[23:47] <roman_p> master принимает его. и решает что делать. например выдает event: attack тем кто поближе к тому, кто увидел врага.
[23:48] <roman_p> есть понятие - транспорт event-а, это как общяются между собой NPC.
[23:48] <roman_p> transport: радио, слух, телепатия, знаками и т.д.
[23:50] <roman_p> радио - работает везде - кроме, к примеру, подземелья и внутри железных коробок.
[23:50] <roman_p> слух - узнает дошел ли event на основе SoundEngine
[23:50] <roman_p> телепатия - работает везде и всегда ;)
[23:51] <roman_p> transport - очень похож на perception.
[23:51] <roman_p> рассмотрим сложный пример тимплея:
[23:51] <roman_p> двум юнитам надо перетащить стол из пункта A в пункт B.
[00:05] <roman_p> если в системе тимплея ai присутствуют несколько transport-ов, тогда можно ввести понятие приоритета event-а.
[00:06] <roman_p> если event не доходит до получателя через transport слух и event важный - тогда NPC может подойти поближе в любому NPC чтобы ему передать или сразу подойти поближе в master-у.
[00:06] <roman_p> такой hint - сделает поведение AI более живым.
[00:07] <roman_p> сложная тимплейная задачка:
[00:07] <roman_p> надо 4-ым NPC донести стол из пункта A в пункт B.
[00:07] <roman_p> причем - нести его они могут только сразу в четвером.
[00:08] <roman_p> любой NPC может в любой момент устать. и бросить стол.
[00:08] <roman_p> также на NPC могут нападать кайоты.
[00:09] <roman_p> кто дает такое задание этим 4-ым NPC-ам?
[00:10] <roman_p> это может быть chessmaster - бестельный master в игре.
[00:11] <roman_p> по пределенному игровому event-у (не путать с AI event), например, игрок начал квест - chessmaster выдает 4-ым NPC event: goto A.
[00:11] <roman_p> NPC идут в разной скоростью.
5 февраля 2006