Saturday, April 9, 2011

Escalabilidade de sistemas multiagentes em jogos digitais: herdando técnicas e componentes da computação gráfica

A busca por realismo em jogos de computador levou a indústria a grandes progressos na computação gráfica tanto na modelagem como na renderização. A sinergia entre as fabricantes de hardware [1][2] e os desenvolvedores de middleware[3][4] (as engines [5][6][7]) é muito interessante e culminou com a criação de peças de hardware específicas para o processamento gráficos, as GPUs [8], e na geração de imagens com um grau de realismo impressionante, como Uncharted 2 [9] para Playstation 3 [10] na Figura 1.

Figura 1 - Uncharted 2 para Playstation 3.
Em jogos recentes, por demanda de mercado, temos a utilização de cenas compostas por diversos elementos e um alto nível de detalhe. Cenários com batalhas épicas , ambientes urbanos ou partidas de futebol , requerem a renderização de um grande número de personagens autônomos.  Pelas imagens dos jogos podemos ver que avanços incríveis foram feitos nas áreas de gráficos 3D em tempo real, complexidade do mundo e dos personagens, e até em efeitos de pós-processamento. No entanto, apesar desse tremendo esforço na parte gráfica a simulação desse ambiente utilizando técnicas confiáveis de inteligência artificial ainda não é prioridade para a indústria.

Figura 2 - Jogos com simulação complexa. Age of Empires 3 simula guerras, SimCity 4 e GTA 4 simulam cidades inteiras.
Essa marginalização da inteligência artificial nos jogos provoca uma série de problemas de game design que terminam por quebrar toda a imersão gerada pela criação de cenas graficamente perfeitas. Em diversos jogos temos problemas de frustração do jogador quando os oponentes “roubam”, pois não possuem estratégias convincentes o suficiente para competir de igual para igual com o mesmo.  Em alguns casos a simulação é desinteressante, pois parece artificial e não mimetiza bem o fenômeno real . O replay-value é baixo, pois em pouco tempo o jogo deixa de apresentar desafios com nível de dificuldade suficiente para o jogador [14]. Enfim, tipicamente, o sentimento do usuário é que quanto melhor a inteligência artificial que controla os NPCs, melhor é o jogo. Sendo ela um tanque de uma estratégia em tempo real ou um monstro num jogo de ação em terceira pessoa.
Milhares de técnicas de inteligência artificial foram criadas para simular os mais diversos fenômenos (naturais, sociais, econômicos, entre outros) encontrados em jogos eletrônicos, no entanto, poucas delas são efetivamente utilizadas comercialmente pelos jogos. Apesar de todo o avanço tecnológico os jogos ainda são limitados pela capacidade de processamento das CPUs [15]. E as técnicas geradas, por cultura mesmo, são voltadas para a execução em arquiteturas de CPU dificultando a utilização das mesmas.
Se por um lado o aumento da performance das CPUs está diminuindo com o tempo, o das GPUs têm duplicado a cada dois anos. A saída das CPUs é utilizar vários núcleos e paralelizar o processamento [16], como já é feito desde o começo pelas GPUs e os algoritmos precisam se adaptar para essa nova realidade.


A proposta de alguns trabalhos nessa área (como o de Adônis)  é aproveitar todo o avanço do hardware para a computação gráfica e as técnicas de nível de detalhe já desenvolvidas ao longo de todos esses anos, que já tomam proveito de todo o paralelismo do hardware, na implementação de técnicas de inteligência artificial adaptando-as. Dessa maneira podemos ajudar no balanceamento da carga entre CPU e GPU [17]. Essa é uma área bem interessante e farei alguns posts relacionados a isso no decorrer do blog :D