SlideShare uma empresa Scribd logo
1 de 82
Baixar para ler offline
Geração Procedural de Sistemas Solares em Tempo Real
Cassiano Honorio da Silva
Orientador: Bruno José Dembogurski
19 de julho de 2017
DCC - UFRRJ
Sumário
Introdução
Conceitos Astronômicos
Geração de Ruído
Geração da Malha e LOD
Iluminação
Técnicas Avançadas
Resultados
Conclusão
Trabalhos Futuros
Introdução
Introdução
• Criação de conteúdo gráfico de forma manual é uma tarefa custosa;
• A geração procedural de conteúdo estuda maneiras de gerar conteúdo a partir de
meios algorítmicos;
• Com apenas alguns parâmetros é possível gerar diferentes conteúdos que seriam
complexos e custosos de serem gerados manualmente.
1
Introdução
Figura 1: Sistemas L. [Retirado de Lazy Nezumi Pro]
2
Introdução
Figura 2: Jogo Spelunky. [Retirado de Amazon S3]
3
Introdução
Figura 3: Jogo No Man’S Sky. [Retirado de O Vício]
4
Introdução
Figura 4: Sistema planetário gerado.
5
Introdução
Conceitos astronômicos
Geração de ruído
LOD
Iluminação
6
Introdução
• Implementação desenvolvida em C++;
• Utilização da biblioteca OpenGL para geração dos resultados visuais e SDL2 para
gerenciamento de janelas;
• Utilização do paradigma orientado a objetos;
• Estrutura de classes e funções arquitetada para geração de uma biblioteca
reutilizável.
7
Conceitos Astronômicos
Órbitas
• A primeira lei de Kepler afirma que as órbitas dos planetas ao redor do Sol são
elipses;
• O mesmo vale para corpos celestes que orbitam outros com uma órbita limitada;
• O corpo central da órbita está em um dos focos da elipse.
F1 F2
ca
b
Figura 5: Conceitos relativos a elipses.
8
Órbitas
Corpo celeste
ApogeuPerigeu
Figura 6: Conceitos relativos a órbitas.
9
Excentricidade de uma elipse
Valor importante para o cálculo do maior semi-eixo da órbita, necessário para o cálculo
da velocidade de translação dos corpos celestes.
e =
c
a
, onde (1)
e : excentricidade da elipse;
c : distância de um foco até o centro da elipse;
a : maior semi-eixo da elipse.
10
Cálculo do maior semi-eixo da órbita
Admitindo-se que o planeta está no apogeu da órbita, tem-se que:
−→
CP =
1
e + 1
· D
S C P
−→
CP
−→
SC
11
Excentricidade das órbitas no Sistema Solar
Planeta Excentricidade
Mercúrio 0,206
Vênus 0,007
Terra 0,017
Marte 0,093
Júpiter 0,048
Saturno 0,056
Urano 0,046
Netuno 0,009
Tabela 1: Excentricidade das órbitas dos planetas do Sistema Solar.
12
Cálculo da velocidade de translação
A velocidade de translação dos corpos celestes em órbitas elípticas pode ser expressa
pela equação Vis Viva.
v2
= GM
2
r
−
1
a
, onde
v : velocidade relativa dos corpos;
r : distância entre os centros de massa dos corpos;
G : constante de gravitação universal (6, 67 × 10−11
Nm2
/kg2
);
M : massa do corpo central;
a : comprimento do maior semi-eixo da órbita.
13
Lei de Titius-Bode
• Série de números que se aproximam das distâncias médias entre os planetas do
Sistema Solar e o Sol;
• Publicada por dois astrônomos alemães chamados Johann Titius e Johann Bode.
a = 0.4 + 0.3 × 2m
, para m = −∞, 1, 2, 3...
14
Discrepâncias na lei de Titius-Bode
Planeta Real Prevista
Mercúrio 0,39 0,4
Vênus 0,72 0,7
Terra 1,00 1,0
Marte 1,52 1,6
Ceres* 2,77 2,8
Júpiter 5,20 5,2
Saturno 9,56 10,0
Urano 19,22 19,6
Netuno 30,11 38,8
Plutão* 39,54 77,2
Tabela 2: Distâncias dadas em Unidades Astronômicas (UA) (1 UA = 149.597.870.700
metros). *Ceres e Plutão são classificados como planetas anões. 15
Implementação dos conceitos astronômicos
• O distanciamento dos planetas da estrela central segue a lei de Titius-Bode;
• Quando um planeta é atrelado à uma órbita ao redor de um outro corpo celeste,
admite-se que ele está no apogeu da órbita;
• As excentricidades são geradas dentro do intervalo de valores presentes no Sistema
Solar;
• As velocidades de translação das órbitas seguem a equação de Vis Viva.
16
Geração de Ruído
Ruído
• Qualquer alteração que um sinal pode sofrer durante o processo de captura,
armazenamento, transmissão, conversão ou processamento;
• Sinal é uma grandeza física que varia de acordo com uma ou mais variáveis
independentes.
17
Ruído para geração de terreno
• Ser pseudo-aleatória e possuir a característica de, dada uma entrada, sempre
apresentar a mesma saída;
• Gerar valores dentro de um intervalo conhecido, como entre −1 e 1;
• Não exibir padrões regulares ou periodicidades óbvias;
• Não variar de acordo com a translação (estacionária);
• Não variar de acordo com a rotação (isotrópica).
18
Ruído de Perlin
Figura 7: Algoritmo para o ruído de Perlin. [Retirado de imgur]
19
Ruído de Perlin
Figura 8: Interpolações realizadas em um espaço tridimensional.
20
Ruído de Perlin
Figura 9: Resultado gerado pelo ruído de Perlin.
21
Ridged Multifractal
Utiliza a soma de vários ruídos de Perlin em diferentes escalas e frequências para gerar
o resultado final.
Figura 10: Diferença entre o ruído de Perlin e o ridged multifractal.
22
Ridged Multifractal
Figura 11: Terreno gerado utilizando a ridged multifractal.
23
Implementação da função de ruído
• Realizada em CPU e GPU;
• Utilização em CPU é impraticável devido à sua complexidade (O(2n), onde n é o
número de dimensões) e à quantidade de vértices existentes no terreno;
• Implementação em CPU utilizada somente para a verificação de colisão;
• Versão em GPU serve para o cálculo da iluminação e coloração do terreno;
• Lista de permutações armazenadas em uma textura unidimensional.
24
Geração da Malha e Nível de
Detalhe (LOD)
LOD
• Técnica utilizada para reduzir a redundância no uso de muitos polígonos para
desenhar objetos que ocupam apenas poucos pixels na tela;
• Pode ser classificada em discreto, contínuo e view dependent;
• Abordagens view dependent são as mais utilizadas para a visualização de terrenos.
25
Árvore binária de triângulos
Estrutura hierárquica formada por triângulos retângulos isósceles onde cada um pode
ter até dois filhos.
Figura 12: Exemplos das primeiras três subdivisões.
26
Quadtree
• Utiliza quadrados em vez de triângulos;
• Cada quadtree pode ser dividida em até quatro quadrantes (nordeste, sudeste,
sudoeste e noroeste);
• As subdivisões podem utilizar quadrados ou triângulos.
27
Quadtree
(a)
(b)
Figura 13: Subdivisões utilizando quadrados (a) e triângulos (b). 28
Representação da Quadtree
Uma possível representação é utilizar uma matriz booleana onde o ponto central da
quadtree indica se ela está refinada ou não.
(a)








0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0








(b)
Figura 14: Quadtree subdividida (a) e uma de suas possíveis representações matriciais (b).
29
Cálculo para divisões das quadtrees
• As divisões são realizadas de acordo com a posição da câmera;
• Calcula-se a bounding sphere e verifica-se se a câmera está dentro dela;
• Um parâmetro extra E é adicionado para expandir a bounding sphere.
30
Diferenças de nível de detalhe entre vizinhos
Figura 15: Uso de um skirt para corrigir fissuras na malha.
31
Diferenças de nível de detalhe entre vizinhos
Figura 16: Exemplos de possíveis estruturas de triângulos.
32
Diferenças de nível de detalhe entre vizinhos
Figura 17: Conexão entre vizinhos com níveis de detalhamentos diferentes. Os pontos
destacados são T-junções que seriam geradas caso a triangulação não fosse adaptada.
33
Diferenças de nível de detalhe entre vizinhos
(a) Visão geral do LOD. (b) Zoom em área de ligação.
Figura 18: A zona destacada em (b) mostra como é feita a ligação entre as estruturas de
triângulos.
34
Construção da esfera base
• Formada a partir de um cubo com seis faces (quadtrees);
• Utiliza-se um mapeamento vértice a vértice para transformar o cubo em uma
esfera.



x
y
z


 =





x 1 − y2
2 − z2
2 − y2z2
3
y 1 − x2
2 − z2
2 − x2z2
3
z 1 − x2
2 − y2
2 − x2y2
3





35
Conexão entre as faces
Achar os vizinhos entre quadtrees irmãs (filhas de um mesmo nó) é uma tarefa trivial.
A
B
(a)
N
E
S
O
NE
SESO
NO
(b)
Figura 19: (a) O nó A (nordeste) está ao norte de B (sudeste) e vice-versa. (b) Orientação da
rosa dos ventos para a quadtree.
36
Conexão entre as faces
• Achar a vizinhança para quadtrees que não são irmãs não é tão simples;
• Não é possível construir um cubo onde todas as faces vizinhas estão ligadas de
modo leste para oeste ou norte para sul;
• É preciso rotacionar a rosa dos ventos para a quadtree e levar essa rotação em
consideração no momento em que for preciso encontrar um vizinho.
37
Conexão entre as faces
N
?
E O
N
S
O
O
E
N
SS
Figura 20: Problema ao conectar as faces do cubo.
38
Conexão entre as faces
N
E
S
O
NE
SESO
NO
(a)
N
E
S
O
NESE
SO NO
(b)
Figura 21: (a) Rosa dos ventos não rotacionada. (b) Uma possível rotação.
39
Implementação da estrutura da malha do terreno
• Quadtrees são armazenadas na memória RAM e os vértices assim como as
conexões dos triângulos são armazenados na memória da GPU;
• Durante a criação de uma quadtree, todas as possíveis estruturas de triângulos
(patches) são geradas levando em consideração a diferença máxima de
detalhamento entre vizinhos (Dmax );
• O patch correto é escolhido durante a atualização do posicionamento e da rotação
da câmera.
40
View frustum culling
Corte de elementos que não estão visíveis para a perspectiva de visão atual acarretando
na diminuição da quantidade de elementos renderizados.
(a) Visão da câmera. (b) Visão de fora.
Figura 22: Influência do view frustum culling para a construção da malha.
41
Iluminação
Iluminação
• Importante para atribuir a noção de profundidade a objetos;
• Modelo empírico de iluminação clássico de Phong utiliza três componentes
(ambiente, difusa e especular) para gerar o efeito.
LR
NV
Luz
Figura 23: Vetores importantes para o cálculo da iluminação.
42
Iluminação
(a) (b) (c) (d) (e)
Figura 24: Uma mesma cena utilizando nenhuma iluminação (a), somente a componente
ambiente (b), difusa (c), especular (d) e todas juntas (e).
43
Implementação da iluminação
• Realizada totalmente em GPU utilizando shaders;
• Utiliza algumas estruturas auxiliares (texturas) armazenadas também em GPU;
• Abordagem padrão é custosa devido às interpolações de normais realizadas pixel a
pixel do objeto;
• Devido às interpolações realizadas, é necessário que haja uma grande quantidade
de vértices para se obter resultados visualmente satisfatórios.
44
Estruturas utilizadas
• Mapa de posições: Armazena os valores de uma posição dentro do patch para
ser utilizado no mapa de altura e de normais;
• Mapa de altura: Armazena os valores de altura para uma posição e é utilizado
para realizar corretamente a coloração do planeta;
• Mapa de normais: Armazena as normais para cada posição para serem utilizadas
no cálculo da iluminação.
45
Coloração dos planetas
• As cores e as respectivas alturas da cada uma são passadas para a GPU na criação
de um novo planeta;
• Utiliza-se um conjunto pré-definido de cores possíveis extraídas de imagens de
planetas e satélites naturais reais;
• Foram escolhidos corpos celestes com colorações diferenciadas entre si.
46
Coloração da estrela central
• Utiliza-se um objeto impostor, que consiste em uma textura que é mapeada em
um objeto bidimensional que está sempre voltado para a câmera;
• O efeito de luminosidade é obtido reduzindo-se gradualmente a opacidade da
textura a partir do centro.
47
Coloração da estrela central
(a) Textura sem transparência. (b) Textura com transparência.
Figura 25: Aplicação do decaimento gradual da transparência na textura da estrela central.
48
Técnicas Avançadas
Técnicas Avançadas
• Estrelas distantes
• Representam estrelas distantes que não podem ser alcançadas pelo observador;
• São geradas a partir de pontos distribuídos aleatoriamente ao longo da abóboda
universal.
• Poeira estelar
• Utilizada para simular nuvens de gases encontradas ao longo do universo;
• Efeito obtido a partir de uma textura gerada pelo ruído de Perlin.
• Detecção de colisão
• Utilizada impedir que a câmera vá para dentro de um planeta;
• Utiliza o ruído de Perlin em CPU para fazer a verificação.
49
Estrelas distantes
(a) Visualização sem estrelas distantes. (b) Visualização com estrelas distantes.
Figura 26: Efeito gerado pelas estrelas distantes.
50
Poeira estelar
(a) Visualização sem poeira estelar. (b) Visualização com poeira estelar.
Figura 27: Efeito gerado pela poeira estelar.
51
Visão geral da execução
A cada frame é necessário:
• [CPU] Ordenar os corpos celestes pela distância do observador (mais próximos
primeiro);
• [CPU] Verificar colisão entra câmera e corpos celestes;
• [CPU] Atualizar posição dos corpos celestes;
• [CPU] Atualizar LOD dos corpos celestes;
• [GPU] Renderizar estrelas distantes e da poeira estelar;
• [GPU] Renderizar corpos celestes por ordem de distância do observador (mais
próximos primeiro).
52
Resultados
Testes Realizados
• Computador utilizado:
• Processador Intel Core i5-7200 2.5GHz com dois núcleos físicos e quatro virtuais;
• 8 GB de memória RAM;
• Placa de vídeo NVIDIA GeForce 940MX;
• Sistema operacional Linux Mint 18.1 Cinnamon 64 bits.
• Software GLXOSD utilizado para contagem de frames;
• Nenhuma limitação de frames por segundo (FPS) foi utilizada.
53
Testes para (Dmax = 1)
Figura 28: Diferenças visíveis no terreno ao movimentar a câmera.
54
Testes para Dmax = 1
Figura 29: Fissuras na malha.
55
Testes para Dmax = 2
Figura 30: Diferenças visíveis no terreno ao movimentar a câmera.
56
Testes para Dmax = 3
Figura 31: Diferenças visíveis no terreno ao movimentar a câmera.
57
Testes para Dmax = 4
Figura 32: Diferenças visíveis no terreno ao movimentar a câmera.
58
Testes para Ttex
(a) Ttex = 16 (b) Ttex = 64 (c) Ttex = 256
Figura 33: Resultados dos testes para valores de Ttex .
59
Testes para E = 1
Figura 34: Resultados dos testes para valores de E.
60
Geração dos planetas
(a) Preset Europa. (b) Preset Encélado.
Figura 35: Exemplos de planetas gerados.
61
Geração dos planetas
(a) Preset Vênus. (b) Preset Calisto.
Figura 36: Exemplos de planetas gerados.
62
Geração do sistema planetário
• Número de planetas limitados a cinco;
• Colorações escolhidas aleatoriamente a partir dos presets definidos;
• Distanciamento da estrela central calculado utilizando a lei de Titius Bode e
escalada para as coordenadas do OpenGL.
63
Geração do sistema planetário
Figura 37: Visão geral do sistema a partir da estrela central.
64
Geração do sistema planetário
Figura 38: Visão geral do sistema a partir de um planeta.
65
Geração do sistema planetário
Figura 39: Planeta gerando um eclipse sobre outro.
66
Geração do sistema planetário
Figura 40: Visão geral do sistema exibindo as órbitas dos planetas.
67
Conclusão
Conclusão
Objetivos alcançados:
• Geração de sistemas solares de modo procedural;
• Criação de uma biblioteca gráfica extensível e reutilizável;
• Obtenção de resultados visualmente satisfatórios.
68
Trabalhos Futuros
Trabalhos Futuros
• Utilizar a função Simplex Noise em vez do ruído de Perlin;
• Utilizar uma malha também para as estrelas centrais;
• Utilizar sistemas de partículas para simular planetas gasosos e reações na superfície
das estrelas centrais;
• Fazer com que as estrelas distantes sejam outras estrelas de fato e não só imagens
estáticas;
• Adicionar sombras geradas pelos planetas;
• Adicionar atmosfera e nuvens aos planetas.
69
Obrigado!
69
Geração Procedural de Sistemas Solares em Tempo Real
Cassiano Honorio da Silva
Orientador: Bruno José Dembogurski
19 de julho de 2017
DCC - UFRRJ

Mais conteúdo relacionado

Semelhante a Geração Procedural de Sistemas Solares

Aula 10 11 - terceira dimensao
Aula 10 11 - terceira dimensaoAula 10 11 - terceira dimensao
Aula 10 11 - terceira dimensaoFábio Costa
 
Aula 10 11 - terceira dimensao
Aula 10 11 - terceira dimensaoAula 10 11 - terceira dimensao
Aula 10 11 - terceira dimensaoFábio Costa
 
FISL14 - Desmontando uma engine de física
FISL14 - Desmontando uma engine de físicaFISL14 - Desmontando uma engine de física
FISL14 - Desmontando uma engine de físicaAdriano Melo
 
Algoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à RobóticaAlgoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à RobóticaLucas Oliveira
 
Traçado em dispositivos gráficos matriciais Parte 1
Traçado em dispositivos gráficos matriciais Parte 1Traçado em dispositivos gráficos matriciais Parte 1
Traçado em dispositivos gráficos matriciais Parte 1Elaine Cecília Gatto
 
Manual de Autocad 14 avançado - aula 11 - Trabalhar com sistemas de coordenadas
Manual de Autocad 14 avançado - aula 11 - Trabalhar com sistemas de coordenadasManual de Autocad 14 avançado - aula 11 - Trabalhar com sistemas de coordenadas
Manual de Autocad 14 avançado - aula 11 - Trabalhar com sistemas de coordenadasalexandre ribeiro
 
camera-e-viewing.pdf
camera-e-viewing.pdfcamera-e-viewing.pdf
camera-e-viewing.pdfMiltonAmaral2
 
Sequência didática circunferência
Sequência didática circunferênciaSequência didática circunferência
Sequência didática circunferênciaeduardabotelho
 
Auto cad 2014-desenvolvendo-projetos-em-3d
Auto cad 2014-desenvolvendo-projetos-em-3dAuto cad 2014-desenvolvendo-projetos-em-3d
Auto cad 2014-desenvolvendo-projetos-em-3dDalton Lara Stella
 
Ambiente de trabalho 3ds Max
Ambiente de trabalho 3ds MaxAmbiente de trabalho 3ds Max
Ambiente de trabalho 3ds MaxPedro Costa
 
Slides da aula sobre Coordenadas Polares e Integrais Duplas em Coordenadas Po...
Slides da aula sobre Coordenadas Polares e Integrais Duplas em Coordenadas Po...Slides da aula sobre Coordenadas Polares e Integrais Duplas em Coordenadas Po...
Slides da aula sobre Coordenadas Polares e Integrais Duplas em Coordenadas Po...Izabela Marques
 
Vrml Virtual Reality Modeling Language
Vrml Virtual Reality Modeling LanguageVrml Virtual Reality Modeling Language
Vrml Virtual Reality Modeling LanguageLuis Borges Gouveia
 
Graph Theory - Exercises - Chapter 3
Graph Theory - Exercises - Chapter 3Graph Theory - Exercises - Chapter 3
Graph Theory - Exercises - Chapter 3Michel Alves
 
Auto Cad 2d e 3d
Auto Cad 2d e 3dAuto Cad 2d e 3d
Auto Cad 2d e 3dElton Magno
 

Semelhante a Geração Procedural de Sistemas Solares (20)

Aula 10 11 - terceira dimensao
Aula 10 11 - terceira dimensaoAula 10 11 - terceira dimensao
Aula 10 11 - terceira dimensao
 
Aula 10 11 - terceira dimensao
Aula 10 11 - terceira dimensaoAula 10 11 - terceira dimensao
Aula 10 11 - terceira dimensao
 
FISL14 - Desmontando uma engine de física
FISL14 - Desmontando uma engine de físicaFISL14 - Desmontando uma engine de física
FISL14 - Desmontando uma engine de física
 
Algoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à RobóticaAlgoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à Robótica
 
Traçado em dispositivos gráficos matriciais Parte 1
Traçado em dispositivos gráficos matriciais Parte 1Traçado em dispositivos gráficos matriciais Parte 1
Traçado em dispositivos gráficos matriciais Parte 1
 
Exercicio de Modelagem de Suspensão Dinamica
Exercicio de Modelagem de Suspensão DinamicaExercicio de Modelagem de Suspensão Dinamica
Exercicio de Modelagem de Suspensão Dinamica
 
Manual de Autocad 14 avançado - aula 11 - Trabalhar com sistemas de coordenadas
Manual de Autocad 14 avançado - aula 11 - Trabalhar com sistemas de coordenadasManual de Autocad 14 avançado - aula 11 - Trabalhar com sistemas de coordenadas
Manual de Autocad 14 avançado - aula 11 - Trabalhar com sistemas de coordenadas
 
camera-e-viewing.pdf
camera-e-viewing.pdfcamera-e-viewing.pdf
camera-e-viewing.pdf
 
Sequência didática circunferência
Sequência didática circunferênciaSequência didática circunferência
Sequência didática circunferência
 
Auto cad 2014-desenvolvendo-projetos-em-3d
Auto cad 2014-desenvolvendo-projetos-em-3dAuto cad 2014-desenvolvendo-projetos-em-3d
Auto cad 2014-desenvolvendo-projetos-em-3d
 
Apostila autocad 3_d
Apostila autocad 3_dApostila autocad 3_d
Apostila autocad 3_d
 
R 2008 3 d
R 2008 3 dR 2008 3 d
R 2008 3 d
 
Ambiente de trabalho 3ds Max
Ambiente de trabalho 3ds MaxAmbiente de trabalho 3ds Max
Ambiente de trabalho 3ds Max
 
Slides da aula sobre Coordenadas Polares e Integrais Duplas em Coordenadas Po...
Slides da aula sobre Coordenadas Polares e Integrais Duplas em Coordenadas Po...Slides da aula sobre Coordenadas Polares e Integrais Duplas em Coordenadas Po...
Slides da aula sobre Coordenadas Polares e Integrais Duplas em Coordenadas Po...
 
Palestra
PalestraPalestra
Palestra
 
Vrml Virtual Reality Modeling Language
Vrml Virtual Reality Modeling LanguageVrml Virtual Reality Modeling Language
Vrml Virtual Reality Modeling Language
 
Graph Theory - Exercises - Chapter 3
Graph Theory - Exercises - Chapter 3Graph Theory - Exercises - Chapter 3
Graph Theory - Exercises - Chapter 3
 
Tutorial slide
Tutorial slideTutorial slide
Tutorial slide
 
Auto Cad 2d e 3d
Auto Cad 2d e 3dAuto Cad 2d e 3d
Auto Cad 2d e 3d
 
Autocad 3 d
Autocad 3 dAutocad 3 d
Autocad 3 d
 

Geração Procedural de Sistemas Solares

  • 1. Geração Procedural de Sistemas Solares em Tempo Real Cassiano Honorio da Silva Orientador: Bruno José Dembogurski 19 de julho de 2017 DCC - UFRRJ
  • 2. Sumário Introdução Conceitos Astronômicos Geração de Ruído Geração da Malha e LOD Iluminação Técnicas Avançadas Resultados Conclusão Trabalhos Futuros
  • 4. Introdução • Criação de conteúdo gráfico de forma manual é uma tarefa custosa; • A geração procedural de conteúdo estuda maneiras de gerar conteúdo a partir de meios algorítmicos; • Com apenas alguns parâmetros é possível gerar diferentes conteúdos que seriam complexos e custosos de serem gerados manualmente. 1
  • 5. Introdução Figura 1: Sistemas L. [Retirado de Lazy Nezumi Pro] 2
  • 6. Introdução Figura 2: Jogo Spelunky. [Retirado de Amazon S3] 3
  • 7. Introdução Figura 3: Jogo No Man’S Sky. [Retirado de O Vício] 4
  • 8. Introdução Figura 4: Sistema planetário gerado. 5
  • 10. Introdução • Implementação desenvolvida em C++; • Utilização da biblioteca OpenGL para geração dos resultados visuais e SDL2 para gerenciamento de janelas; • Utilização do paradigma orientado a objetos; • Estrutura de classes e funções arquitetada para geração de uma biblioteca reutilizável. 7
  • 12. Órbitas • A primeira lei de Kepler afirma que as órbitas dos planetas ao redor do Sol são elipses; • O mesmo vale para corpos celestes que orbitam outros com uma órbita limitada; • O corpo central da órbita está em um dos focos da elipse. F1 F2 ca b Figura 5: Conceitos relativos a elipses. 8
  • 13. Órbitas Corpo celeste ApogeuPerigeu Figura 6: Conceitos relativos a órbitas. 9
  • 14. Excentricidade de uma elipse Valor importante para o cálculo do maior semi-eixo da órbita, necessário para o cálculo da velocidade de translação dos corpos celestes. e = c a , onde (1) e : excentricidade da elipse; c : distância de um foco até o centro da elipse; a : maior semi-eixo da elipse. 10
  • 15. Cálculo do maior semi-eixo da órbita Admitindo-se que o planeta está no apogeu da órbita, tem-se que: −→ CP = 1 e + 1 · D S C P −→ CP −→ SC 11
  • 16. Excentricidade das órbitas no Sistema Solar Planeta Excentricidade Mercúrio 0,206 Vênus 0,007 Terra 0,017 Marte 0,093 Júpiter 0,048 Saturno 0,056 Urano 0,046 Netuno 0,009 Tabela 1: Excentricidade das órbitas dos planetas do Sistema Solar. 12
  • 17. Cálculo da velocidade de translação A velocidade de translação dos corpos celestes em órbitas elípticas pode ser expressa pela equação Vis Viva. v2 = GM 2 r − 1 a , onde v : velocidade relativa dos corpos; r : distância entre os centros de massa dos corpos; G : constante de gravitação universal (6, 67 × 10−11 Nm2 /kg2 ); M : massa do corpo central; a : comprimento do maior semi-eixo da órbita. 13
  • 18. Lei de Titius-Bode • Série de números que se aproximam das distâncias médias entre os planetas do Sistema Solar e o Sol; • Publicada por dois astrônomos alemães chamados Johann Titius e Johann Bode. a = 0.4 + 0.3 × 2m , para m = −∞, 1, 2, 3... 14
  • 19. Discrepâncias na lei de Titius-Bode Planeta Real Prevista Mercúrio 0,39 0,4 Vênus 0,72 0,7 Terra 1,00 1,0 Marte 1,52 1,6 Ceres* 2,77 2,8 Júpiter 5,20 5,2 Saturno 9,56 10,0 Urano 19,22 19,6 Netuno 30,11 38,8 Plutão* 39,54 77,2 Tabela 2: Distâncias dadas em Unidades Astronômicas (UA) (1 UA = 149.597.870.700 metros). *Ceres e Plutão são classificados como planetas anões. 15
  • 20. Implementação dos conceitos astronômicos • O distanciamento dos planetas da estrela central segue a lei de Titius-Bode; • Quando um planeta é atrelado à uma órbita ao redor de um outro corpo celeste, admite-se que ele está no apogeu da órbita; • As excentricidades são geradas dentro do intervalo de valores presentes no Sistema Solar; • As velocidades de translação das órbitas seguem a equação de Vis Viva. 16
  • 22. Ruído • Qualquer alteração que um sinal pode sofrer durante o processo de captura, armazenamento, transmissão, conversão ou processamento; • Sinal é uma grandeza física que varia de acordo com uma ou mais variáveis independentes. 17
  • 23. Ruído para geração de terreno • Ser pseudo-aleatória e possuir a característica de, dada uma entrada, sempre apresentar a mesma saída; • Gerar valores dentro de um intervalo conhecido, como entre −1 e 1; • Não exibir padrões regulares ou periodicidades óbvias; • Não variar de acordo com a translação (estacionária); • Não variar de acordo com a rotação (isotrópica). 18
  • 24. Ruído de Perlin Figura 7: Algoritmo para o ruído de Perlin. [Retirado de imgur] 19
  • 25. Ruído de Perlin Figura 8: Interpolações realizadas em um espaço tridimensional. 20
  • 26. Ruído de Perlin Figura 9: Resultado gerado pelo ruído de Perlin. 21
  • 27. Ridged Multifractal Utiliza a soma de vários ruídos de Perlin em diferentes escalas e frequências para gerar o resultado final. Figura 10: Diferença entre o ruído de Perlin e o ridged multifractal. 22
  • 28. Ridged Multifractal Figura 11: Terreno gerado utilizando a ridged multifractal. 23
  • 29. Implementação da função de ruído • Realizada em CPU e GPU; • Utilização em CPU é impraticável devido à sua complexidade (O(2n), onde n é o número de dimensões) e à quantidade de vértices existentes no terreno; • Implementação em CPU utilizada somente para a verificação de colisão; • Versão em GPU serve para o cálculo da iluminação e coloração do terreno; • Lista de permutações armazenadas em uma textura unidimensional. 24
  • 30. Geração da Malha e Nível de Detalhe (LOD)
  • 31. LOD • Técnica utilizada para reduzir a redundância no uso de muitos polígonos para desenhar objetos que ocupam apenas poucos pixels na tela; • Pode ser classificada em discreto, contínuo e view dependent; • Abordagens view dependent são as mais utilizadas para a visualização de terrenos. 25
  • 32. Árvore binária de triângulos Estrutura hierárquica formada por triângulos retângulos isósceles onde cada um pode ter até dois filhos. Figura 12: Exemplos das primeiras três subdivisões. 26
  • 33. Quadtree • Utiliza quadrados em vez de triângulos; • Cada quadtree pode ser dividida em até quatro quadrantes (nordeste, sudeste, sudoeste e noroeste); • As subdivisões podem utilizar quadrados ou triângulos. 27
  • 34. Quadtree (a) (b) Figura 13: Subdivisões utilizando quadrados (a) e triângulos (b). 28
  • 35. Representação da Quadtree Uma possível representação é utilizar uma matriz booleana onde o ponto central da quadtree indica se ela está refinada ou não. (a)         0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0         (b) Figura 14: Quadtree subdividida (a) e uma de suas possíveis representações matriciais (b). 29
  • 36. Cálculo para divisões das quadtrees • As divisões são realizadas de acordo com a posição da câmera; • Calcula-se a bounding sphere e verifica-se se a câmera está dentro dela; • Um parâmetro extra E é adicionado para expandir a bounding sphere. 30
  • 37. Diferenças de nível de detalhe entre vizinhos Figura 15: Uso de um skirt para corrigir fissuras na malha. 31
  • 38. Diferenças de nível de detalhe entre vizinhos Figura 16: Exemplos de possíveis estruturas de triângulos. 32
  • 39. Diferenças de nível de detalhe entre vizinhos Figura 17: Conexão entre vizinhos com níveis de detalhamentos diferentes. Os pontos destacados são T-junções que seriam geradas caso a triangulação não fosse adaptada. 33
  • 40. Diferenças de nível de detalhe entre vizinhos (a) Visão geral do LOD. (b) Zoom em área de ligação. Figura 18: A zona destacada em (b) mostra como é feita a ligação entre as estruturas de triângulos. 34
  • 41. Construção da esfera base • Formada a partir de um cubo com seis faces (quadtrees); • Utiliza-se um mapeamento vértice a vértice para transformar o cubo em uma esfera.    x y z    =      x 1 − y2 2 − z2 2 − y2z2 3 y 1 − x2 2 − z2 2 − x2z2 3 z 1 − x2 2 − y2 2 − x2y2 3      35
  • 42. Conexão entre as faces Achar os vizinhos entre quadtrees irmãs (filhas de um mesmo nó) é uma tarefa trivial. A B (a) N E S O NE SESO NO (b) Figura 19: (a) O nó A (nordeste) está ao norte de B (sudeste) e vice-versa. (b) Orientação da rosa dos ventos para a quadtree. 36
  • 43. Conexão entre as faces • Achar a vizinhança para quadtrees que não são irmãs não é tão simples; • Não é possível construir um cubo onde todas as faces vizinhas estão ligadas de modo leste para oeste ou norte para sul; • É preciso rotacionar a rosa dos ventos para a quadtree e levar essa rotação em consideração no momento em que for preciso encontrar um vizinho. 37
  • 44. Conexão entre as faces N ? E O N S O O E N SS Figura 20: Problema ao conectar as faces do cubo. 38
  • 45. Conexão entre as faces N E S O NE SESO NO (a) N E S O NESE SO NO (b) Figura 21: (a) Rosa dos ventos não rotacionada. (b) Uma possível rotação. 39
  • 46. Implementação da estrutura da malha do terreno • Quadtrees são armazenadas na memória RAM e os vértices assim como as conexões dos triângulos são armazenados na memória da GPU; • Durante a criação de uma quadtree, todas as possíveis estruturas de triângulos (patches) são geradas levando em consideração a diferença máxima de detalhamento entre vizinhos (Dmax ); • O patch correto é escolhido durante a atualização do posicionamento e da rotação da câmera. 40
  • 47. View frustum culling Corte de elementos que não estão visíveis para a perspectiva de visão atual acarretando na diminuição da quantidade de elementos renderizados. (a) Visão da câmera. (b) Visão de fora. Figura 22: Influência do view frustum culling para a construção da malha. 41
  • 49. Iluminação • Importante para atribuir a noção de profundidade a objetos; • Modelo empírico de iluminação clássico de Phong utiliza três componentes (ambiente, difusa e especular) para gerar o efeito. LR NV Luz Figura 23: Vetores importantes para o cálculo da iluminação. 42
  • 50. Iluminação (a) (b) (c) (d) (e) Figura 24: Uma mesma cena utilizando nenhuma iluminação (a), somente a componente ambiente (b), difusa (c), especular (d) e todas juntas (e). 43
  • 51. Implementação da iluminação • Realizada totalmente em GPU utilizando shaders; • Utiliza algumas estruturas auxiliares (texturas) armazenadas também em GPU; • Abordagem padrão é custosa devido às interpolações de normais realizadas pixel a pixel do objeto; • Devido às interpolações realizadas, é necessário que haja uma grande quantidade de vértices para se obter resultados visualmente satisfatórios. 44
  • 52. Estruturas utilizadas • Mapa de posições: Armazena os valores de uma posição dentro do patch para ser utilizado no mapa de altura e de normais; • Mapa de altura: Armazena os valores de altura para uma posição e é utilizado para realizar corretamente a coloração do planeta; • Mapa de normais: Armazena as normais para cada posição para serem utilizadas no cálculo da iluminação. 45
  • 53. Coloração dos planetas • As cores e as respectivas alturas da cada uma são passadas para a GPU na criação de um novo planeta; • Utiliza-se um conjunto pré-definido de cores possíveis extraídas de imagens de planetas e satélites naturais reais; • Foram escolhidos corpos celestes com colorações diferenciadas entre si. 46
  • 54. Coloração da estrela central • Utiliza-se um objeto impostor, que consiste em uma textura que é mapeada em um objeto bidimensional que está sempre voltado para a câmera; • O efeito de luminosidade é obtido reduzindo-se gradualmente a opacidade da textura a partir do centro. 47
  • 55. Coloração da estrela central (a) Textura sem transparência. (b) Textura com transparência. Figura 25: Aplicação do decaimento gradual da transparência na textura da estrela central. 48
  • 57. Técnicas Avançadas • Estrelas distantes • Representam estrelas distantes que não podem ser alcançadas pelo observador; • São geradas a partir de pontos distribuídos aleatoriamente ao longo da abóboda universal. • Poeira estelar • Utilizada para simular nuvens de gases encontradas ao longo do universo; • Efeito obtido a partir de uma textura gerada pelo ruído de Perlin. • Detecção de colisão • Utilizada impedir que a câmera vá para dentro de um planeta; • Utiliza o ruído de Perlin em CPU para fazer a verificação. 49
  • 58. Estrelas distantes (a) Visualização sem estrelas distantes. (b) Visualização com estrelas distantes. Figura 26: Efeito gerado pelas estrelas distantes. 50
  • 59. Poeira estelar (a) Visualização sem poeira estelar. (b) Visualização com poeira estelar. Figura 27: Efeito gerado pela poeira estelar. 51
  • 60. Visão geral da execução A cada frame é necessário: • [CPU] Ordenar os corpos celestes pela distância do observador (mais próximos primeiro); • [CPU] Verificar colisão entra câmera e corpos celestes; • [CPU] Atualizar posição dos corpos celestes; • [CPU] Atualizar LOD dos corpos celestes; • [GPU] Renderizar estrelas distantes e da poeira estelar; • [GPU] Renderizar corpos celestes por ordem de distância do observador (mais próximos primeiro). 52
  • 62. Testes Realizados • Computador utilizado: • Processador Intel Core i5-7200 2.5GHz com dois núcleos físicos e quatro virtuais; • 8 GB de memória RAM; • Placa de vídeo NVIDIA GeForce 940MX; • Sistema operacional Linux Mint 18.1 Cinnamon 64 bits. • Software GLXOSD utilizado para contagem de frames; • Nenhuma limitação de frames por segundo (FPS) foi utilizada. 53
  • 63. Testes para (Dmax = 1) Figura 28: Diferenças visíveis no terreno ao movimentar a câmera. 54
  • 64. Testes para Dmax = 1 Figura 29: Fissuras na malha. 55
  • 65. Testes para Dmax = 2 Figura 30: Diferenças visíveis no terreno ao movimentar a câmera. 56
  • 66. Testes para Dmax = 3 Figura 31: Diferenças visíveis no terreno ao movimentar a câmera. 57
  • 67. Testes para Dmax = 4 Figura 32: Diferenças visíveis no terreno ao movimentar a câmera. 58
  • 68. Testes para Ttex (a) Ttex = 16 (b) Ttex = 64 (c) Ttex = 256 Figura 33: Resultados dos testes para valores de Ttex . 59
  • 69. Testes para E = 1 Figura 34: Resultados dos testes para valores de E. 60
  • 70. Geração dos planetas (a) Preset Europa. (b) Preset Encélado. Figura 35: Exemplos de planetas gerados. 61
  • 71. Geração dos planetas (a) Preset Vênus. (b) Preset Calisto. Figura 36: Exemplos de planetas gerados. 62
  • 72. Geração do sistema planetário • Número de planetas limitados a cinco; • Colorações escolhidas aleatoriamente a partir dos presets definidos; • Distanciamento da estrela central calculado utilizando a lei de Titius Bode e escalada para as coordenadas do OpenGL. 63
  • 73. Geração do sistema planetário Figura 37: Visão geral do sistema a partir da estrela central. 64
  • 74. Geração do sistema planetário Figura 38: Visão geral do sistema a partir de um planeta. 65
  • 75. Geração do sistema planetário Figura 39: Planeta gerando um eclipse sobre outro. 66
  • 76. Geração do sistema planetário Figura 40: Visão geral do sistema exibindo as órbitas dos planetas. 67
  • 78. Conclusão Objetivos alcançados: • Geração de sistemas solares de modo procedural; • Criação de uma biblioteca gráfica extensível e reutilizável; • Obtenção de resultados visualmente satisfatórios. 68
  • 80. Trabalhos Futuros • Utilizar a função Simplex Noise em vez do ruído de Perlin; • Utilizar uma malha também para as estrelas centrais; • Utilizar sistemas de partículas para simular planetas gasosos e reações na superfície das estrelas centrais; • Fazer com que as estrelas distantes sejam outras estrelas de fato e não só imagens estáticas; • Adicionar sombras geradas pelos planetas; • Adicionar atmosfera e nuvens aos planetas. 69
  • 82. Geração Procedural de Sistemas Solares em Tempo Real Cassiano Honorio da Silva Orientador: Bruno José Dembogurski 19 de julho de 2017 DCC - UFRRJ