Visão Geral do OpenSG PSI-5787 Realidade Virtual Alexander Cerqueira Silva Richard Ibarra Hilton 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 ( –Open Inventor (oss.sgi.com/projects/inventor) –Open Scene Graph ( –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) Acesso Como é 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: PrimitiveIterator Face: FaceIterator Triâ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ção Influencia 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 – OpenSG: Basic Concepts OpenSG Forum Whitepaper – OpenSG – An Open Source Scenegraph –Fontes do OpenSG VR Juggler –Scene Graph Rendering