Upload
internet
View
107
Download
0
Embed Size (px)
Citation preview
Visão Geral do OpenSG
PSI-5787 Realidade VirtualAlexander Cerqueira SilvaRichard IbarraHilton Fernandes
11/11/2002
Agenda
Introdução Conceito de grafo de cena Panorama dos grafos de cena Estrutura de dados do OpenSG “varreduras” Geometria Tratamento de estados Concorrência Conclusão
Introdução
Objetivo do trabalho Saga até chegar ao final Visão geral do trabalho Fontes de informação
Conceito de grafo de cena
Grafo como associação entre pares de elementos
Estrutura genérica que permite descrever cenas, entre outras coisas
Surge naturalmente: – VRML– X3D – …
Panorama dos grafos de cena (1/10) Mudança de terminologia
– Framework que manipula grafos de cena
Panorama dos grafos de cena (2/10) Exemplos
– OpenSG (www.opensg.org)– Open Inventor (oss.sgi.com/projects/inventor)– Open Scene Graph (www.openscenegraph.org)– Performer (www.sgi.com/products/performer)
Panorama dos grafos de cena (3/10) Com exceção do Performer, todos outros são
Software Livre ou de código aberto/opensource;
Todos baseados no C++, menos o Performer, que usa principalmente C.
Panorama dos grafos de cena (4/10) Integram-se com VR Juggler
– Performer– Open Scene Graph– OpenSG
Portanto, podem constituir parte de uma aplicação completa de Realidade Virtual.
Panorama dos grafos de cena (5/10) Importante:
– Aplicativos de grafo de cena não pretendem ser solução completa de Realidade Virtual;
– Enfocam um ponto da criação de imagens em 3D;
– Não tratam de dispositivos, como trackers.
Panorama dos grafos de cena (6/10) OpenGL tem gerenciamento de dados muito
limitado: – Coleção de funções de baixo nível para acesso
otimizado ao hardware gráfico;– Processamento principalmente funcional – modo
imediato.
Panorama dos grafos de cena (7/10) Ferramentas de grafos de cena oferecem
gerenciamento organizado de dados que falta ao OpenGL.– OpenSG organiza dados de cena e suas visões,
Panorama dos grafos de cena (8/10) OpenSG visa tratar de modelos de grandes
dimensões e CAD.
Panorama dos grafos de cena (9/10) Outras metas de projeto do OpenSG:
– Multithreading e paralelismo: • processadores tendem ao SMT (Simultaneous
Multithreading);• aglomerados de computadores (clusters) pessoais
com poder crescente;
Panorama dos grafos de cena (10/10) Outras metas de projeto do OpenSG (cont.):
– Extensibilidade: • Novos tipos de dados herdando de anteriores;• Uso ótimo, mesmo de hardware novo;• Simplificação do desenvolvimento de aplicações;
– Replicação e sincronização efetuados de modo elegante;
– Uso intenso de padrões de projeto de software (OOD patterns).
Estrutura de dados (1/10)
Estrutura de Nó– O que é nó– Propriedades– Tipos de Nós
Aspectos– replicação
Reflexividade Padrões de projeto de software
Estrutura de dados (2/10)
Estrutura de Nó– O que é nó:
Elemento básico do grafo de cena, usado para conter geometria e propriedades dos objetos de cena, e suas transformações e operações.
Estrutura de dados (3/10)
Estrutura de Nó (cont.)– Propriedades:
• NodeCore: tipo de dados do nó– (agrupamento, representação de materiais…);
• Node: localização e associações: – Posição e volume;– Lista de nós subordinados a ele (filhos/children);– Apontador para nó ao qual este se subordina (pai/parent).
Estrutura de dados (4/10)
Estrutura de Nó (cont.)– Posição no grafo
• Apenas nós filhos são representados.
Estrutura de dados (5/10)
Estrutura de Nó (cont.)– Tipos de Nós – conteúdo/core:
• Geometria;• Texto e derivados
– Texto de bitmap;– Texto com textura;– Texto geométrico;
• Ambiente: nó global – um para todo grafo.
Estrutura de dados (6/10)
Estrutura de Nó (cont.)– Tipos de Nós – conteúdo/core (cont.):
• Grupo e seus derivados:– Alternativa e chaveador/switch;– LOD, ou Level of Detail;– Luz e derivados – Transformações (rotação, translação, escala).
Estrutura de dados (7/10)
Aspectos:– Cópias dos dados feitas localmente, a cada
thread, a cada processo paralelo.• Threads são linhas de execução subordinadas a
um processo principal e que compartilham com ele sua “memória” (espaço de endereçamento);
Estrutura de dados (8/10)
Aspectos: (cont.)– Replicação é minimizada:
• Copy On Write: apenas dados a ser escritos são replicados – dados para leitura não;
Estrutura de dados (9/10)
Aspectos: (cont.)– Sincronização é minimizada:
• Apenas dados de fato alterados são comunicados;– Listas de alterações, ou changelists;– Combinadas hierarquicamente, das folhas para raiz;
Estrutura de dados (10/15)
Aspectos: (cont.)– Sincronização é minimizada (cont.):
• O que ocorre quando dois threads alteram os mesmos dados?
• Conflito é resolvido arbitrariamente, pelo último nó a informar a alteração.
Estrutura de dados (11/15)
Aspectos: (cont.)– Baseiam-se em estrutura de ponteiros:
• Multicampo (Mfield) é estrutura que contém apontadores para seus dados,
• Dados são MFieldData -- registro de dados;• Aspectos usam apenas dados que vão alterar
– Isto otimiza uso do cache.
Estrutura de dados (11/15)
Aspectos: (cont.)
Estrutura de dados (12/15)
Reflexividade: – Capacidade de um objeto saber que dados ele
possui.– Nativa no Java;– Ausente no C++.– Teve de ser implementada pelo OpenSG.
Estrutura de dados (13/15)
Reflexividade: (cont.)– Útil para ampliar flexibilidade e expansibilidade; – Facilita mecanismo de aspectos.
Estrutura de dados (14/15)
Padrões de projeto de software -- Patterns: – Coletânea de soluções já testadas de
estruturas de classe e esboços de algoritmos;– Em tecnologia do objeto, são
• Considerados técnica em produção, não mais de pesquisa;
• Catálogo e uso tem aumentado;• Bastante usados em Java;
Estrutura de dados (15/15)
Padrões de projeto de software -- Patterns (cont.):
– Usados para flexibilidade e encapsulamento: • ClassFactory para criar classes
parametrizadamente;• Prototypes para clonar objetos em tempo de
execução;• Decorator para fazer delegação dinâmica de
classes.
Varreduras (1/9)
Definição Ações
– Renderização– Intersectar
Varreduras adaptadas– Varreduras complexas– Varreduras mais simples
Varreduras (2/9)
Operação básica de um grafo de cena: Inicia no no raiz e segue ate nó procurado Busca em profundidade:
– Passa por todos nós filhos antes de iniciar nó irmão
Pode ser definida pelo sistema de grafos de cena ou por uma aplicação
Varreduras (3/9)
Ações – São classes encapsulando diversas varreduras – Dependendo da espécie do nó, permite executar
diferentes operações em diferentes filhos Renderização Intersectar
Varreduras (4/9)
Ações (cont.) Renderização:
– Renderização == reboque???• Tradução literal;• Transforma wireframe em superfície contínua;• Equivalente a reboque em prédios americanos
– Construídos com vigas
Varreduras (5/9)
Ações (cont.) Renderização (cont.):
– Através do grafo, renderização é otimizada• Minimiza alterações do estado do baixo nível:
– Melhora uso do pipeline (linha de montagem) gráfica;
• Renderização é parte mais importante de sistema scenegraph,
– Onde maior esforço de trabalho é investido.
Varreduras (7/9)
Ações (cont.) Intersectar
– Teste de geometria contra um raio;– Pode ser usado para testes simples de colisão– Simplificado pelos mecanismos de alto nível para
varredura do grafo
Varreduras (8/9)
Ações (cont.) Intersectar (cont.)
– Potencial substituição de ray tracing;– Seria pouco eficiente, pois este usa algoritmos
especializados.
Varreduras (9/9)
Varreduras adaptadas– Varreduras complexas
• Tornam vantajoso herdar de formas existentes de varredura
– Varreduras mais simples:• Uso de “hook”,
– Função do usuário chamada em certos eventos;– Em OpenSG, seu nome é traverse().
Geometria (1/11)
É o mais importante tipo de nó do gráfico de cena
Engloba os dados que serão renderizados Vértices Primitivas Indexação Acesso
Geometria (2/11)
Vértices– Propriedades dos Vértices
• Normal• Coordenadas de Cor• Coordenadas de Textura
Geometria (3/11)
Vértices (cont.)– Vetores STL ou similares com tamanho dinâmico
• OpenSG usa diferentes tipos de dados através de atributo da estrutura chamado “Propriedades”
Geometria (4/11)
Primitivas – Estruturas formadas pela conexão de vértices:
• Triângulos, quadrados, polígonos…– Primitivas misturadas usando propriedades dos
tipos.– Grande flexibilidade:
• combinação de primitivas homogêneas e heterogêneas.
Geometria (5/11)
Indexação– Índice Único
– Índice Múltiplos• Indices Intercalados
Geometria (6/11)
Indexação (cont.)Índice único
Geometria (7/11)
Indexação (cont.)Índice múltiplo
Geometria (8/11)
Acesso– Índice Único
– Índice Múltiplos• Indices Intercalados
Geometria (9/11)
AcessoComo é tratamento dos nós que podem conter toda
variante de primitiva e tipo de dados
– Dois mecanismos:• Interface Genérica -- esconde diferenças de dados
Geometria (10/11)
Acesso (cont.)– Dois mecanismos: (cont.)
• Iteradores:– Tipos:
Primitiva: PrimitiveIteratorFace: FaceIteratorTriângulo: TriangleIterator
Geometria (11/11)
Acesso (cont.)– Dois mecanismos: (cont.)
• Iteradores: (cont.)– Atravessa estrutura como se fosse vetor linear;– Acesso direto a valores das primitivas
• Filtra elementos não pertencentes aos tipos
Tratamento de estados (1/6)
Criação de grafo de cena Transformação Luzes Material
Tratamento de estados (2/6)
Criação de grafo de cena– Por geometria– Por superfície, iluminação e atributos de
transformação
Tratamento de estados (3/6)
TransformaçãoInfluencia todo nó sob ela, incluindo outras
transformações– Rotação– Translação– Escala
Tratamento de estados (4/6)
Luz– Fonte de luz:– Define
• posição e • orientação da fonte de luz
– Beacon: nó que define posição e orientação da luz
Tratamento de estados (5/6)
Material– Quase mapeamento de propriedades materiais
do OpenGL• Cores:
– Emissiva, ambiente, difusa e especular
• Brilho– Transparência não vem de OpenGL
Tratamento de estados (6/6)
Material (cont.)– Classes:
•SimpleMaterial: – base
•SimpleTexturedMaterial: – Derivada– Inclui cópia de textura– Parâmetros de sua manipulação:
• Filtros de textura
Concorrência (1/11)
Processamento concorrente e paralelo Tipos de concorrência Tipos de paralelismo Problemas dos threads Problemas dos aglomerados (clusters) Solução do OpenSG para threads Solução do OpenSG para aglomerados
Concorrência (2/11)
Processamento concorrente e paralelo– Concorrência:
• Processamento independente de várias execuções, sem seqüência específica
• Oposto a seqüencial• Pode ser realizado em uma única CPU:
– Mesmo aquelas do tipo mais simples– Na verdade, é muito antigo
Concorrência (3/11)
Processamento concorrente e paralelo (cont.)– Paralelismo:
• Processamento simultâneo• Subtipo de processamento concorrente
Tem história mais recente do que processamento concorrente.
• Multiplicação teórica do poder de processamento• Problemas de sincronização e comunicação
Concorrência (4/11)
Tipos de concorrência– Múltiplas formas, que não vêm ao caso:
• Cooperativo, preemptivo etc.
– Através de processos: • Pilha e espaços de endereçamento e diferentes• Código compartilhado em alguns casos;
– Através de threads: • Espaços de endereçamento compartilhados;• Pilhas distintas;• Código sempre compartilhado.
Concorrência (5/11)
Tipos de concorrência (cont.)– Threads e processos têm sido valorizados:
• Processadores SMT favorecem threads; • Máquinas SMP (Symmetric Multiprocessor)
favorecem processos;
Concorrência (6/11)
Tipos de paralelismo:– Quanto a comunicação:
• Memória compartilhada;• Memória distribuída (passagem de mensagens)
Concorrência (7/11)
– Modelos de cooperação:• Centralizado:
– Master/slave (mestre/escravo)– Cliente/servidor– Problema: Single point of failure;
• Descentralizado: – SPMD (Single Program/Multiple Data)– Mais tolerante a falhas
Concorrência (8/11)
Problemas dos threads– Sincronização
• Controle do fluxo do aplicativo;• Controle do acesso a dados:
– Locks ou travas;
– Consistência de dados: • Threads errados ou maliciosos podem corromper
dados.
Concorrência (9/11)
Problemas dos aglomerados (clusters)– Comunicação lenta através da rede;
• Relação entre comunicação e computação; – Problema de sincronização do aplicativo entre
máquinas;• Problema maior em aplicações gráficas com vários
monitores
Concorrência (10/11)
Solução do OpenSG para threads– Replicação resolve uso de locks/travas;– Sincronização de dados controlada por grafo:
• Lista de alterações diz o que deve ser comunicado• Alterações conflituosas não são combinadas
Concorrência (11/11)
Solução do OpenSG para aglomerados– Divisão de processos em clientes e servidores; – Servidores informam apenas clientes
registrados;– Estrutura de listas de alteração (changelists)
minimiza quantidade de dados a comunicar.
Conclusão
Ferramentas de grafo de cena são úteis; OpenSG é implementação inteligente e
flexível;– Usa técnicas modernas de projeto e
programação Adaptada a threads e processamento em
cluster; Organiza dados 3D
– Facilita criação de aplicativo.
Bibliografia
Open SG Forum http://www.opensg.org– OpenSG: Basic Concepts
OpenSG Forum Whitepaper– OpenSG – An Open Source Scenegraph– Fontes do OpenSG
VR Juggler http://www.vrjuggler.org– Scene Graph Rendering