четверг, июня 24, 2010

Paris Game AI Conference 2010. День второй

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

Все началось с рассказа Паоло Манинетти про гоночный симулятор. Машины и мотоциклы у них едут по идеальной траектории. На это линии есть целевая точка на определенном расстоянии и машина стремится к ней приблизиться. Траектория содержит в себе информацию об идельной скорости. Когда машин много двигают целевую точку, чтобы избежать столкновения. Они пытаются анализировать информацию о том, что происходит на дороге, пытаются определить опасные ситуации. Это отражается на производительности.
Показывали демки с отладочной информацией. Дебагная информация у них богатая.
Искали золотую середину между честной игрой и читерством. Говорят, что чем честнее, тем правдоподобнее. Но тем дороже по производительности.
Каждая трасса тюнится руками, можно в нее записать что-то дополнительно.
Physics-based Racing AI[.pptx]

Battlefield: Bad Company 2
В соседней аудитории одновременно с нами проходило еще какое-то сборище, они там громко пели хором. Это придало докладу неповторимую атмосферу.
Первую часть этой игры много критиковали за AI, поэтому над AI серьезно поработали.
В игре (они сокращали ее название до BF) есть дружественные агенты. Их сложнее делать, чем вражьих, потому что враги быстро дохнут и если в них и есть какие глюки, то это незаметно.
Также там есть разные виды юнитов - пехота, машины, танки, вертолеты. И мир разрушаемый.
Показали демку, спросили, не заметил ли народ чего подозрительное. Я не заметила, однако были люди, которые просекли, что там танк телепортируется. Причем дважды.
Улучшили анимации смерти - их, правда, всего пять секунд на экране видно.
Сделали автоматическое определение укрытий. Т.е. укрытие должно быть достаточно высоким, защищать от врага. Определяли, нужно ли вставать, чтобы выстрелить в врага или надо уйти в сторону.
Читят они, да. Про танки вы уже поняли. Еще солдаты у них не бегут слишком близко к игроку. И если резко развернуться, то это заметно, выглядит глупо. Солдат тоже телепортируют.
Итого:
-80% bulk AI
-20% memorable moments
Слайды у них красивые были. Модные такие, с вертолетом.
Building the BATTLEFIELD AI Experience[.ppt]

Дальше была panel discussion. Там были Брюс Блумберг, Фредерик де Кастер (Creative Assembly), Ульф Йохансен (IO Interactive). Говорили про контроль качества.
Тестеры отрывают разработчиков от работы, когда находят багу, потому что AI баги сложно повторить. Брюс Блумберг рассказывал, что у них был тестер, которого они прозвали Ангелом Смерти. Если он входил в комнату, значит придется задержаться.
Делают плейтесты. По времени прозвучала оценка полдня в неделю.
Фредерик из Creative Assembly рассказывал, что у каждой команды есть доска, они туда пишут над чем работают сейчас, над чем будут работать.
Ульф рассказывал про их smoke тест. Если игра после запуска работает 40 секунд, то тест пройден. У них есть автоматические тесты. Для повышения воспроизвоимости есть AI fight recorder.
Брюс рассказывал, что у них можно законнектить игру с их тулзой, где отображается граф поведения и можно открутиться назад и посмотреть что происходило.

Дальше Щампандар рассказывал про Multi-threading AI, в основном про то, как оно много и интересно глючило, а он его отлаживал.
Использовал Intel TBB.
Высказал следующую мысль: When dealing with multithreading, denial is a very useful tool to use.
Multithreading in Practice: Uncensored and Uncot[.pptx]

Дальше был доклад про EVE online characters
Рассказывали, что когда игрок подходит к ботам и они на него не реагируют, это выглядит странно. Показали несколько роликов. Действительно странно.
Они сделали некий AI social engine и будут вставлять его в EVE online. Здесь было много информации из области социологии, формирование кластеров общающихся людей, очереди, F-formations.
Human Territoriality for EVE Online's Socially Smart Characters[.ppt]

Дальше был гвоздь программы, Кен Перлин, который Perlin noise, рассказывал про процедурную анимацию. Много говорил о том, что надо делать персонажей более убедительными, живыми. И в процедурную анимацию легче вносить изменения. Чем-то мне это все напомнило Spore. По каким-то базовым принципам генерится анимация персонажей. В зависимости от того, как он анимирован, он может казаться, испуганным, веселым, смущенным, агрессивным. Даже если это не антропорморфная фигурка, а треугольное не пойми что. Здесь опять же было много демок, без них говорить сложно.

Здесь могла бы быть красивая фотография Кена Перлина на фоне его слайда с бущующим морем и надписью Why procedural methods are cool. Не получилось.



Дальше были заключительные слова, организаторы конференции порешили, что Cheating is win, что Pathfinding jokes when struggling to return to the hotel - это плохая идея. Что next big thing - это взаимодействие людей и социальный аспект, то есть то, о чем были последние два доклада.
Шампандар обещал конференцию в следующем году в это же время, наказал ничего другого на эти дни не планировать.

Paris Game AI Conference 2010. День первый.

Обещала отчитываться о конференции, выполняю обещание.

На фотографии Фил Карлайл всех ждет

Сегодня все началось с введения, где выступали Шампандар и Карлайл. Про тренды меня спрашивали в комментариях. Про тренды тут как раз и было, записывайте: социальные игры, ИИ толпы, генерация контента.

Дальше выступали три дизайнера, очень просили программистов думать не о том, чтобы применить наиболее крутую технологию, а о том, что увидит игрок.

Дальше выступил Брюс Блумберг. Он рассказывал об игре World of Zoo, об ИИ животных в зоопарке. Здесь было много красивых роликов. Для анимации они использовали HFSM, для поведения животных "что-то вроде behavior trees".
Его слайды: Intimate Conversations with Interactive Animated Characters[.pdf]

Выступили ребята с коротенькими презентациями различных миддлварей. Здесь я узнала, что Autodesk Kynapse используют Intel TBB и довольны.
MASA специализируются на безопасности, но также делает ИИ миддлварь, показывали ролики с драками, использующими мокап. Ролики красивые.
Ребята из PathEngine не используют флоаты и деление тоже не любят, потому что медленно.
Ребята из Havok'а показали совершенно потрясающую демку с крутящимися вентиляторам, между которыми ходят боты. Это они хвастались своей работой с мобильными препятствиями. Спросила их про эту демку во время кофе-брейка. Сказали, что в Интернет они ее, может, и выложат, а вот детали реализации разглашать не могут. Также рассказывали о том, что умеют генерить NavMesh динамически.


Navigation Loop, Микко Мононен
Navigation Loop, слайды и исходники
Рассказывал про агентов, которые вместо того, чтобы сталкиваться, кооперируются друг с другом с тем, чтобы выработать траектории, которые не столкнутся. Здесь было много красивых демок.
К нему было много вопросов. Спросили про нейронные сети. Ну какая ИИ конференция без нейронных сетей. Так вот, Микко Мононен нейронные сети не любит и их не использует.
Также его спрашивали, чего это у него все демки работают с окружностями, что делать с более сложными формами. Ответ Микки: с более сложными формами работать, хм, сложнее, поэтому работаем с окружностями.

Дальше опять panel discussion. Это когда несколько человек сажают в ряд и задают им вопросы, а они отвечают.


Здесь были (справа налево): Алекс Шампандар, Микко Мононен, Кен Перлин, тот самый, который Perlin noise и два разработчика Heavy Rain. Оба французы, оба произносили Heavy Rain с французским акцентом, "эви рейн" у них получался.
Обсуждали генерацию толпы. Здесь я узнала, что в Heavy Rain'е используется для толпыт fluid simulation (эмуляция жидкостей), они пробовали flocking (один из видов steering behaviors), но оно плохо работало для 1000+ человек, большая нагрузка на CPU была. Также они там читят, людей телепортируют иногда.
Спросили их, есть ли какая-то специальная обработка ситуации, когда игрок следует за одним агентом в толпе. Один из них сказал, что следовать за кем-то одним невозможно, потому что народу слишком много. "И потому что у нас телепорт" - добавил второй.
Еще сказали, что motion capture толпы людей непонятно как делать, потому что люди друг друга будут скрывать.

Байлор Ветцел рассказывал о бесчеловечных экспериментах над студентами. В простой игре с боями в стиле Heroes of Might and Magic реализовал несколько стратегий боя. Некоторые умные - они пытались атаковать самых сильных противников. Некоторые - откровенно дурацкие, типа первым атаковать противника с самым длинным названием или атаковать противников по очереди сверху вниз. Просил угадать какая именно стратегия где используется. Угадывали плохо. Просил оценить каждую из стратегий по трем критериям: Fun, Difficulty и Realism. Выяснил, что Random - один из топовых по Fun'у. Также выяснил, что Difficulty и Realism связаны друг с другом, а вот с Fun'ом никак не связаны.
Inside Your Players' Mind With Playtesting[.ppt]


Гваредд Маунтайн рассказывал про психологические опыты в SILENT HILL: SHATTERED MEMORIES.
В процессе игры игроку предлагается беседовать с психологом. По этим беседам состовляется психологический портрет играющего, и в зависимости от него меняется контент. От этого зависело будете ли вы беседовать с секси копом или просто с копом. Меняются одежда людей, мебель, внешний вид монстров.
Контента у них было много. Минимум 3 варианта каждой сцены.
Производит сильное впечатление. Но при этом игра больная на всю голову. Да простят меня поклонники Silent Hill.

Один из задававших вопросы отметил, что идея отличная, но ее бы лучше использовать для чего-нибудь более полезного.
Personality Profiling in SILENT HILL: SHATTERED MEMORIES

среда, июня 23, 2010

Paris Game AI началась

Привет всем! Конференция Paris Game AI уже началась, но там нет WiFi, поэтому прямая трансляция в Твиттер у меня не получится.

Шампандар выступил в начале, было выступление по World of Zoo, сейчас обед. Самое интересное впереди.

Народ общается в основном на английском и французском. Слышала и другие европейские языки. Русских пока не вижу. Если кто есть - откликнитесь!

Первые фотки:





воскресенье, июня 13, 2010

Статья Mea Culpa

Mea Culpa - отличная статья программиста, который любил наворачивать сложность и сделал супергибкую систему.

I spent those decades debugging the Frankenstein. In the OS crash debugger. In hex. Because wasn’t it oh so clever and efficient to build a radically new kind of database with extreme reliability requirements as a highly multithreaded kernel extension to the OS?


Ну и вывод
That experience taught me a lot about what really matters in programming. It is not about solving puzzles and being the brightest kid in the class. It is about realizing that the complexity of software dwarfs even the most brilliant human; that cleverness cannot win. The only weapons we have are simplicity and convention.


И всегда лучше учиться на чужих ошибках, да.

Спасибо maniac'у за ссылку.

четверг, июня 10, 2010

Пост "Проблемы с delete[]"

В посте Проблемы с delete[] Александр рассказывает про undefined behavior вот такого кода:

A* a = new B[T];
delete[] a;

Рекомендую.

Updated 11.07.2010: Eugene K. справедливо уточняет
Вообще-то для получения проблем необязательно удалять. Достаточно выполнить какой-нибудь доступ к элементу "массива" a с индексом больше нуля.

A* a = new B[T];
a[1].p = 42; // запишет не туда

То есть проблема собственно в строке выделения "A* a = new B[T];". Если над ней помедитировать, то можно догадаться, что она лишена смысла.