Gamedev LectureСтатьи

Лекция #12. AI. Подходы, тимплей, взаимодействие с миром, оптимизации для большого мира. [Лектор - roman_p] (3 стр)

Автор:

[00:12] <roman_p> рассмотрим что происходит внутри одного NPC внимательно.
[00:12] <roman_p> у каждого behavior внутри brain-а есть приоритет.
[00:13] <roman_p> приоритет у behavior выжить - максимальный. к примеру.
[00:13] <roman_p> приоритет у behavior event goto - средний.
[00:14] <roman_p> 0 приоритет у поведения behavior валять дурака.
[00:14] <roman_p> после получения event-а Goto A - каждый NPC начинает выполнять behavior event goto.
[00:15] <roman_p> если на чувака наезжают кайоты - behavior "выжить" начинает свою работу.
[00:15] <roman_p> придя на место, если никто не пытается убить NPC - приоритет упадет до 0. и NPC будет валять дурака. в пункте A.
[00:16] <roman_p> кто первый дошел до места A - становиться master-ом.
[00:17] <roman_p> event: goto done - генериться после того как event: goto выполнился.
[00:17] <roman_p> как только придут еще 3 event-а goto done master-у - значит все в сборе. значит можно начинать тащить стол.
[00:18] <roman_p> для перетаски стола - есть 2 event-а: get table и drop table.
[00:19] <roman_p> master командует: get table 3-м NPC. и сам тоже берется за стол. может быть даже сам себе отправляет event get table.
[00:19] <roman_p> понесли стол.
[00:20] <roman_p> если кто-то устал - тогда он бросает стол и говорит master-у: drop table. мастер запоминает кто именно бросил стол от усталости.
[00:20] <roman_p> и командует всем остальным: drop table. и себе тоже.
[00:21] <roman_p> как только NPC отдохнул - он берет стол и говорит master-у: get table.
[00:21] <roman_p> мастер смотрит - если стол взял тот кто устал - тогда он командует остальным всем: get table.
[00:22] <roman_p> а если стол взял не тот кто устал - ...я бы тут поставил assert ;) или можно просто тому скомандовать drop table.
[00:22] <roman_p> если враги рядом - тот же самый механизм что и с усталостью.
[00:23] <roman_p> по теме тимплее - все.
[00:23] <roman_p> вопросы?

[00:23] <kas> както смутно всё
[00:24] <roman_p> а что именно не понятно?
[00:24] <kas> если про актёров аи было так абстрактно и клёво, тот тут както всё, уж больно хардкодед

[00:25] <roman_p> абстрактность - event, transport.
[00:25] <roman_p> все остальное - конкретные примеры.
[00:25] <roman_p> тимплей - всегда на порядок сложнее, чем single.
[00:26] <CEMEH> А что-нибудь про иерархию мастеров?
[00:27] <roman_p> semen: на усмотрение реализающего teamplay. можно и иерархию.
[00:27] <CEMEH> Ну хочется тоже разобрать жизненный пример из этой области.
[00:27] <CEMEH> Если бывают в ней жизненные примеры :)

[00:25] <kas> вот, чтобы сделать ношения стола, вроде простой таск, 4 мужика всего
[00:26] <kas> и вдогонку, скажем мужиков стало не 4 а 6, чиво поменяется?
[00:27] <roman_p> kas: все можно параметризировать. носить абстрактный предмет-I через маршрут-P в количестве N мужиков.
[00:28] <kas> ну, т.е. каждое тим действие хардкодено?
[00:28] <kas> причом так нифигово
[00:28] <roman_p> kas: можно скриптом.
[00:28] <kas> последовательности евентов, ещё всякое
[00:29] <roman_p> kas: я же говорит, тимплей - это сложно в разы.
[00:29] <kas> в данной интерпретации ? ;)
[00:29] <roman_p> в BM нет тимплея, ну и что? ;)
[00:30] <kas> ну, ты говорил выше
[00:30] <kas> что техника универсальна
[00:30] <CEMEH> Вопрос ребром - как в StarCraft?
[00:30] <roman_p> универсальны - кирпичики для построения.
[00:30] <roman_p> semen: не знаю ;)
[00:30] <CEMEH> А где знаешь?
[00:30] <roman_p> знаю как в CounterStrike
[00:31] <roman_p> event-based teamplay
[00:31] <CEMEH> Ну хочется RTS таки
[00:31] <CEMEH> Вон Казаки, может?
[00:32] <roman_p> про казаки знаю - что там минимальная единица - это сразу полк.
[00:32] <roman_p> пример про стол - очень сложный. обычно в тимплее - все проще.
[00:33] <roman_p> teamplay можно строить из кирпичиков.
[00:33] <CEMEH> А какие жизненные в тимплее действия?
[00:33] <roman_p> task. задание.
[00:33] <roman_p> например - N человек доходит до точки A.
[00:33] <roman_p> это task.
[00:34] <roman_p> потом, N человек - тащит предмет в точку B. тоже task.

[00:34] <kas> ето, а вот тотже фир
[00:34] <kas> про который я начинал говорить
[00:34] <roman_p> можно комбинировать task-и.
[00:34] <kas> они там оббегают, окружают, делают всякое
[00:34] <kas> как такое сделать?
[00:34] <roman_p> окружение?
[00:35] <roman_p> или заход со спины на врага?
[00:35] <kas> поведение
[00:35] <kas> нитривиальное
[00:35] <kas> совсем не тривиальное, причом к месту
[00:35] <roman_p> task: N человек окружают NPC.
[00:35] <MihaPro> а есть такое понятие - очередь или стэк тасков?
[00:35] <MihaPro> типо миссия.
[00:36] <roman_p> можно очередь тасков.
[00:36] <roman_p> а можно и скриптом.
[00:36] <kas> и каждый нпси умеет окружать?
[00:36] <MihaPro> эту очередь, как я понимаю, мастер обрабатывает, так?
[00:36] <kas> а что такое окружать? кто решает, кто идёт налево, а кто направо?
[00:36] <roman_p> master решает все.
[00:37] <roman_p> 1 NPC не может окружить никого никогда. Окружить можно вдвоем или больше.
[00:37] <roman_p> мастер решает кто куда пойдет. и выдает event goto.
[00:37] <_ShaMan_> м-да. а всё-таки как сделать нетривиальное поведение?
[00:38] <_ShaMan_> или это очень сложно?
[00:38] <kas> ну, ето уже актёров уи видимо
[00:38] <kas> персепшенов много
[00:38] <kas> и бихейверов
[00:38] <roman_p> если не углубляться в детали - окружение - это просто. master выбрал кто где должен стоять. выдал event goto. и все.
[00:40] <_ShaMan_> а по какому критерию он определяет?
[00:41] <MihaPro> можно тупо хардкодом по радиусу
[00:41] <MihaPro> имхо
[00:42] <hr0nix> так и делают обычно

[00:43] <MihaPro> roman_p, расскажи про формации. про то на каком уровне и кто их строит, сохраняет и следит?
[00:44] <roman_p> я рассказывал про двух уровневую модель.
[00:44] <roman_p> когда есть 1 master и несколько slave.
[00:44] <roman_p> возможна также многоуровная модель.
[00:44] <roman_p> а также одноуровневая - когда нет главных.
[00:46] <roman_p> в реальной жизни - есть все модели. от многоуровневой, до 1 уровневой.
[00:46] <roman_p> kas - нести стол на 1 уровневой модели - в разы сложнее. master-а то нет.

[00:53] <Qiller> Про пошаговые типа HoMM есть смысл спрашивать? :)
[00:54] <roman_p> пошаговые - там все проще в разы ;)
[00:54] <roman_p> индивидуальных поведений нету.
[00:54] <roman_p> есть master - он все и решает.
[00:55] <roman_p> как в шахматах.
[00:55] <_ShaMan_> да и времени на просчёт больше :)
[00:55] <Qiller> Да, но есть проблема с просмотром в глубину и ведением состояния мира
[00:55] <_TwilighT_> надо уточнить - проще дизайн, а не функционал
[00:55] <_TwilighT_> функционал то на два порядка сложнее
[00:56] <roman_p> Q: чтобы построить правильный пошаговый Ai - надо сначала сделать правильные шахматы.
[00:56] <roman_p> Q: просмотр в глубину - есть альфа и бета отсечения.
[00:56] <Qiller> То есть - в морг?
[00:57] <roman_p> Q: не знаю ;) есть такое понятие - начальник сказал сделать. пока сам не становишься начальником.

[00:59] <Qiller> Никому не встречались книги, где освещается пошаговый ии и методы оптимизации?
[00:59] <DobroKOT> Qiller, сейчас...
[01:00] <DobroKOT> Я не читал, но её хвалят - http://users.livejournal.com/_foreseer/3559.html

[01:00] <Qiller> Альфа-бета хорошо, но например в моей игре оценивать реально можно только самый глубокий уровень
[01:00] * _ShaMan_ какие-то есть 2 книжки по AI
[01:00] <Qiller> И дерево ходов слишком обширное
[01:01] <roman_p> Q: random - рулит в AI. попробуй его.
[01:02] <Qiller> Попробую

[01:01] * DobroKOT играл как-то с компьютером в Точки, которые ставились компом рандомно...
[01:02] * DobroKOT всё время казалось, что над ним издеваются.
[01:02] <DobroKOT> Я сдался.

[01:03] <roman_p> Q: вот, узай random. никому не нужны честные решения. важно - играбельные решения.
[01:03] <roman_p> Q: смотри на пару ходов вперед всего лишь. и рандомом разбавь чуть-чуть ;)
[01:04] <_ShaMan_> обычно вроде так и поступают
[01:04] <_ShaMan_> это только DeepBlue вроде просчитывает на несколько сот ходов вперёд :)
[01:07] <roman_p> он еще самообучаться умел
[01:08] <roman_p> и через него прогнали все доступные шахматные партии

[01:08] <roman_p> Q: сделай самообучение, да.
[01:08] <_ShaMan_> а как?
[01:09] <roman_p> ну, самообучение - это просто.
[01:09] <roman_p> в общем варианте - есть такие-то данные, таблице.
[01:10] <roman_p> и в процессе игры (или прогона партий) - эти данные меняются.
[01:10] <roman_p> например, и кто-то убивает бота из рельсы стоя в укромном месте, на балкончике.
[01:10] <roman_p> в самом простом случае - храниться карта мест где убили бота.
[01:11] <roman_p> если бота убили несколько раз в одной и той же комнате - он туда будет ходить редко совсем.
[01:12] <roman_p> для шахмат - так можно подбирать коэффициент важности фигуры.
[01:13] <roman_p> самообучение - процесс изменения данных, которые используются для принятия решений.

Страницы: 1 2 3 4 Следующая »

5 февраля 2006

Комментарии [12]