Quando o HUD ficou de cabeça para baixo no navegador 🙃
7 de novembro de 2026
Com a versão 2026.10.10 demos dois grandes passos por baixo dos panos: o jogo agora roda no Unity 6.6, e a versão para navegador inicia no WebGPU onde o navegador oferecer, por exemplo no Chrome e no Edge atuais. Caso contrário, roda no WebGL 2 como antes. Os dois são formas de um site conversar com a placa de vídeo. O WebGL existe há muitos anos, o WebGPU é seu sucessor e está mais próximo de como as placas de vídeo de hoje funcionam. Pouco depois, meu HUD ficou de cabeça para baixo. 🙃
Visto uma vez, nunca mais. Eu tinha aberto o jogo no Chrome do meu notebook, e o HUD estava de cabeça para baixo. Tentamos reproduzir e não conseguimos. Eu mesmo também não vi de novo. Então, por enquanto, encerramos o caso.
Aí ele voltou, com prova fotográfica. Em 19 de outubro aconteceu de novo, num mundo novo. Dessa vez enviei na hora um relatório de bug com captura de tela. Só que a própria captura estava quebrada: três cópias lado a lado, cheias de listras. O trabalho de detetive por trás: uma imagem é feita de pixels, e cada pixel normalmente tem três valores, para vermelho, verde e azul. O jogo esperava três valores por pixel, mas o WebGPU entregava quatro, com um valor extra para transparência. Leia os mesmos dados com quatro valores por pixel e a imagem fica legível. O mundo está de pé, mas o HUD inteiro está espelhado: a barra de acesso rápido gruda no topo, e a pergunta da VEGA “Quer que eu te mostre o básico?” está de cabeça para baixo. No caminho descobrimos que toda captura de tela do navegador estava quebrada desde a troca para o WebGPU. Ninguém tinha notado, porque até então nenhum relatório do navegador tinha vindo com captura de tela. 🔍
Por que só o HUD? A partir do nível gráfico “Média”, com o efeito do visor ligado, uma câmera separada pinta o HUD numa imagem própria na memória gráfica. Os especialistas chamam isso de render texture. O jogo então coloca essa imagem sobre o mundo com o efeito do visor e seu brilho. O difícil: os sistemas gráficos não concordam sobre onde fica o “em cima” numa imagem dessas. Alguns contam as linhas de cima para baixo, outros de baixo para cima. Normalmente a engine do jogo acerta isso. No navegador com WebGPU, às vezes isso dava errado para a imagem do HUD. Por que só às vezes, ainda não sabemos ao certo.
Reproduzir? Sem sorte. Para encontrar bugs de navegador por conta própria, montamos uma pequena pista de testes. Baixamos o pacote pronto do jogo de uma versão e o iniciamos no nosso computador. Então um navegador controlado remotamente, com WebGPU, clica pelo menu, inicia um mundo e tira capturas de tela que nossa IA analisa. Tentamos três vezes assim, com exatamente o meu link e no mesmo chip gráfico, e nas três vezes o HUD estava de pé. Só o meu Chrome de verdade tinha o bug.
Se você não consegue forçar o bug, tem que detectá-lo. Então a câmera do HUD agora pinta um minúsculo ponto magenta, de quatro pixels, no canto superior esquerdo da sua imagem. Antes de o HUD ser colocado sobre o mundo, o shader do visor olha os dois cantos da esquerda para ver onde o ponto foi parar. (Um shader é um pequeno programa que roda direto na placa de vídeo.) Se o ponto está embaixo, o shader vira o HUD. Ele mascara os cantos ao fazer isso, então você nunca vê o ponto. Mas, enquanto o bug se esconde, é difícil testar um conserto assim. Por isso existe um interruptor de teste que coloca o ponto de propósito no canto errado. Então o HUD tem que ficar de cabeça para baixo, e foi exatamente o que aconteceu, igualzinho à minha captura. Isso provou que a detecção funciona. ✅
A correção óbvia teria sido um bug. “Então é só sempre virar no WebGPU!” Testamos isso na pista de testes antes de embutir. Teria quebrado o HUD para todo mundo, porque na maior parte do tempo ele estava de pé.
Três armadilhas no caminho. O WebGPU nos pregou mais algumas peças. Primeiro, um simples passo de cópia pode espelhar uma imagem sozinho no WebGPU. Então reproduzir o bug com uma cópia espelhada não funcionou. Segundo, um interruptor novo que queríamos passar ao shader simplesmente nunca chegou no navegador. Terceiro, lemos pixels de volta para conferir a ordem das linhas e recebemos respostas contraditórias. Por isso o shader agora escreve seu veredito em um único pixel, e é isso que lemos. Um único pixel não tem em cima nem embaixo. 😄
O que você ganha com isso. Desde a versão 2026.10.24 o HUD no navegador está do lado certo, e as capturas de tela do navegador voltaram a ser imagens de verdade. Os relatórios de bug agora também trazem uma seção de gráficos que diz, entre outras coisas, para que lado estava o HUD. Assim, da próxima vez saberemos mesmo sem imagem. No mesmo pacote também corrigimos um bug dos relatórios do Lyxette: um animal não flutua mais sobre uma vala que você cavou. 🐾
Se um dia você ainda vir o HUD de cabeça para baixo: no navegador, F2 abre o relatório de bug. Vamos dar uma olhada. 🙏
Comentários