TÓQUIO, CIDADE NOIR
Neons e cenários cyberpunk ao estilo "Blade Runner": eie pela madrugada da capital japonesa através do olhar do designer de games e multiartista digital Liam Wong
;(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(); })();
Neons e cenários cyberpunk ao estilo "Blade Runner": eie pela madrugada da capital japonesa através do olhar do designer de games e multiartista digital Liam Wong
O escocês Liam Wong, de 34 anos, é um multiartista digital. Seus trabalhos atravessam os campos da fotografia, do design de games e do cinema. Com esse olhar privilegiado, Wong retratou Tóquio em uma série de fotografias que viralizaram nas redes sociais e foram reunidas no livro "TO:KY:OO"
Como muitos fotógrafos de sua geração, ele começou com um telefone celular. Viagens viraram rotina na sua vida desde que se mudou para o Canadá, onde galgou diversas posições na indústria de games. Ele enviava as fotos de viagem para família e amigos
Em 2014, Wong estava escalado para apresentar o game "Far Cry" no Brasil Game Show mas, de última hora, acabou enviado a trabalho para Tóquio. Foi sua primeira viagem à megalópole que o inspirou
Naquela época, ele já usava uma câmera compacta e fotografava tudo o que via pela frente. Foi quando se apaixonou pela capital japonesa
Quem visita Tóquio não consegue parar de tirar fotografias. Tóquio é uma das cidades mais fotogênicas do mundo"
Liam Wong, fotógrafo
O escocês voltou para o Canadá e, no ano seguinte, viajou a Tóquio novamente. Desta vez, com uma câmera mais robusta, ele mergulhou intensamente na noite da capital japonesa para registrar as imagens que se tornaram virais
Para mim, Tóquio é uma cidade que ganha vida à noite. Tento capturar um elemento de mistério na cidade, com uma dose de wanderlust (desejo de viajar) e nostalgia"
Liam Wong, fotógrafo
Wong prefere fotografar a metrópole depois da meia-noite e dá preferência a becos e ruas com luminárias de neon. No início, usava "obsessivamente" (em suas próprias palavras) o Google Street View para encontrar lugares com potencial para boas fotos. Hoje, prefere vagar e dar chance ao acaso
É fácil reconhecer a influência do mundo dos games no trabalho de Wong. A Tóquio do fotógrafo é noir, com um toque de fantasia fruto da edição de imagens, o que antigamente ele não considerava válido. "Achava que a fotografia não devia ser editada e tinha que ser apresentada exatamente como é na realidade. No momento em que deixei de me importar com isso, comecei a me divertir mais"
Meu trabalho é baseado na ideia de capturar momentos reais e torná-los surreais"
Liam Wong, fotógrafo
Wong cita como maior influência no seu trabalho Syd Mead, artista conceitual morto em 2019, responsável pelo visual futurista do filme "Blade Runner". Mead inclusive faz uma das introduções de "TO:KY:OO"
O cineasta Wong Kar-wai e as animações "Akira" e "Ghost in the Shell" são outras inspirações para a série sobre Tóquio.
Temos que manter a esperança e torcer para que cheguem dias melhores"
Liam Wong, fotógrafo
Reportagem Roberto Maxwell
Imagens Liam Wong
Edição Juliana Sayuri e Eduardo Burckhardt