• Nenhum resultado encontrado

Câmera Estereoscópica para o Game Engine XNA

N/A
N/A
Protected

Academic year: 2021

Share "Câmera Estereoscópica para o Game Engine XNA"

Copied!
6
0
0

Texto

(1)

Câmera Estereoscópica para o Game Engine XNA

Guilherme Borges Machado de Campos, Tiago Ungaro Bardella, Luciano Silva

Laboratório de Processamento Gráfico e Mídias Digitais

Faculdade de Computação e Informática – Universidade Presbiteriana Mackenzie

gbmcampos@hotmail.com, breadtub2@hotmail.com, luciano.silva@mackenzie.br

Resumo. Estereoscopia refere-se a um conjunto de

técnicas utilizadas para se gerar a sensação de tridimensionalidade em imagens. Recentemente, técnicas de estereoscopia foram vinculadas aos jogos digitais, permitindo explorar novas formas de imersão dos jogadores. Infelizmente, a maioria dos game engines disponíveis em mercado não oferecem facilidades para utilização de técnicas estereocópicas na produção de um jogo. Dentro deste contexto, este trabalho projeta e implementa um framework para facilitar o uso de câmeras estereoscópicas no game engine XNA. O projeto do framework utiliza um alto nível de abstração, exigindo que o programador concentre-se apenas nos pontos de configuração mais importantes para a geração de imagens estéreo com distância entre câmeras. Para comprovar o funcionamento do framework, foram realizados testes com cenas estáticas e animadas.

Palavras-chave: Estereoscopia, Jogos Estereocópicos,

Implementação de Jogos, XNA, Jogos Digitais, Engenharia de Software.

I. INTRODUÇÃO

Imagens estereoscópicas são imagens que transmitem uma sensação de visão tridimensional, esse resultado é obtido por meio de uma técnica que cria duas imagens diferentes, uma para o olho esquerdo e outra para o outro direito, fazendo com que se crie uma sensação de profundidade na imagem, tornando-a mais realista. Para enxergar a imagem gerada, normalmente é necessário utilizar algum tipo de filtro como os óculos anáglifo, por exemplo.

A estereoscopia na área de jogos tem o objetivo de aumentar a imersão sentida pelo usuário, ou seja, tornar a experiência mais próxima do real. Esse tipo de experiência já é oferecida nos consoles portáteis no caso do Nintendo 3DS, por exemplo. Independente da técnica utilizada ou plataforma escolhida, a estereoscopia aplicada a jogos tem o propósito de aprimorar a visualização do cenário virtual do jogo. Embora a estereoscopia seja um requisito bastante almejado nos atuais jogos, os game engines, infelizmente, não conseguiram ser atualizados de tal forma a atender este tipo de requisito. Assim, o desenvolvimento de novas técnicas e frameworks para suporte à estereoscopia é de grande interesse tanto computacional quanto comercial.

Dentro deste contexto, o presente trabalho propõe e implementa um framework para estereocopia anáglifa para o game engine XNA. O projeto inclui uma abstração de alto nível, exigindo do programador apenas os parâmetros essenciais para geração de imagens estéreo como, por exemplo, distância entre as duas câmeras necessárias para a geração do par estéreo de imagens.

É importante ressaltar que ainda não foi criado um framework semelhante para o XNA e, portanto, abre novas possibilidades para desenvolvedores de jogos para Windows, XBOX, Windows Phone e Web com Silverlight, ambiente que suporta XNA. Como a arquitetura XNA é portável entre os diversos ambientes da família Windows, o framework proposto também herda esta característica.

O trabalho está organizado da seguinte forma: a seção II revisa os principais conceitos de estereoscopia, a seção III expõe o problema de jogos com estereoscopia, a seção IV detalha a proposta da câmera estereoscópica para XNA, a seção V mostra como integrá-la com XNA, a seção VI mostra os testes realizados (objetos estáticos e dinâmicos) e, finalmente, a seção VII apresenta as conclusões e trabalhos futuros.

II. ESTEREOSCOPIA

Segundo [1], a visão estéreo é um dos principais mecanismos que permite ao ser humano perceber a noção de profundidade. O olho esquerdo e o olho direito sempre vêem imagens diferentes, apesar de muito parecidas. O princípio de funcionamento da maioria dos dispositivos estereoscópicos é a projeção de imagens distintas aos olhos esquerdo e direito do observador, proporcionando sensação de profundidade.

A estereoscopia acrescenta a dimensão de profundidade às telas de projeção dos mundos virtuais e, consequentemente, torna-os mais próximos e realistas da forma que os usuários os vêem no mundo real no caso de aplicações de Realidade Virtual, permitindo visualizar objetos em terceira dimensão no mundo real no caso de aplicações de Realidade Aumentada. Na prática, ilude-se o cérebro humano produzindo artificialmente duas visões, uma para o olho direito e uma para o olho esquerdo.

Existem diversas formas de se conseguir o efeito da estereoscopia, por meio da estereoscopia passiva, estereoscopia ativa e a auto-estereoscopia.

(2)

De acordo com [3], o objetivo principal da imersão visual trata-se da visão tridimensional (ou seja, estereoscopia), tanto em termos de Realidade Virtual quanto de Realidade Virtual Aumentada. Da mesma forma que a palavra “estéreo” está ligada com áudio, a visão também pode ser estereoscópica, fazendo com que o espectador tenha uma impressão melhor sobre a qualidade e realidade da imagem que está observando.

[3] citam a existência de dois tipos de visão estéreo, a ativa e a passiva. Tanto uma quanto a outra usam óculos como filtro, diferenciando uma da outra através do tipo de filtro utilizado. Na categoria passiva, duas imagens são exibidas simultaneamente e os óculos tem a função de juntar essas imagens para o expectador. O exemplo mais simples e comum de estéreo passivo é o anáglifo (muito usado nos cinemas 3D de antigamente), em que seu filtro é feito por cores. O olho esquerdo deve enxergar apenas a cor vermelha e o olho direito deve enxergar apenas a cor azul, conforme é mostrado na Figura 1. Utilizando papel celofane da cor indicada para cada olho, é possível realizar este efeito.

Figura 1: Óculos anáglifo.

Dentre as vantagens dessa técnica, pode-se citar que: “necessita apenas de uma tela ou monitor para ser exibida”, “pode ser impressa” e “baixo custo, devido a simples confecção dos óculos”. Entretanto, a limitação de cores que são exibidas é uma perda muito significativa na estereoscopia aplicada.

Segundo [1] , na estereoscopia ativa os usuários utilizam óculos obturadores (shutter glasses), conforme mostra a Figura 2. Esses óculos são controlados, em geral, por sinal infravermelho. As lentes alternam entre dois estados, transparentes ou opacas, ou seja, quando o projetor exibe a imagem esquerda, os óculos fecham a passagem de luz para o olho direito, permitindo que a imagem referente ao olho esquerdo seja somente captada por ele, e vice-versa.

Figura 2: Óculos obturadores para estereoscopia ativa.

Uma das desvantagens desse sistema é o seu preço elevado. O preço do kit contendo um emissor e óculos sem fios também é alto. A maior vantagem é a qualidade, normalmente superior à projeção passiva.

Auto-estereoscopia, segundo [1], significa obter visão estereocópica sem a necessidade de nenhum dispositivo ligado ao corpo do usuário, como óculos ou capacetes. Existem vários sistemas autoestereoscópicos disponíveis no mercado, entretanto os principais fatores limitantes desta tecnologia são o custo e a quantidade de usuários que podem visualizar a projeção ao mesmo tempo, além do tamanho da tela. Os monitores com auto-estereoscopia baseiam-se em áreas de visualização que o usuário deve permanecer, fazendo com que uma imagem seja visível para o olho direito e outra para o esquerdo.

III. JOGOSCOMESTEREOCOPIA

Segundo [4], a evolução dos jogos eletrônicos pode ser melhor compreendida quando se observa, entre outras características, a qualidade dos gráficos e as diversas formas de interação proporcionadas pelos games atuais. A evolução dos processadores tem possibilitado aos fabricantes de jogos a utilização dessa tecnologia, com o objetivo de torná-los mais atrativos.

Nesse sentido, grande parte dos esforços de pesquisadores da área concentra-se em buscar meios de aumentar o nível de imersão dos jogadores. Recursos como a visão estereoscópica, têm se mostrado uma alternativa interessante.

Técnicas de estereoscopia podem ser aplicadas a jogos eletrônicos por meio de equipamentos mais sofisticados, por exemplo, óculos 3D que funcionam em conjunto com alguns modelos de placas gráficas. A Figura 3 mostra como a imagem de um jogo é vista por quem não utiliza os óculos 3D:

Figura 3: Imagem de um jogo 3D gerada por uma

(3)

A figura 4 mostra como a imagem de um jogo é vista por quem não utiliza os óculos anáglifos:

Figura 4: Imagem de um jogo 3D anáglifo.

Algumas APIs como DirectX3D e OpenGL possuem comunicação direta com o driver de placas gráficas que possuem chipset 3D.

Segundo a Nvidia [2], foram produzidos dispositivos gráficos com o intuito de que mesmo os jogos que não foram desenvolvidos com a finalidade de proporcionar ao jogador uma visão estereoscópica pudessem ser convertidos facilmente para essa tecnologia.

IV. CÂMERA ESTÉREO PARA XNA

A câmera passiva foi feita utilizando como base algumas classes do XNA. Foram utilizadas as classes

Effect, SkinnedEffect, ModelMesh, ModelMeshPart, GraphicsDevice e a classe ContentManager, além das estruturas Matrix e Vector3 com o intuito de auxiliar na implementação.

A classe StereoCamera foi desenvolvida para auxiliar na utilização da câmera estereoscópica e usa alguns métodos das classes citadas acima para que o efeito 3D aconteça. O diagrama de classes do projeto pode ser observado na Figura 5, no final desta página.

Basicamente a StereoCamera funciona coletando informações da localização da câmera padrão do jogo para que a classe possa criar outras duas imagens idênticas, porém separadas por uma distância específica da imagem original.

A diferença do objeto original e dos objetos criados fica por conta da cor empregada neles, o objeto deslocado à esquerda do original tem a cor vermelha enquanto que o objeto deslocado à direita do original tem a cor ciano. A relação da classe StereoCamera com as classes do game

engine XNA citadas anteriormente e com o a classe

Game, que utiliza a câmera para produzir o efeito 3D.

Figura 5: Diagrama de classes entre a classe StereoCamera, as classes do game engine XNA e a classe Game que receberá o efeito 3D.

(4)

A classe StereoCamera possui o método LoadEffects, que tem como função abstrair o carregamento dos shaders na pipeline. A quantidade de shaders pode variar, sendo pelo menos três para cada modelo na cena (o shader que retorna a textura normal, o que retorna a textura em nível de ciano e o shader que retorna a textura em nível de vermelho) se ele possuir apenas uma textura. Além disso, o LoadEffects também armazena as texturas do diretório (ou diretamente do modelo, no caso de um modelo dinâmico) para passar essa informação aos shaders quando for desenhar os objetos em efeito de par estéreo.

O método LoadCameras armazena a matriz de projeção informada pelo programador que está utilizando a câmera estéreo e os dados necessários para construir uma matriz de view dentro do próprio método LoadCameras. Cada câmera uma das três câmeras (esquerda, direita e central) terá sua matriz de projeção e matriz de view calculadas por este método, posicionando-as corretamente na cena para aplicar o efeito 3D em termos de posicionamento.

Por fim, o método Draw da classe StereoCamera recebe as informações de texturas, shaders e posicionamento das câmeras efetuadas por LoadEffects e LoadCameras para apresentar os modelos na tela com o par estéreo, também abstraindo do programador o algoritmo necessário para exibir os modelos.

V.

INTEGRAÇÃO COM O XNA

Para integrar a câmera estereoscópica passiva em um jogo no XNA, é preciso colocar os arquivos de shaders e a classe StereoCamera em um game content do jogo e realizar os seguintes passos:

Criar uma nova instância de StereoCamera: isto pode ser feito com o seguinte comando na classe principal do jogo:

StereoCamera passiva = new StereoCamera(this);

Uma instância de StereoCamera será criada no objeto “passiva”, passando o jogo atual (no caso, this) para o construtor da classe, pelo fato desta classe ser um game content do jogo principal.

Carregar os efeitos na pipeline usando o método LoadEffects, através do comando

passiva.LoadEffects(Content, same, cyan, red, mesh, texturas);

e passando o ContentManager para carregar os efeitos, a lista de efeitos (same, cyan e red), o ModelMesh do modelo e a lista de texturas do modelo. Esse procedimento deve ser feito para cada modelo do jogo que deseja gerar um par estéreo e é

recomendado ser feito em LoadContent do jogo, pois ele só precisa ser feito uma vez durante todo o jogo.

Atualizar posicionamento do modelo na câmera com LoadCameras. Para criar as câmeras estereoscópicas (esquerda, direita e central), é recomendável chamar o método

passiva.LoadCameras(projection, translation, rotY, rotX, cameraPosition, cameraTarget, cameraUpVector);

dentro do método Draw da classe principal do jogo, pois a posição da câmera pode variar durante o jogo, necessitando ter seu posicionamento atualizado durante a execução do programa.

Desenhar modelos vistos pela câmera estereoscópica usando Draw.

A classe StereoCamera também possui um método chamado Draw. Ao contrário do método da classe do jogo, este método desenha na tela o modelo escolhido usando estereoscopia passiva pelo uso das informações colhidas anteriormente pelos seus outros métodos. Isso pode ser feito usando o comando passiva.Draw(same, cyan, red, texturas, graphics); para modelos estáticos e passiva.Draw(same, cyan, red, bones, texturas, mesh); para modelos dinâmicos.

VI.

TESTES

Para testar a funcionalidade da câmera estereoscópica passiva em modelos estáticos, foi utilizada uma variação de um modelo pronto de um cubo, Microsoft (2012, a). Para facilitar os testes realizados, foram realizadas rotações e alterações na textura original para deixá-la branca com contornos em preto, e o fundo em branco. Anteriormente, com o cubo mapeado com uma textura completamente branca e a rotação padrão do modelo, os efeitos 3D gerados não ficavam tão evidentes como quando contornados em preto.

A Figura 6 demonstra como o cubo alterado aparentava antes da aplicação da câmera estéreo:

(5)

Para gerar um par estéreo a partir do framework, alterações com relação à rotação da câmera que representa as imagens em ciano e vermelho foram feitas para que os óculos filtrassem melhor a imagem.

Todavia, os canais apresentavam texturas muito opacas e que sobrepunham umas nas outras, dificultando a visualização do par estéreo. O canal alfa dos shaders foram abaixados, deixando as texturas mais transparentes e sobrepondo umas as outras, facilitando a percepção do efeito gerado pela câmera passiva. A Figura 7 apresenta o efeito final gerado pela câmera estereoscópica usando como exemplo o cubo acima.

Figura 7: Cubo depois da aplicação da câmera estéreo.

Em termos de jogos, não é possível depender apenas de modelos estáticos. Por isso, a câmera estereoscópica deveria proporcionar um efeito aceitável para modelos dinâmicos além dos estáticos. Para isso, uma variação do modelo animado retirado de Microsoft (2012, j) contribuiu para apresentar a câmera estereoscópica passiva em modelos dinâmicos. No caso deste modelo de exemplo, apenas o fundo da tela foi alterado para a cor branca, para facilitar a visualização do efeito gerado. A Figura 8 mostra como o modelo era antes da aplicação da câmera estéreo:

Figura 8: Modelo visto de frente antes da aplicação da

câmera estéreo.

Para a câmera estéreo aceitar um modelo dinâmico, algumas alterações foram necessárias. A textura embutida

no modelo (em SkinnedEffect) teve que ser extraída dentro de LoadEffects para abstrair do usuário o carregamento desta textura na pipeline. Além disso, o modelo dinâmico é separado por partes. Portanto, é preciso carregar as texturas de cada parte individualmente para cada câmera gerada.

A animação do personagem em relação à câmera apresentou normalidade com o mesmo código dos modelos estáticos. Os mesmos testes efetuados para o modelo estático foram feitos no modelo dinâmico, e além destes, uma alteração na distância entre uma câmera e outra foi realizada para calcular a visibilidade em questão de distância, entretanto esta distância pode variar de tamanho de acordo com a distância dos olhos da pessoa que está olhando o modelo.

A Figura 9 mostra como o modelo de exemplo para objetos dinâmicos aparenta após a aplicação do framework:

Figura 9: Modelo visto de frente depois da aplicação da

câmera estéreo.

Para uma visualização mais efetiva, o modelo foi rotacionado para os seus pés, que ficam mais próximos da câmera. A Figura 10 mostra os pés do modelo dinâmico.

Figura 10: Modelo visto de baixo depois da aplicação da

(6)

A imagem anterior apresenta uma qualidade do efeito 3D visualmente superior ao modelo visto de frente devido a uma distância maior do objeto em relação à câmera.

VII.

CONCLUSÕES E TRABALHOS FUTUROS

A visão estéreo é um dos mecanismos mais importantes para proporcionar uma noção de profundidade para o ser humano, melhorando assim a qualidade e realidade da imagem apresentada. Para realizar este efeito, duas imagens devem ser exibidas; sendo uma para o olho esquerdo e outra para o olho direito, ludibriando assim o cérebro. Na área de jogos, a estereoscopia é uma alternativa interessante para proporcionar uma maior imersão nos jogos, já que a proposta da estereoscopia é aumentar a qualidade e realidade das imagens. Videogames (como o Nintendo 3DS) e game engines (como a CryEngine 3) foram criados vislumbrando um crescimento desta área no mercado.

Este trabalho projetou e implementou um framework utilizando a game engine XNA para auxiliar os programadores na introdução de estereoscopia anáglifa em seus jogos. O usuário do framework deve passar como informação o modelo que será utilizado (podendo ser tanto estático como dinâmico), as texturas utilizadas, e a posição que o objeto se encontra na cena. A câmera estéreo abstrai as informações do cálculo efetuado para o usuário e gera com simplicidade um par estéreo com apenas quatro linhas de código, facilitando assim a implementação de estereoscopia em jogos feitos no XNA. Como a estereoscopia está ganhando um espaço muito importante no mercado de jogos e em geral. A imersão visual proporcionada por imagens estéreo é maior que a imersão de imagens que não são estéreo. Com este framework, será possível ajudar programadores que queiram implementar um jogo usando estereoscopia sem necessitar um conhecimento aprofundado de como a estereoscopia funciona na teoria ou a necessidade de implementar uma câmera estéreo desde o começo. A abstração gerada pelo framework e a sua simplicidade de utilização dentro do game engine XNA torna este projeto uma alternativa útil, prática e eficaz para estes programadores de jogos.

Todavia, o framework da câmera estéreo não poderá ajudar se o programador necessitar de uma estereoscopia ativa, ou auto-estereoscopia em jogos, pois toda a lógica de programação do framework é feita baseada na técnica de estereoscopia utilizando anáglifo. Além disso, a aplicação só poderá ser aproveitada dentro do SDK XNA, pois utiliza de classes e métodos deste game engine. E, mesmo tendo sido produzida em XNA.

Como trabalho futuro, uma sugestão para melhorar a câmera estéreo seria aumentar sua funcionalidade para que ela também aceitasse geração de modelos em estéreo ativo em XNA. Algumas alterações nos shaders com relação aos pixels da textura e threads que alteram entre a exibição das imagens visualizadas por cada olho são sugestões para complementar este framework.

Outra sugestão para trabalho futuro, é implementar e testar a câmera estereoscópica em Windows Phone 7, aproveitando que o XNA já fornece suporte para implementações neste dispositivo mobile. Para dar início neste projeto, pacotes específicos e funcionalidades do Windows Phone 7 já embutidas no XNA deverão ser usadas e, provavelmente, a distância entre as câmeras estéreo alterada para proporcionar uma visualização melhor do efeito 3D, levando em conta que a tela do celular é muito menor em comparação com a tela de um computador.

VIII.

REFERÊNCIAS BIBLIOGRÁFICAS

[1] KIRNER, Claudio ; SISCOUTTO, Robson. Realidade

Virtual e Aumentada: Conceitos, Projeto e Aplicações. Livro do

Pré-Simpósio IX Symposium on Virtual and Augmented Reality. Petrópolis, RJ, 2007.

[2] Nvidia (2011). 3D Vision. Disponível em: http://www.nvidia.com.br/object/3d-vision-3d-games-br.html. Acesso em: 20/11/2011.

[3] RAPOSO, Alberto B. ; SZENBERG, Flávio ; GATTASS, Marcelo ; CELES, Waldemar. Visão Estereoscópica, Realidade

Virtual, Realidade Aumentada e Colaboração. Departamento de

Informática, PUC-Rio. Rio de Janeiro, RJ: Tecgraf, 2004.

[4] TOMOYOSE, Alexandre et. al. Integração da Estereoscopia

à Mecânica dos Jogos. Interlab – Laboratório de Tecnologias

Interativas. Escola Politécnica – Universidade de São Paulo (USP). São Paulo, SP, 2009.

Referências

Documentos relacionados

A presente garantia é aplicável somente para produtos adquiridos e utilizados no Brasil e não se estende a produtos que não tenham sido operados de acordo com as instruções de uso

Nas bases de dados SciELO e LILACS foram utilizados os descritores indexados no Descritores em Ciências da Saúde (DeCS terms) e foi realizada a seguinte estratégia: zumbido AND

Segundo o grupo europeu de interesse em hipersensibili- dade a drogas (European Network for Drug Allergy – ENDA) da Academia Europeia de Alergia e Imunologia Clínica, são quatro

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

Foi apresentada, pelo Ademar, a documentação encaminhada pelo APL ao INMETRO, o qual argumentar sobre a PORTARIA Nº 398, DE 31 DE JULHO DE 2012 E SEU REGULAMENTO TÉCNICO

Neste trabalho avaliamos as respostas de duas espécies de aranhas errantes do gênero Ctenus às pistas químicas de presas e predadores e ao tipo de solo (arenoso ou

O objetivo desta pesquisa é verificar onde o autor de Hebreus se refere ao sumo sacerdote no Lugar Santíssimo do santuário, e se essa referência está sempre vinculada ao Dia da

Escolha uma opção: Verdadeiro Falso Questão 8 Incorreto Atingiu 0,00 de 0,50 Marcar questão Texto da questão. O cadastro nacional de pessoa jurídica (CNPJ) é o registro de um