Upload
judith
View
212
Download
0
Embed Size (px)
Citation preview
Hydra Virtual environments development platform
Hydra Plataforma para Desenvolvimento de Ambientes Virtuais
Ronaldo Ferreira dos Anjos Filho
Veronica Teichrieb
Judith Kelner Research Group on Virtual Reality and Multimedia (GRVM)
Federal University of Pernambuco (UFPE)
Recife, Brazil
[email protected], [email protected], [email protected]
Abstract — Thanks to technological advances experienced
in recent years, home users can run complex applications
related to virtual environments, such as Virtual Reality
(VR), Augmented Reality (AR), Mixed Reality (MR), Games,
among others, on their computers. Due to these advances,
it is possible for developers to create tools in order to assist
the development of virtual environment’s applications,
thereby influencing many different areas of industry, such
as Cinema and Games. In this context, this paper proposes
Hydra, a platform that has two major objectives: promoting
fast development of applications, covering various aspects
related to virtual environments (graphics, sound, physics,
and others), and enable customization of the Hydra itself,
allowing users to change the way the platform perform its
features.
Keywords: Virtual environments development platform, fast
development, customization.
I. INTRODUÇÃO
Atualmente, avanços no hardware (tanto na capacidade
dos processadores de propósito geral aliados com o poder
das GPUs, que podem também ser usadas para
processamento geral, via GPGPU, quanto na capacidade das
memórias principais e de armazenamento, dentre outros)
têm permitido aos desenvolvedores implementarem diversos
tipos de frameworks, esses podendo ser usados para a
construção de ambientes virtuais realísticos, reunindo desde
gráficos, passando por som, até de simulação física. Não é
incomum que mais de um destes tipos de framework sejam
combinados para o desenvolvimento de diversas aplicações,
como, por exemplo, Jogos, fazendo uso de ferramentas para
gráficos, de som, de rede, de simulação física, dentre outras.
Com isto, a integração destas ferramentas, o
desenvolvimento de aplicações utilizando funcionalidades
dos diferentes tipos de ferramentas, bem como a
customização dos frameworks de desenvolvimento são
desafios que os desenvolvedores enfrentam.
Em decorrência também desses avanços, foi possível aos
desenvolvedores adaptar ou criar técnicas de renderização
que pudessem ser executadas em tempo real, tais como de
renderização fotorrealística [1]. Com isso, pode-se criar
ferramentas complexas com o intuito de auxiliar o
desenvolvimento de aplicações com elevado refinamento
gráfico, influenciando assim as mais diversas áreas da
indústria, principalmente Cinema e Jogos.
Grandes empresas, como, por exemplo, NVIDIA [2],
CRYTEK [3] e Pixar [4] têm feito grandes investimentos
relacionados com a exibição de ambientes gráficos.
Diversos títulos de animações 3D de qualidade foram
produzidos para o cinema pela Pixar nos últimos anos em
decorrência desses investimentos, além da produção
científica associada a eles, como o estudo de métodos para
aumentar a eficiência de filtros baseados em histogramas
locais [5] com o intuito de aumentar a qualidade da cena
gráfica. Já a CRYTEK desenvolveu jogos com ambientes de
elevado nível de realismo, desenvolvendo diversas técnicas
de renderização em tempo real como, por exemplo, Screen-
Space Ambient-Occlusion (SSAO) [6], uma técnica para
geração de sombras baseada em informações presentes no
espaço de tela, ou seja, informações que estão sendo
exibidas naquele momento. A NVIDIA, além de investir na
criação de hardwares gráficos cada vez mais eficientes, tem
investido na criação de técnicas de renderização cada vez
mais sofisticadas, como, baseada no SSAO, a técnica
Image-Space Horizon-Based Ambient Occlusion (ISHBAB)
[7].
A área de processamento de som tem se beneficiado
também dessas inovações tecnológicas, permitindo que um
número maior de aplicações de RV e Jogos, por exemplo,
utilize sons para aumentar a sensação de imersão nos
ambientes virtuais, como em jogos de horror, onde o
ambiente gráfico normalmente é desenvolvido para
2011 XIII Symposium on Virtual Reality
978-0-7695-4445-8/11 $26.00 © 2011 IEEE
DOI 10.1109/SVR.2011.22
102
2011 XIII Symposium on Virtual Reality
978-0-7695-4445-8/11 $26.00 © 2011 IEEE
DOI 10.1109/SVR.2011.22
102
dificultar a visibilidade do jogador (ambientes noturnos e/ou
com pouca iluminação), aumentando assim o impacto para o
usuário na execução de sons, tendo como exemplo a série
Silent Hill [8]. Graças a esses avanços, arquivos de som
podem ser gerados possuindo maior qualidade e efeitos que
outrora, além de serem facilmente compactados e
reproduzidos posteriormente.
Os desenvolvedores de dispositivos para interação
também foram beneficiados pelos avanços no hardware.
Nesse cenário, além da melhoria da interação por
dispositivos comuns, como teclado, mouse e joysticks, por
exemplo, foram criados dispositivos para interação não
usual, como o Wii Mote [9], Move [10] e Kinect [11],
aumentado assim a gama de opções relacionadas à interação
em ambientes virtuais.
Graças aos avanços também foi possível a criação de
engines capazes de simular, em tempo real, comportamentos
físicos baseados na Física Newtoniana. Essas ferramentas
oferecem simulações realísticas que podem ser adicionadas
a ambientes virtuais para aumentar o nível de qualidade
destes, como na ferramenta VisGas [12].
Avanços na área de telecomunicações também têm
provocado mudanças no desenvolvimento de aplicações.
Com o aumento da largura de banda é possível desenvolver
ambientes virtuais colaborativos, reunindo usuários que
podem estar em diversas partes do mundo. Jogos no estilo
MMO (Massive Multiplayer Online) se tornaram populares
graças ao aumento do número de usuários domésticos que
possuem conexões de banda larga.
Outra característica que ultimamente tem sido
adicionada às aplicações que utilizam ambientes virtuais é a
Inteligência Artificial (IA), que vem sendo usada
principalmente pela indústria de Jogos. O comportamento
das entidades presentes nos ambientes virtuais sofreu um
considerável incremento em complexidade devido aos
avanços já citados anteriormente e ao desenvolvimento de
novos algoritmos, passando de comportamentos simples,
baseados em scripts (movimentação, ataque), para
comportamentos sofisticados, fundamentados fortemente
pelas ações do jogador (estratégias de ataque e
movimentação contra o jogador). Outro exemplo do uso de
IA é relacionado com a definição de uma arquitetura para
sistemas multi-agentes integrada à ambientes virtuais [13].
Neste contexto de avanços, tanto em hardware quanto
em ambientes virtuais, é proposto uma plataforma modular
com o objetivo de unificar diversos aspectos relacionados à
criação de ambientes virtuais, denominado Hydra, de modo
a satisfazer duas condições: promover desenvolvimento
rápido de aplicações, oferecendo um ambiente virtual
unificado e de fácil entendimento, além de oferecer a
possibilidade de customizá-lo a partir de plugins,
possibilitando ao usuário definir o funcionamento das
features oferecidas pela plataforma.
Nas seções a seguir deste trabalho são discutidos,
respectivamente, os trabalhos relacionados ao
desenvolvimento de ambientes virtuais, a definição da
plataforma Hydra, apresentando como foi executado seu
desenvolvimento, sua arquitetura e ferramentas associadas.
É apresentado, logo após a definição de Hydra, um estudo
de caso que envolveu a implementação de plugins e uma
aplicação teste possuindo como objetivo a validação da
plataforma e de seus componentes. Finalizando este
trabalho, temos as conclusões obtidas em seu
desenvolvimento, os agradecimentos e as referências
utilizadas.
II. TRABALHOS RELACIONADOS
Para o desenvolvimento da plataforma Hydra foi feito
um estudo a respeito de ferramentas presentes na literatura
que envolvessem o desenvolvimento de ambientes virtuais,
abrangendo ambientes físicos, gráficos e sonoros, além de
ferramentas para comunicação via rede, para assim extrair
características que essas possuem em comum, além de
identificar os principais pontos fortes e fracos. Como na
maioria dos casos as ferramentas relacionadas com
renderização háptica são proprietárias, foram analisadas
apenas duas ferramentas relacionadas a dispositivos de
interação. Nas subseções a seguir as principais ferramentas
são descritas e uma comparação a respeito dos elementos
encontrados em comum nelas.
A. Engines físicos
Dentre os engines físicos estudados, a biblioteca Bullet
[14] possui dois módulos separados, um para simulação
física e outro para detecção de colisão. Esta divisão é
refletida na estrutura de diretórios e subdiretórios para
representar os sub-módulos da biblioteca. Graças à sua
arquitetura modular, é possível utilizar qualquer dos
módulos em separado, ou seja, utilizar o módulo de
simulação física associado a outro módulo de detecção de
colisão ou vice-versa.
A biblioteca ODE [15] (Open Dynamics Engine) é um
simulador de corpos rígidos articulados. Uma estrutura
articulada pode ser representada por corpos rígidos
conectados através de juntas. Como exemplo, pode-se citar
criaturas compostas por tronco e membros, ou ainda
veículos como carros e motos.
Semelhantemente ao Bullet, a biblioteca ODE oferece
também um sistema de detecção de colisão separado do
módulo de simulação física. Baseado no conceito de
espaços, este sistema de colisão permite rápida identificação
de objetos que potencialmente podem colidir.
Ao contrário dos outros engines presentes na literatura, o
Newton [16] é um engine físico que possui maior precisão
nos cálculos de suas simulações. Ele foi desenvolvido para
simulação realística de corpos rígidos em aplicações de
tempo real. O Newton é bastante difundido, sendo popular
em diversas comunidades.
O NVIDIA PhysX [17], antigo AGEIA PhysX, é um
middleware de física, baseado em software, para a criação
de ambientes físicos dinâmicos. O PhysX suporta as
principais plataformas para jogos e aplicações gráficas, tais
103103
como PlayStation3, XBOX360, PC, entre outras. Pela
abrangência de plataformas, facilidade de programação e
diversas features oferecidas, o uso deste engine é bastante
difundido, sendo usado em diversas aplicações e jogos
comerciais. Além disto, a placa AGEIA PhysX foi a única
PPU (Physics Processing Unit) dedicada para computadores
desktop, construída para melhorar a física executada em
aplicações que usam este engine. Atualmente a produção
destas placas foi encerrada, sendo agora oferecida
aceleração física diretamente nas mais recentes GPUs da
NVIDIA.
B. Engines gráficos
O OGRE (Object-Oriented Graphics Rendering Engine)
[18] é um engine gráfico 3D desenvolvido para abstrair as
bibliotecas Direct3D e OpenGL a partir de plugins, os quais
também é oferecido ao usuário a opção de implementá-los
por meio de uma interface, permitindo adicionar novas
features, como captura de vídeo ou processamento da cena
gráfica gerada, por exemplo.
Já o Horde3D [19] é um engine de renderização open
source (licenciado pela LGPL - GNU Lesser General Public
License) com enfoque na renderização de efeitos visuais
voltados mais fortemente a jogos. Além de possuir uma
interface de programação simples, o engine suporta a
renderização de uma grande quantidade de objetos
animados. O Horde é apoiado pela Universidade de
Augsburg, na Alemanha, abstraindo o uso de OpenGL nas
aplicações.
Do mesmo modo que o Horde, o Crystal Space [20] foi
desenvolvido para facilitar a construção de jogos 3D em
tempo real, mas pode ser utilizado para implementação de
qualquer tipo de aplicação. Independente de plataforma,
semelhantemente ao Ogre, esse engine possui uma
arquitetura baseada em plugins, conferindo assim ao
programador funcionalidades comuns demandadas no
desenvolvimento de jogos, tais como renderização gráfica
3D, reprodução de som, dentre outras.
C. Engines de som
Desenvolvido em C++ pela Firelight Technologies,
FMOD Ex [21] é um engine de capaz de reproduzir a
maioria dos formatos de som existentes atualmente,
comprimidos ou não. Possuindo sua arquitetura baseada em
plugins, o usuário deste engine pode facilmente adicionar
novos codecs a ele, possibilitando a reprodução de um
formato de som específico.
Compatível com diversas plataformas como Windows,
Linux, Solaris, XBOX360, PlayStation (1, 2, 3) e Nintendo
(Wii, Game Cube), dentre as diversas features que o FMOD
Ex possui, pode-se citar o suporte a sons 3D, oclusão e a
criação de vozes virtuais.
O irrKlang [22], com funcionalidades semelhantes ao
FMOD, como sons 3D e reprodução de diversos formatos,
possui um diferencial importante: suporte a diversas
linguagens de programação. Desenvolvido a partir de uma
arquitetura multiplataforma e modular (plugins), este engine
oferece suporte para C++ e todas as linguagens .NET (C#,
VisualBasic.NET, Delphi.NET, IronPhyton, F#,
Haskell.NET), além de suportar os principais compiladores,
como Visual Studio e GCC.
D. Engines de rede
RakNet [23], ferramenta para comunicação em rede,
oferece diversas features interessantes aos desenvolvedores
de aplicações de tempo real como, por exemplo, jogos
MMOs. Desenvolvido em C/C++, com a utilização deste
engine é possível construir aplicações com tráfego de
informação.
O RakNet oferece ainda gerenciamento automático para
criação, destruição, serialização e envio dos objetos
definidos pelo usuário. Outra feature possuída por essa
ferramenta é possibilidade de chat por stream de vídeo e
som, o qual é utilizado o FMOD Ex para suporte do
segundo.
O Ice (Internet Communication Engine) [24] é um
middleware para comunicações em rede. Essa ferramenta
oferece, assim como o engine de som irrKlang , suporte a
diversas linguagens de programação: C++, linguagens
.NET, Java, Python, Ruby e PHP.
E. Input Engines
Para facilitar a integração entre os diversos dispositivos
de interação para os quais o ambiente virtual foi
desenvolvido, foi desenvolvida ferramenta CIDA (Chaotic
Interaction Device Abstraction) [25].
Possuindo também arquitetura baseada em plugins,
CIDA abrange uma grande variedade de dispositivos, sendo
estes representados em quatro classes: Keyboard (teclados,
controles remotos, celulares), Joystick (joypads,
microfones), Tracker (câmeras e marcadores) e Pointer
Device (mouse, luvas). Dependendo da implementação do
plugin, cada dispositivo pode ser mapeado em classes
diferentes, como, por exemplo, um teclado pode ser
mapeado tanto para a classe Keyboard quanto para a classe
Joystick (podendo ser interpretado como dois joypads).
Já o OIS (Object-Oriented Input System) [26], que era
originalmente parte do engine Ogre, é uma biblioteca para
gerenciamento de dispositivos que suporta diversas
plataformas, dentre elas Windows, Linux e MAC OS.
Existem quatro classificações de dispositivos no OIS:
Keyboard, Mouse, Joystick e Other. Esta última oferece aos
desenvolvedores a possibilidade de definir novos
dispositivos, como por exemplo, o Wiimote, joystick do
Nitendo Wii, ou o Move, joystick para Playstation 3.
F. Engines de jogos
O Torque [27] é um engine, de código fechado, mas
possui tipos de licenças variados dependendo da natureza do
projeto (uso comercial ou educacional). Aos compradores
da licença comercial é oferecido, além da própria
documentação, o seu código fonte.
104104
Desenvolvimento de jogos e outras aplicações que
envolvam a criação de mundos virtuais, Torque possui
diversas features, tais como: comunicação baseada em TCP
(Transmission Control Protocol) e UDP (User Datagram
Protocol), suporte a animação por esqueletos, simulação
física, dentre outras, além de oferecer suporte às plataformas
Windows, MAC OS, Linux e XBOX360.
O C4 Engine [28], do mesmo modo que o Torque, foi
concebido para ser uma ferramenta multiplataforma para
jogos, oferecendo suporte para as plataformas Windows e
MAC OS.
C4 oferece features próprias para o desenvolvimento de
jogos de última geração. Algumas delas são: animações,
suporte a portais, volumetric fog, simulação de tecidos e de
superfície de fluidos em tempo real, efeitos de som 3D com
atenuação por oclusão ou distância, rápida comunicação
remota via UDP. C4 também oferece um editor de cena para
jogos desenvolvidos com o ele.
O SteamCell [29] desenvolvido pela DEVCell é um
game engine multiplataforma composto por diversos
módulos, como gráfico, lógico e som, oferecendo
funcionalidades necessárias à implementação de jogos de
última geração.
Tendo seu módulo gráfico construído a partir do engine
Ogre, este engine possui uma arquitetura também baseada
em plugins, permitindo, do mesmo modo, ao desenvolvedor
utilizar apenas os módulos que forem necessários, além de
facilitar a implementação de seus próprios plugins.
O SteamCell oferece ainda um editor completo para
desenvolvimento de jogos utilizando suas funcionalidades,
contemplando desde edição de cenário e simulação física até
Banco de Dados (BD) e Inteligência Artificial (IA). No
entanto, o SteamCell possui apenas licença comercial.
Já o Havok [30], anteriormente apenas um engine para
simulação física, hoje corresponde a um conjunto de engines
possuindo, cada um possuindo um propósito específico,
sendo eles: Havok Physics, Havok Destruction, Havok
Cloth, Havok Behavior, Havok Animation e Havok Script.
Havok Physics, Havok Destruction e Havok Cloth são
relacionados ao controle da simulação física, cada um sendo
responsável, respectivamente por simulação de corpos
rígidos, simulação de destruição de corpos conectados e
simulação de tecidos.
O Havok Amimation é uma ferramenta voltada para
animação de malhas gráficas, enquanto o Havok Behavior é
responsável pelo controle automático dos objetos quanto a
sua movimentação (pathfinding) e o Havok Script é oferece
suporte para a linguagem de script LUA. Todas as
ferramentas do Havok foram desenvolvidas visando a sua
fácil integração.
G. Outros
Um engine estudado que apresenta uma proposta
semelhante ao Hydra é o VR Juggler [31]. Esse engine tem
como objetivo prover a integração entre as diversas
ferramentas componentes, facilitando assim a construção de
ambientes de RV que as utilizem, oferecendo suporte
renderização, som, comunicação, gerenciamento de
concorrência, dentre outras.
Outro exemplo é o FlowVR [32]. Desenvolvido com o
propósito de ser uma solução de RV para clusters, este
engine é composto por três módulos principais: FlowVR
Core, FlowVR Render e VTK FlowVR. O FlowVR Core representa o ponto central de
gerenciamento da aplicação, tendo ele a tarefa de
sincronizar a informação enviada pelos outros dois módulos
e pelos plugins definidos pelo usuário. Já o FlowVR Render
gerencia a informação relacionada à distribuição do
processamento gráfico pelos diversos nós do cluster, além
de gerenciar como a informação gráfica será distribuída
entre os diversos dispositivos de visualização. O VTK FlowVR tem o objetivo de integrar o VTK
(Visualization Tool Kit) [33] com o FlowVR, oferecendo
assim uma camada abstração sobre essa biblioteca. Do
mesmo modo que o VR Juggler, o FlowVR é um projeto
open source.
H. Comparação
Após a análise das ferramentas relacionadas a criação de
ambientes virtuais, foi possível identificar, mesmo algumas
delas possuindo propósitos e arquiteturas diferentes, alguns
componentes recorrentes ao desenvolvimento de aplicações
relacionadas (Figura 1), sendo eles:
Base: Componente que reúne funcionalidades
relacionadas aos elementos básicos presentes
em aplicações de software, sendo encontradas
não apenas em aplicações de ambientes
virtuais. Dentre esses elementos podemos citar:
controle de concorrência (threads, eventos,
dentre outros), gerenciamento de arquivos,
comunicação em rede, funções e estruturas
matemáticas, dentre outros.
Mundo Virtual: Componente que representa a
definição interna do ambiente virtual, sendo ele
dividido ainda em dois sub-componentes:
Mundo Reativo, ambiente que possui a
definição das entidades virtuais que não alteram
conscientemente seu estado e o do ambiente em
que estão inseridas (objetos com simulação
física em geral), e o Mundo Proativo, ambiente
em que as entidades virtuais alteram
conscientemente seu estado e do ambiente em
que estão inseridas (agentes inteligentes).
Interface: Componente que reúne os elementos
responsáveis tanto pela apresentação do
ambiente virtual ao usuário da aplicação
(renderização gráfica, reprodução de sons e
resposta háptica) quanto pela aquisição de
informações presentes no ambiente real
(captura e reconhecimento de vídeo e sons,
além de inputs de dispositivos).
105105
Figura 1: Componentes frequentemente encontrados em
ferramentas de desenvolvimento de ambientes virtuais.
A seguir é apresentada uma análise (tabela 1) a respeito
das principais ferramentas estudadas e os componentes
presentes em soluções de ambientes virtuais. A escolha
dessas ferramentas para analise se deu tanto pela quantidade
superior de features quanto por sua facilidade ao utilizá-las.
A marcação das células na tabela segue a seguinte lógica:
células em branco significam que a ferramenta não abrange
aquela funcionalidade, células com tom de cinza significam
que a ferramenta possui as funcionalidades internamente,
mas não liberam interfaces para que o usuário herde, e,
finalizando, células marcadas em preto significam que a
ferramenta abrange aquela funcionalidade e oferece aos
usuários interfaces para eles herdarem.
Tabela 1: Ferramentas X Componentes
III. O FRAMEWORK HYDRA
Uma dificuldade comumente encontrada no
desenvolvimento de aplicações que utilizam ambientes
virtuais é justamente a integração entre os diversos aspectos
presentes, como, por exemplo, a sincronização entre objetos
com modelagem física e seus respectivos representantes
gráficos. Além disso, normalmente cada aspecto é
desenvolvido com o auxílio de ferramentas diferentes (no
exemplo citado, um engine de simulação física e outro
gráfico) e, provavelmente, essas ferramentas possuem
implementações diferentes para o mesmo tipo de
informação, como, no exemplo citado, vetores e matrizes.
Outro problema é a questão da customização do
framework. Em muitos casos a ferramenta não possui todas
as funcionalidades requeridas para o desenvolvimento do
sistema, podendo forçar os desenvolvedores a tomar uma
entre estas duas decisões: alterar diretamente o framework
(seu código fonte) ou utilizar outra ferramenta.
Pensando nisso, este trabalho, executado no Grupo de
Pesquisa em Realidade Virtual e Multimídia do Centro de
Informática da Universidade Federal de Pernambuco
(GRVM CIn UFPE), propõe Hydra [36], uma plataforma
projetada tanto para desenvolvimento rápido de aplicações,
possuindo interfaces intuitivas para desenvolvedores
familiarizados com ambientes virtuais, quanto para
customização de sua própria arquitetura, oferecendo
flexibilidade aos desenvolvedores a respeito da utilização ou
alteração de suas features.
A plataforma Hydra foi desenvolvida de forma modular,
fornecendo tanto uma API para desenvolvimento de
ambientes virtuais compostos (gráfico, som, física, dentre
outros) quanto frameworks e bibliotecas que podem ser
utilizados em separado.
Cada framework que faz parte da plataforma Hydra
abstrai, a partir de plugins, o uso de outras ferramentas
(Figura 2). Os plugins são desenvolvidos a partir de uma
interface para criação do mesmo, possuindo métodos
abstratos que devem ser implementados de modo a tratar os
eventos disparados pelo framework componente a cada vez
que uma funcionalidade é requerida.
Componentes/
Ferramentas
Interface Mundo Virtual Base
Gráfico Sonoro Tátil Mundo
Reativo
Mundo
Proativo Matemática Arquivos Concorrência Rede Outros
Render Captura Reprodução Captura Resposta Captura
PhysX
Ogre
FMOD Ex
Raknet
Ice
CIDA
OIS
Havok
VRJuggler
106106
Figura 2: Relação framework/plugins em Hydra
Para facilitar o desenvolvimento, o ambiente virtual de
Hydra é simplificado, utilizando quatro entidades como base
para a construção de ambientes virtuais (Figura 3), sendo
elas: Scene (definição do ambiente em si), Actor (entidades
que representam os objetos presentes no ambiente virtual),
Shape (entidades atômicas que dão forma as entidades
Actor, sendo elas cúbicas, esféricas, cilíndricas, cônicas, em
forma de cápsula e malhas triangulares) e Material
(entidade responsável pela definição dos comportamentos
da entidade Shape, como, por exemplo, resposta a colisões,
atrito, reflexão de luz, interferência na reprodução de sons,
dentre outros).
Figura 3: Ambiente virtual em Hydra
A criação dessas entidades em Hydra se dá a partir de
objetos chamados descriptors, que são estruturas compostas
por atributos relacionados aos diversos ambientes virtuais
suportados por Hydra (Figura 4). Outro detalhe a se destacar
é que, quando o objeto é criado, ele não existe ainda no
ambiente virtual. Entidades criadas por Hydra funcionam
como blueprints, existindo no ambiente virtual apenas
quando instanciadas explicitamente, sendo útil quando o
ambiente virtual possui diversos objetos iguais em poses
diferentes (como um labirinto, que pode possuir diversas
paredes com as mesmas características).
Figura 4: Descriptor para elementos virtuais em Hydra
Outra feature interessante (não encontrada em nenhuma
das ferramentas estudadas) é a possibilidade alterar uma
dada propriedade em diversas entidades ao mesmo tempo
(como, por exemplo, alterar as propriedades de colisão de
todas as pedras presentes no ambiente virtual), para tal é
necessário apenas alterar a propriedade do objeto blueprint
que originou todos os outros.
Nas subseções a seguir são descritos a arquitetura de
Hydra e os frameworks utilizados como base para sua
construção.
A. Arquitetura
Baseado nos componentes presentes em sistemas de
ambientes virtuais identificados na seção II deste trabalho, a
arquitetura de Hydra, construída utilizando o padrão de
arquitetura em camadas e os padrões de projeto facade,
singleton, factory, pool, observer e command, é dividida em
nove módulos (Figura 5), sendo eles:
Basic: Módulo que possui a definição de
entidades que fazem parte do ambiente virtual:
Scene, Actor, Shape e Material.
Physics: Módulo que contém a definição das
diversas conexões (joints) que podem ser
executadas entre as entidades Actor, sendo elas:
fixa, prismática, de distância, de polia, de
revolução, esférica, universal e com seis graus
de liberdade (6DoF - Six Degrees of Freedom).
Render: Módulo que possui a definição de
elementos relacionados com o ambiente virtual
gráfico, sendo eles: luzes, câmeras virtuais,
viewports, janelas e overlays.
Sound: Módulo com a definição da entidade
Sound, responsável tanto pela reprodução de
som 2D quanto 3D.
Device: Módulo que possui a definição da
entidade Device, responsável pelo mapeamento
dos dispositivos utilizados tanto para interação
do usuário com o sistemas (teclados, mouses,
dentre outros) quanto do sistema com o usuário
por meio de renderização háptica (mouses 3D,
luvas, dentre outros).
Factory: Módulo que possui a definição de
todas as entidades construídas utilizando os
padrões factory e pool, responsáveis pela
criação e armazenamento das outras entidades
descritas.
Signals: Módulo que possui as definições dos
eventos utilizados pela plataforma Hydra e seus
frameworks componentes.
Descriptors: Módulo que possui as entidades
responsáveis pela construção dos elementos
virtuais em Hydra.
107107
Figura 5: Arquitetura de Hydra
B. Frameworks e bibliotecas componentes
Baseando-se na estrutura de componentes identificada na
seção anterior deste trabalho, a plataforma Hydra foi
construída a partir de um conjunto de frameworks e
bibliotecas Figura 6, podendo estes ser utilizados de forma
separada se o usuário assim desejar. As bibliotecas e
frameworks são:
Util: Biblioteca que oferece um conjunto de
funcionalidades úteis no auxílio ao
desenvolvimento de aplicações em geral, não
apenas focadas em ambientes virtuais. Dentre
as funcionalidades que essa biblioteca possui:
entidades para gerenciamento de tipos em
tempo de compilação, como type lists [34],
funções para tratamento de strings, incluindo
parsing e serializing, e interfaces para
implementação de alguns padrões de projeto,
tais como singleton, factory, pool, observer e
command.
CPPMT: C++ MultiTthread é uma biblioteca
para gerenciamento de concorrência,
oferecendo interfaces para criação de threads,
mutexes, semáforos, escalonadores de eventos,
além de oferecer uma interface genérica para
implementação de plugins.
Resource: Biblioteca para gerenciamento geral
de arquivos, sendo eles compactados (.zip) ou
não. Arquivos compactados são tratados pela
biblioteca tanto como arquivos comuns quanto
como diretórios, permitindo assim acesso
simplificado aos arquivos presentes em seu
interior.
ConnecT: Biblioteca para comunicação remota
via rede, permitindo assim construir aplicações
com ambientes virtuais colaborativos,
oferecendo, por exemplo, envio de mensagens
de controle, chat, dentre outras funcionalidades.
Até o momento essa biblioteca não foi
implementada.
Numerics: Biblioteca que oferece funções e
tipos matemáticos diversos, útil para diversos
tipos de aplicações e essenciais para aquelas
relacionadas a ambientes virtuais, tais como
vetores, matrizes, quaternions, raízes,
potências, dentre outros.
ReActive: Framework para simulação física
que abstrai o uso de outras engines. Mais
detalhes a respeito no trabalho que o originou
[35].
ProActive: Framework para definição de
entidades virtuais autônomas capazes de alterar
conscientemente o seu estado e o estado do
ambiente virtual ao qual estão inseridas. Como
a biblioteca ConnecT, esse framework ainda
não foi implementado.
ALVE: Audio Layer for Virtual Environments
é um framework para construção de ambientes
virtuais sonoros, oferecendo reprodução de sons
tanto 2D quanto 3D, além de possuir features
relacionadas a oclusão de sons por geometrias
presentes no ambiente virtual.
RaVe: Render Abstraction for Virtual
Environments é um framework para construção
de ambientes virtuais gráficos, possuindo
features relacionadas com a exibição da cena
gráfica, captura e reconhecimento do ambiente
real.
TACTILE: Framework para construção de
ambientes virtuais táteis, oferecendo
funcionalidades tanto de controle de
dispositivos de interação usuais (teclado,
mouse, dentre outros), quanto de dispositivos
para respostas hápticas (luvas, mouses 3D,
joysticks, dentre outros).
Figura 6: Frameworks componentes de Hydra
IV. ESTUDO DE CASO
Com a primeira versão da plataforma Hydra concluída,
foram construídos, como estudos de caso, alguns plugins
para seus frameworks componentes e uma aplicação teste.
Nas subseções a seguir são descritos detalhes de seus
respectivos desenvolvimentos e constatações obtidas.
108108
A. Descrição do estudo de caso
Hydra é composto por um conjunto de frameworks e
ferramentas com o propósito de facilitar o desenvolvimento
rápido de aplicações e a customização de seu próprio
funcionamento. Por esse motivo, a arquitetura de Hydra e de
seus componentes provêem interfaces de fácil entendimento
aos usuários (o que facilita o desenvolvimento de
aplicações), mas também permitem o desenvolvimento de
plugins (o que oferece ao usuário meios de customizar seu
funcionamento).
Cada framework desenvolvido para os componentes
Interface e Mundo Virtual permite a construção de seus
respectivos ambientes virtuais, tendo as suas
funcionalidades distribuídas entre seus plugins. Nas
subseções a seguir serão descritos os plugins desenvolvidos,
neste trabalho, para cada framework componente de Hydra
(o plugin desenvolvido para o ReActive foi descrito em 10).
1) RaVe
RaVe possui três funcionalidades principais relacionadas
ao ambiente virtual gráfico: captura e reconhecimento do
ambiente real e exibição do ambiente gráfico, mas para a
aplicação teste implementada foi utilizado apenas um plugin
para exibição do ambiente gráfico.
O plugin para o engine Ogre foi desenvolvido com o
propósito de representar o ambiente virtual gráfico em si,
com as entidades definidas em RaVe mapeadas em objetos
pertencentes a ele. Entidades Material de RaVe foram
mapeadas para entidades Material do Ogre, mas a criação
delas se dá apenas a partir de scripts providos pelo segundo,
não permitindo ao usuário definir os atributos das entidades
Material a partir do código.
Entidades Shape e Actor de RaVe são mapeadas para
entidades SceneNode do Ogre. O engine Ogre segue uma
abordagem de gerenciamento hierárquico da cena,
diferentemente de RaVe, em que seus objetos virtuais
possuem apenas ―dois níveis‖. O primeiro nível é
representado pelas entidades Actor e o segundo nível por
―n‖ entidades Shape.
Cada entidade Shape é construída a partir de um arquivo
.mesh, utilizado pelo Ogre para definir seus objetos gráficos,
possuindo entidades que representam formas básicas (cubo,
esfera, capsula, cilindro e cone) e uma entidade para
construção de objetos complexos (malhas triangulares).
Uma abordagem semelhante à estrutura Shape/Actor é
adotada em relação às entidades Overlay de RaVe.
Entidades Overlay do Ogre seguem uma organização similar
a das entidades SceneNode, ou seja, uma entidade Overlay
do Ogre é composta por diversas entidades OverlayElement
que, por sua vez, também podem ser compostas por diversas
entidades desse tipo. Em RaVe entidades OverlayElement
são atômicas, não sendo compostas por nenhuma outra
entidade. As demais entidades presentes em RaVe (Light,
Scene, Viewport, Camera e Window) são mapeadas
diretamente para seus representantes no Ogre.
2) ALVE
Para o ambiente virtual sonoro presente no componente
de Interface foi desenvolvido, até o momento, apenas um
plugin, este definindo reprodução de sons e o ambiente
virtual sonoro a partir do engine FMOD EX [21].
FMOD Ex oferece diversos tipos de formatos para
reprodução. Para a execução de sons, o engine utiliza o
conceito de canais, cada um deles funcionando como
contextos de reprodução independente. No caso de ALVE
não existe nenhuma entidade que represente a entidade
Chanel de FMOD EX, a abordagem utilizada até o momento
ativa uma dessas entidades para cada entidade Sound que
for criada.
O ambiente virtual de FMOD EX não possui entidades
Material, Shape ou Actor. A criação de elementos que
interferem no som da cena é feita a partir de conjuntos de
polígonos 2D que, quando construídos corretamente,
formam geometrias 3D. Cada uma dessas geometrias possui
atributos relacionados com a interação entre elas e os sons
reproduzidos no ambiente.
Para o mapeamento da entidade Material de ALVE, no
contexto do FMOD EX, foram utilizadas as constantes
relacionadas à reprodução de sons pertencentes às entidades
Geometry do engine. A entidade Shape de ALVE é
mapeada para a entidade Geometry de FMOD EX
diretamente, com exceção apenas das constantes definidas já
na entidade Material, enquanto a entidade Actor de ALVE
não possui equivalente no engine, sendo então definida
internamente pelo plugin como um conjunto de entidades
Geometry. A entidade Scene de ALVE também não possui
correspondente direto no FMOD EX, sendo ela mapeada
para a entidade System.
3) TACTILE
TACTILE oferece duas possibilidades para a construção
de plugins: uma relacionada ao controle de dispositivos em
geral, como teclados, mouses, luvas, dentre outros, e a outra
é a respeito da criação do ambiente virtual tátil, ou seja, com
as entidades relacionadas à interação direta do usuário por
meio de dispositivos com resposta háptica.
Até o momento, pela impossibilidade de acesso a
dispositivos hápticos, foi desenvolvido apenas o plugin para
gerenciamento de dispositivos de interação em geral,
utilizando a ferramenta OIS, devido a simplicidade de suas
interfaces.
O plugin desenvolvido para essa biblioteca oferece
suporte apenas, até o momento, a teclados e mouses. Para
executar o mapeamento das entidades suportadas pelo OIS,
a entidade Device de TACTILE foi mapeada para as
entidades Keyboard e Mouse, dependendo do dispositivo a
ser criado. A cada ciclo da simulação, o gerenciador de
eventos de TACTILE verifica o estado dos dispositivos
sendo utilizados e então dispara um evento para cada um
deles, informando seu novo estado, este podendo ser
utilizado pelo usuário para realizar as tarefas de interação
dele com a aplicação.
109109
4) Aplicação teste
Para validar as funcionalidades implementadas em
Hydra e em seus frameworks foi desenvolvida uma
aplicação de teste abrangendo visualização (ambiente virtual
gráfico), interação (ambiente virtual tátil), som 3D
(ambiente virtual sonoro) e simulação física (ambiente
virtual físico).
O ambiente virtual (Figura 7) é composto por uma cena
com características gráficas (céu noturno e sem iluminação
ambiente), físicas (gravidade de 9.8 m/s²) e sonoras
(atenuação do som ocorre de forma linear), um plano com
características físicas (densidade, atrito, resposta a colisões,
dentre outras) e gráficas (textura de cerâmica), e uma
estatua da deusa grega Atena com características gráficas
(textura de rocha) e físicas (mesmas do plano), além de
possuir três fontes de luz pontuais com cores diferentes
(tons de laranja, magenta e verde, respectivamente).
Figura 7: Ambiente virtual da aplicação teste
A estátua de Atena pode adotar características diferentes
se o usuário desejar. Além das características padrão já
descritas, a estátua pode apresentar ainda outros dois
comportamentos: o primeiro faz a estátua ter ausência de
comportamento físico, ou seja, ela não interage mais com
outros objetos físicos presentes no ambiente, e como
comportamento visual ela apresenta uma aparência
translúcida de cor com tons de magenta. O segundo
comportamento é visualmente semelhante ao primeiro,
sendo que no lugar de tons de magenta, a estátua adquire
tons azulados, e como comportamento físico ela passa a
funcionar como um force Field, ou seja, qualquer objeto
com comportamento físico lançado contra ela é repelido,
fazendo-o mudar de trajetória.
B. Resultados
Mesmo tendo sido executada uma avaliação apenas de
caráter preliminar com a aplicação desenvolvida, foi
possível obter algumas constatações a respeito da
plataforma Hydra e aos objetivos que a ferramenta se
propõe. Em relação ao desenvolvimento rápido de
aplicações, Hydra oferece um ambiente virtual unificado,
reunindo características gráficas, sonoras, táteis e físicas, e
interfaces de programação intuitivas a usuários que possuam
familiaridade com aplicações relacionadas à ambientes
virtuais. Devido às características citadas, foi possível
desenvolver a aplicação teste utilizando por volta de
setecentas linhas de código, o que representa um valor
razoável, dado ao número de variáveis envolvidas no
ambiente virtual da aplicação, que é composto por ambiente
gráfico, sonoro e físico, possuindo ainda detecção de colisão
entre objetos físicos e gerenciamento de eventos de input.
Cabe ressaltar que se esta mesma aplicação fosse
desenvolvida utilizando as ferramentas de forma
independente para gráfico (Ogre), física (PhysX), som
(FMOD EX) e interação (OIS), os autores precisariam de
pelo menos em torno de mil linhas de código para criar a
mesma aplicação.
Em relação à customização, a aplicação foi construída
utilizando plugins para definição dos ambientes gráfico
(Ogre), sonoro (FMOD EX) e físico (PhysX), além de
oferecer interação por meio de dispositivos usuais, como
mouse e teclado (OIS). Devido à estrutura de sua
arquitetura, aplicações que utilizem Hydra podem ser
construídas de forma flexível, permitindo aos usuários
utilizar apenas os módulos que atendam suas necessidades.
No caso da aplicação teste desenvolvida, não foram
utilizadas funcionalidades relacionadas ao ambiente virtual
tátil em si e nem a captura e reconhecimento do ambiente
real por meio de vídeo.
V. CONCLUSÃO
Este trabalho obteve como resultado a definição de uma
arquitetura e a implementação de uma plataforma para
desenvolvimento de ambientes virtuais em geral (RV, RA,
RM, Jogos), mas com enfoque em dois objetivos:
desenvolvimento rápido de aplicações, oferecendo um
ambiente virtual unificado e interfaces intuitivas a usuários
com experiência no desenvolvimento deste tipo de
aplicação, e customização da plataforma, permitindo aos
usuários definir o modo como as features presentes em
Hydra são executadas, sendo para isso oferecido a eles
interfaces para construção de plugins, os quais se
comunicam com a plataforma a partir do disparo e
processamento de eventos.
Mesmo tendo atendido seus objetivos, Hydra ainda
encontra-se em fase de protótipo, sendo necessário maior
refinamento tanto em sua estrutura central quanto nos
frameworks que o compõem. Além disso, nem todas as
funcionalidades relacionadas com o desenvolvimento de
ambientes virtuais foram contempladas nesta primeira
versão do protótipo.
Como trabalhos futuros, serão realizadas reavaliações da
estrutura de Hydra, verificando erros ou inconsistências
presentes em sua arquitetura. Para tal serão realizados novos
testes com usuários, avaliando os principais pontos fracos,
além de sugestões diversas para o aperfeiçoamento dos seus
frameworks componentes, e avaliação em relação a outras
ferramentas existentes (tanto soluções fechadas, como
110110
engines de RV, Jogos, dentre outros, quanto na composição
de ferramentas para diferentes objetivos, como gráfico, som,
física, dentre outros), utilizando como métricas principais o
desempenho obtido (fps, consumo de memória), linhas de
código escritas, tempo levado para a implementação de
aplicações, dentre outras que ainda serão definidas.
AGRADECIMENTOS
Os autores agradecem ao CNPq pelo financiamento
parcial deste trabalho por meio de uma bolsa de mestrado
acadêmico.
REFERÊNCIAS
[1] J. Ferwerda, ―Three Varieties of Realism in Computer Graphics‖, SPIE Human Vision and Electronic Imaging, 2003, pp. 290-297.
[2] NVIDIA. NVIDIA Site. Disponível em: <http://www.nvidia.com/content/global/global.php>. Acesso em 01 Jan. 2011.
[3] CRYTEC. CRYTEC Site. Disponível em: <http://www.crytek.com>. Acesso em 01 Jan. 2011.
[4] Pixar. Pixar Site. Disponível em: <http://www.pixar.com>. Acesso em 01 Jan. 2011.
[5] KASS, Michael; SOLOMOM, Justin. Smoothed local histogram filters. In: Special Interest Group on Graphics and Interactive Techniques (SIGGRAPH), 2010, Nova York.
[6] MITTRING, Martin. Finding next gen: CryEngine 2. In: Special Interest Group on Graphics and Interactive Techniques (SIGGRAPH), 2007, Nova York.
[7] BAVOIL, Louis; SAINZ, Miguel; DIMITROV, Rouslan. NVIDIA Corporation. Image-space horizon-based ambient occlusion. In: Special Interest Group on Graphics and Interactive Techniques (SIGGRAPH), 2008, Nova York.
[8] Silent Hill. Silent Hill Site. Disponível em: <http://www.konami.com/games/silenthill/silenthill8>. Acesso em 01 Jan. 2011.
[9] Nintendo Company, Ltd. Kyoto. Wiiimote for Wii.
[10] Sony Corporation. Tokyo. Move for Playstation 3.
[11] Microsoft Corp. Redmond WA. Kinect for Xbox 360.
[12] ALMEIDA, G. ; FERREIRA, F. ; SANTOS, A. L. ; TEICHRIEB, Veronica ; KELNER, J. ; SETTON, E. . Sistema de Visualização Científica em Tempo Real para Aplicações de Engenharia. In: XXIX CILAMCE - Congresso Ibero Latino Americano de Métodos Computacionais em Engenharia, 2008, Maceió. Anais do CILAMCE 2008, 2008.
[13] BARELLA, Antonio; CARRASCOSA, Carlos; BOTTI, Vicente. Agent architectures for intelligent virtual environments. In: Proc. IEEE/WIC/ACM Int. Conf. Intell. Agent Technol., 2007, pp. 532–535.
[14] COUMANS, Erwin; Optimizing Proximity Queries for CPU, SPU and GPU bullet. In: Special Interest Group on Graphicics and Interactive Techniques. Los Angeles, 2010.
[15] M. TENNOE, Lambert; T. HENSSONOW Mariam; F. SURHONE, Susan. OPEN DYNAMICS ENGINE. 1ª Edição. BETASCRIPT PUBLISHING. 2010. 108 p.
[16] Newton. Newton Game Dynamics. Disponível em: < http://www.newtondynamics.com/> Acesso em: 15 de setembro de
2011.
[17] HONGPAN Niu; YONG Gao; ZHONGMING, Hou. Application research of PhysX engine in virtual environment. In: Audio Language and Image Processing (ICALIP), Shangai, 2010.
[18] KERGER, Felix. OGRE 3D 1.7 Beginner's Guide. Packt Publishing, Novembro 2010, Birmingham, United Kingdom
[19] Horde. Horde: Next-Generation Graphics Engine. Disponível em: < http://www.horde3d.org> Acesso em: 15 de fevereiro de 2011.
[20] TYBERGHEIN Jorrit; et al. Developing video games and virtual environments with the Crystal Space engine, DEnG-VE workshop, Engineering Interactive Computing Systems (EICS), Berlin, 2010.
[21] FMOD Ex, FMOD Ex Site, Disponível em: <http://www.fmod.org/index.php/fmod>. Acesso em: 01 Fev. 2011.
[22] irrKang. irrKlang Site. Disponível em: < http://www.ambiera.com/irrklang/> Acesso em: 15 de fevereiro de
2011.
[23] RakNet. RakNet Site. Disponível em: <
http://www.jenkinssoftware.com/> Acesso em: 15 de fevereiro de
2011.
[24] Xu, S; et al. Comparing the performance of EPICS Channel Access with a new implementation based on ICE (the Internet Communications Engine). In: Real Time Conference. Beijing , 2009.
[25] FARIAS, Thiago ; TEIXEIRA, João Marcelo ; RODRIGUES, Carlos Eduardo ; PESSOA, Saulo ; COSTA, Nacha ; TEICHRIEB, Veronica ; KELNER, Judith . CIDA: an interaction devices management platform. In: Symposium on Virtual Reality, 2006, Belém. Porto Alegre : SBC, 2006. p. 271-284.
[26] OIS, OIS Site. Disponível em: <http://sourceforge.net/projects/wgois/>. Acesso em: 15 Fev 2011.
[27] MAURINA III, Edward F. Multiplayer Gaming and Engine Coding for the Torque Game Engine. 1ª edição. A K Peters. 2008. 450 p..
[28] C4. C4 Engine. Disponível em: < http://www.terathon.com> Acesso em: 15 de fevereiro de 2011.
[29] SteamCell. SteamCell Game Engine. Disponível em: <
http://www.devcellsoftware.com> Acesso em: 15 de fevereiro de
2010.
[30] Havok, Havok Site, Disponível em: <http://www.havok.com/>. Acesso em: 01 Fev. 2011.
[31] BIERBAUM, Allen; et al. VR juggler: a virtual platform for virtual reality application development. In: Special Interest Group on Graphics and Interactive Techniques Asia (SIGGRAPH-Asia), 2008, Singapore.
[32] ARCILA, Thomas; et al. FlowVR: A Framework for Distributed Virtual Reality Applications. In: Journees de l'AFRV, 2006, Rocquencourt.
[33] SCHROEDER, Will; et al. The Visualization Toolkit An Object-Oriented Approach To 3D Graphics. 4ª edição. Kitware Inc. publishers. 2006. 528 p.
[34] ALEXANDRESCU, Andrei. Modern C++ Design: Generic Programming and Design Patterns Applied. 1ª Edição. Addison Wesle
[35] ALMEIDA, Gabriel Fernandes de ; Santos, Artur ; ANJOS FILHO, Ronaldo Ferreira dos ; Breyer, Felipe ; Almeida, Mozart Williams S. ; FARIAS, Rodrigo ; TEICHRIEB, Veronica ; KELNER, Judith . ReActive Engine Reativo de Física. In: Symposium on Virtual and Augmented Reality, 2008, João Pessoa. Symposium on Virtual and Augmented Reality. Recife : Gráfica e Copiadora Nacional, 2008. p. 251-260.
[36] Anjos Filho, R ; ALMEIDA, Gabriel Fernandes de ; TEICHRIEB, Veronica ; KELNER, J. . Hydra: Engine Modular e Extensível para Construção de Ambientes Virtuais. In: V Workshop de Realidade Virtual e Aumentada, 2008, Bauru-SP. V Workshop de Realidade Virtual e Aumentada, 2008.
111111