scieee AI-readable full text Open interactive document viewer

Realidade Virtual (Desenvolvendo experiências com Unity)

SOUZA, WENNDISSON DA; Lopes Martiniano, Alexandre; Alencar, Marcio Aurélio dos Santos; Souza dos Santos, Francialan; RODRIGUES E SILVA, NIVALDO

Abstract

A fronteira entre o mundo físico e o digital está se tornando cada vez mais tênue. No epicentro desta revolução encontra-se a Realidade Virtual (RV), uma tecnologia que transcende as telas planas e nos convida não apenas a ver, mas a “entrar” na informação, em novos mundos e em experiências antes inimagináveis. Esta tecnologia tem sido a força motriz por trás de avanços extraordinários, da simulação de procedimentos médicos complexos ao design de engenharia e novas formas de aprendizado. Este livro foi desenvolvido para ser seu mapa e sua caixa de ferramentas nessa jornada. O conteúdo foi cuidadosamente planejado para guiar tanto o iniciante curioso quanto o futuro desenvolvedor, abordando desde os conceitos teóricos até a construção de aplicações funcionais. A sua jornada começa com os pilares: os fundamentos da RV, os conceitos essenciais da programação em C# e a poderosa interface da Unity 3D. A partir daí, a teoria dá lugar à prática intensiva: você construirá, passo a passo, sua primeira aplicação de RV mobile do zero, aprenderá a criar interatividade com o olhar e desenvolverá experimentos complexos, como uma inspeção de culturas agrícolas e uma visualização de dados climáticos. Reconhecendo que o futuro da RV também é low-code, o livro então expande seu foco. O Capítulo 7 apresenta estudos de caso inspiradores de RV na educação, analisando projetos reais de tour 360º e mundos 3D modelados no IFAM Campus Coari, ambos usando a plataforma Delightex Edu. E para que você possa aplicar esse conhecimento imediatamente, um Apêndice prático o convida a se tornar um criador, demonstrando um caminho poderoso que não exige programação avançada. O conhecimento técnico é apenas o ponto de partida; a inovação é o destino. A nossa esperança é que, ao dominar as ferramentas aqui apresentadas, você se sinta capacitado não apenas a replicar, mas a criar. As soluções que você construirá serão mais do que vistas; serão experiências sentidas. Que este livro sirva como a faísca para sua criatividade e o impulsione a construir os novos mundos que esperamos ansiosamente para explorar no fascinante campo da Realidade Virtual.

Full text

25-318629.0 CDD-004 Dados Internacionais de Catalogação na Publicação (CIP) (Câmara Brasileira do Livro, SP, Brasil) Realidade virtual [livro eletrônico] : (desenvolvendo experiências com Unity) / Wenndisson da Silva Souza...[et al.]. -- 1. ed. -- Manaus, AM : Ed. dos Autores, 2025. PDF Outros autores: Alexandre Lopes Martiniano, Márcio Aurélio dos Santos Alencar, Francialan Souza dos Santos, Nivaldo Rodrigues e Silva. Bibliografia. ISBN 978-65-01-81528-2 1. Ciência da Computação 2. Inteligência artificial 3. Realidade virtual I. Souza, Wenndisson da Silva. II. Martiniano, Alexandre Lopes. III. Alencar, Márcio Aurélio dos Santos. IV. Santos, Francialan Souza dos. V. Silva, Nivaldo Rodrigues e. Índices para catálogo sistemático: 1. Ciência da computação 004 Eliane de Freitas Leite - Bibliotecária - CRB 8/8415 DOI: 10.5281/zenodo.17702134 Expediente do IFAM MINISTÉRIO DA EDUCAÇÃO SECRETARIA DE EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO AMAZONAS Reitor Jaime Cavalcante Alves Pró-Reitor de Administração Fábio Teixeira Lima Pró-Reitor de Gestão de Pessoas Leandro Amorim Damasceno Pró-Reitora de Ensino Rosângela Santos da Silva Pró-Reitora de Extensão Maria Francisca Morais de Lima Pró-Reitor de Pesquisa, Pós-Graduação e Inovação Paulo Henrique Rocha Aride Diretor Geral do Campus Manaus Distrito Industrial Nivaldo Rodrigues e Silva Expediente do Projeto CITHA MINISTÉRIO DA EDUCAÇÃO SECRETARIA DE EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO AMAZONAS Gestores Nivaldo Rodrigues e Silva Samirames da Silva Fleury Alyson de Jesus dos Santos Maria Cassiana Andrade Braga Adanilton Rabelo de Andrade Coordenadores Tiago Francisco Andrade Diocesano Jaidson Brandão da Costa Elcivan dos Santos Silva Martinho Correia Barros Adelino Maia Galvão Filho Expediente de Produção Autores Wenndisson da Silva Souza Alexandre Lopes Martiniano Márcio Aurélio dos Santos Alencar Francialan Souza dos Santos Nivaldo Rodrigues e Silva Avaliação Pedagógica Samirames da Silva Fleury Diagramadores Wenndisson da Silva Souza Fabio Serra Ribeiro Couto Revisores de Texto Alexandre Lopes Martiniano Realidade Virtual (desenvolvendo experiências com Unity) Autores Wenndisson da Silva Souza Alexandre Lopes Martiniano Márcio Aurélio dos Santos Alencar Francialan Souza dos Santos Nivaldo Rodrigues e Silva Prefácio por Nivaldo Rodrigues e Silva Revisão Alexandre Lopes Martiniano 1ª Edição Manaus - AM 2025 Lista de Expressões para Enriquecimento de Conteúdo Este material foi cuidadosamente estruturado para apoiar sua jornada de aprendizado. Ao longo dos capítulos, você encontrará diversas chamadas sinalizadas por ícones especiais, que ajudarão a destacar pontos-chave e enriquecer sua compreensão. Durante a diagramação, esses ícones serão inseridos conforme as indicações dos autores, guiando você para diferentes tipos de conteúdo e atividades que potencializam seu estudo. Fique Alerta! Destaque para conceitos, expressões e trechos fundamentais que merecem sua atenção especial para a compreensão do conteúdo. Iniciando o diálogo... Espaço para reflexão crítica. Aqui você será convidado(a) a problematizar os temas abordados, relacionando-os com sua experiência e buscando conexões relevantes para aprofundar seu aprendizado. Conhecendo um pouco mais! Indicação de fontes complementares, como livros, entrevistas, vídeos, aplicativos, links e outros recursos para ampliar seu conhecimento sobre o tema. Caso Prático Aplicação direta do conteúdo em exemplos concretos, para facilitar a fixação e demonstrar a utilidade do que foi aprendido. Copie e Teste! Trechos de código que podem ser tidos como referência, copiados ou executados, para que você possa experimentar, validar e explorar na prática os conceitos estudados. Prefácio A fronteira entre o mundo físico e o digital está se tornando cada vez mais tênue. No epicentro desta revolução encontra-se a Realidade Virtual (RV), uma tecnologia que transcende as telas planas e nos convida não apenas a ver, mas a “entrar” na informação, em novos mundos e em experiências antes inimagináveis. Esta tecnologia tem sido a força motriz por trás de avanços extraordinários, da simulação de procedimentos médicos complexos ao design de engenharia e novas formas de aprendizado. Este livro foi desenvolvido para ser seu mapa e sua caixa de ferramentas nessa jornada. O conteúdo foi cuidadosamente planejado para guiar tanto o iniciante curioso quanto o futuro desenvolvedor, abordando desde os conceitos teóricos até a construção de aplicações funcionais. A sua jornada começa com os pilares: os fundamentos da RV, os conceitos essenciais da programação em C# e a poderosa interface da Unity 3D. A partir daí, a teoria dá lugar à prática intensiva: você construirá, passo a passo, sua primeira aplicação de RV mobile do zero, aprenderá a criar interatividade com o olhar e desenvolverá experimentos complexos, como uma inspeção de culturas agrícolas e uma visualização de dados climáticos. Reconhecendo que o futuro da RV também é low-code, o livro então expande seu foco. O Capítulo 7 apresenta estudos de caso inspiradores de RV na educação, analisando projetos reais de tour 360º e mundos 3D modelados no IFAM Campus Coari, ambos usando a plataforma Delightex Edu. E para que você possa aplicar esse conhecimento imediatamente, um Apêndice prático o convida a se tornar um criador, demonstrando um caminho poderoso que não exige programação avançada. O conhecimento técnico é apenas o ponto de partida; a inovação é o destino. A nossa esperança é que, ao dominar as ferramentas aqui apresentadas, você se sinta capacitado não apenas a replicar, mas a criar. As soluções que você construirá serão mais do que vistas; serão experiências sentidas. Que este livro sirva como a faísca para sua criatividade e o impulsione a construir os novos mundos que esperamos ansiosamente para explorar no fascinante campo da Realidade Virtual. Projeto de Capacitação e Interiorização em Tecnologias Habilitadoras na Amazônia - CITHA O projeto CITHA surge com o objetivo de fortalecer a economia da Amazônia por meio do incentivo ao empreendedorismo local e do desenvolvimento sustentável. Sua proposta é capacitar profissionais e impulsionar a criação de startups voltadas para a bioeconomia, além de apoiar cooperativas locais na melhoria de seus processos produtivos. A implementação de tecnologias inovadoras é uma das estratégias centrais do projeto, visando oferecer soluções eficientes que atendam às necessidades regionais, como a otimização dos recursos naturais e a melhoria da infraestrutura local. Ao longo de sua execução, o projeto se compromete a integrar os diversos stakeholders, como governos, empresas, ONGs e comunidades, por meio da capacitação da mão de obra local. O objetivo é formar um capital intelectual qualificado, capaz de apoiar uma governança eficiente, promover a inovação e assegurar a sustentabilidade. O CITHA dedica-se à criação de processos internos que incentivem o desenvolvimento de novos métodos e tecnologias, adaptáveis às particularidades do território amazônico. Em síntese, o projeto CITHA visa criar um ciclo de desenvolvimento que não só incentive o empreendedorismo, mas também promova a modernização das estruturas locais, elevando a qualidade de vida das populações da Amazônia. Focado em áreas como bioeconomia, inovação e transferência de tecnologia, o projeto busca estabelecer um ecossistema mais forte e autossustentável, capaz de responder eficientemente às demandas do mercado e da sociedade. CAPÍTULO 1. FUNDAMENTOS DE REALIDADE VIRTUAL (RV) Conhecendo um pouco mais! Sugestões de Vídeos 360°/RV para Experimentar: O canal no YouTube NitroVR360 é um ótimo ponto de partida, a seguir deixamos alguns links para você testar: SPACE SLIDE -https://www.youtube.com/watch?v=j68zvye_FfQ LIMINAL FIELD -https://www.youtube.com/watch?v=fpYd4l86EYI BIG SLIDE -https://www.youtube.com/watch?v=-E3X9jygf0A 1 MILLION PEOPLE -https://www.youtube.com/watch?v=ZoJqQ3MyZro WATER SLIDE -https://www.youtube.com/watch?v=FPiZ7z6lU54 FALLING FROM CLIFF -https://www.youtube.com/watch?v=ZpIeHAPfkJ8 Fique Alerta! A Quebra da Presença! A sensação de presença é poderosa, mas muito delicada. Qualquer coisinha pode quebrála: um aviso de bateria fraca aparecendo na sua frente, um bug que faz sua mão virtual atravessar uma parede, ou seu gato se esfregando na sua perna no mundo real. Quando isso acontece, a mágica se desfaz e você é puxado de volta para a realidade. 1.2.1 O Espectro da Virtualidade: Uma Régua para a Realidade Para entender melhor a RV, você pode pensar em uma “régua de realidade”. Em uma ponta, temos o mundo 100% real. Na outra, um mundo 100% virtual. RV, RA e RM são pontos diferentes nessa régua. •Realidade Aumentada (RA): É como colocar “adesivos” digitais no mundo. Pense nos filtros do Instagram que colocam orelhas de cachorro na sua cabeça. As orelhas estão na tela, sobrepostas ao seu rosto, mas elas não interagem com o mundo real (por exemplo, não ficam atrás do seu cabelo). A RA adiciona à sua realidade. •Realidade Mista (RM): É uma RA mais inteligente. Imagine que as orelhas de cachorro virtuais agora balançam quando você mexe a cabeça e ficam presas no seu ombro se você se inclina. Os objetos virtuais e o mundo real começam a interagir. É como se os fantasmas do Pac-Man pudessem desviar dos móveis da sua sala. •Realidade Virtual (RV): É quando você vai até o fim da régua. A RV não adiciona ao seu mundo, ela o “substitui” por completo. Você não vê mais a sua sala; você está em outro planeta. 15 CAPÍTULO 1. FUNDAMENTOS DE REALIDADE VIRTUAL (RV) 1.3 A Incrível Jornada da RV no Tempo A ideia de criar mundos virtuais não nasceu com a internet. Ela vem de décadas de sonhos, experimentos malucos e avanços tecnológicos. 1.3.1 Os Sonhadores e suas Geringonças •O Visionário do Cinema (1962): Um cineasta chamado Morton Heilig inventou o Sensorama. Imagine uma cabine de fliperama que não era um jogo. Você sentava, e ela te mostrava um filme de um passeio de moto por Nova York em 3D, com som estéreo, um assento que vibrava, vento no seu rosto e até o cheiro de pizza quando passava por uma pizzaria. Ele queria que o cinema fosse uma experiência total, não apenas algo para ver. Figura 1.3: A cabine do Sensorama, um dos primeiros dispositivos de imersão multissensorial Fonte: ResearchGate •A Espada de Dâmocles (1968): Na Universidade de Harvard, um gênio da computação chamado Ivan Sutherland criou o primeiro capacete de RV. Era uma geringonça de metal tão pesada que precisava ser pendurada no teto por um braço mecânico. Quem usava via formas geométricas simples flutuando na sala. Era assustador e poderoso, e por isso ganhou o nome de uma lenda grega sobre uma espada pendurada por um fio sobre a cabeça de um rei. Foi a primeira vez que alguém “entrou” em um gráfico de computador. 16 CAPÍTULO 1. FUNDAMENTOS DE REALIDADE VIRTUAL (RV) Figura 1.4: A Espada de Dâmocles, o primeiro HMD (Head-Mounted Display), criado por Ivan Sutherland em 1968 Fonte: Medium.com 1.3.2 A Primeira Fama e o Inverno da RV Nos anos 80 e 90, o termo “Realidade Virtual” virou moda. Jaron Lanier, um artista de cabelos rastafári, fundou a primeira empresa de RV e apareceu em todos os jornais com suas luvas e óculos futuristas. A NASA usava a tecnologia para treinar astronautas. Empresas de videogame como a SEGA e a Nintendo tentaram lançar seus próprios consoles de RV. Conhecendo um pouco mais! O console da Nintendo, chamado Virtual Boy (1995), é considerado um dos maiores fracassos da história dos games. Ele só exibia as cores vermelho e preto, causava dores de cabeça terríveis e foi um desastre de vendas. Esse fracasso ajudou a “matar” o interesse do público na RV por muitos anos. As ideias eram incríveis, mas a tecnologia era como tentar rodar um jogo de 2025 em um computador de 1995. Tudo era lento, caro, os gráficos eram ruins e quase todo mundo ficava enjoado. A RV virou piada e foi para a “geladeira” por quase 20 anos. 1.3.3 O Renascimento na Garagem O retorno triunfal da RV começou na garagem dos pais de um adolescente chamado Palmer Luckey. Ele era obcecado por tecnologia e percebeu que os celulares modernos tinham tudo que a RV precisava: telas pequenas de altíssima resolução, sensores de movimento precisos e tudo muito barato. 17 CAPÍTULO 1. FUNDAMENTOS DE REALIDADE VIRTUAL (RV) Ele começou a desmontar celulares e juntar as peças para criar um protótipo de óculos de RV que era muito melhor e mais barato que qualquer coisa que existia. Em 2012, ele lançou uma campanha de financiamento coletivo no site Kickstarter. O sucesso foi explosivo. Dois anos depois, o Facebook comprou sua empresa, a Oculus, por 2 bilhões de dólares. A RV estava oficialmente de volta, e desta vez, para ficar. 1.4 Como a Mágica Acontece: Os Equipamentos de RV Para te transportar para outro mundo, um sistema de RV precisa de equipamentos especiais que funcionam em perfeita harmonia. 1.4.1 O Headset: Seus Novos Olhos e Ouvidos Figura 1.5: Headset VR Shinecon que usaremos no curso Oheadset (HMD) é a peça principal. Mas o que tem dentro dele? •Duas Telinhas e Lentes Especiais: Dentro do headset há uma tela para cada olho. Cada tela mostra a mesma cena, mas de um ângulo um pouco diferente, imitando como nossos olhos veem o mundo. Isso cria o efeito 3D (estereoscopia). As lentes na frente das telas ampliam a imagem para preencher todo o seu campo de visão. •Taxa de Atualização (medida em Hertz - Hz): Pense em um caderno de desenho com um bonequinho em cada página. Se você folhear devagar, vê as imagens pulando. Se folhear rápido, o movimento parece fluido. A taxa de atualização é a velocidade com que as telas do headset “folheiam” as imagens. Uma taxa baixa (como 60 Hz) pode fazer seu cérebro sentir que algo está errado e te deixar enjoado. O padrão hoje é de 90 Hz ou 120 Hz (120 imagens por segundo!). 18 CAPÍTULO 1. FUNDAMENTOS DE REALIDADE VIRTUAL (RV) •Sensores de Movimento: Dentro do headset existem acelerômetros e giroscópios (os mesmos do seu celular) que detectam cada mínimo movimento da sua cabeça. Se você vira a cabeça para a direita no mundo real, sua visão no mundo virtual vira instantaneamente para a direita. Esse tempo de resposta precisa ser de menos de 20 milissegundos para que a ilusão seja perfeita. 1.4.2 Rastreamento (Tracking): Onde Estou no Mundo Virtual? O rastreamento determina sua posição no espaço. Existem dois tipos: •3DoF (Três Graus de Liberdade): Este é o rastreamento mais simples. Ele sabe para onde sua cabeça está virando (direita/esquerda, cima/baixo, inclinação). É como estar sentado em uma cadeira de escritório que gira. Você pode olhar para todos os lados, mas não pode se levantar e andar pela sala. •6DoF (Seis Graus de Liberdade): Este é o padrão ouro. Além dos 3 graus de rotação, ele rastreia sua translação: mover-se para frente e para trás, para os lados, e para cima e para baixo. É como se libertar da cadeira. Você pode andar pelo seu quarto, e seu avatar andará pelo mundo virtual. É isso que permite a exploração e a verdadeira sensação de presença. Fique Alerta! Inside-Out vs. Outside-In: Como o headset sabe onde está no 6DoF? •Outside-In (de fora para dentro): O método mais antigo. Você instala câmeras ou sensores externos no seu quarto, que “olham” para o headset e o localizam. É preciso, mas chato de configurar. •Inside-Out (de dentro para fora): O método moderno. O próprio headset tem pequenas câmeras que “olham” para fora, mapeando os móveis e as paredes do seu quarto para saber onde ele está. É muito mais prático: você só precisa colocar os óculos e jogar. 1.5 Muito Além dos Jogos: A RV no Mundo Real A RV é muito mais do que uma máquina de jogos. Ela é uma ferramenta poderosa que está mudando profissões. 1.5.1 Medicina: Salvando Vidas no Virtual Imagine um estudante de medicina. Antes de fazer sua primeira cirurgia em uma pessoa real, ele pode praticar centenas de vezes em um paciente virtual. O sistema de RV pode simular o corpo humano com precisão, incluindo o fluxo sanguíneo e a textura dos órgãos. O estudante usa controles que imitam instrumentos cirúrgicos e recebe feedback tátil (vibrações) quando “corta” ou “sutura”. Ele pode errar, aprender com o erro e tentar de novo, sem colocar nenhuma vida em risco. 19 CAPÍTULO 1. FUNDAMENTOS DE REALIDADE VIRTUAL (RV) 1.5.2 Educação: A Sala de Aula do Futuro Cansado de decorar a tabela periódica? Em RV, você pode entrar em um laboratório virtual, pegar o átomo de Hélio na mão, ver seus elétrons girando em 3D e juntá-lo com outros átomos para criar moléculas. Em uma aula de história, em vez de ver fotos do Egito, você pode ser guiado por um tour virtual dentro da Grande Pirâmide. A RV transforma o aprendizado abstrato em uma experiência concreta e inesquecível. 1.5.3 Engenharia e Design: Construindo Antes de Construir Antes de uma empresa gastar milhões para construir um novo carro, os engenheiros e designers colocam headsets de RV e entram em uma versão digital do veículo. Eles podem se sentar no banco do motorista, verificar se todos os botões do painel são fáceis de alcançar, olhar pelos retrovisores para checar os pontos cegos e até mesmo mudar a cor do estofado com um clique. Fazer alterações em um modelo 3D é infinitamente mais barato e rápido do que em um protótipo físico. 1.5.4 O Lado Sombrio? Desafios para o Futuro Como toda tecnologia poderosa, a RV traz grandes questões: •Privacidade Extrema: Um sistema de RV sabe não apenas o que você faz, mas como você se move, para onde seus olhos olham, sua altura, e até mesmo como seu corpo reage a um susto. Quem é dono desses dados tão pessoais? Como eles podem ser usados? •A Linha Tênue com a Realidade: Se o mundo virtual for mais interessante, bonito e gratificante que o real, o que impede as pessoas de passarem a maior parte do tempo lá? Questões sobre vício e isolamento social são debates importantes e necessários. •Acessibilidade: Hoje, para ter uma boa experiência de RV, ainda é preciso um investimento considerável. Como garantir que essa tecnologia não aumente ainda mais a divisão entre ricos e pobres? 1.6 Aplicando seus conhecimentos 1. Usando uma analogia que não foi citada no texto, explique a diferença entre Realidade Virtual e Realidade Aumentada. 2. Por que a taxa de atualização (medida em Hz) de um headset de RV é tão importante para o conforto do usuário? O que pode acontecer se ela for muito baixa? 3. Descreva a diferença entre rastreamento 3DoF e 6DoF usando o exemplo de assistir a um show. Como seria a experiência em cada um? 4. Além da medicina e da educação, pense em uma profissão ou área de trabalho e descreva detalhadamente como a RV poderia revolucioná-la. 5. Qual dos desafios da RV (técnicos, sociais ou éticos) você considera o mais preocupante? Por quê? 20 Capítulo 2 Primeiros Passos na Programação com C# para Unity Iniciando o diálogo... Até agora, descobrimos o que é a Realidade Virtual e conhecemos o estúdio onde construiremos nossos mundos: a Unity. Se a Unity é o palco e os GameObjects são os atores, o que está faltando? O roteiro! A programação é o roteiro que dá vida, propósito e inteligência a cada elemento da nossa cena. Neste capítulo, vamos aprender a linguagem dos diretores de mundos virtuais: o C# (lê-se “C Sharp”). Não se intimide se você nunca programou antes. Aprender a programar é como aprender um novo idioma: começamos com o vocabulário básico e as regras gramaticais simples, e aos poucos construímos frases complexas e contamos histórias incríveis. Nosso objetivo aqui é fornecer o vocabulário e a gramática essenciais de C#, sempre no contexto da Unity, para que você tenha uma base sólida para todos os projetos práticos que virão a seguir. 2.1 O Que é C# e Por Que a Unity o Utiliza? C# é uma linguagem de programação moderna, poderosa e versátil, criada pela Microsoft. AUnity a adotou como sua principal linguagem por diversas razões: •É robusta e segura: Possui mecanismos que ajudam a evitar erros comuns de programação, como o gerenciamento automático de memória, o que significa menos crashes e mais tempo para criar. •É Orientada a Objetos: Um paradigma que se encaixa perfeitamente com a filosofia de GameObjects e Componentes da Unity. •Tem ótimo desempenho: É uma linguagem compilada, o que a torna rápida o suficiente para jogos e simulações em tempo real. •Possui excelente suporte: Tanto da Microsoft quanto da vasta comunidade de desenvolvedores Unity, o que significa que quase qualquer dúvida que você tiver já foi respondida em algum fórum na internet. 21 CAPÍTULO 2. PRIMEIROS PASSOS NA PROGRAMAÇÃO COM C# PARA UNITY Conhecendo um pouco mais! O que é “Programação Orientada a Objetos” (POO) na Prática? A POO é a ideia de que podemos construir programas complexos a partir de “objetos” modulares e reutilizáveis. Pense na Unity: • Um GameObject é como um chassi de carro vazio. É a “entidade” ou o “objeto”. • Os Components são as peças que você adiciona: um componente Mesh Renderer (a pintura), um Rigidbody (o motor e a física), e um AudioSource (o rádio). O C# é a linguagem que nos permite criar nossos próprios componentes personalizados (os scripts). Cada script é uma nova “peça” com suas próprias propriedades (variáveis) e comportamentos (funções), que podemos encaixar em qualquer GameObject. Essa modularidade é o coração da POO e da própria Unity. 2.2 A Anatomia de um Script Unity A melhor maneira de entender C# na Unity é dissecando um script básico. Praticamente todo script que criarmos neste livro seguirá a estrutura do código 2.1 a seguir. // 1. Diretivas 'using': Importando as caixas de ferramentas using UnityEngine; // 2. Declaração da Classe: O "roteiro" em si public class NaveEspacial : MonoBehaviour { // 3. Variáveis: As "memórias" do objeto public float velocidade = 10.0f; private bool escudosAtivados = true; // 4. Funções (ou Métodos): As "ações" do objeto // Chamada uma única vez, no início void Start() { // Imprime uma mensagem no console da Unity Debug.Log("Nave espacial pronta para a missão!"); } // Chamada a cada quadro do jogo void Update() { // Lógica de movimento contínuo transform.Translate(Vector3.forward * velocidade * Time.deltaTime); } } Código 2.1: A anatomia de um script C# básico na Unity. Vamos analisar cada parte com mais detalhes: 22 CAPÍTULO 2. PRIMEIROS PASSOS NA PROGRAMAÇÃO COM C# PARA UNITY 1. Diretivas using:No topo de quase todo script, você verá using UnityEngine;. Pense nisso como a seção de “ferramentas necessárias” de uma receita. Esta linha diz ao C#: “Para cozinhar esta receita (nosso script), vamos precisar de todos os utensílios e ingredientes da cozinha da Unity”. Sem ela, o script não saberia o que MonoBehaviour,Vector3 ou Debug.Log significam. 2. Declaração da Classe: Aclass é o projeto ou a receita em si. A linha public class NaveEspacial : MonoBehaviour define três coisas: •public: A receita é pública, outros scripts podem interagir com ela. •class NaveEspacial: O nome da nossa receita, que deve ser idêntico ao nome do arquivo (NaveEspacial.cs). •: MonoBehaviour: Esta é a parte mais importante. Significa que nossa classe “herda” todos os superpoderes de uma classe base da Unity. É por causa do MonoBehaviour que podemos anexar este script a um GameObject no editor, e é ele que nos dá acesso às funções mágicas como Start() eUpdate(). 3. Variáveis (Campos): São os ingredientes da nossa receita. Eles guardam os dados e o estado do nosso objeto. A distinção entre public eprivate é crucial: •public: Uma variável pública é como um botão ou um controle deslizante no painel de controle do seu objeto. Ela aparece no Inspector da Unity, permitindo que você (ou um designer) ajuste valores como velocidade ou vidaMáxima sem tocar em uma linha de código. •private: Uma variável privada é um mecanismo interno. Ela é essencial para o funcionamento do objeto, mas não deve ser alterada por fora. Por exemplo, um contador interno ou uma referência que o script encontra sozinho. Por padrão, se você não escrever nem public nem private, a variável é private. 4. Funções (Métodos): São os passos da receita, as ações que o objeto pode executar. Start() é o passo de “pré-aquecer o forno” (acontece uma vez no início), e Update() é o passo de “mexer a cada minuto” (acontece continuamente, a cada quadro do jogo). 2.2.1 O Poder do Time.deltaTime No método Update, você viu a linha transform.Translate(Vector3.forward * velocidade * Time.deltaTime);. O Time.deltaTime é um dos conceitos mais importantes para iniciantes. Imagine dois computadores: um PC gamer que roda seu jogo a 200 quadros por segundo (FPS) e um notebook mais antigo que roda a 40 FPS. • O método Update() é chamado a cada quadro. • Sem Time.deltaTime, a nave no PC gamer se moveria 200 vezes por segundo, enquanto no notebook, se moveria apenas 40 vezes. A nave seria 5x mais rápida no PC gamer! Time.deltaTime resolve isso. Ele contém o tempo em segundos que demorou para renderizar o último quadro. Ao multiplicar seu movimento por esse valor, você transforma a lógica de “mover X por quadro” para “mover X por segundo”. O resultado é um movimento suave e consistente, não importa a potência do computador. Regra de ouro: qualquer movimento ou lógica contínua dentro do Update deve usar Time.deltaTime. 23 CAPÍTULO 2. PRIMEIROS PASSOS NA PROGRAMAÇÃO COM C# PARA UNITY 2.3 O Vocabulário Essencial: Variáveis e Tipos de Dados 2.3.1 O Que São Variáveis? Variáveis são “caixas” nomeadas para guardar informações. Cada caixa é projetada para um tipo específico de dado. Declarar uma variável é como etiquetar uma caixa antes de guardar algo nela: tipoDeDado nomeDaVariavel;. 2.3.2 Tipos de Dados Fundamentais Estes são os tipos que você usará 99% do tempo: •int: Para números inteiros. Ex: int pontuacao = 100; •float: Para números com casas decimais. Ex: float velocidade = 15.5f; (O “f” no final é obrigatório para floats). •bool: Para valores lógicos, apenas true (verdadeiro) ou false (falso). Ex: bool jogoPausado = false; •string: Para texto. O texto deve estar entre aspas duplas. Ex: string nomeJogador = “Piloto-01”; 2.3.3 Variáveis Especiais da Unity AUnity nos dá tipos de variáveis especiais para interagir com o motor: •GameObject: Guarda uma referência a um objeto inteiro na sua cena. •Transform: Guarda uma referência ao componente Transform de um objeto (sua posição, rotação e escala). Todo GameObject tem um. •Vector3: Uma estrutura para guardar um conjunto de 3 floats (X, Y, Z). Perfeita para posições e direções. Ex: Vector3 posicaoInicial = new Vector3(0, 1.6f, 5); •Quaternion: A forma como a Unity lida com rotações 3D. Não se preocupe com a matemática por trás, apenas saiba que é o tipo usado para guardar a orientação de um objeto. •Rigidbody: Guarda uma referência ao componente de física de um objeto, permitindo aplicar forças, gravidade, etc. 2.3.4 Indo Além: Coleções de Variáveis Até agora, lidamos com variáveis que guardam uma única informação por vez: um número, um texto, um GameObject. Mas e se precisarmos guardar não apenas uma, mas várias informações do mesmo tipo? Imagine ter que gerenciar 50 inimigos, 100 árvores, ou todos os pontos de dados de um gráfico. Declarar 50 variáveis diferentes seria inviável e desorganizado. Para isso, a programação nos oferece as coleções de variáveis. Coleções são estruturas que nos permitem agrupar múltiplos valores sob um único nome. As mais fundamentais para começar são os Arrays e as Listas. 24 CAPÍTULO 2. PRIMEIROS PASSOS NA PROGRAMAÇÃO COM C# PARA UNITY Combinando Condições: Operadores Lógicos Podemos testar múltiplas condições simultaneamente usando operadores lógicos: • && (AND / “e”): Verdadeiro se todas as condições forem verdadeiras. • | | (OR / “ou”): Verdadeiro se pelo menos uma das condições for verdadeira. • ! (NOT / “não”): Inverte o valor de uma condição (verdadeiro se era falso, e vice-versa). public bool temChave = true; public bool portaTrancada = true; public int nivelDoJogador = 3; void TentarAbrirPorta() { // Condição com 'AND': Precisa ter a chave E a porta estar trancada if (temChave && portaTrancada) { Debug.Log("Usando a chave para destrancar a porta."); portaTrancada = false; } else if (!portaTrancada) // Condição com 'NOT': Se a porta NÃO estiver trancada { Debug.Log("A porta já está destrancada, pode passar."); } else { Debug.Log("Você precisa de uma chave para abrir esta porta!"); } // Condição com 'OR': Entra se o nível for alto OU se tiver a chave if (nivelDoJogador >= 5 || temChave) { Debug.Log("Acesso liberado para a área secreta!"); } else { Debug.Log("Nível muito baixo ou falta a chave para a área secreta."); } } Código 2.6: Usando operadores lógicos para combinar condições. 31 CAPÍTULO 2. PRIMEIROS PASSOS NA PROGRAMAÇÃO COM C# PARA UNITY Fique Alerta! Ordem de Execução e Chaves {} Sempre use chaves { } para delimitar o bloco de código de um if ou else, mesmo que seja apenas uma linha. Isso torna o código mais legível e evita erros lógicos, especialmente quando você adiciona mais linhas de código no futuro. Sem chaves, apenas a primeira linha após o if é considerada parte da condição. Com essas ferramentas, seu código pode se tornar muito mais adaptável e inteligente, respondendo de forma diferente a diversas situações e entradas do usuário. Fique Alerta! Operadores de Comparação Comuns == (igual a), != (diferente de), > (maior que), < (menor que), >= (maior ou igual a), <= (menor ou igual a). 2.4.3 Repetindo Ações com Laços Até agora, as nossas ações aconteciam uma vez por evento (uma vez no Start, ou uma vez por quadro no Update). Mas e se quisermos repetir uma ação várias vezes? Criar uma fileira de árvores, gerar uma horda de inimigos ou processar uma lista de dados? Fazer isso manualmente seria impraticável. É aqui que entram os laços de repetição (loops), as ferramentas mais poderosas para a automação. O Laço for O laço for é o tipo mais comum de loop, ideal para quando sabemos exatamente quantas vezes queremos repetir uma ação. A sua estrutura, embora pareça complexa à primeira vista, é muito lógica. for (inicialização; condição; incremento) { ... } •Inicialização (int i = 0;): Cria uma variável contadora (quase sempre chamada de i, de “índice”) e define o seu valor inicial. Isto acontece apenas uma vez, antes de o laço começar. •Condição (i < quantidade;): Antes de cada repetição (iteração), o laço verifica se esta condição é verdadeira. Se for, o código dentro das chaves { ... } é executado. Se for falsa, o laço termina. •Incremento (i++): Após cada repetição, esta ação é executada. i++ é uma forma abreviada de i=i+1, ou seja, ele simplesmente adiciona 1 ao contador. Imagine que você queira criar 5 cubos em uma fileira. Em vez de duplicá-los manualmente, você pode usar um script para ir criando múltiplos objetos com um laço for, veja o exemplo a seguir. 32 CAPÍTULO 2. PRIMEIROS PASSOS NA PROGRAMAÇÃO COM C# PARA UNITY public GameObject meuPrefabDeCubo; public int quantidade = 5; void Start() { // Este laço executa 5 vezes (para i = 0, 1, 2, 3, 4) for (int i = 0; i < quantidade; i++) { // Cria uma nova posição para cada cubo // A posição X é multiplicada pelo contador 'i' Vector3 posicao = new Vector3(i * 2.0f, 0, 0); // Instancia (cria uma cópia) do Prefab na posição calculada // Quaternion.identity significa "sem rotação" Instantiate(meuPrefabDeCubo, posicao, Quaternion.identity); } } Código 2.7: Usando um laço for para instanciar objetos. Este pequeno script criará 5 cubos, cada um a 2 unidades de distância do anterior no eixo X. Isso demonstra o poder de automatizar tarefas repetitivas com programação. Conhecendo um pouco mais! Por que usar um Prefab? No exemplo, usamos a variável meuPrefabDeCubo, um Prefab é um GameObject préconfigurado que guardamos na nossa pasta de Assets. Pense nele como um “carimbo”. Em vez de criar um cubo do zero a cada vez, nós carimbamos cópias de um modelo que já tem os materiais, colliders escripts corretos. Usar a função Instantiate() com um Prefab é muito mais eficiente e organizado do que criar e configurar objetos inteiramente por código. Outros Tipos de Laços Existem outros dois tipo de laço que são muito úteis. O laço while (enquanto) é mais simples: ele repete o código enquanto uma condição for verdadeira. É útil quando não sabemos quantas repetições serão necessárias. int vidaDoInimigo = 100; // Enquanto a vida do inimigo for maior que 0... while (vidaDoInimigo > 0) { // ...reduz a vida e imprime a mensagem. vidaDoInimigo = vidaDoInimigo - 10; Debug.Log("Inimigo atingido! Vida restante: " + vidaDoInimigo); } Debug.Log("Inimigo derrotado!"); Código 2.8: Exemplo de um laço ’while’. 33 CAPÍTULO 2. PRIMEIROS PASSOS NA PROGRAMAÇÃO COM C# PARA UNITY Fique Alerta! Cuidado com os Laços Infinitos! Ao usar um laço while, é crucial garantir que a condição em algum momento se torne falsa. Se a condição for sempre verdadeira (por exemplo, se esquecermos de subtrair a vida do inimigo no exemplo acima), o laço nunca terminará. Isso é um laço infinito, e fará com que aUnity trave completamente! O laço foreach (para cada) é a forma mais elegante e segura de percorrer todos os itens de uma coleção (como um Array ou uma Lista), sem se preocupar com contadores e índices. // Um Array público que você pode preencher no Inspector public GameObject[] todosOsInimigos; void Start() { // Para cada 'inimigo' dentro da coleção 'todosOsInimigos'... foreach (GameObject inimigo in todosOsInimigos) { // ...desativa o objeto. inimigo.SetActive(false); } } Código 2.9: Usando foreach para percorrer um Array de objetos. Este código é mais limpo e menos propenso a erros do que usar um laço for para fazer a mesma coisa. Nós o usaremos extensivamente quando começarmos a lidar com listas de dados nos próximos capítulos. 2.5 E agora? A programação pode parecer intimidante, mas é construída sobre blocos lógicos simples. Neste capítulo expandido, fomos além do básico, explorando não apenas variáveis e condicionais, mas também a importância do Time.deltaTime, a diferença entre Update eFixedUpdate, e o poder de automatização com laços como o for. Lembre-se: oscript C# é um componente que você anexa para dar um “roteiro” aos seus GameObjects. Com os fundamentos que vimos aqui, você está mais do que preparado para não apenas seguir os projetos práticos dos próximos capítulos, mas também para começar a experimentar e criar seus próprios comportamentos. 34 Capítulo 3 Introdução à Ferramenta Unity 3D com C# Iniciando o diálogo... Se no capítulo anterior descobrimos o que é a Realidade Virtual, agora vamos conhecer o nosso “parque de diversões” para construí-la. Pense na RV como o palco de um grande teatro. Para montar o espetáculo, você precisa de ferramentas para construir o cenário, controlar as luzes, criar os efeitos sonoros e, claro, dirigir os atores. Essa “caixa de ferramentas” mágica para nós será a Unity. Neste capítulo, vamos abrir essa caixa pela primeira vez. Não se assuste com a quantidade de janelas e botões! Vamos explorar a interface como se fosse um novo videogame, aprender a criar nossos primeiros objetos 3D e, o mais legal de tudo, vamos usar um pouco de programação com a linguagem C# para dar vida e movimento a esses objetos. É aqui que o nosso papel de espectador acaba e o de criador começa! 3.1 O que é a Unity? Um Estúdio de Criação Digital Você talvez já tenha ouvido falar que a Unity é um “motor de jogo” (game engine). E é verdade. Jogos imensamente populares como Among Us,Genshin Impact ePokémon GO foram feitos com ela. Mas a Unity é muito mais do que isso. Pense nela como um Lego digital infinito ou um estúdio de cinema virtual. É um software de criação 3D em tempo real que te dá todas as ferramentas para construir não apenas jogos, mas também: •Simulações Profissionais: Para treinar pilotos, médicos e engenheiros. •Filmes e Animações: Cineastas usam a Unity para criar cenários virtuais e visualizar cenas antes de gastar milhões em filmagens. •Projetos de Arquitetura: Para que clientes possam “caminhar” por uma casa antes mesmo de o primeiro tijolo ser colocado. •E, claro, Realidade Virtual e Aumentada. O trabalho de um motor como a Unity é cuidar da parte “chata” e complexa da computação gráfica, como a física (para fazer uma bola quicar de forma realista), a renderização (desenhar os gráficos na tela) e o áudio, para que nós, os criadores, possamos focar na parte divertida: a criação do mundo e de suas regras. 35 CAPÍTULO 3. INTRODUÇÃO À FERRAMENTA UNITY 3D COM C# 3.2 Instalando a Unity e Criando o Primeiro Projeto Caso Prático Vamos dar nossos primeiros passos práticos: Instalar a Unity e criar um projeto em branco, já configurado para o desenvolvimento Android que faremos ao longo do livro. 3.2.1 Instalação do Unity Hub e Módulos A melhor forma de gerenciar suas instalações da Unity é através do Unity Hub. 1. Vá até o site oficial da Unity (unity.com) e baixe o Unity Hub. 2. Após instalar o Hub, vá para a aba “Installs” e clique em “Install Editor”. 3. Escolha uma versão LTS (Long-Term Support), como destacado na Figura 3.1. As versões LTS são as mais estáveis. Figura 3.1: Janela de instalação do Unity Editor no Hub, exibindo as versões LTS. Fique Alerta! Durante a instalação, é obrigatório adicionar o módulo Android Build Support, suas dependências (OpenJDK eAndroid SDK & NDK Tools) e o Microsoft Visual Studio Community, como vemos na Figura 3.2 a seguir. 36 CAPÍTULO 3. INTRODUÇÃO À FERRAMENTA UNITY 3D COM C# Figura 3.2: Seleção de módulos essenciais para o desenvolvimento Android. 3.2.2 Criação e Configuração do Projeto para Android Com a Unity instalada, abra o Unity Hub e crie um novo projeto na aba “Projects”. 1. Crie o Projeto: Utilize o template 3D Mobile, como na Figura 3.3. Dê um nome, como MeuProjetoVR, e clique em “Create project”. Figura 3.3: Tela de criação de novo projeto, com o template 3D Mobile selecionado. 2. Defina a Plataforma Alvo: Assim que o projeto abrir, vá em File > Build Settings. Na janela que surgir, selecione Android e clique em Switch Platform. 37 CAPÍTULO 3. INTRODUÇÃO À FERRAMENTA UNITY 3D COM C# 3. Configure o Player:Acesse Edit > Project Settings... > Player. Aqui faremos os ajustes finais para o Android. Fique Alerta! Configurando o Modo de Input Híbrido (Passo Essencial) Para garantir a máxima compatibilidade dos sensores, vamos configurar a Unity para usar um modo de input híbrido. Na seção Other Settings, localize a opção Active Input Handling e altere seu valor para Both, como destacado na Figura 3.4. O editor solicitará uma reinicialização para aplicar a mudança. Figura 3.4: Ajustando o Active Input Handling para Both. Após a reinicialização, continue com as outras configurações na mesma janela: •Package Name: Defina um nome de pacote único (ex: com.meueditor.meuprojetovr). •Minimum API Level: Android 8.0 Oreo (API level 26) ou superior. •Scripting Backend: IL2CPP. •Target Architectures: Marque a caixa de seleção ARM64. Com o projeto agora corretamente configurado para Android, podemos prosseguir. 38 CAPÍTULO 3. INTRODUÇÃO À FERRAMENTA UNITY 3D COM C# 3.2.3 Tour pela Interface Ao abrir, você verá uma tela com várias janelas. Vamos conhecer as cinco principais, destacadas na Figura 3.5. Figura 3.5: A interface principal do Unity Editor. As janelas chave são a Scene (centro), Game (aba ao lado da Scene), Hierarchy (esquerda), Project (abaixo) e Inspector (direita). •A Janela Scene (Cena): Nosso Palco Virtual. Esta é a sua principal área de trabalho. É uma visão 3D onde você monta seu mundo. Você pode “voar” por ela usando o mouse e o teclado, posicionar objetos, luzes e câmeras. É como ser um diretor de cinema fantasma, flutuando pelo set de filmagem. •A Janela Game (Jogo): A Visão do Jogador. Esta janela mostra exatamente o que o jogador verá quando o jogo começar. É a visão da “câmera” principal da sua cena. Você não pode editar nada aqui; apenas visualizar. •A Janela Hierarchy (Hierarquia): A Lista de “Atores e Objetos”. Localizada geralmente à esquerda, a Hierarquia é uma lista de “tudo” que existe na sua cena atual: o personagem, os inimigos, as paredes, o chão, a luz do sol. Se algo está na cena, o nome dele estará nesta lista. •A Janela Project (Projeto): Nossa “Mochila” de Recursos. Na parte inferior, a janela de Projeto é onde ficam todos os seus “ingredientes” e “materiais de construção”. Modelos 3D, texturas, arquivos de som, vídeos e, mais importante, seus códigos (scripts), ficam guardados aqui. Pense nela como uma mochila: os itens aqui não estão sendo usados ainda, mas estão disponíveis para você pegar e colocar na cena quando quiser. •A Janela Inspector (Inspetor): O “Painel de Propriedades”. À direita, o Inspetor é um painel sensível ao contexto. Quando você clica em qualquer objeto na Hierarquia ou na Cena, o Inspector mostra todos os detalhes, propriedades e configurações daquele objeto. É como a “ficha de personagem” de cada elemento do seu mundo. 39 CAPÍTULO 3. INTRODUÇÃO À FERRAMENTA UNITY 3D COM C# 3.3 Navegando no Espaço 3D: O Plano Cartesiano (X, Y, Z) Antes de começarmos a criar objetos, precisamos entender o mapa do nosso universo virtual: o sistema de coordenadas 3D. Se você já usou um gráfico de pizza 2D, conhece os eixos X (horizontal) e Y (vertical). No mundo 3D, simplesmente adicionamos um terceiro eixo, o Z, para criar a profundidade. Pense no canto de um quarto: • O eixo Xcorre ao longo de uma parede, da esquerda para a direita. • O eixo Ycorre do chão ao teto, de baixo para cima. • O eixo Zcorre da parede para a frente, em sua direção. Figura 3.6: Sistema de coordenadas 3D Fonte: Wikimedia Na Unity, essas direções são representadas por cores nos manipuladores da janela Scene: •Eixo X (Vermelho): Controla o movimento para a esquerda e para a direita. •Eixo Y (Verde): Controla o movimento para cima e para baixo. •Eixo Z (Azul): Controla o movimento para a frente e para trás. Entender esses três eixos é a base para posicionar, girar e dimensionar qualquer objeto em seu mundo virtual. Todo GameObject terá um componente Transform que guarda seus valores de Posição, Rotação e Escala nesses três eixos. 40 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO Figura 4.2: A textura de Júpiter importada para a pasta Assets e selecionada, exibindo suas propriedades no Inspector. 2. Criação da Esfera: Crie um objeto Sphere através do menu de contexto da Hierarchy (3D Object > Sphere), como demonstrado na Figura 4.3. Após a criação, sua cena conterá uma esfera padrão, conforme a Figura 4.4, que renomearemos para Jupiter. Figura 4.3: Menu de contexto para a criação de um objeto 3D do tipo Sphere. 47 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO Figura 4.4: O GameObject Sphere criado e posicionado na cena, pronto para receber seu material. 3. Criação do Material:Na pasta Assets, crie um novo Material (Create > Material), como visto na Figura 4.5. Nomeie o novo arquivo como JupiterMaterial. Figura 4.5: Menu de contexto para a criação de um novo Material na pasta Assets. 48 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO 4. Configuração e Aplicação do Material: Selecione o JupiterMaterial. No Inspector, arraste a textura de Júpiter para o campo Base Map, como mostra a Figura 4.6. Finalmente, arraste o material já configurado (da pasta Assets) para cima do objeto Jupiter na cena. O resultado é o planeta já texturizado, como visto na Figura 4.7. Figura 4.6: Configuração do material de Júpiter, arrastando a textura para o slot Base Map. A pré-visualização já mostra o resultado. Figura 4.7: O planeta Júpiter finalizado na janela Scene, após a aplicação correta do material. 49 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO 5. Ajustes Finais de Transformação: Por último, é importante ajustar as configurações de posição e tamanho do planeta para que ele fique bem visível à frente da câmera. Selecione o objeto Jupiter e, no componente Transform, aplique os valores da Tabela 4.2. O resultado final pode ser observado na Figura 4.8. Tabela 4.2: Configurações de Transformação para Júpiter Parâmetro X Y Z Position 0 1 8 Rotation 0 0 0 Scale 5 5 5 Figura 4.8: Visão final do planeta Júpiter na cena após todos os ajustes de transformação. 4.2 Aprimorando a Imersão: Skybox e Rotação Planetária Para tornar a experiência mais crível e visualmente impressionante, um passo fundamental é substituir o fundo padrão da cena por um ambiente panorâmico e dar vida ao nosso objeto principal. 50 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO 4.2.1 Adicionando um Céu Estrelado (Skybox) OSkybox transforma instantaneamente a atmosfera de sua cena de RV. 1. Obtenha um Skybox:Navegue até a Unity Asset Store (Window > Asset Store). Utilize a busca por termos como “free space skybox” (Figura 4.9). Existem diversos pacotes gratuitos de alta qualidade. Figura 4.9: Resultados da busca por free space skybox na Asset Store. 2. Selecione um pacote (por exemplo, Starfield Skybox da Pulsar Bytes). Clique em Add to My Assets no navegador (Figura 4.10), e então Open in Unity para abrir o Package Manager (Figura 4.11). Figura 4.10: Added to My Assets no navegador, com opções para abrir na Unity. 51 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO Figura 4.11: Download do pacote Starfield Skybox via Package Manager. 3. No Package Manager, após o download (Figura 4.12), clique em “Import”. Figura 4.12: Pacote Starfield Skybox pronto para importação no Package Manager. 4. Uma janela de Import Unity Package será exibida. Certifique-se de que os materiais e texturas do Skybox estejam selecionados e clique em Import (Figura 4.13). 52 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO Figura 4.13: Diálogo de importação do pacote, mostrando os arquivos inclusos. 5. Aplique o Skybox à Cena: Vá em Window > Rendering > Lighting (Figura 4.14). Na aba Environment, localize o campo Skybox Material. Clique no pequeno círculo à direita e selecione o material do Skybox que você acabou de importar (Figura 4.15). Sua cena será transformada instantaneamente. Figura 4.14: Acessando o menu Lighting através de Window > Rendering. 53 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO Figura 4.15: Selecionando e aplicando o material do Skybox na janela Lighting. 4.2.2 Fazendo Júpiter Girar Um planeta estático parece uma foto. Um planeta em rotação lenta parece real. 1. Crie um novo script C# na pasta Assets e nomeie-o RotacaoLenta. 2. Cole o código 4.1 a seguir nele. Copie e Teste! using UnityEngine; public class RotacaoLenta : MonoBehaviour { public float velocidade = 2.0f; // Graus por segundo void Update() { // Gira o objeto em torno do seu eixo Y (Vector3.up) transform.Rotate(Vector3.up, velocidade * Time.deltaTime); } } Código 4.1: Script para rotação lenta de um objeto. 3. Salve o script e anexe-o ao seu objeto Jupiter na Hierarchy. Você pode ajustar a velocidade no Inspector para controlar o ritmo da rotação. 54 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO 4.3 O Coração da Interação: O Script de Controle 4.3.1 O Giroscópio (Input.gyro) Após extensivos testes, identificamos que a maneira mais estável de ler os sensores de orientação em diversas versões do Android é através do sistema de input legado da Unity, Input.gyro. Ao configurar o Active Input Handling para Both, garantimos que este sistema esteja acessível. Uma particularidade do giroscópio legado é que ele opera em um sistema de coordenadas diferente do da Unity. Portanto, nosso script precisará de uma função auxiliar para realizar a conversão matemática e garantir que os movimentos sejam mapeados corretamente. 4.3.2 Implementação do Script LegacyGyroController.cs Criaremos um script C# que implementa essa lógica de conversão, calibração inicial e recentralização ao toque na tela, conforme o código 4.2. Copie e Teste! using UnityEngine; using System.Collections; public class LegacyGyroController : MonoBehaviour{ // --- VARIÁVEIS PÚBLICAS --- public Transform objetoAlvo; public Transform vrPlayerTransform; public float distanciaInicial = 10f; private bool gyroSupported; private Quaternion correcaoRotacao = Quaternion.identity; void Start(){ // Ativa o giroscópio do sistema antigo gyroSupported = SystemInfo.supportsGyroscope; if (gyroSupported){ Input.gyro.enabled = true; } else{ Debug.LogError("ERRO: Giroscópio (Legacy) NÃO SUPORTADO neste dispositivo."); } StartCoroutine(CalibracaoInicialAtrasada()); } void Update(){ if (gyroSupported){ // Aplica a rotação do giroscópio antigo, já com a correção aplicada 55 CAPÍTULO 4. CONSTRUINDO SUA PRIMEIRA CENA DE RV DO ZERO transform.rotation = correcaoRotacao * GyroToUnity(Input.gyro.attitude); if (Input.GetMouseButtonDown(0)){ Recenter(); } } } // Converte a rotação do sistema de coordenadas do giroscópio para o da Unity. private Quaternion GyroToUnity(Quaternion q){ return new Quaternion(q.x, q.y, -q.z, -q.w); } private IEnumerator CalibracaoInicialAtrasada(){ yield return new WaitForEndOfFrame(); yield return new WaitForEndOfFrame(); // Espera extra para estabilização do sensor Recenter(); } // --- LÓGICA DE RECENTRALIZAÇÃO --- public void Recenter(){ if (objetoAlvo == null || vrPlayerTransform == null)return; // 1. Calcula a rotação de correção necessária // Pega a rotação atual do giroscópio e calcula o inverso dela. // Isso nos dá a rotação exata para "zerar" a visão atual. correcaoRotacao = Quaternion.Inverse(GyroToUnity(Input.gyro.attitude)); // 2. Reposiciona o planeta na nova "frente" // Como a rotação da cabeça (Head) será zerada no próximo Update, // a "frente" do VR Player se torna a referência correta. Vector3 novaPosicaoAlvo = vrPlayerTransform.position + (vrPlayerTransform.forward * distanciaInicial); objetoAlvo.position = novaPosicaoAlvo; objetoAlvo.LookAt(vrPlayerTransform.position); // Faz o planeta olhar para o jogador } } Código 4.2: Código usando o sistema de giroscópio legado. 56 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL Figura 5.2: Configuração final do componente da Esfera no Inspector. Figura 5.3: Configuração final do componente do Cubo no Inspector. Figura 5.4: Configuração final dos componentes da Cápsula no Inspector. 63 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL 5.2.2 Criando os Objetos Interativos 1. Adicione e Posicione os Objetos: Crie três objetos 3D primitivos na cena: uma Sphere, um Cube e uma Capsule. Para garantir uma disposição harmoniosa e facilitar os testes, configure o componente Transform de cada um deles utilizando os valores exatos da Tabela 5.2. Tabela 5.2: Configurações de Transformação para os Objetos do Showroom. Objeto Posição (X, Y, Z) Rotação (X, Y, Z) Escala (X, Y, Z) Sphere (0, 1, 5) (0, 0, 0) (1, 1, 1) Cube (-4, 1, 4) (0, 45, 0) (1, 1, 1) Capsule (4, 1, 4) (0, -30, 0) (1, 2, 1) 2. Adicione Colliders:Para que nosso “raio do olhar” possa detectá-los, cada um desses três objetos precisa de um componente de colisão. Selecione cada um e vá em Add Component > Physics e adicione o collider correspondente (Sphere Collider,Box Collider, Capsule Collider), como ilustrado na Figura 5.5. Figura 5.5: Adicionando um componente Box Collider a um dos objetos interativos. 3. Crie a Tag Interativo:As tags são essenciais para identificar objetos no código. Siga os passos ilustrados na Figura 5.6 para criar e atribuir a tag Interativo a todos os três objetos. 64 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL Figura 5.6: Processo de criação (esquerda) e atribuição (direita) de uma nova Tag no Inspector. 5.3 Implementando a Interface de Usuário (UI) Dinâmica 5.3.1 O Canvas em World Space Para que a nossa UI (painéis de informação) exista dentro do mundo 3D e não fique colada na “tela”, precisamos usar um Canvas em modo World Space. 5.3.2 Construindo os Painéis de Informação Para cada objeto, construiremos um painel de informações. Siga os valores da Tabela 5.3 para configurar o Rect Transform de cada CanvasInfo. Tabela 5.3: Configurações de Rect Transform para os Painéis de UI Parâmetro CanvasInfo (Sphere) CanvasInfo2 (Cube) CanvasInfo3 (Capsule) Pos Y 1.2 1.2 1.5 Width 200 200 200 Height 120 120 120 Scale (X, Y, Z) (0.005, 0.005, 0.005) 1. Para a Esfera, crie um filho Canvas chamado CanvasInfo. Aplique as configurações da primeira coluna da Tabela 5.3, como visto na Figura 5.7. 2. Para o Cubo, crie um filho Canvas chamado CanvasInfo2. Aplique as configurações da segunda coluna da Tabela 5.3, como visto na Figura 5.8. 3. Para a Cápsula, crie um filho Canvas chamado CanvasInfo3. Aplique as configurações da terceira coluna da Tabela 5.3, como visto na Figura 5.9. 65 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL Figura 5.7: Configuração do Rect Transform para o Canvas da Esfera (CanvasInfo). Figura 5.8: Configurações do Rect Transform para o Canvas do Cubo. Figura 5.9: Configurações do Rect Transform para o Canvas da Cápsula. 66 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL Para cada Canvas, adicione um Panel de fundo e um Text - TextMeshPro filho. Configure o conteúdo de cada texto, como exemplificado nas Figuras 5.10, 5.11, e 5.12. Figura 5.10: Conteúdo do texto para a Esfera. Figura 5.11: Conteúdo do texto para o Cubo. Figura 5.12: Conteúdo do texto para a Cápsula. 67 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL Fique Alerta! Lembre-se de desativar os GameObjects CanvasInfo,CanvasInfo2 eCanvasInfo3 após configurá-los, para que comecem a cena invisíveis. E você pode/deve mudar os textos apresentados nos exemplos acima! 5.4 O Script de Interação com o Olhar (Gaze Interaction) A lógica de interação é dividida em dois scripts. O primeiro, ObjetoInterativo.cs, é anexado a cada objeto do showroom. O segundo, GazeInteractor.cs, é anexado ao objeto Head do jogador. Script 1: O Objeto Interativo (ObjetoInterativo.cs) Este script será anexado a cada objeto do nosso showroom. Ele define o que acontece quando o objeto é olhado. Copie e Teste! using UnityEngine; public class ObjetoInterativo : MonoBehaviour{ public GameObject painelInfo; // Para conectar o CanvasInfo no Inspector private Material meuMaterial; private Color corOriginalEmissao; private Color corDestaque = Color.yellow; void Start(){ // Pega o material do objeto para podermos altera-lo meuMaterial = GetComponent<MeshRenderer>().material; meuMaterial.EnableKeyword("_EMISSION"); // Garante que o material pode brilhar corOriginalEmissao = meuMaterial.GetColor("_EmissionColor"); // Garante que o painel comece desativado if (painelInfo != null){ painelInfo.SetActive(false); } } // Chamado quando o olhar entra no objeto public void OnOlharEntrou(){ if (painelInfo != null) painelInfo.SetActive(true); meuMaterial.SetColor("_EmissionColor", corDestaque * 0.5f); // Faz brilhar } 68 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL // Chamado quando o olhar sai do objeto public void OnOlharSaiu(){ if (painelInfo != null) painelInfo.SetActive(false); meuMaterial.SetColor("_EmissionColor", corOriginalEmissao); // Remove o brilho } } Código 5.1: Script para gerenciar o estado de um objeto interativo. Script 2: O Interator do Olhar (GazeInteractor.cs) Este script será o “ponteiro” do nosso olhar, responsável por detectar os objetos. Copie e Teste! using UnityEngine; public class GazeInteractor : MonoBehaviour{ public Camera vrCamera; private ObjetoInterativo objetoSelecionadoAtualmente; void Update(){ Ray ray = new Ray(vrCamera.transform.position, vrCamera.transform.forward); RaycastHit hit; // Se o raio atinge um objeto com collider... if (Physics.Raycast(ray, out hit)){ // ...e esse objeto tem o script ObjetoInterativo... ObjetoInterativo interativo = hit.transform.GetComponent<ObjetoInterativo>(); if (interativo != null){ // Se estamos olhando para um novo objeto, deselecionamos o antigo if (interativo != objetoSelecionadoAtualmente && objetoSelecionadoAtualmente != null){ objetoSelecionadoAtualmente.OnOlharSaiu(); } // Selecionamos o novo objeto e o ativamos objetoSelecionadoAtualmente = interativo; objetoSelecionadoAtualmente.OnOlharEntrou(); }else{// Se olhamos para algo nao-interativo DeselecionarObjetoAtual(); } }else{// Se não olhamos para nada DeselecionarObjetoAtual(); } 69 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL } void DeselecionarObjetoAtual(){ if (objetoSelecionadoAtualmente != null){ objetoSelecionadoAtualmente.OnOlharSaiu(); objetoSelecionadoAtualmente = null; } } } Código 5.2: Script que projeta um raio da câmera para detectar objetos. 5.4.1 Configurando a Interação no Editor 1. Anexe o script GazeInteractor.cs ao objeto Head. No Inspector, arraste uma das câmeras (ex: Left Eye Camera) para o campo Vr Camera. 2. Anexe o script ObjetoInterativo.cs a cada um dos seus três objetos interativos (Esfera, Cubo, Cápsula). 3. Para cada objeto, conecte seu respectivo Canvas no campo Painel Info do script ObjetoInterativo. Por exemplo, para a Esfera, arraste o CanvasInfo para o campo. Para o Cubo, arraste o CanvasInfo2, e assim por diante. A Figura 5.13 mostra o resultado final dos componentes nos objetos Head eSphere. 70 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL Figura 5.13: Configuração final no Inspector para a Esfera, mostrando o script ObjetoInterativo conectado ao seu painel, e para o objeto Head, com os scripts de controle e interação. Compile e instale o aplicativo em seu celular Android. A Figura 5.14 mostra como a cena deve aparecer no seu dispositivo. Após finalizar a compilação e abrir o aplicativo, você estará no centro do seu showroom. Os painéis de informação estarão invisíveis. Ao direcionar sua visão para qualquer um dos três objetos, ele deverá brilhar em amarelo e seu painel de informações correspondente deverá aparecer. Ao desviar o olhar, o objeto voltará ao normal e o painel desaparecerá. E, a qualquer momento, ao tocar na tela, a sua visão será recentralizada! Figura 5.14: Visão estereoscópica final do aplicativo em execução no smartphone. 71 CAPÍTULO 5. INTERATIVIDADE EM RV: CRIANDO UM SHOWROOM VIRTUAL 5.5 Aplicando seus conhecimentos Seu showroom funciona, mas o aprendizado nunca para! Tente implementar estas melhorias para aprimorar ainda mais a experiência e suas habilidades: 1. Adicione Feedback Sonoro: No script ObjetoInterativo.cs, adicione um AudioSource como variável pública. Faça com que um som sutil de “selecionar” toque na função OnOlharEntrou e outro som de “deselecionar” toque em OnOlharSaiu. Isso aumentará muito a satisfação do usuário. 2. Animação dos Painéis: Em vez de os painéis de informação simplesmente aparecerem, faça-os surgir suavemente. Você pode conseguir isso adicionando um componente Canvas Group ao seu CanvasInfo e, no script, em vez de usar SetActive(), alterar gradualmente a propriedade alpha (transparência) de 0 para 1. 3. Interação de “Clique”: Modifique o script GazeInteractor.cs. Adicione uma verificação de toque na tela (Input.GetMouseButtonDown(0)). Se o jogador tocar na tela enquanto estiver olhando para um objeto, faça algo acontecer! Por exemplo, o painel de informações poderia exibir detalhes adicionais ou o objeto poderia executar uma animação. 4. Otimização com Prefabs: Transforme seu objeto interativo completo (ex: a Esfera com seu CanvasInfo filho e todos os scripts já configurados) em um único prefab. Isso tornará extremamente fácil adicionar dezenas de novos objetos ao seu showroom, bastando arrastar o prefab para a cena e alterar o texto de descrição. 5.6 Próximos Passos Ao final deste capítulo, você deu um salto significativo de um criador de cenas para um arquiteto de experiências interativas. Deixamos de ser meros observadores para nos tornarmos participantes ativos no mundo virtual, capazes de influenciá-lo com nosso olhar. Construímos um sistema robusto e escalável que introduziu conceitos fundamentais para qualquer aplicação de RV mais complexa: •Interação com o Olhar (Gaze Interaction): Aprendemos a usar Physics.Raycast para projetar um “ponteiro” invisível a partir da câmera, detectando com precisão para onde o usuário está olhando. •UI em World Space:Dominamos a criação de interfaces de usuário que existem como objetos no mundo 3D, um requisito essencial para a imersão em RV. •Arquitetura Orientada a Componentes: Em vez de um único script monolítico, separamos as responsabilidades. Criamos um script GazeInteractor que “olha” e um script ObjetoInterativo que “reage”, uma prática de programação limpa e eficiente. •Gerenciamento de Estado: Nosso código agora gerencia estados (qual objeto está selecionado?) e aciona eventos (OnOlharEntrou,OnOlharSaiu) para fornecer feedback dinâmico ao usuário. 72 Capítulo 7 Estudos de Caso de RV no IFAM Campus Coari 7.1 Introdução: A RV como Ferramenta de Acesso A Realidade Virtual (RV) transcende a barreira do entretenimento e se estabelece como uma poderosa ferramenta pedagógica, de marketing e de acessibilidade. No contexto educacional, sua aplicação permite a criação tanto de “gêmeos digitais” (digital twins) de ambientes físicos quanto de espaços conceituais interativos. O pilar central da eficácia da RV é o conceito de presença: a sensação psicológica de “estar lá” no ambiente virtual. A presença, quando alcançada, está diretamente correlacionada a maiores índices de engajamento e retenção de conhecimento. Este capítulo detalha dois estudos de caso distintos desenvolvidos no IFAM Campus Coari. Ambos os projetos demonstram a aplicação de ferramentas de autoria low-code para democratizar o acesso à informação e ao espaço institucional, mas com abordagens metodológicas fundamentalmente diferentes. 7.2 A Plataforma Comum: Delightex Edu Ambos os projetos analisados foram construídos utilizando a plataforma Delightex Edu. Trata-se de uma plataforma educacional Software as a Service (SaaS) baseada em nuvem, focada na criação de conteúdo 3D e RV com uma abordagem low-code/no-code. O seu caráter SaaS é um diferencial chave para o setor educacional: a plataforma é acessível inteiramente de um navegador web. Isso elimina a necessidade de instalações complexas ou de hardware de alto desempenho (como computadores gamer) para a etapa de criação, tornando-a viável em laboratórios de informática institucionais ou mesmo em computadores pessoais de professores e alunos. O compartilhamento das experiências é igualmente simplificado, muitas vezes resumindo-se à distribuição de um link (URL) ou um código de turma, que pode ser acessado em desktops,smartphones (com ou sem óculos tipo Cardboard) ou headsets de RV standalone. 79 CAPÍTULO 7. ESTUDOS DE CASO DE RV NO IFAM CAMPUS COARI Figura 7.1: Página oficial da plataforma Delightex Edu. A abordagem low-code/no-code é o que, de fato, democratiza a autoria de conteúdo imersivo. A plataforma opera sobre dois pilares de interatividade que se complementam: •Interface Visual (No-Code): Para a construção de cenas, o Delightex Edu oferece uma biblioteca robusta de ativos 3D (assets) em estilo low-poly, incluindo personagens, animais, edifícios e mobiliário. O criador pode arrastar, soltar, rotacionar e escalar esses objetos em um ambiente 3D intuitivo. •Programação em Blocos (Low-Code): Para a lógica de interatividade (ex: “QUANDO o usuário clicar no avatar, FAÇA o avatar dizer Olá”), o Delightex Edu utiliza um sistema de blocos de programação visual chamado CoBlocks. Este sistema, análogo ao Scratch ou ao Blockly, é intuitivo e fundamentalmente pedagógico. Ele permite que educadores e alunos criem interações complexas sem escrever código-fonte, ao mesmo tempo em que aprendem os fundamentos da lógica de programação (condicionais, loops, eventos, variáveis). •Programação em Script (Avançado): Para usuários que necessitam de maior controle e flexibilidade, a plataforma também suporta scripting (normalmente em TypeScript), permitindo a implementação de mecânicas de jogo complexas, integração com APIs externas e interações mais sofisticadas. Esta filosofia de “piso baixo e teto alto” (low floor, high ceiling) é ideal para ambientes de aprendizado com níveis de habilidade mistos. A força da plataforma reside em sua versatilidade, permitindo que educadores criem dois tipos principais de experiências, que são exatamente os focos dos nossos estudos de caso: 80 CAPÍTULO 7. ESTUDOS DE CASO DE RV NO IFAM CAMPUS COARI •Tours 360º (Baseados em Realidade): Este modo permite o upload de imagens panorâmicas esféricas (equirretangulares) como o “ambiente” ou skybox da cena. O criador então sobrepõe hotspots interativos (como setas, ícones de informação, áudios e vídeos 2D) sobre esta imagem real. O foco é a exploração fotorrealista e a presença espacial em um local existente, como demonstrado no Caso 1. •Mundos 3D Modelados (Baseados em Conceito): Este modo utiliza um espaço 3D vazio que é preenchido com os ativos low-poly da biblioteca da plataforma. Como será visto no Caso 2, este estilo é ideal para criar hubs de informação, simulações, narrativas interativas (storytelling) ou espaços de encontro conceituais. O foco é a interatividade funcional e a criação de um espaço lúdico, não necessariamente uma réplica da realidade. Os estudos de caso a seguir demonstram como esses dois modos de criação, embora metodologicamente distintos, são usados dentro da mesma ferramenta para atingir objetivos pedagógicos complementares no IFAM Campus Coari. 7.3 Estudo de Caso 1: Tour Virtual 360º O primeiro estudo de caso, conduzido pelo Prof. Márcio Aurélio dos Santos Alencar, representa a aplicação mais direta e de alto impacto da RV em um contexto institucional: a criação de um “gêmeo digital” (digital twin) do campus físico. Esta abordagem utiliza a fotografia 360º como sua principal matéria-prima, focando no fotorrealismo e na presença espacial para replicar fielmente a experiência de estar fisicamente no local. O objetivo deste projeto é multifacetado, servindo a propósitos tanto pedagógicos quanto institucionais. Primeiramente, atua como uma poderosa ferramenta de onboarding (integração), permitindo que novos alunos explorem o campus remotamente antes mesmo do início das aulas. Esta familiarização prévia com o ambiente físico: localização de salas, laboratórios, biblioteca e setores administrativos, pode reduzir significativamente a ansiedade do primeiro dia e otimizar a logística de locomoção. Além da integração, o tour 360º serve como: •Ferramenta de Acessibilidade: Oferece uma modalidade de visita para indivíduos com mobilidade reduzida, que podem não conseguir percorrer todo o campus fisicamente com facilidade. •Divulgação Institucional (Marketing): Funciona como um showcase interativo e de baixo custo, permitindo que potenciais alunos, pais, e parceiros institucionais de outras cidades ou estados possam “visitar” as instalações de forma imersiva 24 horas por dia. •Preservação Digital: Cria um registro visual detalhado do campus em um ponto específico no tempo, servindo como um arquivo histórico-digital de sua infraestrutura e layout. Tecnicamente, este tipo de projeto é um tour virtual baseado em nós (node-based). Cada fotografia 360º capturada no mundo real funciona como um “nó” ou ponto de observação estático no mundo virtual. A interatividade primária do usuário, portanto, não é a livre movimentação (como em um jogo 3D), mas sim o “teletransporte” de um nó para outro através de hotspots de navegação pré-definidos. As subseções a seguir detalham as fases de produção deste tour. 81 CAPÍTULO 7. ESTUDOS DE CASO DE RV NO IFAM CAMPUS COARI 7.3.1 Fase 1: Planejamento e Captura de Mídia Esta é a fase mais crítica do processo. A fundação de um tour 360º é a qualidade de sua mídia-base. Erros cometidos durante a captura, como má iluminação, ângulos inadequados ou artefatos de stitching, são extremamente difíceis, se não impossíveis, de corrigir na pósprodução e degradam severamente a sensação de presença do usuário final. Figura 7.2: Exemplo de equipamento de captura 360º. Fonte: Disponível no website do projeto “Tour 360 por Coari/AM”, desenvolvido e mantido pelo Prof. Márcio Alencar em https://coari360.byethost3.com •Roteirização e Mapeamento de Nós: O planejamento vai além de uma simples lista de POIs. Envolve a criação de um storyboard visual ou um mapa de nós (node map). Este mapa define a localização exata de cada captura (cada nó) e as conexões lógicas (arestas) entre eles. Um bom mapa de nós garante que o fluxo de navegação seja intuitivo e simule um caminhar real, prevenindo desorientação. Saltos abruptos (ex: da entrada do prédio direto para uma sala no terceiro andar) são evitados em favor de uma progressão lógica (ex: entrada →hall →escada →corredor do 3º andar →sala). •Equipamentos e Posicionamento: Diferente da prática de estúdio, que preza pelo uso de tripés para estabilidade máxima, a captura neste estudo de caso foi realizada de forma pragmática e ágil, com a câmera 360º segurada diretamente nas mãos do fotógrafo. Esta abordagem “em campo” introduz desafios significativos que devem ser compensados: 1. Estabilidade e Nivelamento: A principal dificuldade da captura manual é manter o horizonte perfeitamente nivelado. Um horizonte inclinado é a causa mais comum de cybersickness (náusea de RV). Embora as câmeras modernas possuam estabilização interna, isso exigiu atenção do operador ou correções pontuais na pós-produção. 2. Altura do Ponto de Vista (POV): A altura da câmera variava com a postura do fotógrafo, em vez de ser fixada em 1,60m-1,70m como um tripé faria. O operador buscou manter a câmera em uma altura consistente, simulando o ponto de vista natural dos olhos. 3. Artefatos e Pós-produção: A consequência mais óbvia da captura manual é a presença do fotógrafo (no mínimo, sua mão e braço) no nadir (ponto cego inferior) da 82 CAPÍTULO 7. ESTUDOS DE CASO DE RV NO IFAM CAMPUS COARI imagem. Isso torna a etapa de pós-produção para remoção de artefatos absolutamente mandatória e mais complexa do que a simples remoção de um tripé fino. Esta metodologia dispensa o uso de disparadores remotos para “se esconder”, pois o fotógrafo já está intencionalmente na cena e sua remoção é um passo planejado da pósprodução. Figura 7.3: Exemplo de captura 360º bruta (raw), exibindo o formato de lente dupla fisheye antes do processamento (stitching). A imagem mostra o pórtico de entrada de Coari-AM, e ilustra a mídia-base que fundamenta o tour virtual. •Técnica: Captura Monoscópica vs. Estereoscópica: Como pode-se observar na figura 7.3, neste caso optou-se pela captura monoscópica (2D 360º). Esta técnica gera uma única imagem equiretangular por nó. Embora não forneça percepção de profundidade estereoscópica (3D), o cérebro humano é capaz de inferir profundidade a partir de pistas monoscópicas robustas, como perspectiva, sombreamento e oclusão. A alternativa, estereoscópica (3D 360º), captura duas imagens (uma para cada olho), criando uma sensação de profundidade real e maior imersão. No entanto, esta técnica foi pragmaticamente descartada devido aos seus trade-offs: exige câmeras especializadas e caras, gera arquivos com o dobro do tamanho (impactando o streaming e a acessibilidade web) e pode, paradoxalmente, aumentar o desconforto se a distância inter-pupilar (IPD) não for bem calibrada. Para um tour focado em ampla acessibilidade educacional, a escolha monoscópica é a mais eficiente e robusta. 7.3.2 Fase 2: Pós-produção da Mídia e Autoria na Plataforma Com as imagens 360º capturadas, inicia-se a segunda fase, que é dividida em dois estágios distintos: primeiro, o tratamento e otimização das imagens (pós-produção) e, segundo, a montagem da experiência interativa na plataforma de autoria (Delightex Edu). Pós-produção e Otimização da Mídia As imagens equirretangulares brutas, saídas diretamente da câmera (especialmente as capturadas em HDR), raramente estão prontas para uso. Elas são arquivos grandes e que pre83 CAPÍTULO 7. ESTUDOS DE CASO DE RV NO IFAM CAMPUS COARI cisam de refinamento técnico e estético: •Tratamento e Correção de Cor: Esta é uma etapa artística e técnica crucial. O objetivo é garantir a consistência visual entre todos os nós do tour. O editor de imagem (ex: Adobe Lightroom,Photoshop) ajusta a temperatura de cor, a exposição e o balanço de branco para que a transição de um ambiente externo (luz do sol) para um interno (luz artificial) não seja abrupta ou visualmente destoante. Sem esta etapa, o tour pareceria uma colagem de fotos desconexas. •Remoção de Artefatos (Nadir): Consequência direta da captura manual (sem tripé), o nadir (o ponto cego diretamente abaixo da câmera) invariavelmente captura a mão e o braço do fotógrafo. Este é um artefato que quebra a imersão e denota falta de profissionalismo. A técnica para removê-lo envolve o uso de ferramentas de patch (remendo) no Photoshop, onde o operador é “pintado” com a textura do chão ao redor (grama, piso, asfalto). Uma alternativa comum é sobrepor ao nadir um gráfico customizado, como um logotipo da instituição ou uma rosa dos ventos. •Otimização e Compressão: Este é um trade-off (balanço) crítico entre qualidade e performance. Uma imagem 8K (ex: 8192x4096 pixels) oferece detalhes incríveis, mas pode ter dezenas de megabytes e levar um tempo proibitivo para carregar em conexões de internet lentas ou móveis. Para um tour baseado na web, as imagens são frequentemente redimensionadas (ex: 4K ou 6K) e comprimidas (em formatos como JPEG) para encontrar o ponto ideal onde a qualidade visual permanece alta, mas o tempo de carregamento (latência) é mínimo. Autoria e Montagem da Interatividade Com as imagens otimizadas em mãos, o desenvolvedor agora as importa para o Delightex Edu para construir a experiência. •Criação de Cenas: A montagem do tour é baseada em cenas. Cada imagem equiretangular tratada é carregada na plataforma e configurada como o “ambiente” (ou skybox) de uma cena individual. O tour virtual completo é, portanto, uma coleção dessas cenas, onde cada cena representa um “nó” (ponto de observação) do mapa de navegação definido na Fase 1. •Hotspots de Navegação: Este é o elemento que transforma uma galeria de fotos 360º em um tour. O desenvolvedor adiciona objetos 3D (como as setas vermelhas vistas no vídeo) dentro da cena. A localização desses hotspots é um ponto chave do design de UX: uma seta apontando para uma porta deve ser posicionada sobre a porta. Usando a lógica de programação em blocos da plataforma, um comando simples é aplicado a cada seta: “QUANDO clicado, FAÇA teletransportar o usuário PARA Cena_Corredor”. Isso cria as “arestas” (caminhos) que conectam os “nós” (cenas). •Hotspots de Informação: Aqui é onde o tour ganha valor educacional. Além das setas de navegação, o desenvolvedor adiciona outros ícones interativos (ícones de “i” para informação, ícones de câmera, etc.) sobre objetos de interesse. Estes hotspots são programados para, quando ativados, não transportar o usuário, mas sim sobrepor uma camada de informação. As ações mais comuns incluem: 84 CAPÍTULO 7. ESTUDOS DE CASO DE RV NO IFAM CAMPUS COARI – Exibir Painéis de Texto: Mostrar uma caixa de texto flutuante com a descrição de um laboratório ou o histórico de um local. – Tocar Áudio: Reproduzir um arquivo de áudio (MP3) com uma narração explicativa (criando um áudio-guia) ou sons ambientes para aumentar a imersão. – Mostrar Mídia 2D: Exibir uma imagem estática (ex: o close-up de um equipamento) ou até mesmo um vídeo 2D (ex: uma tela virtual em uma sala de aula mostrando uma mensagem de boas-vindas). Dessa forma, a montagem no Delightex Edu é o processo de ligar as cenas com hotspots de navegação e enriquecer cada cena com hotspots de informação. 7.3.3 Fase 3: Apresentação com Espelhamento A experiência de RV em um headset é, por definição, individual e isolada. O desafio pedagógico, portanto, é transformar esta vivência solitária em uma demonstração coletiva. “Mas como?” através de uma técnica de screen mirroring (espelhamento de tela), que na prática funciona como um streaming de vídeo local. O software AirDroid Cast foi a ferramenta-ponte utilizada para executar esta tarefa. O processo não é um simples “conectar um cabo”, mas sim um fluxo de dados em tempo real que depende inteiramente da rede sem fio. Figura 7.4: Diagrama de fluxo da arquitetura de espelhamento (screen mirroring) em sala de aula. •Arquitetura e Fluxo do Sinal: O processo de espelhamento segue uma arquitetura cliente-servidor simplificada, dependente de uma rede local sem-fio estável: 1. Conexão de Rede Local (Wi-Fi): O primeiro requisito é que o headset de RV (dispositivo fonte) e o computador do professor (dispositivo receptor) estejam conectados exatamente na mesma rede Wi-Fi. A qualidade desta rede (preferencialmente 5 GHz ou Wi-Fi 6) é o principal fator determinante da latência (atraso) e da fluidez do stream. Redes congestionadas ou de 2.4 GHz resultam em alta latência e artefatos de vídeo. 2. Transmissão (Casting): Oheadset de RV, que tipicamente opera em um sistema baseado em Android, inicia o serviço de casting. Ele captura o frame buffer (a imagem que está sendo gerada para as lentes, geralmente a visão de um olho ou uma composição otimizada para visualização 2D) em tempo real. 85 CAPÍTULO 7. ESTUDOS DE CASO DE RV NO IFAM CAMPUS COARI 3. Codificação e Streaming:O sistema operacional do headset codifica esta captura em um stream de vídeo (como H.264 ou H.265) e o transmite continuamente, em pacotes, pela rede Wi-Fi local. 4. Recepção e Decodificação: O software AirDroid Cast, em execução no computador, atua como um receptor. Ele “escuta” na rede por este stream, o recebe, e o decodifica, exibindo o vídeo ao vivo em uma janela em sua área de trabalho. 5. Projeção Coletiva: Esta é a etapa final e mais simples. O computador é conectado fisicamente (via cabo HDMI ou VGA) a um projetor, que simplesmente espelha a tela do computador e, consequentemente, a janela do AirDroid Cast para que toda a turma possa ver. Figura 7.5: Configuração da aula: O Prof. Márcio Alencar utiliza o headset (fonte de imersão individual) enquanto sua visão é espelhada no projetor ao fundo (exibição coletiva) via AirDroid Cast, permitindo a instrução guiada. O principal desafio técnico desta arquitetura é, sem dúvida, a latência. Pode acontecer um atraso perceptível entre a fala do professor (“Estou olhando para... agora!”) e a imagem exibida no projetor pode quebrar o ritmo da aula. •Valor Pedagógico (Aprendizagem Observacional Guiada): Oscreen mirroring não é apenas um recurso técnico; é uma estratégia pedagógica essencial. Sem ele, a única alternativa viável em sala de aula seria passar o headset de aluno por aluno, um processo lento, logisticamente complexo, problemático em termos de higiene e que impede qualquer tipo de instrução síncrona. O uso do AirDroid Cast nesta aula permitiu: – Experiência Assimétrica Compartilhada: Criou-se um ambiente onde um usuário (o professor) tinha imersão sensorial e capacidade de agir e controlar, enquanto os demais (os alunos) participavam como observadores ativos de um ponto de vista guiado. 86 CAPÍTULO 7. ESTUDOS DE CASO DE RV NO IFAM CAMPUS COARI – Foco na Instrução (Ponto de Vista Guiado): O professor podia direcionar a atenção da turma para pontos de interesse específicos (“Notem este detalhe no equipamento...” ou “Vamos seguir por este corredor...”) enquanto navegava. Isso transforma a observação passiva em aprendizagem observacional, onde os alunos aprendem ativamente seguindo a demonstração e a narrativa do “expert”. – Otimização de Recursos e Escalabilidade: Demonstrou-se um modelo de alta eficiência. Apenas um headset de RV foi necessário para instruir uma sala de aula inteira, provando ser um modelo de adoção da RV viável para instituições com orçamentos limitados. 7.4 Estudo de Caso 2: Ambiente Virtual 3D Modelado Figura 7.6: O Prof. Francialan Souza dos Santos durante a apresentação do projeto de RV. O segundo projeto, supervisionado pelo Prof. Francialan Souza dos Santos, adota uma abordagem fundamentalmente diferente. Ao contrário do primeiro caso, que buscava a replicação fotorrealista de um espaço existente (um “gêmeo digital”), este projeto opta pela criação de um ambiente 3D modelado. Trata-se de um espaço conceitual: ele não existe fisicamente, mas foi construído do zero com um propósito específico. Este propósito é a criação de um hub de informações interativo, um “micro-metaverso” educacional. A ênfase sai do realismo espacial (sentir-se no campus) e move-se para a interatividade funcional (interagir com informações e avatares). Esta é uma escolha deliberada que troca a fidelidade visual pela flexibilidade pedagógica; enquanto um tour 360º é largamente estático (uma “foto” na qual se pode olhar ao redor), um mundo 3D modelado é dinâmico e pode ser programado. O objetivo não é fazer o usuário acreditar que está na recepção real do IFAM, mas sim criar um espaço com a função de uma recepção: um local centralizado para acolher, guiar e informar os usuários, neste caso, sobre os cursos e processos da instituição. 7.4.1 Metodologia: O Hub de Informações Conceitual Observamos um ambiente em estilo low-poly (baixa contagem de polígonos). Este estilo visual não é um demérito técnico, mas sim uma escolha metodológica pragmática e eficaz. 87 CAPÍTULO 7. ESTUDOS DE CASO DE RV NO IFAM CAMPUS COARI Primeiramente, o ambiente foi construído utilizando os ativos 3D (assets) da própria biblioteca do Delightex Edu. Isso demonstra o poder da abordagem low-code: o professor não precisou ser um artista 3D ou usar softwares complexos (como Blender ou 3ds Max) para criar um mundo funcional. A barreira de entrada para a criação é drasticamente reduzida. Em segundo lugar, a estética low-poly garante alto desempenho e acessibilidade universal. Cenas com poucos polígonos e texturas simples carregam rapidamente em navegadores web e rodam de forma fluida mesmo em dispositivos de baixo custo, como smartphones eheadsets VR standalone. Isso evita o “vale da estranheza” e foca a atenção do usuário na informação. Figura 7.7: Visão de um dos ambientes modelados. O princípio central do projeto é, portanto, a função sobre o fotorrealismo. A verdadeira força deste ambiente reside na sua organização espacial, que utiliza metáforas espaciais para organizar a informação de forma intuitiva: •Uma recepção externa: O ponto de entrada que estabelece o cenário e guia o usuário para o interior. •Uma sala de espera e atendimento: Um espaço que replica a função de um balcão de informações. Aqui o usuário encontra murais de avisos (editais, matrículas) e avatares com os quais pode interagir para obter informações direcionadas. •Uma sala de reuniões ou laboratório de informática: Um espaço para atividades mais focadas, como assistir a uma apresentação (em telas virtuais) ou participar de uma aula simulada. Esta divisão em zonas é um exemplo clássico de level design aplicado à educação. O usuário não navega em menus de um site, mas “caminha” pela informação, tornando a descoberta de conteúdo um processo ativo de exploração. 88 APÊNDICE A. TUTORIAL PRÁTICO: CRIANDO PROJETOS NO DELIGHTEX EDU 1. Nova Tarefa: Dentro da aula, crie uma “Nova tarefa”. 2. Tipo de Cena: O professor define o tipo de ambiente que o aluno usará. As opções incluem: •Ambiente 3D (para mundos modelados, como no Caso 2) •Foto 360º •MERGE Cube •Tour (para tours 360º, como no Caso 1) 3. Atribuição: O professor pode atribuir a tarefa para “Alunos individuais” ou “Grupos de alunos”. Figura A.5: Telas de criação de nova tarefa, mostrando a escolha do tipo de cena e a atribuição para alunos ou grupos. A.1.5 Gerenciamento de Projetos A opção Projetos é utilizada pelo professor para realizar seus próprios experimentos e criar demonstrações em ambientes 3D, fora de uma tarefa de aluno. Ao criar um novo projeto, o professor deve primeiro “Escolher uma cena”, que serve como um template de ponto de partida. As opções incluem Ambiente 3D (vazio), Foto 360º,MERGE Cube eTour. Figura A.6: Tela “Escolha uma cena”, que funciona como o template inicial para um novo projeto de professor. 95 APÊNDICE A. TUTORIAL PRÁTICO: CRIANDO PROJETOS NO DELIGHTEX EDU Todos os projetos criados pelo professor para demonstrar e praticar com os alunos ficam salvos em sua área pessoal, na aba “Projetos”. A opção Arquivar é usada para mover projetos antigos desta tela. Figura A.7: Painel de Projetos do professor, mostrando a biblioteca pessoal de projetos criados. A.2 Modo Aluno O aluno tem uma visão simplificada da plataforma, focada em entrar na turma e realizar a tarefa. 1. Login e Acesso: O aluno faz o login (também pode usar a conta Google) e escolhe o perfil “aluno”. 2. Painel do Aluno: O menu do aluno possui principalmente as opções “Galeria” e “Aulas”. 3. Entrar na Aula: O aluno clica em “Aulas” e depois em “Entrar na aula”. 4. Código da Turma: Ele insere o código da turma (ex: 57C9S) fornecido pelo professor. Figura A.8: Visão do aluno, onde ele deve inserir o “Código da turma” para acessar a atividade. A.2.1 Desenvolvendo o Projeto (Visão do Aluno) Uma vez dentro da turma virtual criada, o aluno pode acessar a tarefa (ex: ”PROJETO FINAL”) e começar a desenvolver o projeto, seja individualmente ou em grupo. 96 APÊNDICE A. TUTORIAL PRÁTICO: CRIANDO PROJETOS NO DELIGHTEX EDU Figura A.9: Ambiente da tarefa (ex: “Tour 360”) compartilhado com o aluno, mostrando o “PROJETO FINAL” a ser desenvolvido. Na tela inicial da tarefa, o aluno tem várias funcionalidades. No menu à esquerda, ele pode gerenciar as Cenas e adicionar quantas forem necessárias para o seu projeto. Isso é essencial para permitir a passagem (teletransporte) entre diferentes ambientes quando estiver usando os óculos VR. Figura A.10: Interface de edição do projeto, destacando a gestão de Cenas (esquerda) e o menu de ferramentas (inferior) para popular o ambiente. Para deixar o projeto mais interessante, o aluno dispõe de um menu inferior com três opções principais: •Biblioteca: Oferece uma vasta coleção de assets 3D prontos, como personagens, animais, habitações, itens, etc. •Carregar: Permite o upload de mídias próprias do aluno, incluindo imagens, sons (MP3), vídeos e até modelos 3D externos. •Ambiente: Controla as configurações da cena, como a imagem de fundo (que pode ser uma foto 360º), efeitos, filtros e som ambiente. 97 APÊNDICE A. TUTORIAL PRÁTICO: CRIANDO PROJETOS NO DELIGHTEX EDU Figura A.11: As três principais ferramentas de assets do aluno: (1) Biblioteca de modelos 3D, (2) Carregamento de mídias próprias e (3) Configuração de Ambiente. Finalmente, o aluno pode adicionar interatividade a qualquer objeto 3D. Ao clicar com o botão direito sobre um objeto, ele pode escolher “Código” e selecionar uma linguagem de programação: CoBlocks (blocos visuais), TypeScript ou Python. O CoBlocks é a opção mais intuitiva, permitindo criar lógicas de programação (como “tocar som”, “mover”, “quando clicado”) de forma visual, por meio de blocos de encaixar, análogo ao Scratch. Figura A.12: Tela de codificação de objetos. À esquerda, a escolha da linguagem (CoBlocks, TypeScript, Python). À direita, a interface de programação visual do CoBlocks. A.3 Ferramentas de Apoio Externas Para enriquecer os projetos, sugerimos o uso de ferramentas web externas disponíveis para obter assets, como por exemplo: 98 APÊNDICE A. TUTORIAL PRÁTICO: CRIANDO PROJETOS NO DELIGHTEX EDU •GIFs Animados: https://gifer.com/pt. •Efeitos Sonoros (MP3): https://pixabay.com/sound-effects/. •Sintetizadores de Voz (TTS): Para converter texto em áudio (MP3). Ex: https://sp eechgen.io/. •Imagens 360º (via IA): Uso de IAs Generativas, como o ChatGPT, para criar imagens panorâmicas 360º a partir de prompts de texto (ex: “Gere imagem 360 graus panorâmica realista... Hospital com recepção...”). Figura A.13: Exemplos de ferramentas de apoio externas para encontrar GIFs, efeitos sonoros, converter texto em voz e gerar imagens 360º com IA. A.4 Agora é a Sua Vez! Se você chegou até aqui, parabéns! Você não é mais apenas um leitor; você é um desenvolvedor. Este tutorial prático foi sua porta de entrada para o mundo da criação em Realidade Virtual. Você viu o fluxo de trabalho completo, desde a criação de uma turma (como professor) até a entrada em uma tarefa e o uso das ferramentas de autoria (como aluno). Mais importante, você viu que a barreira técnica, que antes parecia tão alta, pode ser superada. Com ferramentas low-code como o CoBlocks, você não precisa ser um programador sênior para dar vida às suas ideias. Combinando os assets da biblioteca com recursos externos (como áudios do Pixabay ou vozes do Speechgen), seu potencial criativo é quase ilimitado. Não pare agora, o próximo passo é seu! Pegue o que você aprendeu aqui e comece a experimentar. Crie seu próprio tour 360º, modele a sala da sua casa em 3D, ou invente um jogo que ninguém nunca viu. O próximo projeto inovador pode ser o seu. 99 Referências Bibliográficas [1] ALIDOU, Elisabeth. Realidade virtual e vídeo de 360 graus. Edições Nosso Conhecimento, 2023. [2] GOOGLE DEVELOPERS. Documentação do Google VR para Unity. Disponível em: ht tps://developers.google.com/cardboard/develop/unity/quicks tart?hl=pt-br. Acesso em: 10 ago. 2025. [3] KIRYUSHIN, Alexei. Realidade Virtual: Metodologia de Investigação. Edições Nosso Conhecimento, 2021. [4] LAVALLE, Steven M. Virtual Reality. Cambridge: Cambridge University Press, 2016. Disponível em: http://lavalle.pl/vr/book.html. Acesso em: 14 ago. 2025. [5] LINOWES, Jonathan. Unity 2020 Virtual Reality Projects: Learn VR development by building immersive applications and games with Unity 2019.4 and later versions. 3. ed. Packt Publishing, 2020. [6] NETTO, Antonio Valerio; MACHADO, Liliane dos Santos; OLIVEIRA, Maria Cristina Ferreira de. Realidade Virtual - Definições, Dispositivos e Aplicações. ICMC-USP. Disponível em: https://web.icmc.usp.br/SCATUSU/RT/Notas_Didaticas /ND_54.pdf. Acesso em: 14 ago. 2025. [7] NOGUEIRA, Valdecir Santos. Realidade virtual e aumentada: aplicação ao ensino fundamental. Dissertação (Mestrado Profissional em Rede Nacional para Ensino das Ciências Ambientais - PROFCIAMB) - Universidade Federal do Amazonas, Lábrea, 2022. Disponível em: https://tede.ufam.edu.br/handle/tede/9221. Acesso em: 14 ago. 2025. [8] OLIVEIRA, Alcyr Alves de; SCHUCH, Clarissa. Realidade virtual: aplicações para reabilitação e saúde mental. 1. ed. Vetor Editora, 2021. [9] UNITY TECHNOLOGIES. Documentação Oficial da Unity. Disponível em: https: //docs.unity3d.com/Manual/VROverview.html. Acesso em: 10 ago. 2025. 100