Iniciando o Desenvolvimento em realidade mista com o UrhoSharp e Hololens

1_mNyCsGea-vDF2VTICM_L3w

Olá pessoal, tudo tranquilo?

Vocês já ouviram falar sobre computação holográfica?

Jarvis

Essa tecnologia do futuro já não está mais tão no futuro assim, e iniciar o estudo e desenvolvimento sobre algo tão novo pode ser uma tarefa bastante confusa. Como começar?, qual tecnologia utilizar?, quais outros conceitos eu devo me aprofundar?, o que é essa tal de Realidade Mista?… etc.

Realidade Mista: Pessoas interagindo com o comuptador e com o ambiente a sua volta, aliado à percepção desse computador no mesmo ambiente.

Existem diversas fontes de informação sobre o desenvolvimento para o Hololens e a maioria dessas fontes utilizam o Unity como ferramenta e engine. O desenvolvimento de uma aplicação holográfica é muito parecido com o desenvolvimento de um jogo onde o Unity é uma das principais ferramentas utilizadas e é sem dúvidas uma das melhores maneiras de começar, pois conta com muita documentação e muitos exemplos para o início de desenvolvimento, porém não é a única!

Essa é uma série de artigos onde vamos conversar sobre como iniciar o desenvolvimento de aplicações holográficas utilizando o Urhosharp desde o nível mais básico, até a criação de uma aplicação que possua modelos 3D animados, GUI 2D, comandos de voz, mapeamento espacial e reconhecimento do mundo através de serviços cognitivos. Nesse artigo inicial vamos aprender como iniciar um novo projeto para o Hololens usando o UrhoSharp e alguns conceitos básicos.

Urho3D e UrhoSharp

Quem não quer ver um Mutante dançando macarena na sua sala de estar?

O Urho3D é uma engine 3D e 2D para jogos com uma API em C++, totalmente open source que já está há mais de 10 anos ativa em desenvolvimento. Além disso, o UrhoSharp é um binding em C# adotado pelo Xamarin para trazer essa engine como motor que impulsiona os jogos Android e iOS desenvolvidos na plataforma.

Pois bem, eu como programador C# de longa data, me senti um pouco desconfortável com o fluxo de trabalho do Unity e resolvi dar uma olhada nessa alternativa um pouco mais direta do Urhosharp.

Em primeiro lugar, o que vamos precisar:

1- Windows 10 64-bit nas versões Pro, Enterprise ou Education
2- Visual Studio 2017 com a opção de Desenvolvimento para Universal Windows Platform instalada.
3- Hololens Emulator
4- Hyper-V habilitado (para usar o emulador do hololens)

Opcional:

1- Um amigo que trabalhe com modelagem e animação 3D (se não tiver, pode utilizar os modelos de exemplo disponíveis), ou curiosidade pra dar uma sofrida no Blender.
2- A engine Urho3D compilada com exemplos e ferramentas
3- Um Hololens, ou um device Mixed Reality Headset.

HelloMixedRealityWorld!

Verifique se todos os pré-requsitos estão instalados e funcionando.

Agora, a primeira coisa que precisamos pra começar a desenvolver é o template de projeto do UrhoSharp para o Hololens.

No Visual Studio, vamos Iniciar um Novo Projeto e nos templates vamos escolher a opção Online para baixar o template do UrhoSharp for Hololens:

Template do projeto do UrhoSharp para Hololens disponível para instalação.

Depois de algumas confirmações para a instalação do template, teremos nosso projeto criado com todas as dependências necessárias:

Estrutura do projeto criado pelo template

O template já vem com um código pronto bem interessante, que mostra um holograma com o planeta Terra e a lua girando em volta dele.

Então vamos compilar e executar esse código pra rodar no emulador. Pra isso, primeiro é necessário alterar a plataforma para x86, e o target para o Hololens Emulator:

Execute e após isso você irá visualizar a aplicação rodando no emulador:

Você poderá utilizar as teclas A,S,D,W,Q,E para simular a movimentação da sua cabeça, e as teclas de setas do teclado para simular suas pernas. ENTER e SPACE podem ser utilizados para simular o o gesto de pinça para selecionar ou segurar um objeto.

Pronto! Fácil, rápido, indolor.

Program.cs

A estrutura básica da aplicação já está no Program.cs. Temos nossa classe principal HelloWorldApplication derivando de StereoApplication, que já é uma classe do UrhoSharp, e que possui tudo que o hololens precisa:

· Uma cena
· Objetos de câmera (que representam seus olhos)
· Objeto de iluminação da cena
· Manipuladores de gestos
· Cortana
· Informações sobre a posição da cabeça do usuário
· Text to Speech
· Mapeamento espacial
· Etc.

Por si só, nossa classe HelloWorldApplication já é extremamente interessante para entendermos como tudo funciona alí dentro, então vamos começar por ela:

Método Start

Nesse método, temos tudo que acontece quando a aplicação inicia. É onde criamos o mundo inicial que vai ser apresentado ao usuário.

Vamos avaliar o que temos nesse método:

Primeiro, a criação do nó principal da Terra:

Todos os objetos dentro da cena são organizados em Nodes, cada node contém outros nodes que contém mais objetos, e cada um passa a ter sua posição e escala baseados no nó pai.

Algo importante é que estamos trabalhando com coordenadas de mundo real. Portanto, posicionamos o nó da Terra a 1.5 metros de distância do usuário e definimos a escala para que ela tenha 30cm de diâmetro. Isso é algo realmente interessante, já que é possível reproduzir um ambiente ou objetos em distâncias e tamanhos reais sem precisar de grandes cálculos.

Aqui nós podemos ver a criação de um componente dentro do nó da Terra. No nosso caso, esse componente é uma esfera, mas poderia ser um cubo ou um modelo animado baseado em um modelo 3D (ou até uma terra plana se esse for seu caso).

Definimos o Material que vai “envelopar” a nossa esfera da Terra baseado em uma imagem com a textura do planeta. Essa imagem está dentro da pasta Data/Textures:

Textura do planeta Terra

Na sequência, a mesma coisa deve ser feita para criarmos a Lua:

Aqui temos uma diferença: o nó da lua está sendo criado como filho do nó da Terra, e assim estando sujeito à escala e posição da Terra. Quando colocamos a Lua com 0.27 de escala, ela está no tamanho proporcional real de 27% do tamanho da Terra.

Agora só falta criar a animação:

Com esse código, estamos executando uma ação no nó da Terra (que inclui a lua), essa ação será repetida pra sempre (objeto RepeatForever) e executará uma rotação onde a cada segundo o nó da Terra gira 4 graus no eixo Y. Lembrando que o Urho3d utiliza o sistema de coordenadas de mão esquerda:

Sistema de coordenadas dos eixos X,Y e Z

Como a Lua está restrita à posição e escala do nó da Terra, ela também irá acompanhar essa rotação.

A última coisa no método Start é um comando de Text to Speech:

Esse comando simples vai fazer com que o usuário receba uma mensagem por voz, algo muito simples e essencial para passarmos uma mensagem ao usuário em um ambiente virtual.

Interações

Existe mais um método importante no código que realiza a manipulação via gestos (no caso, estamos usando o gesto de segurar e arrastar a Terra):

Antes de realizar a manipulação, é importante notar que o método OnGestureManipulationStarted vai armazenar em um Vector3 a posição atual do nó da Terra. Um objeto Vector3 no UrhoSharp representa uma posição no espaço com 3 eixos.

Durante a movimentação, somamos a posição original com a nova posição relativa da nossa mão enquanto estamos arrastando e atribuimos essa nova posição ao nó da Terra.

Como os vetores podem sofrer operações matemáticas, podemos realizar uma alteração nesse código para que a movimentação seja mais rápida:

Com isso, multiplicamos a posição relativa da mão por 2 e assim dobramos a velocidade com a qual a Terra é deslocada.

Corrigindo o problema da rotação da Terra

Da maneira como a aplicação está, temos um problema. A lua gira em volta da Terra na mesma velocidade que a Terra gira em torno dela mesma. Isso acontece pois a nossa animação está sendo aplicada ao nó da Terra, e a lua está dentro desse nó.

Vamos alterar essa rotação para que a Terra seja independente:

A primeira coisa que vamos fazer é criar um outro nó para representar a órbita da lua e depois, criar nosso nó da lua como filho dessa órbita:

Em seguida, vamos criar uma animação independente para a órbita:

Fazendo isso, ajustamos a rotação da Terra para que ela seja bem mais rápida, girando 50 graus negativos por segundo. Como o nó da orbita é filho do nó da Terra, nós criamos a animação da lua como 45 graus positivo, compensando assim a rotação da Terra, como podemos ver na animação abaixo:

Como bônus, ainda mantivemos todo o mecanismo da lua deixando-a com sua face gravitacionalmente travada à Terra, devido aos efeitos das marés que deixam sua rotação e translação sincronizadas ao nosso redor. Yeah, Science!

E finalmente, fazendo o deploy para o Hololens, esse é o resultado:

Muito legal né?

Então, por enquanto é isso!

Mais informações:

Windows Mixed Reality
UrhoSharp

No próximo artigo, vamos tornar tudo mais interessante, criando modelos 3D animados, trabalhando com os métodos de Update para verificar o status das ações e utilizaremos comandos de voz da Cortana para interação com nossos hologramas.

Até!

0 Gestei
0 Não gostei

Deixar uma resposta

Seu endereço de email não será publicado. Campos obrigatórios marcados com *