Visão Geral do OpenSG PSI-5787 Realidade Virtual Alexander Cerqueira Silva Richard Ibarra Hilton...

Post on 17-Apr-2015

104 views 0 download

Transcript of Visão Geral do OpenSG PSI-5787 Realidade Virtual Alexander Cerqueira Silva Richard Ibarra Hilton...

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