Um Framework para Desenvolvimento de Aplicações de Realidade Aumentada de Alto ível para Web Maylson Lívio dos S. Gonçalves Manoel Ribeiro Filho Leonardo Santos de Aguiar Waveit Technology [email protected] Universidade Federal do Pará [email protected] Centro Universitário do Pará [email protected] Abstract — This article presents the architecture of a framework to develop high-end augmented reality web applications using Ogre3D rendering engine and the marker tracking library ARToolKitPlus. The framework uses the game engine concept for the development of augmented reality applications, which are compiled in native code and executed into the browser through Java Plugins, using Java ative Interfaces to access the native code, having a considerable performance gain against the solutions currently used. Keywords: Web Augmented Reality, Ogre3D, ARToolKitPlus. Resumo — Este artigo apresenta a arquitetura de um framework para desenvolvimento de aplicações de realidade aumentada de alto nível para a internet, utilizando o motor de renderização Ogre3D e a biblioteca de rastreamento de marcador ARToolkitPlus. O framework utiliza-se do conceito de motor de jogos para o desenvolvimento das aplicações de realidade aumentada, que são compiladas em código nativo e executadas no browser via Java Plugins, utilizando Java ative Interfaces para acessar o código nativo, tendo um considerável ganho de desempenho em relação às soluções atualmente utilizadas. Palavras-chave: ARToolKitPlus. Realidade I. Aumentada Web, Ogre3D, INTRODUÇÃO A Realidade Aumentada (RA) é definida como uma fusão entre o mundo real e objetos virtuais, criando um cenário no qual as informações contidas no mundo real são incrementadas com objetos virtuais gerados por computador [1], utilizando-se um software adequado, geralmente em conjunto com uma webcam e um marcador. Essa tecnologia tem sido bastante utilizada na internet nos últimos anos, como forma de promover produtos e/ou marcas, apresentando-as de forma inovadora em um site como parte uma campanha publicitária. Além de servir como instrumento de veiculação publicitária, a RA na web pode ainda ser utilizada em aplicativos de ensino à distância, em jogos eletrônicos, ferramentas colaborativas etc. Dessa forma, é importante desenvolver tecnologias que permitam a distribuição de aplicações de realidade aumentada de alto nível na internet, que estejam alinhadas com as tecnologias 3D disponíveis atualmente, de maneira a tirar máximo proveito das potencialidades dessa tecnologia. Atualmente, pode-se destacar a veiculação de aplicações de RA na web através do uso do FLARToolKit em conjunto com ActionScript 3.0, rodando no Adobe Flash Player [2]. Neste contexto, este trabalho tem como objetivo apresentar uma proposta para o desenvolvimento de aplicações de realidade aumentada de alto nível para a web, utilizando um framework multiplataforma projetado em cima de ferramentas comuns no desenvolvimento de jogos eletrônicos, como a engine de renderização gráfica Ogre3D [3] e a biblioteca de rastreamento de marcador ARToolKitPlus [4]. Para captura de vídeo foi utilizada a biblioteca OpenCV [5], a qual é bastante popular no desenvolvimento de aplicação de visão computacional. Todas as três bibliotecas utilizam C++ como linguagem de programação, provendo um grande ganho de desempenho em relação ao FLARToolKit e ActionScript 3.0. O framework proposto neste trabalho utiliza a tecnologia Java Plugin [6] para a publicação do aplicativo na web, usufruindo da tecnologia Java Native Interfaces (JNI) [7], a qual permite que a uma aplicação Java acesse código nativo de outra aplicação. A grande vantagem na utilização de Java Plugins decorre do fato de que o Java Runtime (ambiente de execução do Java) tem grande penetração nos computadores atuais [8]. Este artigo está dividido da seguinte forma: a seção II trata dos trabalhos relacionados. A seção III faz um breve resumo das ferramentas utilizadas no desenvolvimento do framework proposto. A seção IV mostra as definições da arquitetura proposta. A seção V exemplifica como o aplicativo desenvolvido é publicado na web. A seção VI mostra alguns estudos de caso e, por fim, são feitas as conclusões e perspectivas para trabalhos futuros. II. TRABALHOS RELACIONADOS Os trabalhos relacionados encontrados na literatura científica enquadram-se basicamente em dois campos distintos: “aplicações de RA de alto nível” e “aplicações de RA para web”. Para o primeiro item, pode-se citar o trabalho de [9], que apresenta o OGREAR, um framework de RA desenvolvido no GRVM (Grupo de Pesquisa em Realidade Virtual e Multimídia do CIn UFPE). É considerado por seus autores um framework genérico, podendo ser utilizado para desenvolver aplicações de RA tanto para desktop como para handheld. Como visto em [9], a biblioteca OGREAR é responsável por fazer uma interface entre a captura da imagem e o tratamento desses valores. Este framework permite calcular as características geométricas dos marcadores presentes no frame para utilizá-los no mundo virtual. A aquisição de imagens pode ser implementada usando qualquer biblioteca de acesso à câmera e o rastreamento de marcadores é independente de qualquer biblioteca de detecção. Pode-se citar ainda o Studierstube [10], que tem o seu foco em aplicações multiplataforma, sendo composto de bibliotecas para renderização, gerenciamento de mídia (áudio, vídeo e câmera), distribuição em rede, além de realizar rastreamento de marcadores com um wrapper sobre o ARToolKitPlus. Para o segundo item, os trabalhos encontrados na literatura utilizam alguma arquitetura de sistema distribuído, de forma que a aplicação de RA roda em um servidor, de onde é distribuída aos clientes. Em [2] é apresentado um middleware para distribuição de RA na web, na qual o apresentador interage com o aplicativo que então envia as saídas para os clientes. Em [11] é apresentada uma ferramenta de distribuição de ambientes virtuais para apoio a projetos multidisciplinares de ensino, de modo que foram desenvolvidos dois protótipos: um na área biológica e outro na área de química. Para a distribuição foi utilizado o CORBA, utilizando arquitetura cliente/servidor. O framework apresentado neste trabalho difere dos outros por se concentrar em RA de alto nível com foco em distribuição fácil e acessível do aplicativo na internet, de forma descentralizada, onde cada usuário carrega, executa e interage com o aplicativo de RA no próprio browser. III. tempo-real. A biblioteca tem mais de 500 algoritmos otimizados para essa função. Suas aplicações variam de arte interativa à navegação robótica. Seu grupo de usuários tem mais de 40 mil inscritos [5]. D. Java Plugins e Java )ative Interfaces A tecnologia Java Plug-in, incluída como parte do Java Runtime Environment Standard Edition, estabelece a conexão entre o browser e a plataforma Java. Essa conexão permite que Applets Java rodem no desktop, com ou sem o browser. [6] A tecnologia Java Native Interface é uma poderosa ferramenta da plataforma Java. Aplicações que usam JNI podem incorporar código nativo escrito em linguagens de programação como C e C++, bem como código escrito em Java. [7] . IV. ARQUITETURA DO SISTEMA A arquitetura do framework preza pela simplicidade e pela modularidade, sendo sua compreensão bastante simples. A Figura 1 mostra a arquitetura do framework em suas diversas camadas. No nível mais baixo, são encontradas suas bibliotecas base, responsáveis pela renderização, captura de vídeo e rastreamento de marcador. Logo acima, tem início a camada de abstração do framework, responsável por ocultar do usuário detalhes de acesso às bibliotecas do nível anterior. Neste nível o usuário não precisa fazer qualquer alteração, pois este deve trabalhar na camada mais acima, a camada de aplicação. É na camada de aplicação que o usuário pode desenvolver seu aplicativo, podendo carregar uma cena com modelos 3D, luzes, texturas etc. utilizando o módulo Scene Loader. FERRAMENTAS A. Ogre3D O Ogre3D (Object-Oriented Graphics Rendering Engine) é uma engine de renderização 3D desenvolvida em C++, orientado a objetos, multiplataforma e open source, muito utilizado no desenvolvimento de jogos eletrônicos. Os recursos gráficos do Ogre3D incluem suporte a OpenGL, OpenGL ES e DirectX [3]. B. ARToolKitPlus ARToolKitPlus é uma versão estendida e orientada a objetos da popular biblioteca de rastreamento de marcador ARToolKit [4], no entanto, diferente desta, o ARToolKitPlus foca apenas nos algoritmos de rastreamento, sem prover qualquer meio de acessar a webcam ou efetuar qualquer renderização. C. OpenCV OpenCV (Open Source Computer Vision) é uma biblioteca para programação de visão computacional em Figura 1. Arquitetura do framework proposto. Cada módulo do framework tem uma função específica e bem definida que auxiliam o programador a desenvolver o aplicativo rapidamente. Juntos, estes módulos praticamente eliminam a preocupação com a parte de RA do aplicativo. Os módulos do framework são: A. Manager O Manager é uma das partes mais importantes do framework, embora deva ficar oculto ao usuário. Este módulo é responsável por gerenciar todo o ciclo de vida do aplicativo, desde sua inicialização até o controle do game loop. mesma forma, para gerar o arquivo JAR que conterá os binários do aplicativo, é necessário colocar na mesma pasta o binário do Launcher (Launcher.class) e a DLL gerada pelo framework (framework.dll). B. Game State Manager Este módulo faz a interface entre o Manager e a aplicação do usuário. Cada aplicação do usuário é um Game State, ficando o Game State Manager responsável pelo gerenciamento de todos os Game States. Sendo gerado o arquivo “bin.jar”. O próximo passo é assinar os arquivos JAR. C. Scene Loader Este módulo é responsável por inicializar os recursos do Ogre3D, recebendo como parâmetro um arquivo XML contendo toda a descrição da cena, como posição dos modelos, escala, rotação, luz ambiente etc. D. Java Callbacks O módulo Java Callbacks é responsável pela implementação da interface de comunicação com o Java, expondo alguns métodos do Manager para que a aplicação possa ser inicializada, atualizada e encerrada através do Java. Além disso, esse módulo também implementa alguns métodos responsáveis por injetar input recebido do Java para o framework. Uma vez que a aplicação tenha sido desenvolvida, utiliza-se o Launcher, um simples Java Applet responsável por enviar os comandos de input para o framework e receber a renderização realizada por este a cada frame. V. jar.exe cfv bin.jar framework.dll Launcher.class B. Assinatura digital dos arquivos JAR Por fazer uso da tecnologia JNI, o Launcher priva-se do ambiente seguro e gerenciado do Java e quebra, a princípio, a portabilidade do aplicativo, uma vez que o código nativo só poderá ser executado na plataforma para a qual foi compilado. Desse modo, como forma de impor uma maior segurança aos Applets, é necessário assinar digitalmente os arquivos JAR, de forma que o usuário será alertado sobre a execução do aplicativo e lhe será perguntado se deseja executá-lo no browser. É possível criar uma assinatura digital para os arquivos JAR utilizando ferramentas disponibilizadas pelo próprio Java, como o keytool e o jarsigner. C. Arquivo J)LP Aplicações desenvolvidas com o Java Plugin são inicializadas utilizando Java Network Launch Protocol (JNLP), o que implica na criação de um arquivo JNLP que contém instruções para o Java baixar os arquivos JAR requeridos e inicializar o aplicativo, além de passar outros parâmetros úteis ao Launcher, como as dimensões do Applet, por exemplo. DISTRIBUINDO O APLICATIVO NA WEB Disponibilizar o aplicativo na internet torna-se bastante simples. É necessário apenas colocar os pacotes JAR no servidor web, assinados digitalmente, definir alguns parâmetros no arquivo JNLP e colocar o pequeno código JavaScript no site, responsável por carregar o Applet Java. Todo esse processo é descrito a seguir. A. Pacotes JAR A tecnologia Java Plugin requer que todos os arquivos necessários à execução do aplicativo estejam compactados no formato JAR. Dessa forma, é necessário compactar toda a media da aplicação, bem como todos os binários necessários. Por exemplo, se uma determinada aplicação utiliza os arquivos “Modelos.zip” e “Texturas.zip” como fonte de media, basta colocá-los na mesma pasta, abrir o terminal e executar o comando: jar.exe cfv media.jar Modelos.zip Texturas.zip Assim é gerado o arquivo “media.jar”, contendo toda a media necessária à correta execução do aplicativo. Da D. Website Para publicar o aplicativo num website, é necessário colocar os arquivos JAR no servidor e carregar o Applet utilizando JavaScript, como o exemplo abaixo. <script src="http://www.java.com/js/deployJava.js"> </script> <script> var attributes = {code: 'Launcher.class', width: 1024, height: 480, archive: 'bin.jar'}; var params = {jnlp_href: aplicativo.jnlp', separate_jvm: 'true'} ; deployJava.runApplet(attributes, params, '1.6'); </script> VI. ESTUDOS DE CASO Como forma de avaliar as potencialidades deste framework, foram desenvolvidas algumas aplicações de RA e disponibilizadas na web. Os exemplos desenvolvidos incluem técnicas como skeleton animation, shaders e modelos 3D high-poly. Nos testes realizados, o aplicativo mostrou-se bastante robusto, rodando sem problemas no Windows XP, Vista e Seven, nos browsers Internet Explorer, Firefox, Opera, Safari e Chrome, em um computador Intel Pentium 4, com 2 GB de RAM, placa de vídeo GeForce 8400. A Figura 2 mostra um aplicativo de RA que exibe uma cena com vários modelos, somando mais de 50 mil polígonos. Adicionalmente, é aplicado um shader responsável por gerar o efeito de Ambient Occlusion em tempo-real. Nesse aplicativo específico, o computador do usuário precisa ter uma placa de vídeo com suporte a Vertex Shaders. Caso não tenha, uma mensagem é exibida indicando que o computador não cumpre a configuração mínima requerida. VII. CONCLUSÕES Nos testes realizados o aplicativo mostrou-se bastante eficiente, atingindo valores na faixa de 60 FPS. Este trabalho permite que aplicações de alta qualidade sejam distribuídas na internet de maneira simples, utilizando toda a capacidade gráfica do Ogre3D, tal como acesso à GPU, Shaders, Skeletal Animations, scene graph, etc. Como trabalho futuro, pretende-se expandir o framework adicionando outras bibliotecas que realizem funções específicas, como renderização de vídeo in-game, simulação de física e reprodução de áudio 3D posicional. Além disso, o Launcher precisa ainda ser melhorado para que fique completamente independente da aplicação que está sendo desenvolvida, de forma que os atributos necessários sejam passados como parâmetros no arquivo JNLP, evitando ter de alterá-los via código. O framework precisa ser portado para outras plataformas como Linux e Mac, pois o uso de Java com JNI depende da plataformaalvo. É necessário ainda fazer uma comparação entre dois aplicativos de realidade aumentada semelhantes, sendo um desenvolvido com FLARToolKit e ActionScript 3.0 e outro desenvolvido com o framework proposto neste artigo. Um exemplo de aplicação está acessível em www.waveit.com.br/svr2011. REFERÊNCIAS [1] Figura 2. Cena com mais de 50 mil polígonos utilizando shaders. A Figura 3 mostra um exemplo de RA desenvolvido com o framework, que faz uso de Skeletal Animation e Hardware/Software Skinning. Figura 3. RA com Skeleton Animation e Hardware Skinning. R. T. Azuma. “Recent advances in augmented reality,” IEEE Computer Graphics and Applications, 21:34–47, 2001. [2] M. D. Silva, E. S. Santos, W. V. Arantes, L. V. de O. Lima, A. Cardoso, E. Lamounier, “Uma proposta de um middleware para distribuição de realidade aumentada pela web como ferramenta de apoio para educação a distância,” VI Workshop de Realidade Virtual e Aumentada, 2009. [3] G. Junker, Pro Ogre 3D Programming, Apress, USA, 2006. [4] D. Wagner, D. Schmalstieg, “ARToolKitPlus for Pose Tracking on Mobile Devices,” Proceedings of XII Computer Vision Winter Workshop, 2007. [5] G. Bradski, A. Kaehler, Learning OpenCV: Computer Vision with the OpenCV Library, O’Reilly Media, USA, 2008. [6] Java Plugin Technology, Disponível em: http://www.oracle.com/technetwork/java/index-jsp-141438.html. Acesso em 11 de março de 2011. [7] G. Bradski, A. Kaehler, Java Native Interface: Programmer's Guide and Specification, Prentice Hall, USA, 1999. [8] Flash Player Penetration, Disponível em: http://www.adobe.com/products/player_census/flashplayer/. Acesso em 11 de março de 2011. [9] T. Farias, J. Lima, V. Teichrieb, J. Kelner. “Construção de Aplicações de Realidade Aumentada Utilizando Bibliotecas de Alto Nível,” Workshop de Aplicações de Realidade Virtual, Recife, pp. 1-4, 2006. [10] D. Schmalstieg, A. Fuhrmann, G. Hesina, Z. Szalavari, L. Encarnação, M. Gervautz, W. Purgathofer. “The Studierstube augmented reality project,” Teleoperators and Virtual Environments, vol. 11, issue 1, pp 32-45, 2002. [11] M. W. de S. Ribeiro. Arquitetura para distribuição de ambientes vituais multidisciplinares. PhD thesis, Universidade Federal de Uberlândia, 2006. [12] Deploying a Java Web Start Application, Disponível em: http://download.oracle.com/javase/tutorial/deployment/webstart/de ploying.html. Acesso em 11 de março de 2011.