;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Guilherme Rambo

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Apple terá headset de realidade aumentada? Estas são as pistas se vai rolar

fauxels/ Pexels
Imagem: fauxels/ Pexels

03/12/2021 04h00

Não é de hoje que se fala na Apple sobre lançar seu próprio headset de realidade virtual ou realidade aumentada. O suposto produto já teve diversos rumores diferentes sobre possíveis datas de lançamento e sobre que tipo de recurso e tecnologias estariam presentes. Neste semana saiu mais um relatório, desta vez do famoso analista Ming-Chi Kuo, trazendo mais informações a respeito.

Segundo o analista, o headset de realidade aumentada da Apple teria um processador com a mesma potência de um processador para Mac. Mais especificamente, o produto teria dois processadores: um para controle geral do sistema e outro dedicado ao controle e interpretação de sensores.

O processador que rodaria o sistema seria equivalente a um M1, lançado ano ado e que atualmente equipa MacBook Air, Mac Mini, MacBook Pro de 13 polegadas e iMac.

Este segundo processador para leitura dos sensores seria necessário porque o headset contaria com 6 a 8 módulos (câmeras ou sensores LiDAR) que exigem processamento contínuo, diferente dos iPhones mais recentes que contam com no máximo 3 módulos de câmera para uso com realidade aumentada.

Segundo Kuo, e ao contrário do que afirmam outros rumores, o headset seria totalmente independente de outros produtos como iPhone e Mac, podendo funcionar inteiramente por conta própria.

Já comentei por aqui que acredito na realidade aumentada somente no contexto de um headset, óculos ou qualquer produto que não exija do usuário ficar segurando algo em sua frente, como precisamos fazer hoje se quisermos brincar de realidade aumentada no smartphone ou tablet, por exemplo.

E digo "brincar" porque as aplicações de realidade aumentada nos dispositivos aos quais temos o hoje em dia não am de curiosidades, experiências divertidas ou jogos.

A integração da realidade aumentada na vida das pessoas no mesmo nível do smartphone só acontecerá quando o seu uso deixar de ser inconveniente.

A maioria dos analistas, incluindo Ming-Chi Kuo, apostam em 2022 como o ano de lançamento desse suposto headset de realidade aumentada da Apple.

Não creio que este será o produto que substituirá o iPhone nas vidas de muitas pessoas.

O processo de desenvolvimento de um dispositivo que atenda às exigências mencionadas anteriormente é algo que leva muito tempo e, apesar dos imensos avanços ao longo dos anos, ainda acredito que as empresas de tecnologia estão longe de resolver todas as questões em torno disso.

Vejo este suposto headset em 2022 como uma porta de entrada da Apple no mundo dos headsets de AR/VR, talvez até como uma forma de testar o mercado e criar desenvolvedores capacitados para produzir o software que dará vida a futuros óculos de realidade aumentada que serão tão ubíquos quanto o iPhone ou o Apple Watch.

Um dos maiores desafios para que seja possível atingir esse futuro da realidade aumentada é justamente o software.

A natureza da realidade aumentada, que se dá num espaço 3D combinado com o mundo real, torna o desenvolvimento de software como apps muito mais complexo quando comparado aos apps que temos hoje em dia em nossos smartphones.

Grande parte dos desenvolvedores e empresas de criação de apps não possui conhecimento ou orçamento para investir nisso. Logo, parte do trabalho que a Apple —ou qualquer outra empresa que queira criar um ecossistema de realidade aumentada— terá de fazer é tornar o desenvolvimento de software para realidade aumentada mais ível.

A Apple já deu alguns os muito pequenos nessa direção, com ferramentas como o RealityComposer, que permite a criação de cenários em 3D para realidade aumentada num editor visual simples, mas ainda falta muito avanço para chegar na mesma ibilidade do desenvolvimento de apps para telas 2D.

Sobre a questão do produto ser independente de iPhone ou Mac já em sua primeira versão, tenho minhas dúvidas.

O primeiro Apple Watch, lançado em 2015, era totalmente dependente do iPhone. O relógio inteligente da Apple continua sendo bastante dependente do iPhone até os dias de hoje, seis anos após o lançamento da primeira edição.

Creio que a independência mencionada se refira ao uso do headset propriamente dito, que ele será capaz de rodar seu sistema totalmente independente de iPhone ou Mac e fará todo o processamento e renderização no próprio dispositivo. Não acredito que seria um produto para quem não é usuário Apple. Ao menos a configuração inicial do produto exigirá o uso de algum outro dispositivo da Apple, muito provavelmente o iPhone.

Apesar de todas essas perguntas sem resposta, acho bastante plausível que a Apple venha a lançar algo nesse sentido ano que vem e estou bastante curioso para ver qual será o futuro da realidade aumentada no ecossistema da empresa e no mercado de tecnologia como um todo.