Série: Aprendendo a Programar com IA

Olhando Para Trás na GDC e no Blitz de Plataformas Mobile

O lançamento da véspera da GDC e o empurrão de duas plataformas mobile.

Uma API em C, Toda Superfície Build de demo da GDC, iOS e Android lançados na mesma semana API em C da RakuAI toque / áudio / GPU / ativos iOS · Metal Android · Oboe Demo desktop Alternativa no navegador Áudio espacial: localização HRTF em toda plataforma
Adicionar uma plataforma é uma forma conhecida, não um problema de arquitetura em aberto.

Um engine de verdade rodando código de verdade vence qualquer apresentação de slides. A RakuAI levou um até a GDC, lançou duas plataformas mobile na mesma semana, e provou que adicionar uma nova superfície é uma forma conhecida — não uma reescrita.

A GDC foi há um mês. O voo de volta foi cheio de anotações. As conversas que começaram nos corredores e em reuniões paralelas ainda ecoam pela caixa de entrada. Hoje é o sábado certo para registrar o que foi entregue na reta final antes da viagem, o que quase não foi, e o que saiu dali.

A GDC é o lugar onde você descobre, em três dias de conversa densa, quais das suas suposições se sustentam e quais eram um palpite que você vinha tratando como fato. Voltei para casa com respostas dos dois tipos e uma lista de pessoas para dar seguimento maior do que eu esperava.

A tag de release conta a história

A versão que rodou no laptop que levei é v1.3.8.26.10.09. O commit que a incrementou tinha uma mensagem de uma linha: “GDC 2026 Eve Release.” Isso foi em 25 de março. Eu estava em um avião na manhã seguinte.

O commit da véspera da GDC é aquele sobre o qual quero escrever, porque é o que quase não foi finalizado.

Quarenta e oito horas antes de eu embarcar

O build que todos concordavam ser “o build de demo” falhou de quatro formas diferentes na semana antes da GDC. O commit de correção é b70a48dc de 7 de março, incluído em um único PR intitulado “fix(demos): fix black screens, crashes, and expand API test coverage.” As quatro formas:

Telas pretas. A vitrine de animação, o teste de comportamento de IA, o teste booleano de CSG e o teste do framework de gameplay renderizavam tudo preto. A causa era uma chamada ausente a raku_editor_init() de que os demos precisavam para registrar recursos de debug-draw. Os alvos de link do CMake tinham sido refatorados um sprint antes, e a biblioteca do editor foi podada dos binários de demo porque ninguém percebeu que dependiam dela. Correção: readicionar o link, restaurar a chamada de init.

Um crash de ponteiro nulo. O demo de diálogo do SLM travava na inicialização com um ponteiro QA nulo. O carregador do modelo de diálogo estava retornando cedo demais em um caminho de configuração-não-encontrada sem sinalizar o erro. Correção: expor o erro, e entregar uma configuração funcional.

Um demo de rede que desconectava imediatamente. O demo de eco de rede abria um socket, recebia o handshake, e então fechava. A detecção de desconexão estava disparando no primeiro frame ocioso em vez de após um timeout real. Correção: timeout de verdade em vez de “primeiro ocioso.”

Um teste de XR que saía com código 1 sem runtime OpenXR. Sair com código diferente de zero na ausência de runtime é o padrão errado para uma máquina de demo que pode não ter um runtime de XR instalado. Correção: sair com código 0 de forma graciosa, registrando a ausência.

Nenhuma dessas correções é sofisticada. Todas são o tipo de coisa que parece bem na máquina do desenvolvedor e parece quebrada na máquina de um estranho. Quarenta e oito horas antes de uma viagem como essa é exatamente quando essas falhas vêm à tona, porque o demo finalmente é executado no laptop em que vai de fato viver pela semana seguinte, na frente de pessoas que vão formar uma opinião em quinze segundos.

Os commits de polimento que eu precisava funcionando a tempo

Mais dois commits de 26 de março, no dia antes de eu partir.

Especularidade do plano de chão. O demo de modelo de mundo tinha um plano de chão verde e algumas formas flutuantes. Com um material especular global aplicado, o chão verde estava estourando para branco sob a iluminação do demo. A correção foram dez linhas: material fosco no plano de chão, especular apenas nos objetos dinâmicos. De repente o demo parecia uma direção de arte deliberada em vez de um engine em meio a depuração.

Forçar a dGPU NVIDIA no laptop da conferência. Laptops híbridos com Intel UHD e uma placa NVIDIA dedicada usam por padrão o chip Intel a menos que uma dica explícita diga o contrário. A dica são dois símbolos exportados: NvOptimusEnablement para o Optimus da NVIDIA, AmdPowerXpressRequestHighPerformance para o equivalente da AMD. Adicioná-los ao binário de demo forçou a dGPU. O HUD agora também imprime o nome da GPU na barra de título, então consigo ver de relance no que o demo está realmente rodando. Resultado: rodou na Quadro T2000 em vez da UHD integrada. O tempo de frame caiu para menos da metade.

Nenhum desses dois commits passa de cinquenta linhas. Ambos são a diferença entre “o demo roda a trinta quadros” e “o demo roda a noventa e parece intencional.”

A alternativa no navegador que virou a melhor demonstração

A outra coisa que foi entregue na semana da GDC foi um demo independente no navegador em web/seed-explorer/. Um único arquivo HTML, zero dependências, uma portabilidade em JavaScript do gerador de terreno por ruído Simplex que o runtime usa no lado nativo. Ele renderiza três visões de um mundo gerado em um canvas de 512x512 usando putImageData: mapa de bioma, mapa de altura, mapa de temperatura. Há um esquema de URL raku://seed/ embutido, então uma seed é compartilhável.

Isso deveria ser um backup para o caso de o laptop falhar ou o wifi do local ser uma bagunça. Virou a coisa que eu de fato abria com mais frequência em conversas paralelas. O laptop de outra pessoa em uma mesa de café não pode instalar nosso SDK na hora, mas pode carregar uma URL. A conversa passa de “me manda os binários” para “abre esse link.” Isso é um tipo diferente de conversa. O demo de navegador está ficando na rotação.

O blitz de plataformas mobile

A outra metade de março foi iOS e Android, ambos lançados na mesma semana.

Android. Doze commits na série F1 (F1.2 até F1.15), começando com a estrutura de NativeActivity e ponte JNI e terminando com o profiler de desempenho do Android. No meio: entrada de toque conectada via JNI, workflow do GitHub Actions para builds AAB, integração com o Firebase Crashlytics, e o Oboe ativado como backend de áudio. Oboe é a escolha certa para áudio de baixa latência no Android. O wrapper de API em C ao redor dele permite que os mesmos callbacks de áudio funcionem entre plataformas.

iOS. Sete commits na série F2 (F2.1 até F2.7) ao longo de dois dias. Começou com o projeto Xcode e o shell de app em Swift. Adicionou uma toolchain de cross-compilação arm64. Conectou o Metal como renderizador (a mensagem do commit F2.2 diz “iOS Metal renderer integration, glue layer, CMake toolchain, 51 tests” e a contagem de testes é a parte da qual mais me orgulho). Adicionou entrada de gestos via UIGestureRecognizer. Construiu o backend de áudio espacial em cima do AVAudioEngine. Conectou download e cache de pacotes de ativos via URLSession.

As duas plataformas ganharam a mesma forma: uma camada nativa fina que expõe toque, áudio, GPU e entrega de ativos para a mesma API em C que o runtime desktop usa. Esse é o contrato. O código específico de plataforma é a implementação. Adicionar uma nova plataforma a partir daqui é uma forma conhecida, não um problema de arquitetura em aberto.

Áudio espacial é a vitória subestimada

A peça de trabalho sobre a qual continuo recebendo perguntas é o áudio espacial. O header está em include/raku/raku_spatial_audio.h. A implementação é dividida entre plataformas: processamento HRTF para localização espacial, grupos de mixer para controle por canal, efeitos (reverb, delay), e zonas de reverb para acústica de ambiente. No Android o caminho de áudio é o Oboe. No iOS é o AVAudioEngine. O commit de áudio espacial é e0aef6c6 de 6 de março.

O motivo de isso importar para um engine de AR é que áudio é metade da presença. AR visual com áudio estéreo (ou pior, mono) quebra a imersão no momento em que o usuário vira a cabeça. Áudio espacial que atualiza conforme o usuário se move faz o conteúdo virtual parecer estar de fato na sala. O custo é real: processamento HRTF não é de graça. O benefício também é real: ninguém jamais saiu de um bom demo de áudio espacial querendo que fosse desativado.

O que a GDC de fato movimentou

Três coisas que valem a pena registrar.

Conversas com parceiros. As conversas de corredor e as reuniões paralelas são as que agora estão caindo na agenda. As palestras da conferência foram excelentes. As conversas entre as palestras foram o motivo pelo qual a viagem se pagou. Quando eu escrever especificamente sobre direções de parceria em um sábado futuro, essas conversas serão a substância.

Uma leitura mais clara de onde o campo está. Houve sessões sobre modelos de mundo, sobre pipelines de conteúdo orientados por IA, sobre a lacuna entre demos de pesquisa e runtimes prontos para entrega, sobre o roteiro de hardware de AR espacial vindo de diferentes fornecedores. Parte do que eu supunha sobre o panorama competitivo estava correta. Algumas coisas com as quais eu vinha me preocupando discretamente se mostraram menos ameaçadoras do que eu pensava. Algumas coisas com as quais eu não vinha me preocupando se mostraram merecedoras de mais atenção. Só essa recalibração já valeu o voo.

Permissão para continuar. A GDC foi um fator de força. O demo que eu carreguei não era perfeito. Era específico, era um engine de verdade rodando código de verdade, e respondia a uma categoria diferente de pergunta do que uma apresentação de slides. O número de respostas do tipo “me manda um e-mail de acompanhamento” foi alto o suficiente para confirmar que a direção é a certa. Essa é a métrica.

As plataformas mobile foram lançadas. Os demos que mostrei funcionaram. A alternativa no navegador virou uma funcionalidade. Sábado bem aproveitado.

O runtime construído para o dispositivo no seu rosto

Uma API em C, áudio espacial em todo lugar, e um runtime consciente de temperatura projetado para óculos inteligentes — não um engine de PC espremido para caber. Veja onde sua IA vive no mundo real.

← Todos os posts