Por que muitas experiências VR fazem o “Snap Turn” de forma errada?

Por que muitas experiências VR fazem o “Snap Turn” de forma errada?

É muito comum usuários relatarem que dentro de uma experiência em Realidade Virtual,  ao se teletransportarem e virarem para ajustar melhor sua visão, acabam atravessando paredes e caindo em uma queda infinita.

Este é um bug descrito em vários desenvolvimentos, em diversas experiências em VR. Foi então que Luis Zanforlin, desenvolvedor e criador de conteúdo na MakuXR decidiu investigar o que acontece para que ocorra esse interessante fenômeno do “Snap Turn”.

Afinal, o que é Snap Turn?

Segundo Zandforlin, movimentar-se dentro da Realidade Virtual é algo complexo, pois isso frequentemente envolve dois tipos de movimentações, aquelas que seu corpo da vida real faz, e aquelas outras que se faz apertando botões em controles/joysticks. Então como isso funciona? Imagine que você está sentado no fundo de um ônibus. Quando você caminha até a frente do ônibus, você se desloca dentro de um espaço físico, e atravessa parte da sua jornada. Andar dentro de um ônibus é o tipo de coisa que acontece quando você está usando um Headset VR. Você se movimenta ao mesmo tempo no mundo real e do mundo virtual, e assim como no ônibus, o espaço que você pode se mover é limitado. Enquanto o ônibus se movimenta pelo mundo, você também está atravessando o mundo, exceto que nesse caso, o motorista do ônibus está fazendo todo o trabalho. Logo estar em um ônibus em movimento é equivalente ao pressionar um botão no seu joystick e mover se pelo mundo virtual enquanto ainda está no mesmo lugar no mundo real. Na Realidade Virtual, nós chamamos o ônibus de “rig”. Então o que acontece quando você quer vira-se dentro da experiência virtual? O mesmo ainda se aplica, você pode rodar seu corpo real para ver o que está atrás de você no mundo virtual, mas por conta da maioria dos headsets terem longos cabos encaixados neles, você não pode rodar rapidamente, pois logo se veria todo enrolado em fios. A alternativa então é rodar o ônibus inteiro, em 45 graus, em um único apertar de botão. Nós chamamos isso de “snap turn”, e este sistema de locomoção pode ser encontrado na maioria dos títulos mais populares produzidos em VR.

O fenômenos do “snap turn”

Então por que essas viradas fazem os usuários caírem em abismos no mundo virtual? Quando Zandforlin programou o “snap turn” em Gaia, uma experiência em VR desenvolvida por ele, simplesmente setou que o ônibus virasse 45 graus quando o jogador movesse o joystick para esquerda ou para direita. Se o jogador estivesse exatamente no centro do Rig (ou ônibus) quando fizesse o snap turn, ele já teria feito a rotação no mundo virtual, mantendo-se na mesma posição. O problema acontece quando o jogador anda com seu corpo real para a beira do seu “ônibus” e então faz o snap turn. O ônibus gira em seu eixo, mas o jogador não está mais no centro, então ele gira mesmo assim, tendo sua posição também alterada. fazendo que seu corpo acabe entrando dentro de uma parede virtual.

Por que isso é tão comum? 

Então por que muitos dos games e desenvolvedores VR estão fazendo isso errado? Luis acredita que isso tem a ver com o fato da maioria dos programadores desenvolverem seus sistemas VR em cadeiras giratórias no centro do rig (ônibus). Então quando eles testam o “snap turn” faz parecer que eles giraram em volta de sua cabeça. Mas nem todos estão sempre sentados por toda a experiência. O outro fator pode ser o fato de muitos programadores, incluindo ele, criarem mundos “send box” para desenvolverem seus sistemas de locomoção. Estes mundos são ambientes cheios de rampas e obstáculos para testar a funcionalidade do deslocamento, mas geralmente são espaços amplos em que é improvável que o testador acabe próximo de uma parede e se transforme em um vazio no mundo virtual.

 

A Solução

Quando Zandforlin desenvolveu o snap turn, isso não poderia ser simples como apenas rotacionar o Rig, ele adicionou outra solução fácil e intuitiva. Ele resolveu rotacionar em 3 passos. Primeiro ele gravou as coordenadas da cabeça do jogador antes dele ativar um “snap turn”. Então aplicou a rotação. E finalmente ele pode reposicionar o ônibus para que a cabeça do jogador estivesse no ponto original que ele registrou. Tudo em um piscar de olhos. Ele pensou que no passo final de mover o Rig para uma posição que a cabeça do jogador não envolvesse algo como gravar a distância entre o jogador e o centro do ônibus, o que chamaremos de “P”, e movendo o ônibus para o lugar desejado subtraindo o valor de “P”. Esse então se tornou o cálculo básico que ele teria para desenvolver o sistema de teletransporte em Gaia.

 

 

Mas quando ele começou a desenhar o sistema em um quadro, ele rapidamente percebeu que aquilo seria mais complicado do que imaginava. Então ele desenhou os três passos, gravando a posição inicial, rodando o ônibus, e movendo o ônibus, mas não importava como ele olhava aquilo, ele não conseguia encontrar uma fórmula consistente que pudesse mover o ônibus para a localização que funcionasse para ambos na rotação horária e anti-horária. A solução deveria ser algo mais profundo, alguma forma que a

rotação dependesse do eixo que executaria todas as etapas em um simples gesto. Algo matemático. Foi então que ele se deparou com o simples código de comando chamado “RotateAround” que teria como objetivo rotacionar um objeto (o ônibus) e a posição do eixo de rotação (a cabeça do jogador)  e em único passo mágico, ele gira o jogador mantendo sua posição.

 

Sendo bem honesto, Luis assume que não sabe exatamente o que o comando “RotateAround” faz exatamente dentro do código. Rotações virtuais são baseadas em quaternions matemáticos não intuitivos de abstrações de ângulos e eixos e ele nao encontra uma solução. Assumindo que uma das coisas que ele mais ama sendo um programador é que nem sempre uma solução precisa ser entendida, você apenas precisa saber como usá-la. Ele diz que se tem alguma ideia sobre a  experiência de desenvolver um bom sistema de retorno rápido, é que as coisas simples costumam ser mais difíceis de construir do que parecem, alguns problemas bem difíceis podem ter soluções fáceis, e as vezes programar bem é mais sobre entender essas descobertas do que entender o código em si.

 

Gostaram de entender mais um pouco sobre um dos grandes desafios que enfrentamos ao produzir nossas experiências em Realidade Virtual? Assim como o Zanforlin, vivemos em buscas de soluções que tragam experiências cada vez mais polidas e imersivas.

Caso tenha alguma dúvida específica, ou deseja desenvolver seu projeto em VR, entre em contato conosco que teremos o prazer de encarar nosso novo desafio 🙂