tecnologias de jogos de vídeo - di.ubi.ptagomes/tjv/praticas/06-particlesystems-lab.pdf · os...

11

Click here to load reader

Upload: lamdien

Post on 09-Nov-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

Tecnologias de Jogosde Vídeo

Abel J. P. Gomes & Gonçalo Amador

LAB. 6

Departamento de InformáticaUniversidade da Beira Interior

Portugal2013

Copyright 2009-2013 All rights reserved.

Page 2: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

LAB. 6

SISTEMAS DE PARTÍCULAS1. Objetivos2. Conceitos3. Exercícios teóricos e de programação4. Trabalho futuro

Page 3: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

Lab. 6

SISTEMAS DE PARTÍCULAS

Nesta lição prático-laboratorial aprender-se-á como funciona um motor departículas simples, para efeitos de explosões, e um motor de partículascomplexo, para efeitos de líquidos. Irão também ser abordados alguns doscasos em que os motores de partículas são empregues, para simulardeterminado efeito.

1. Objetivos específicos de aprendizagem

Terminada esta ficha de trabalho, o aluno deve saber e ser capaz de:

1. Saber implementar um motor de partículas simples e um motorcomplexo, mais especificamente para efeitos de explosões e liquidosrespetivamente.

2. Identificar quais os possíveis casos de uso e limitações de umsistema de partículas.

3. Identificar de que forma os motores de partículas a implementarpodem ser adicionados ao módulo da física do motor de jogosJMOGE, e para que possíveis usos.

2. Sistemas de Partículas

Os sistemas de partículas foram primeiramente concebidos para serem usadosem efeitos especiais em filmes (“Star Trek II: The Wrath of Khan”) e só maistarde foram também utilizados em jogos, a título de exemplo o jogo Quake II,como ilustrado na Fig. 1.

O conceito inerente por detrás de um motor de partículas é que toda a matériaé constituída por milhões de átomos. No entanto, devido há quantidadeenorme de átomos necessários (biliões ou mais), o que implicaria uma enormecapacidade de processamento, para simular algo complexo como água dentrode um copo, utiliza-se número muito menores de elementos (i.e., partículas),na casa das dezenas até aos milhares.

Uma vez que podem existir múltiplos sistemas de partículas em simultâneo, onúmero de partículas varia dependendo da quantidade de sistemas a simular edo número de partículas em cada sistema.

Page 4: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

Figura 1: Efeito de “squish” de sangue no jogo Quake II, suportado por um sistema de partículas simples.

Existem dois tipos de sistemas de partículas: os simples e os complexos. O queos distingue é que nos sistemas simples é incomum existirem testes decolisões entre partículas, existe em regra apenas um tipo ou fase de partículas,e cada partícula é desenhada individualmente e não a geometria formada porela e partículas próximas. Nos sistemas complexos as partículas obedecem aregras físicas, mais complexas, e.g., na simulação de líquidos recorrendo aosistema de equações de Navier-Stokes. No mesmo sistema as partículaspodem ser de diversos tipos, i.e., ter fases distintas, e.g., numa simulação delíquidos podem existir partículas do tipo água e do tipo óleo. Nos sistemascomplexos as partículas podem ainda conter informação sobre a geometria dapartícula em função da sua proximidade com partículas vizinhas, comoilustrado nas Fig. 3 e 4 para uma simulação de líquidos, com e semreconstrução.

Page 5: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

Figura 2: Simulação de um líquido recorrendo a um sistema de partículascomplexo, sem reconstrução.

Figura 3: Simulação de um líquido recorrendo a um sistema de partículascomplexo, com reconstrução e efeitos de ótica.

Page 6: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

Os sistemas de partículas servem em particular para simular fenómenosnaturais, e.g., nuvens, bolhas de ar dentro de água, cascatas, explosões, etc.Em jogos utilizam-se motores de partículas simples e complexos, mas comnúmeros reduzidos de partículas, de forma a assegurar o desempenho emtempo real dos jogos. No entanto em industrias como a de filmes de animaçãopor computador, os sistemas de partículas de elevada complexidade comnúmeros de partículas, na casa das dezenas de milhar, são empregues.

Um sistema de partículas possui por norma duas entidades distintas: partícula,e um gestor de partículas. A partícula tem como propriedades mínimas a suaposição, velocidade, aceleração, idade, massa, e tempo de vida. Uma partículapode durar para sempre mas dependendo do uso pretendido morre ao fim dealgum tempo. Um efeito de partículas acaba quando todas as partículasmorrem. O gestor de partículas cria e atualiza cada uma das partículas a seucargo ao longo do tempo. Um motor de partículas pode ter um gestor paramúltiplos efeitos de partículas, ou podem haver múltiplos gestores um porefeito pretendido. De referir que efeitos aqui refere-se a um fenómeno, e.g.,explosão, fumo, fogo, liquido, etc, e não a condições distintas de simulação,e.g., água a verter para um copo ou um rio a correr continua a ser um efeitode líquidos um gestor apenas condições iniciais diferentes.

Para esta ficha é disponibilizado um projeto de apoio (ParticleSystem) quetem dois sistemas de partículas, um simples para explosões e um complexopara líquidos. De referir que para explosões não são considerados efeitos decombustão, o que tornaria o sistema simples num sistema complexo. Sãoapenas considerados efeitos de expansão, i.e., partido de uma posição inicialas partículas movem-se para longe desse ponto. No projeto referido apenas énecessário alterar, para cada um dos sistemas, um total de quatro classes:Particle.java, ParticleSystem.java. A classe Particle.java implementa ointerface IParticle.java para uma partícula num sistema simples (explosão) euma partícula complexa (líquidos). A classe ParticleSystem.java implementao interface IParticleSystem.java para um gestor de partículas num sistemasimples (explosão) e num sistema complexo (líquidos). As classesGameRendererExplosion.java e GameRendererSPH.java são as classesprincipais de cada sistema de partículas, onde é configurada uma aplicaçãográfica em JOGL. No caso do sistema simples quando o botão esquerdo do ratoé premido um efeito de explosão é gerado (após a realização dos exercíciosque se seguem). No sistema complexo quando o botão esquerdo do rato épremido são adicionadas partículas de liquido, e quando o botão direito épremido são adicionadas partículas do tipo obstáculo. O sistema de partículascomplexo utiliza SPHs, que carece de alguma introdução prévia.

Page 7: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

3. Smoothed-Particle Hydrodynamics (SPH)

Existem diversas formas de simular fluidos, entre outros líquidos. As SPH(http://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics) recorrem àsequações de Navier-Stokes (http://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equations), e permitem simular a interação entre fluidosde diversos tipos ou fases, e.g., água e fumo. As SPH são uma abordagemLagrangiana, i.e., as alterações ao fluido são observadas em cada um doselementos que o constitui, ou seja, todas as partículas, de tipos distintos ounão, pertencentes ao mesmo sistema complexo de partículas. Cada partículatem associada uma distância de “smooth” (parâmetro SMOOTHING_LENGTH,da classe ParticleSystem.java, na diretoria“physics/particleSystem/SPH”). As propriedades físicas de cada partícula nosistema são influenciadas por todas as demais partículas no sistema, queestejam a esta distância. Esta influência é controlada ou “smooth”, i.e.,garante a estabilidade numérica do sistema.

Tal como em sistemas de partículas simples atualizar/avançar a simulaçãopara um determinado intervalo de tempo em segundos (parâmetroTIMESTEP, da classe ParticleSystem.java, na diretoria“physics/particleSystem/SPH”) consiste em atualizar cada partícula. A títulode exemplo o intervalo do tempo por omissão é 0.6 segundos, ou seja, asimulação é atualizada cerca de 2 vezes para cada segundo de simulação.Aumentar este valor introduz mais instabilidade na simulação, diminui-losignifica mais cálculo por segundo de simulação mas uma simulação maisexata. Não esquecer, que mais partículas também implicam mais cálculo.Sendo o número de partículas e o número de vezes que a simulação tem deser atualizada por segundo dois dos principais critérios de desempenho dasSPH. De referir que existem outros critérios mas que não estão implementadosnem serão abordados no decorrer desta ficha, e.g., reconstrução da superfíciede um liquido.

Aproximar/estimar uma solução para as equações de Navier-Stokes, requerdecomposição em passos. A ideia subjacente a reter é atualizar (métodoupdate(GL2 gl) da classe ParticleSystem.java) o sistema de partículasconsiste em realizar um conjunto de passos para cada partícula, de referir porordem os métodos: redistributeGrid(), computeDensities(),computeStressTensors(), addAccelerations() e renderParticle(GL2 gl) da classeParticleSystem.java, na diretoria “physics/particleSystem/SPH”. O que oprimeiro método faz resume-se a recriar uma grelha em que cada célulacontem uma das partículas existentes no sistema. O segundo método atualiza

Page 8: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

o termo da densidade ou seja a quantidade de partículas que afetam cadapartícula no sistema. O terceiro método recalcula a pressão e velocidade a quecada partícula está sujeita em função de partículas na sua proximidade. Openúltimo método atualiza as propriedades físicas de cada partícula tendo emconta acelerações externas como por exemplo a gravidade e trata do casosem que as partículas tentam sair do espaço de simulação (força as partículas asimular a colisão com uma parede neste caso). O ultimo passo consiste emdesenhar cada uma das partículas. De referir ainda que existem neste modelodois tipos de partículas: liquido e obstáculos sólidos. No entanto podiam havermais tipos de partículas, e.g., gás, outro liquido, etc. Cada um dos métodosreferido consiste em realizar uma ou mais atualizações todas as partículas dosistema. Partes desses métodos irão ser implementados nesta ficha, na aclasse Particle.java na diretoria “physics/particleSystem/SPH”.

No sistema simples para efeitos de explosões, irá ser verificado que o sistemaao fazer uma atualização, atualiza toda e cada partícula, num total de 2métodos apenas. No sistema complexo uma atualização do sistema implicavários passos constituídos cada por 1 ou mais sub-passos por partícula.

É importante referir que não é expectável que o aluno absorva todos ospormenores da simulação de líquidos (o que levaria alguns meses no mínimo),apenas que tenha uma ideia de estruturação de sistemas de partículas simplese complexos, e da dificuldade na implementação entre estes. De referir queexiste uma componente adicional de reconstrução de geometria para sistemascomplexos do partículas, que não é abordada nesta ficha.

4. Exercícios teóricos e de programação

Exercício 1. Após fazer o download do projeto ParticleSystem, vamos primeiramenteimplementar o sistema de partículas simples para explosões, através dafinalização das classes Particle.java e ParticleSystem.java, na diretoria“physics/particleSystem/explosion”. Uma partícula (classe Particle.java)tem uma posição, uma velocidade, uma aceleração, um tamanho, uma cor,uma idade, e um tempo máximo de vida. Nesta classe falta implementar doismétodos:

1. public void update();2. public boolean isDead();

O método update() consiste em atualizar para uma determinada partícula a suaa posição, velocidade, aceleração, tamanho, cor, e idade. O método isDead()serve apenas para verificar para uma determinada partícula se esta atingiu o

Page 9: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

seu tempo de vida máximo permitido. Cada partícula é desenhada como umponto colorido numa determinada na posição espacial que esta ocupa.

Após concluída a implementação da classe Particle.java. É necessárioconcluir a implementação da classe ParticleSystem.java. Nesta classeapenas é necessário completar o método:

1. public void update();

Este método consiste em atualizar as partículas existentes no sistema departículas, e remover todas as partículas que tenham falecido.

Dica: Como em fichas anteriores em todas as classes do motor de particulassimples a completar existem instruções, nos “Action Items” do Netbeans, dotipo “TODO: (ParticleSystemExplosion) ...”.

Se o sistema estiver implementado corretamente, neste momento aquando oaluno correr a aplicação, a cada clique do botão direito do rato um sistema departículas será criado relativamente perto do cursor do rato dentro da janelada aplicação. Visualmente será visto um efeito simplista que aparenta ser umaexplosão. De notar que se forem feitos cliques de rato repetidos com algumarapidez, vão ser criados vários sistemas de partículas e não apenas um.

Exercício 2. O exercício 2 consiste em implementar o sistema de partículas complexo. Asalterações necessárias apenas serão realizadas na classe Particle.java, nadiretoria “physics/particleSystem/SPH”. É primeiramente necessário alterara classe principal do projeto, i.e., clicar com o botão direito do rato no projetono Netbeans, Properties, run, em “Main Class:”, browse e substituir oui.GameRendererExplosion por ui.GameRendererSPH.

De seguida é necessário implementar alguns métodos descritos em cada umdos “Action Items” do Netbeans, do tipo “TODO: (ParticleSystemSPH) ...”. Éde referir que os algoritmos estão explicados passo a passo, mas para umaadicional perceção no que cada método faz é sugerido uma consulta aos links:

http://zeus.mat.puc-rio.br/tomlew/pdfs/lucas_wuw.pdf

http://www.essentialmath.com/GDC2010/VanVerth_Fluids10.pdf

Se o sistema de partículas complexo estiver implementado corretamente,neste momento aquando o aluno correr a aplicação, irá visualizar o sistema aevoluir, como ilustrado na Fig.4:

Page 10: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

Figura 4: Simulação de líquidos utilizando SPH, em 2D, sem reconstrução, compartículas do tipo sólido (rosa) e liquido (azuis).

Exercício 3. O exercício 3 consiste em alterar as condições iniciais da simulação, i.e., aquantidade de partículas inicial e a posição destas. Para ser possível realizareste exercício é necessário alterar o método reset(), na classeParticleSystem.java, na diretoria “physics/particleSystem/SPH”. Fica acritério do aluno as alterações a realizar. Apenas é necessário que seja outrocenário, e.g., areia (fluido) a cair de uma ampulheta, sendo as paredes um Vde partículas do tipo obstáculo sólido ou boundingParticles.

Exercício 4. Vamos agora avaliar os conhecimentos, adquiridos pelo aluno, no decorrer daresolução da componente prática desta ficha, recorrendo a algumas questõesteóricas:1. Suponha um jogo em que um sistema de partículas representava uma

parede, e cada partícula, um tijolo ou porção da parede. Se a parede fossedestruída, apesar de não implicar a destruição/morte de todas aspartículas, porque razão é comum o sistema ser removido após adestruição da parede? Justifique.

2. É possível tornar mais eficiente o desenho de partículas em ambos os

Page 11: Tecnologias de Jogos de Vídeo - di.ubi.ptagomes/tjv/praticas/06-ParticleSystems-lab.pdf · Os sistemas de partículas foram primeiramente concebidos para serem usados em efeitos

sistemas implementados? Justifique.3. Porque razão o sistema de simulação complexo implementado seria

inapropriado para simular oceanos? 4. Que adições teriam de ser feitas ao sistema de simulação complexo

implementado para este simular cascatas?

5. Trabalho futuro

Se o aluno tiver um projeto de sistemas de partículas, neste momento podecomeçar a a debruçar-se sobre o dito projeto. O aluno deverá implementar ouuma explosão mais correta fisicamente. Para gerar uma explosão maiscomplexa será necessário recorrer a texturas para um efeito mais realista, i.e.,a textura deverá ser usada em função ou da distancia da partícula à suaposição inicial ou da sua idade. A combustão também será algo a introduzir,i.e., a mudança de tipo de gás ao longo do tempo. Dito de outra forma de maisquente para mais frio até passar a ser fumo. Finalmente, fazer explodir algo,ou, a explosão aplicada a uma geometria. Isto exige algum tipo demapeamento entre partícula e triângulo, podendo uma partícula ser umtriângulo. De ter em atenção que a explosão de um objeto é um sistemaconservativo, i.e., nada se perde tudo se transforma. Ou seja se um carroexplodir parte dele vai ser consumido na explosão e posterior incêndio, masparte da sua massa ficará intacta ainda que deformada.

Além do projeto existem algumas expansões ao JMOGE que findada esta fichapodem ser alvo de estudo, algumas a titulo de sugestão:

1. Paralelizar, via multithreading em Java, um dos sistemas de partículasimplementados.

2. As partículas podiam ter uma idade fixa, e o sistema corresponder a umobjeto na cena, e.g., uma parede de tijolos, e o sistema permitira umobjeto fragmentário.

3. Um simulador de fluidos com tipos distintos de líquidos.