You are on page 1of 11

Algoritmos para Deteco de Colises em Ambientes Grficos Bidimensionais

Rodrigo R. Ferreira1, Rafael R. Ferreira1


rodrigorf33@hotmail.com, rafaelrferreira@gmail.com

Abstract. Several games and application needs algorithms capable of detect collisons quickly and efficiently always bearing in mind the improvement of the rates of frames per second (fps). The main purpose of this paper is to demonstrate the Quadtree technique for collision detection in 2D environments, as well as talking about procedures to make detection more efficient with the use of tree structures, and space partitioning. This study is based on a theoretical survey on printed and electronic publications.The relevance of this issue stems from the huge growth in the area of digital entertainment and need for research that will improve the analysis on the contemporary technologies related to collision detection. Resumo. Diversos jogos e aplicaes necessitam de algoritmos capazes de detectar colises de forma rpida e eficiente tendo sempre em vista a melhoria das taxas de quadros por segundo, fps (frames per second). O objetivo deste artigo demonstrar a tcnica de Quadtree para detectar colises em ambientes 2D. Este estudo baseia-se em um levantamento terico, sobre publicaes impressas e eletrnicas. A relevncia do tema decorre do grande crescimento na rea de entretenimento digital e da necessidade de pesquisas que venham a aprimorar as anlises sobre as tecnologias contemporneas com relao deteco de colises.

1. Introduo
Um ambiente grfico dinmico, seja um jogo ou um simulador virtual, necessita transcrever da forma mais realista possvel s caractersticas fsicas do mundo real permitindo um maior envolvimento do usurio com a aplicao. Uma das principais caractersticas que deve ser levada em considerao a impenetrabilidade, isto , a propriedade da matria que consiste na impossibilidade de dois corpos ocuparem no mesmo tempo o mesmo lugar no espao. Partindo dessa premissa, se dois corpos colidirem em um cenrio virtual, suas velocidades, direes e formas podem se modificar. No entanto, esta tarefa no trivial e tem se caracterizado muitas vezes como um gargalo no desempenho em aplicaes que simulam ambientes grficos interativos, isso porque o custo computacional pode ser alto [Santos 2007]. Um dos maiores problemas no tratamento de colises o de realizar o mnimo de clculos possveis, melhorando conseqentemente o tempo de resposta e sem perder a preciso [Taddeo 2005]. O primeiro item deste artigo traz a presente introduo, o segundo item apresenta uma fundamentao sobre tratamento de colises, o terceiro item aborda tcnicas de envoltrios geomtricos, o quarto item apresenta tcnicas de

decomposio espacial, o quinto item discute sobre testes realizados com uma Quadtree.

2. Envoltrios
Em muitos casos a coliso pode ser testada utilizando a prpria geometria do objeto [Rocha and Rodrigues 2007], muitas vezes realizando o teste de coliso pixel a pixel, contudo esta tarefa consome muito recurso computacional e deve ser evitada ao mximo, exceto quando a aplicao exige um alto nvel de preciso e a eficincia no um fator crtico. Geralmente so aplicadas formas geomtricas simplificadas, procurando uma melhor relao entre custo de processamento e preciso na deteco (Figura 1). As estruturas envoltrias mais utilizadas so: Esferas (Bounding Spheres), Axis Aligned Bounding Box (AABB), Oriented Bounding Box (OBB), Envoltrios Convexos, K-DOP (Discrete Orientable Polytopes) [Santos 2007; Bradshaw and OSullivan 2004].

Figura 1: Comparativo entre envoltrios volumtricos [Kimmerle 2005].

3. Varredura e Corte (Sweep & Prune)


O algoritmo de Varredura e Corte (Sweep & Prune) uma tcnica utilizada na etapa abrangente para deteco da coliso. Est tcnica baseia-se no na coerncia temporal dos objetos na cena, pois, geralmente os objetos se movem a pequenas distncias entre os quadros (frames) de uma animao [Rocha 2007]. O teste feito calculando a interseo entre caixas alinhadas aos eixos (AABB), esses volumes podem ser representados por suas respectivas projees nos eixos coordenados x e y, no caso de um cenrio bidimensional (Figura 2). possvel mostrar que se os intervalos resultantes das projees nos eixos esto se sobrepondo, ento, as AABB's esto colidindo [Rocha 2007]. Um par de caixas envolventes podem colidir, se e somente se, seus intervalos se sobrepem em todas as dimenses [Cohen 1994].

Figura 2: Sobreposio de valores no eixo na tcnica de Sweep & Prune [COHEN et al., 1994]

Para descobrir se duas AABB's esto colidindo preciso manter uma lista ordenada com os intervalos de todas as caixas (uma lista para cada eixo), e a partir destas, derivar os pares colidentes. Com no quadro atual as listas esto ordenadas, bem provvel que, no prximo quadro, a lista esteja prxima de estar ordenada. Para evitar a sobrecarga na aplicao por causa da atualizao das listas, devem ser utilizados algoritmos eficientes, que realizem uma ordenao em tempo linear [Rocha 2007]. O Sweep & Prune possui complexidade media de O(n m) , onde n e o numero total de caixas e m e o nmero de caixas em estado de coliso [Santos 2007].

4. Tcnicas de Decomposio Espacial


A idia principal do particionamento do cenrio tem como base a coerncia espacial dos objetos, os testes de coliso precisam ser efetuados apenas em objetos que estiverem em uma mesma clula (subdiviso criada pelo algoritmo de decomposio espacial), pares de objetos distantes um do outro, localizados em clulas diferentes, no precisam ser testados, pois, possuem poucas chances de colidirem em um determinado instante. A decomposio espacial realizada pela diviso recursiva do cenrio, criando uma estrutura de dados hierrquica utilizada de forma a auxiliar no processo de deteco da coliso [Santos 2007]. A utilizao de estruturas de decomposio espacial no restrita broad phase, tambm utilizada na narrow phase para verificar se os pares de objetos descartados na fase anterior esto realmente colidindo [Taddeo 2005]. Exemplos de estruturas de particionamento so as Quadtree, K-d trees, R-Trees, BSP Trees entre outras [Lin and Manocha 2003].

5. Quadtree
Existe atualmente uma grande variedade de estruturas de dados hierrquicas que so utilizadas para representar dados espaciais, O termo Quadtree utilizado para descrever uma classe de estruturas hierrquicas cuja propriedade em comum o princpio da decomposio recursiva do espao. Quando se trata de deteco de colises esta tcnica segue o mesmo princpio bsico das estruturas de decomposio espacial discutidas anteriormente, levando em considerao a coerncia espacial dos objetos dispostos no ambiente grfico para reduzir o nmero de testes de sobreposio de corpos [Nonato 2000]. As quadtrees so estruturas de dados que utilizam o conceito de rvore em programao para otimizao computacional onde cada n da rvore possui at quatro filhos [Rose 2004]. Uma quadtree divide um cenrio em quatro partes de tamanhos iguais, e divide essas partes em outras quatro partes, e assim sucessivamente at que alcance um determinado tamanho e pare de dividir (Figura 2). A estrutura da rvore montada a partir da cena principal, sendo esta o n raiz (root node), e cada uma das subdivises sero filhas de suas divises superiores. As partes que no sofrerem divises sero as folhas (leaves).

Figura 3: rvore subdividida

Na Figura 3 temos a representao hierrquica da diviso do cenrio, onde o crculo no topo da rvore o n raiz, representando todo o ambiente virtual, os crculos maiores representam a primeira diviso da quadtree que gera quatro ns filhos do n raiz, e por ltimo temos os crculos simbolizados da letra A at H, que so os ns folhas das clulas um e quatro representando a ltima diviso do cenrio. O uso de quadtrees no se limita apenas ao processamento eficiente em testes de deteco de coliso, tambm muito utilizada no processamento de imagens, algoritmos de compresso de imagens, em aplicativos como o 3D Studio Max para se fazer o controle de profundidade de cor para sombras Ray Trace, muito utilizado em ecografias na medicina para facilitar a localizao de tumores, simulaes astronmicas, entre outras [Goetze 2006]. 5.1. Coerncia Espacial e Testes de Coliso Considerando que as esferas menores da Figura 4 esto em um quadrante diferente da esfera do quadrante 1, a computao exigida para determinar se a esfera em

movimento colidiu ou no com as esferas estticas reduzida substancialmente. Numa quadtree com quatro subdivises a reduo de 75%, pois os quadrantes 2,3 e 4 podem ser eliminados, j que a esfera maior est no quadrante 1 neste momento e os testes de coliso sero feitos apenas para os pares deste quadrante. Neste caso em particular a reduo de 100%, nenhum teste de coliso ser feito, pois a esfera vermelha encontrase isolada no quadrante 1. Sem a utilizao da tcnica de particionamento espacial teramos de fazer oito testes de coliso [Rose 2004]. Se o particionamento da cena em quatro quadrantes possui tantos benefcios, porque ento no continuar a diviso dos quadrantes em partes ainda menores? exatamente isto que pode ser feito para aumentar ainda mais a eficincia e velocidade do clculo dos testes de coliso diminuindo o tempo computacional envolvido.

Figura 4: Duas subdivises - 16 quadrantes

Na Figura 4 cada um dos quatro quadrantes existentes foi subdividido em outros quatro menores resultando em dezesseis quadrantes. Pode-se perceber como isso melhora ainda mais a eficincia do teste de coliso, pois agora a esfera em movimento precisa estar bem prxima das esferas estticas antes que seja necessrio verificar uma possvel coliso, e medida que se aproxima delas ser necessrio fazer a anlise apenas no conjunto de esferas do quadrante em que nosso objeto em movimento se encontra. Pode acontecer tambm de em alguns casos um objeto ultrapassar os limites de um dos quadrantes. Nestes deve-se incluir o objeto em ambos os quadrantes que ele intercepta, do contrrio, ocorreria um erro ao considerar se o teste de coliso do objeto em movimento deve ser testado contra o objeto esttico, resultando em uma sobreposio das imagens, o que seria uma fatalidade no contexto em estudo [Rose 2004].

5.2. Variaes das Quadtrees Em algumas situaes pode acontecer dos objetos no estarem distribudos uniformemente pelo cenrio, resultando em uma rvore com folhas vazias e sem utilidade alguma. No faz sentido armazenar essas partes vazias da rvore, um desperdcio de memria. A soluo para isso continuar subdividindo os quadrantes apenas enquanto eles tiverem mais de um objeto, isto leva a uma rvore adaptada representada pela figura abaixo. Notem que apesar de alguns quadrantes possurem objetos, eles no foram subdivididos, portanto no possuem filhos na rvore, evitando o uso desnecessrio de memria. Um dos problemas relacionados s quadtrees o fato de no existir balanceamento, podendo

acontecer de algumas ramificaes da rvore tornarem-se muito grandes e outras pequenas com poucos ns, isto acabaria deixando a busca mais lenta. 5.2. Implementao da Quadtree O desenvolvimento da classe responsvel por representar a estrutura hierrquica proveniente da decomposio espacial do cenrio, envolvia a criao de alguns mtodos bsicos para criao e manuteno dos ns e objetos na rvore. (a) NoQuadTree[] m_SubNos; Vetor<ObjetosColisao>m_ObjColisao=newVetor <ObjetosColisao>(); (b) NoQuadTree (XEsquerda, YEsquerda, Largura, Altura) (c) SubDividir() (d) AdicionarObjeto (ObjetosColisao objeto) (e) RetornaObjetosColisao (ObjetosColisao objeto, out ObjPotColisao) (f) AtualizaObjeto (ObjetosColisao obj) Para a construo da rvore o nico n que precisa ser instanciado o n raiz, toda a rvore ser montada a partir deste n inicial, este ir gerar recursivamente todos os outros, caso o mtodo (c) seja chamado, as variveis em (a) representam o vetor de sub-ns do n em questo, e um vetor responsvel por armazenar todos os objetos que pertencem aquele sub-n. Primeiramente o construtor (b) chamado, recebendo como parmetros de entrada o valor x e y do centro do eixo coordenado na aplicao, seguido da largura e da altura do ambiente onde iro ser testadas as colises. Em seguida chamado o mtodo (c) para criar os quadrantes menores, lembrando que o nmero de chamadas a este mtodo ter um impacto direto no processamento da aplicao (Figura 5).

Figura 5: Fluxograma da subdiviso da rvore.

Aps a criao dos sub-ns, todos os objetos do cenrio so inseridos na rvore atravs do mtodo (d), sendo adicionados apenas aos sub-ns referentes aos quadrantes que o objeto est colidindo. Feito isso, basta percorrer o vetor de objetos da cena e pass-los como parmetro para o mtodo (e), que ir retornar todos os objetos que esto no mesmo quadrante e que, portanto, podem colidir. Todas as inseres, remoes e busca na rvore feita em vetores ordenados utilizando algoritmos de busca binria para realizar estas operaes.

5.3. Ambiente Desenvolvido Foi desenvolvido uma aplicao criar objetos bidimensionais em um cenrio de 1000x600 pixels, onde cada um desses objetos ir iniciar numa posio inicial gerada aleatoriamente dentro dos limites do cenrio. A tcnica de envoltrio utilizada na aplicao foi a de Caixas alinhadas aos eixos (AABB), o motivo desta escolha que os objetos possuem uma geometria simples e invarivel com o passar do tempo, alm disso, as AABBs neste caso possuem um ajuste perfeito ao objeto em seu interior, tornando o clculo o mais eficiente possvel.

Figura 6: Tela da aplicao onde foram executados os testes de desempenho.

A Figura 6 mostra a interface da aplicao em execuo, onde os blocos em azul (Figura 6 (a)) esto em um esto de coliso, e os pretos (Figura 6 (c)) no esto. A regio destacada em verde (Figura 6 (b)) se refere ao contador de testes de coliso executados em um determinado momento, seguido do nmero mximo possvel de testes que podem ser realizados, baseado na quantidade de objetos existentes na cena.

Figura 7: Nmero de divises da quadtree por nmero de clculos de coliso realizados.

A Figura 7 mostra o grfico que relaciona o nmero de divises feitas na rvore com o nmero de testes para detectar a coliso entre 250 objetos. medida que so criadas mais sub-regies na cena, o algoritmo da quadtree precisa testar menos pares de objetos para saber se estes esto colidindo, diferente do algoritmo de fora bruta que teria um grfico constante no nmero mximo possvel de testes. No teste realizado na Figura 8 foi executada a aplicao uma srie de vezes, e a cada nova execuo o nmero de objetos foi incrementado, acrescentado 40 objetos ao

cenrio a cada execuo. Ao mesmo tempo foi capturado o nmero de clculos de coliso realizado.

Figura 8: Nmero objetos por nmero de clculos de coliso realizados.

O grfico demonstra a grande diferena entre o algoritmo de fora-bruta e o da quadtree, enquanto que a linha da quadtree cresce de uma forma discreta, mesmo com a adio de uma grande quantidade de corpos, a linha do algoritmo da fora-bruta aumenta de forma exponencial. Encerrando a anlise temos o grfico da Figura 9 demonstrando utilizao do processador e a taxa e quadros por segundo relacionadas com a quantidade de subdivises realizadas no cenrio. O teste foi realizado com 200 objetos em movimento sendo inseridos na quadtree. O grfico mostra que o desempenho de uma quadtree est diretamente relacionado com o nmero de divises no cenrio, quando foram feitas duas divises a eficincia da quadtree atingiu seu ponto mximo, porm, a partir da terceira diviso do cenrio a taxa de quadros cai drasticamente, e a utilizao do processador aumenta em at 20%.

Figura 9: Uso da CPU e FPS por divises da quadtree.

Este decrscimo abrupto no desempenho porque o nmero de ns na rvore cresce exponencialmente em relao ao nmero de divises. Portanto, se tivermos um nmero n de divises, o nmero de ns na rvore ser dado pela ordem O(4 ) , ou seja, se tivermos 3 divises sero criados 64 sub-ns, para n igual a 4 existiro 256 subns.Uma possvel soluo para a queda de desempenho da quadtree quando existe uma quantidade muito grande de ns na rvore criar subdivises dinamicamente baseado no nmero de objetos presentes no quadrante referente aquele n. Evitando com isso que a recurso acesse um nmero muito grande de ns durante as operaes de busca.
n

6. Concluso
A deteco de colises um campo que tem crescido cada vez na rea de computao grfica. E apesar de todos os avanos tecnolgicos realizados nos ltimos anos na parte de hardware, estes avanos tornaram-se menos expressivos se for levada em considerao exigncia computacional das aplicaes virtuais criadas nos ltimos anos.Com base nos resultados obtidos com os testes de desempenho de CPU, quadros por segundo (fps) e nmero de testes de coliso, fica claro que o algoritmo da quadtree reduz expressivamente o nmero de clculos que precisam ser realizados entre pares de objetos na cena, se comparado com a quantidade de testes que realizado pelo algoritmo de fora-bruta. Contudo, medida que o nmero de subdivises do cenrio aumenta, apesar da reduo do nmero de testes de coliso, a demanda computacional exigida para manter a estrutura da rvore torna-se um problema grave. Portanto a quadtree deve ser utilizada baseada no contexto em que se aplica, o algoritmo deve ser configurado de forma a obter o menor nmero de clculos sem que isso comprometa a execuo do sistema.

Referncias
Bradshaw, G; OSullivan, C. (2004) Adaptive Medial-Axis Approximation for SphereTree Construction. In: ACM Transactions, Vol. 23, No. 1. Cohen, J. D.; Lin, M.C; Manocha D.; Ponamgi M. K. (1994) Interactive and Exact Collision Detection for Large-Scaled Environments. In: Technical report, University of North Carolina at Chapel Hill, p 28. Goetze, A.R. (2006) Quadtree. Universidade do Vale do Rio dos Sinos (UNISINOS), RS. www.inf.unisinos.br/~ari/estrut/quad/Quadtree.htm Agosto. Kimmerle, S. (2005) Tutorial: Real-Time Collision Detection for Dynamic Virtual Environments. In: Proc. of the IEEE Virtual Reality, University of Tbingen, p18. Lin, M.; Manocha, D. (2003) Collision and proximity queries. In: CRC Handbook of Discrete and Computational Geometry, 2 ed., Boca Raton, FL. Nonato, Lus G. (2000). Tipos e Estruturas de Dados - Quadtrees. Instituto de Cincias Matemticas e de Computao http://www.lcad.icmc.usp.br/~nonato/ED/ Novembro.

Rocha, R.S. Rodrigues M.A. F. (2007). Anlise de Desempenho de Algoritmos para Deteco de Coliso em Ambientes Grcos Interativos. Universidade de Fortaleza (UNIFOR). Rose, D. (2004). Quadtree design. www.heroicvirtuecreations.com/QuadTree.html Agosto. Texas, EUA.

Santos, R.G. (2007). Deteco de coliso para um simulador de rob manipulador. Trabalho de concluso de curso, Universidade do estado de Santa Catarina (UDESC). Taddeo, L. DA S. (2005). Deteco de coliso utilizando grids e octrees esfricas para ambientes grficos interativos. Dissertao do Curso de Mestrado em Informtica Aplicada da Universidade de Fortaleza, Cear, p 103.

You might also like