1) O documento descreve a geração procedural de sistemas solares em tempo real, incluindo conceitos astronômicos, geração de ruído, malha e nível de detalhe, iluminação e técnicas avançadas.
2) Os conceitos astronômicos incluem órbitas elípticas, excentricidade, lei de Titius-Bode e cálculo de velocidade. A geração de ruído utiliza ruído de Perlin e multifractal. A malha usa quadtree com diferentes níveis de detalhe.
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
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
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
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
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
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
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
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