;(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

Cuidem-se, Harry Potter e Predador! Pesquisas estão atrás da invisibilidade

Marcel Lisboa/UOL
Imagem: Marcel Lisboa/UOL

João Paulo Vicente

Colaboração para Tilt

15/05/2020 04h00

Não é tão impressionante como a magia da série Harry Potter. Nem tão infalível quanto em obras de ficção científica como "Predador" e "O Homem Invisível". Mas avanços em pesquisas na área de ótica já dão uma ideia de como tecnologias de invisibilidade podem se tornar uma realidade nos próximos anos.

Por enquanto, os protótipos existentes têm uma série de limitações: alguns deles escondem um objeto apenas a partir de um ângulo, outros de uma certa distância e quase todos resultam em um fundo —a área observada através da capa de invisibilidade— de baixa nitidez.

"Por enquanto, esse é um campo muito investigativo", diz Daniely Gomes Silva, professora do Instituto Nacional de Telecomunicações (Inatel). Na sua tese de doutorado, defendida no ano ado na Universidade Federal de Itajubá (Unifei), propôs um modelo de capa de invisibilidade.

Funcionaria a partir de simulações teóricas, ela afirma. "Mas a gente acaba esbarrando na tecnologia. Atualmente, nós não temos capacidade de confeccionar esse dispositivo como eu sugeri em escala macroscópica, apenas microscópica."

Não é magia

Grosso modo, o efeito de invisibilidade é atingido quando um material faz com que as ondas de luz se curvem ao redor do objeto em vez de o refletirem.

No começo dos anos 2000, uma equipe da Universidade de Rochester demonstrou como fazer isso com um jogo de quatro lentes, por exemplo. No entanto, a área escondida é minúscula e é difícil imaginar uma aplicação prática.

E a expectativa é que elas existam. A área militar é a mais interessada em tecnologias do tipo, por motivos óbvios. "Uma outra aplicação válida que podemos pensar é ocultar componentes microscópicos sigilosos, partes de circuitos, por exemplo", afirma Daniely.

Hoje, uma linha de trabalho que tenta resolver esse problema aposta na confecção de capas de invisibilidade com metamateriais. Mas, isso resulta em dois problemas.

O primeiro é que metamateriais são materiais que não existem na natureza. Ou seja, são desenvolvidos de forma artificial —o que os torna mais caros e raros. O segundo é que grande parte das propostas nesse campo resulta em modelos que atuam sobre apenas um espectro de luz. Isso significa, na prática, que uma tecnologia de invisibilidade desenvolvida dessa forma só esconderia uma cor.

A ideia de Daniely, por outro lado, associa algumas técnicas complexas de ótica para obter um material que opera em larga faixa de espectro de luz. "Ele produz invisibilidade em toda parte do espectro. Um objeto debaixo desse manto aria imperceptível ao olho humano", diz a pesquisadora.

Além disso, a abordagem dela permitiria trabalhar com materiais encontrados na natureza, como o silício. Mas antes que você se anime a desaparecer, é preciso calma: Daniely imagina que vai demorar pelo menos uma década até que tenhamos uma tecnologia capaz de produzir a capa de invisibilidade nos moldes propostos por ela.

Inventividade canadense

Há alternativas mais simples. Pelo menos é o que defende a empresa canadense Hyperstealth, especializada em desenvolvimento de camuflagem militar.

A Hyperstealth ganhou notoriedade no ano ado após registrar uma série de patentes ligadas a tecnologias de invisibilidade. Para isso, a empresa trabalha a partir de lentes lenticulares, conhecidas desde a década de 20 e normalmente utilizadas em cartões 3D, que mostram imagens diferentes dependendo da perspectiva em que são observados.

"Se colocarmos um objeto vertical atrás dessas lentes também na vertical, a luz é redirecionada dos fundos esquerdo e direito e esconde esse objeto, desde que que você esteja a uma distância adequada da lente", diz Guy Cramer, executivo-chefe da Hyperstealh.

O resultado final, no entanto, ainda é pouco nítido. Por isso ele aprimorou a técnica em uma material que batizou de Quantum Stealth, objeto da patente que deixou a empresa famosa.

Neto de Donald L. Hings, o inventor do walkie-talkie, Cramer procura investidores para investidores para transformar os protótipos em uma realidade comercial. Para ele, é questão de tempo até que isso aconteça.

"A ficção científica é onde as mentes sonham inovações que parecem fora do alcance, impraticáveis e impossíveis", conta. "Muitas dessas ideias continuarão nesse campo, mas algumas serão desenvolvidas e na velocidade em que a tecnologia está avançando nós devemos esperar mais do inesperado", explica Cramer.

"Realmente, isso gera uma curiosidade muito grande", concorda Daniely. "Todo mundo que sabe do meu projeto de doutorado, inclusive alunos, vêm me perguntar como funciona, falam que eu fiz a capa do Harry Potter, a armadura do predator. Por meio da comprovação feita com simulações, vai ser facilmente estendido para escala macroscópica quando a tecnologia existir."

Desaparecer não parece mesmo ser uma má ideia nos dias de hoje. Só não vale usar capa de invisibilidade para furar o isolamento social.