• Nenhum resultado encontrado

Esquema de detecção de colisões grosseiro

7.2 Abordagens usando sistemas de partículas e GPUs

7.2.1 Esquema de detecção de colisões grosseiro

A implementação do esquema descrito na seção 4.1 foi testado com configurações de 3K até 50K objetos em colisão potencial. A figura 7.17 mostra dois quadros de um cenário com 50K objetos interagindo. Neste exemplo foram usadas esferas de diferentes tamanhos que interagem usando o esquema de integração de Euler. O gráfico da figura 7.18 mostra o número de quadros por segundo para este exemplo.

Figura 7.17: Dois quadros do experimento S_BDGP U.

Figura 7.18: Quadros por segundo para o experimento S_BPGP U que é testado no SistemaB, SistemaC e SistemaD.

Neste experimento simples, as colisões são tratadas diretamente, como colisões entre esferas, gerando forças de repulsão. Entretanto, a extensão do esquema para tratar objetos mais complexos não é muito difícil. Uma opção seria usar o esquema de simulação de corpos rígidos apresentado na seção 3.1.

7.2.2

Simulação de objetos rígidos

Nesta parte foram implementados dois protótipos: o primeiro baseado em forças segundo as abordagens de Harada [2] e Baraff [97], e o segundo baseado em impulsos, segundo a abordagem descrita na seção 3.1.

Simulação de objetos rígidos baseada em forças de repulsão

Os resultados obtidos são mostrados na figura 7.19, onde se ilustra um cenário com 693 modelos (Stanford bunny) sendo amontoados numa caixa. Para a renderização dos objetos foi utilizada uma malha de 3405 vértices e 6806 triângulos.

Figura 7.19: Simulação de 693 objetos complexos (Stanford bunny).

Figura 7.20: Comportamento elástico quando os objetos batem com as paredes do cenário.

O gráfico da figura 7.21 mostra o tempo gasto em cada etapa, para cada passo de tempo, no decorrer da simulação. Estes resultados foram obtidos usando o

Figura 7.21: Tempo gasto em cada etapa de simulação para o experimento

S_RBFGP U.

No gráfico da figura 7.22 são comparados o tempo de integração vs. o tempo de renderização, para cada passo de tempo, no decorrer da simulação. Observa-se que o tempo de renderização é bastante alto comparado com o tempo de processamento nos cálculos da simulação. Isto se deve a que é necessário transferir, da memória da GPU, os dados que representam os estados dos objetos (arrays de posições e orientações), para a memória da CPU, e poder aplicar a transformação correspondente de forma a visualizar cada objeto na posição e orientação correta.

Figura 7.22: Tempo de simulação vs. tempo de renderização.

O gráfico da figura 7.23, entretanto, mostra o desempenho em fps para três GPUs diferentes. Nota-se que o comportamento é bastante similar, apenas com a diferença de rapidez devido ao poder computacional das três GPUs empregadas.

Figura 7.23: Fps para obtidos em três GPUs diferentes.

Esta implementação, baseada em forças de repulsão, gerou resultados de compor- tamento físico plausível. Observou-se, no entanto, que nesta modelagem, a reação a colisões sobre objetos complexos, gera um comportamento elástico quando os obje- tos colidem com obstáculos ou paredes (ver figura 7.20). Este problema é inerente ao método, o que motivou a implementação de uma versão baseada em impulsos.

Outra desvantagem desta abordagem surge quando se quer simular objetos gran- des, já que é necessário o emprego de um número elevado de partículas diminuindo consideravelmente o desempenho e a quantidade de objetos que podem ser simu- lados em tempo real. A figura 7.24 mostra um quadro da simulação de uma cena composta por 6 Stanford bunnies, onde cada objeto é composto por 4936 partículas de igual diâmetro.

Figura 7.24: Simulação de objetos grandes: visualização com partículas (esquerda), visualização com partículas e malhas (centro) e visualização apenas com malhas (direita).

Neste experimento se observa que a qualidade da simulação é comprometida uma vez que as partículas têm um tamanho muito inferior ao tamanho dos objetos, sendo assim comum observar-se interpenetrações onde uma partícula de um dado

objeto colide com partículas do outro objeto mas desde o interior, o que dificulta a determinação do eixo de repulsão entre as partículas (ver figura 7.25).

Figura 7.25: Partículas interpenetradas gerando forças opostas.

Simulação de objetos rígidos usando impulsos

A segunda versão implementada segue o método apresentado por Guendelman et al. [18], descrito na seção 5.2.6. Nesta implementação, a técnica de Harada [2] foi estendida para usar partículas de tamanhos diferentes, o que permite aproximar melhor a forma dos objetos. Nos experimentos S1_RBIGP U e S2_RBIGP U, foram

usados dois modelos: o primeiro (small bunny) representado por 35 partículas e o segundo (big bunny) representado por 208 partículas. A figura 7.26 ilustra a representação por partículas para os modelos small bunny e big bunny.

Figura 7.26: Representação, com partículas de tamanho variable, para dois mo- delos Stanford bunny: pequeno (esquerda), grande (centro) e relação de tamanhos (direita).

um cenário de chuva de objetos, visa mostrar a eficiência do método proposto, conse- guindo ser executado em aproximadamente 22f ps. Já o segundo experimento, com objetos de tamanhos diferentes, visa mostrar a qualidade do método e é executado em aproximadamente 80f ps. Note que, no protótipo S_RBFGP U, este experimento

não tem um bom desempenho, uma vez que o objeto grande é constituído por 50 ve- zes a quantidade de partículas do objeto pequeno, além de permitir interpenetrações devido à relação de tamanho entre partículas e objetos grandes.

O gráfico da figura 7.28 mostra o tempo gasto em cada etapa, para cada passo de tempo, no decorrer da simulação para o experimento S1_RBIGP U. Se observa

que o processo de ordenação de partículas por índices de célula, fundamental para o processo de detecção de colisão, gasta quase 30% do tempo total num passo de simulação.

Figura 7.27: Simulação de coelhos: chuva de 2904 coelhos pequenos(esquerda), 500 coelhos pequenos caem sobre 6 coelhos grandes(direita).

Figura 7.28: Tempo gasto em cada etapa de simulação para o experimento

S1_RBIGP U.

A figura 7.29 mostra dois instantes de tempo da simulação S1_RBIGP U. Pode-

se verifica, o que demonstra que o protótipo baseado em impulsos é mais apropriado para simulação de objetos rígidos.

Figura 7.29: Dois quadros de simulação. Interpenetração entre objetos e obstácu- los(paredes) não mais se verifica.