jeKnowledge
jeKnowledge
Notícias

UniVRse – Realidade Virtual na jeKnowledge

Na jeKnowledge celebrou-se, mais uma vez, a Demo Day, onde os estagiários apresentam os seus projetos, desenvolvidos ao longo do mês anterior, antes de serem (ou não) aceites na júnior empresa.

O meu nome é Miguel Murça, sou aluno do 1º ano de Física na Universidade de Coimbra, e fui um desses estagiários. Eis a minha apresentação (É sobretudo técnica, o produto final é mostrado a 1:50).

Keep Talking and Nobody Explodes
O desafio que me foi feito foi simples: pegar no Oculus Rift, “óculos de realidade virtual”, e construir uma experiência que os envolvesse.

O ponto de partida foi o jogo Keep Talking and Nobody Explodes, um dos mais bem sucedidos jogos para realidade virtual. Nele, apenas um dos jogadores, utilizando o Oculus, consegue ver uma bomba, cujos módulos complexos tem de desarmar. No entanto, o manual (tanto ou mais complexo) apenas está disponível para os restantes jogadores, resultando em, sobretudo, gritos, a fim de tentar desarmar a bomba a tempo.

Comecei então a procurar reproduzir os dois fatores que tornam o jogo tão próprio: por um lado, mais obviamente, incentivar a interação social. Por outro lado, tentar integrar o mundo virtual no mundo real, criando consequências no primeiro das ações feitas no segundo. Explosões também.

Cheguei assim à primeira ideia concreta: um dos jogadores, munido do Rift, orientaria um segundo jogador que, com uma consola, guiaria a nave virtual a transportar ambos.

image01

Consola = Seca
No entanto, este design levantava problemas. Para além da óbvia falta de originalidade , o jogo arriscava-se a ser terrivelmente aborrecido para uma das partes, ou mesmo para as duas, ao fim de algum tempo, se o conteúdo fosse escasso. Por outro lado, implicava um nível e quantidade de conteúdo para o qual muito possivelmente não teria tempo de produzir, tendo em conta a deadline de um mês e o caráter tridimensional.

(“Fazer conteúdo 3D não há de ser assim tão difícil”: Imagina um triângulo. Agora olha pela janela. Agora imita a paisagem, usando só triângulos.) Estes fatores resultaram numa degeneração do projeto para uma forma mais simples (que viria a ser a final): apenas um jogador (imediatamente implicando um ritmo mais lento) alternando entre o ecrã do seu PC e o universo a que tem acesso através do Rift.

Comprometendo-me com algo mais ao estilo Stop and smell the roses, e mantendo-me na temática do espaço (que, por alguma razão, parece ser um tema recorrente nos meus projetos), acabei por chegar a um conceito definitivo: um jogador, utilizando uma consola no seu ecrã e comandos à la Unix, cria um universo dinâmico seu, em que se pode imergir, utilizando o Oculus Rift.

Chamei-lhe VeryReal e, mais tarde, UniVRse.

/$$ /$$ /$$ /$$ /$$ /$$$$$$$
| $$ | $$ |__/| $$ | $$| $$__ $$
| $$ | $$ /$$$$$$$ /$$| $$ | $$| $$ \ $$ /$$$$$$$ /$$$$$$
| $$ | $$| $$__ $$| $$| $$ / $$/| $$$$$$$/ /$$_____/ /$$__ $$
| $$ | $$| $$ \ $$| $$ \ $$ $$/ | $$__ $$| $$$$$$ | $$$$$$$$
| $$ | $$| $$ | $$| $$ \ $$$/ | $$ \ $$ \____ $$| $$_____/
| $$$$$$/| $$ | $$| $$ \ $/ | $$ | $$ /$$$$$$$/| $$$$$$$
\______/ |__/ |__/|__/ \_/ |__/ |__/|_______/ \_______/

Agora a Coisa Fica Técnica

Utilizar o Oculus Rift implicava fazer modelos 3D, e colocá-los num espaço 3D. Infelizmente, não sou especializado a criar em (ou utilizar) três dimensões, e muito menos tenho as capacidades técnicas para implementar algo tão sofisticado como o Oculus Rift num engine 3D com código meu, pelo que era necessário, obviamente, não o fazer.

Sabendo que o projeto teria de ter sempre um aspeto bidimensional, em relação à consola, decidi cingir-me ao que já conhecia bem, HaxeFlixel, e tentar fazer o Oculus funcionar com um qualquer engine 3D já existente, como BabylonHx. Infelizmente, Haxe (e toda a tecnologia e código associados) ainda é relativamente recente, pelo que não encontrei nenhuma implementação pronta (nem por acabar) de Oculus em Haxe. Cedi, e decidi usar Unity.

Era, ainda assim, a escólha óbvia e lógica (estando a ler este artigo é provável que já lhe tenha ocorrido): facilita o trabalho com modelos 3D, retira a necessidade de grande parte do código, vem preparado para basicamente tudo e, sobretudo, vem VR-ready (é só ligar o Oculus). Em suma, tudo já feito.

Não quis, no entanto, desistir do uso de Haxe. É bem sabida a dor de criar conteúdo bidimensional no Unity, especialmente menus, (embora, em sua defesa, as ferramentas para esse fim tenham maturado visivelmente ao longo dos últimos tempos,) e criar uma consola com bom aspeto e facilmente extensível seria muito difícil, com o pouco conhecimento que possuía. Para além disso, tinha já um protótipo de consola a funcionar em Haxe, utilizando uma biblioteca que encontrara online, DConsole:

image02

A biblioteca vinha com uma série de vantagens (exibidas no vídeo), a principal das quais sendo o registo muito fácil de novos comandos, com o parsing do input do utilizador já feito.

Tornava-se agora, então, uma questão de conseguir integrar estas tecnologias umas com as outras.

Sockets, Networking, e Outras Palavras Desagradáveis

O único método que me ocorreu para conseguir ligar Unity a uma aplicação Haxe seria criar uma ligação local, como se se tratasse de uma ligação online, e trocar dados através da mesma.

Como já mencionei antes, Unity está preparado para um leque de situações, sendo ligações online e troca de dados uma delas (através de uma API que abstrai, espantosamente, o processo). Infelizmente, mas como seria de esperar, esta solução apenas funcionaria se se tratasse de ligações Unity-Unity, pelo que foi preciso escrever a minha própria solução, com sockets. Mais ou menos.

Haxe inclui, na sua biblioteca standard, a classe ThreadServer, que simultaneamente abstrai alguma da lógica por detrás das ligações e, ao mesmo tempo, corre a ligação em paralelo, corretamente (thread-safe) (que no que toca a operações em paralelo é qualquer coisa). Era então só necessário preparar o programa para lidar corretamente com novas ligações (de que assumi serem sempre de uma única aplicação Unity, sem ligações concorrentes), isto é, registar os comandos de criação apenas quando a aplicação está ligada, e abstrair o envio de mensagens, para integrar na consola. Por outro lado, C# (que utilizei para scripting em Unity) suporta também sockets, apesar do seu uso ser ligeiramente mais complicado. Felizmente a sua sintaxe era parecida com a de Haxe. Tudo o resto (especialmente no que toca a código) está no vídeo, mas resumidamente, eis um esquema de como a informação se distribui:

image04

Arte

Consola pronta, comandos registados, networking a funcionar, mensagens enviadas, recebidas e percebidas. Faltava só ter alguma coisa para criar.
Debati-me desde o início com criar algo tridimensional. Qualquer modelo imperfeito teria um impacto gigante na imersão (como criar um modelo aceitável de um planeta que pode ser visto de perto?), mas, pior do que isso, teria de ser eu a fazer os modelos.

A solução foi não fazer. Em vez disso, procurei, desde o início, criar um falso 3D, utilizando imagens bidimensionais, e utilizando código que desse a perceber ao utilizador que eram, efetivamente, planos.

No fundo, imitar o jogo Ananke, pelo ultra-talentoso Oddly Shaped Pixels:

image00

Com base neste princípio, criei quatro objetos: uma terra, uma lua, um asteroide e um sol.
Adicionei ainda, numa fase mais tardia do projeto, uma skybox de um universo, apenas para dar alguma cor e profundidade ao espaço.

Produto Final

O resultado foi uma experiência que, apesar de simples, é divertida e cumpre plenamente o que pretendia no ínicio do projeto: refletir ações do mundo real num mundo virtual. Em suma, criei algo novo, e fiquei satisfeito com o resultado. A prova:

image03

O novo Manual de Acolhimento da jeKnowledge

No último Demo Day [25/11] apresentei o meu projeto de estágio que consistiu no redesign do Manual de Acolhimento da jeKnowledge. Foi um desafio gratificante, onde o meu foco não era só atualizar o manual, como também torná-lo mais funcional, acolhedor e apelativo, utilizando um estilo tipográfico de fácil leitura.

Depois dos objetivos bem definidos e de um Brainstorming consolidado com as palavras que mais caracterizam a jeKnowledge, comecei a desenvolver uma grelha composta por 27 colunas verticais, onde duas delimitam o texto e uma horizontal delimita o início do conteúdo. Assim construí um sistema de distribuição de conteúdos em páginas, para que ao introduzir imagens, o texto continuasse como uma substância coerente e distribuída ao longo dos espaços do documento.

1grelhaTexto

Cores

Quando pensamos em jeKnowledge surge-nos uma ideia de cor, que não podia ser posta de parte neste manual.

A jeKnowledge já conta com uma palete de cores e agora podemos dizer que conta com mais uma. Esta nova cor surgiu para ser a cor predominante ao longo do manual, mas ao mesmo tempo mantém a coerência com a palete de cores existente. Assim, com o auxilio de cores neutras, preto e branco, criei um novo azul, num tom escuro e discreto.

2cores

Paredes da B3

Um pormenor que salta à vista nos Headquarters da jeKnowledge são as paredes repletas de informações, fotografias, cartazes e logos. Cada vez que entramos na B.3 descobrimos um detalhe novo que desconheciamos. A meu ver esta característica não podia ficar fora do manual. Decidi então recriar, na primeira página, este detalhe através de uma grelha com fotografias, fazendo assim uma analogia com o retrato das paredes da B.3, onde surgem as cores da jeKnowedge e a forma divertida de colocar as informações.

Fotografias

O manual deverá traduzir o facto da jeKnowledge não ser uma empresa monótona. Para tal o manual terá que ser cativante e transmitir o que é a jeKnowledge, assim as imagens são fundamentais neste processo, devendo refletir o ambiente inovador que se encontra nesta Júnior Empresa.  

As imagens do manual foram processadas em Photoshop, utilizando a técnica Bitmap, numa escala de cinza de forma a que se pudesse conjugar com o resto das cores da Júnior Empresa.

3fotografiasBitmap

B3

Para tornar o manual mais dinâmico nasceu então a B.3, uma mascote, feita em Illustrator, com função de dar dicas ao longo do manual e ao mesmo tempo receber as pessoas de uma forma simpática e agradável.

Encontrar esta solução talvez tenha sido a tarefa mais complicada, porque fiz inúmeros estudos de possíveis alternativas até chegar à ideia final. No entanto, o manual ainda não se encontrava totalmente completo, deste modo além da B.3 criei também um grupo de amigos para aumentar a sua dinâmica.

Realizar os estudos para a B.3 e os seus amigos foi o que mais gostei de desenvolver neste projeto, devido aos pormenores que estão presentes nestas mascotes:

– Olhos com a cor da jeKnowledge;
– Camisolão da Empresa;
– As meninas, no cabelo apresentam um elástico e um gancho que contém as cores dos departamentos

4b3Fofinha

5amigosB3

Tornar algo que por vezes passa despercebido em algo que marca, nem sempre é tarefa fácil, mas quando exploramos criativamente todos os pormenores e simplificamos o conteúdo, o produto torna-se essencial. Não basta só design, mas sim o design certo.

A essência da jeKnowledge em 4 parágrafos

Foi-nos pedido um artigo focado na nossa essência e decidimos transmitir um pouco mais sobre o que nos torna diferentes. Primeiramente, consideramos que a jeKnowledge é uma Júnior Empresa especial — somos diferentes e não temos medo de o admitir. Assim, a nossa essência baseia-se em sermos diferentes por natureza e ambiciosos por opção.

Desde a fundação da jeKnowledge em 2008 que a nossa prioridade é aprender e inovar. Deixamos a burocracia e os fatos à porta, e dedicamo-nos a criar experiências únicas. Seja com software de qualidade ou com eventos únicos, deixamos a nossa marca em tudo o que tocamos e procuramos a perfeição nas nossas criações.

Aquando da nossa fundação, eramos um grupo de cerca de 20 estudantes de diversos cursos da Faculdade de Ciências e Tecnologia de Coimbra. Com o tempo crescemos naturalmente e sem pressa, procurando sempre o melhor talento da Universidade de Coimbra. Atualmente, contamos com cerca de 40 associados e uma rede de mais de uma centena de alumni.

Em termos daquilo que ambicionamos para o nosso futuro, temos várias ideias no que toca a mais eventos, hacks de hardware e software inovador. No entanto, o nosso futuro são as pessoas que se juntarem a nós, e nelas depositamos total confiança para inventarem a jeKnowledge todos os dias.