Head Tracking no framework ViRAL Thiago Bastos, Maio de 2006 Objetivos do Trabalho • Implementar (no ViRAL) head tracking para sistemas de projeção em telas planas. – Pode ser usado em sistemas Surround-Screen (e.g. uma CAVE), Head-Mounted Displays e FishTanks. – Não pode ser usado em telas curvas, a menos que o nível de distorção seja tolerável (como nos HMD’s). • Desenvolver uma aplicação de testes utilizando o Flock of Birds. Head Tracking • Consiste em rastrear a posição e a orientação da cabeça do usuário no mundo real.... • ... e então usar essas informações para calcular matrizes de view e projection para cada tela de projeção de um sistema de RV. • Absolutamente necessário em sistemas de RV imersivos: – Permite que a visão (câmera) acompanhe os movimentos do usuário no mundo real. – Permite a correção de distorções nas projeções (e.g. quando a posição do usuário em relação à tela não forma um frustum simétrico). – Permite o cálculo correto de projeções stereo. Cenário 1: CAVE Cenário 2: Head Mounted Display Cenário 3: FishTank Exemplo Interessante: CAVE • Primeiro Surround-Screen Virtual Environment (1991, com 4 paredes). • Telas fixas alinhadas com os eixos do sistema de rastreamento (com origem no centro da CAVE). • Até seis telas (walls) de 9m2 – permitem a projeção de ambientes em escala natural. • As telas funcionam como janelas de vidro para um mundo virtual – com a diferença que os objetos podem passar por dentro da CAVE. Y X Z Sistemas de Projeção com Head Tracking • São compostos por: – Um sistema de rastreamento (head tracker). – Uma ou mais superfícies de projeção – geralmente planas – com posição conhecida no espaço do head tracker. • Os sistemas podem ser separados em três casos: – Telas de projeção que se mantém fixas no espaço do mundo (e.g. uma CAVE). – Telas de projeção que se mantém fixas no espaço da cabeça (e.g. um HMD). – Telas de projeção que podem se mover independentemente do usuário (i.e. telas móveis, que precisam ser rastreadas). Requisitos do Sistema de Rastreamento • Baixa latência (acima de 60Hz). • Alta precisão e bom alcance. – Milímetros são importantes quando existem objetos perto do usuário; – Deve cobrir toda área do ambiente de RV (e.g. 3m de diâmetro numa CAVE). • Ausência de ruídos. – Qualquer tremedeira do rastreador pode causar enjôo nos usuários, e estragar o stereo. O Nosso Rastreador: Flock of Birds • Sistema de rastreamento eletromagnético escalável (múltiplos sensores com 6DOF). • Características Positivas: – Baixa latência (até ~140Hz); – Boa precisão (2 milímetros) até certa distância. • Características Negativas: – Curto alcance (1.2m) [outro modelo vai até 3m]; – Sujeito a ruídos: • Bastante sensível a interferência eletromagnética. Amaciando Ruídos no FoB • Filtro Gaussiano provê o melhor custo/benefício no caso do Flock of Birds (que não precisa de predição de movimentos). Filtra vetores de posição e quaternions de orientação usando uma distribuição gaussiana configurável. Lag configurável Rastreando Cabeças 1. Posição do Sensor (Vector) 2. Translação para os Olhos (Vector) Posição Entre os Olhos (Vector) 3. Orientação do Sensor (Quaternion) 4. Rotação para a Cabeça (Quaternion) Orientação da Cabeça (Quaternion) Lido do rastreador. Configurado pelo usuário. Espaço da Cabeça = ( 1 + 2 ) * 3 * 4 Y Z X Posição dos Olhos • Conhecendo o espaço da cabeça e dada uma distância interocular, podemos calcular a posição de cada olho no espaço do mundo. Y Z X (es,0,0) distância interocular (-es,0,0) Posição das Telas de Projeção • Cada tela é definida por quatro pontos no espaço do mundo (ou seja, no espaço do head tracker). – Ou ainda, no espaço da cabeça, para HMDs... • Telas móveis podem ser rastreadas pelo mesmo sistema. • Telas fixas podem ser configuradas manualmente se a origem do rastreador também for fixa. Posição do Usuário no Mundo Virtual • No ViRAL, a posição do observador no mundo virtual é definida por três parâmetros: – Um vetor de posição; – Um quaternion de orientação do corpo; – Um quaternion de rotação da cabeça; • Não têm nada a ver com o head-tracking! • Matriz de ModelView “virtual”: – Mmodelview-virtual = (T * Rbody * Rhead) –1 Algoritmo de Head Tracking Monocular (1) • Para cada tela de projeção... – Achar a base da tela no espaço do mundo. • X = (LR – LL) / width • Y = (UR – LR) / height • Z = X cross Y UR UL – Os três vetores dão a matriz de rotação da tela para o mundo MscreenToWorld. LR LL – A transposta é a matriz de rotação do mundo para a tela, MworldToScreen. Algoritmo de Head Tracking Monocular (2) • Levando UL, UR, LL e LR para o espaço da tela, obtemos os quatro pontos num plano XY (com -Z = distância da tela até a origem do tracker). • Levando o olho para o espaço da tela e o projetando no plano, podemos obter as coordenadas Left, Right, Top, e Bottom de um frustum assimétrico. (0,0) UL UR Olho UL L T T L R R B B LL UR LR LL LR Algoritmo de Head Tracking Monocular (3) • Precisamos calcular distâncias near e far para o frustum. – near é uma porcentagem da distância do olho até a tela de projeção. – far é um número bem grande (e.g. 100Km). near far (bem longe) Tela Algoritmo de Head Tracking Monocular (4) • A matriz projection é calculada usando a mesma fórmula da função glFrustum(), que espera as coordenadas Left, Right, Top, e Bottom no plano near. – Podem ser obtidas por semelhança de triângulos. Mprojection = Algoritmo de Head Tracking Monocular (5) • Finalmente, a matriz de View com head tracking é calculada como: Mview = Mmodelview-virtual * -Eworld * MscreenToWorld Head Tracking e Estereoscopia • Podemos calcular projeções estereoscópicas por head-tracking de forma bastante intuitiva: 1. Achamos a posição dos olhos usando a distância interocular. 2. Executamos o procedimento de head tracking monocular uma vez para cada olho. Escalas • O mundo real (espaço do tracker) e o virtual precisam estar na mesma escala. – No ViRAL tudo é padronizado em metros. – Caso o mundo virtual não esteja em metros, podemos aplicar uma escala à distância interocular e às posições rastreadas. • O tamanho máximo que um objeto importante pode ter é aproximadamente o tamanho da tela. – FishTanks em desktop precisam trabalhar com objetos miniaturizados. • Escalas inconsistentes causam a total perda de imersão! Aproximando-se da Tela... • Efeitos da aproximação do usuário a uma tela: – Translação na matriz de view (ou não...); – Achatamento do frustum, que torna-se mais largo; • O que está para fora da tela sofre zoom-in; • O que está para dentro da tela sofre zoom-out; • Problemas: – O FOV converge para 180º, levando tudo para o infinito. – zNear fica muito pequeno, diminuindo a precisão do z-buffer. Demo com Telas Perpendiculares Referências • Cruz-Neira, C., D.J.Sandin, and DeFanti, T. Surround-Screen Projection-Based Virtual Reality: The Design and Implementation of the CAVE. In SIGGRAPH '93 Proceedings (Aug. 1993), Association for Computing Machinery. • Dave Pape, Daniel J. Sandin, and Thomas A. DeFanti. Transparently supporting a wide range of VR and stereoscopic display devices. Proc. SPIE Int. Soc. Opt. Eng. 3639, 346 (1999) • VRJuggler. http://www.vrjuggler.org • Fotos de equipamentos de RV retiradas do site do instituto FAW, Áustria. http://www.faw.unilinz.ac.at/save/hardware/main.html