top of page
Tecnologia
Posts técnicos sobre Unity, multijogador, servidores, auto-hospedagem, código aberto, builds e ferramentas de desenvolvimento.
Por que a nova versão se chama 2026.7.19 e não 0.9.2 🗓️
Quem atualizar hoje salta da versão 0.9.1 para a 2026.7.19. Parece um erro de digitação e é uma decisão deliberada: mudamos o nosso esquema de versionamento, de versões “semânticas” para versões baseadas em data (ano.mês.contador). Veja por quê. O esquema antigo respondia perguntas que ninguém faz. O versionamento semântico (0.9.1, 1.2.3 …) vem do mundo das bibliotecas de software. Lá ele é ótimo: o primeiro número promete “nada quebra”, o segundo “só acréscimos”, o terceiro
Marcel Dütscher
28 de jul.2 min de leitura
Faxina feita: como finalmente usamos o cache do GitHub direito 🧹
No último post de tecnologia medimos quanto o nosso pipeline de build e verificação realmente custa e descobrimos: não é dinheiro, é tempo de espera e armazenamento. O artigo terminava com “a faxina está planejada, mas ainda não foi feita”. Foi mais rápido do que esperávamos: desde o meio-dia de hoje ela está na branch principal. Aqui estão os números. Primeiro o resultado. O uso de cache do nosso repositório caiu de 5,32 GB em 63 entradas para 2,46 GB em 13. A análise de seg
Marcel Dütscher
27 de jul.4 min de leitura
Mil execuções de build por mês — e nenhuma delas custa nada ⚙️
Primeiro, uma correção. A primeira versão deste artigo afirmava que nossos minutos de build do GitHub tinham acabado e que isso nos forçou a migrar para uma conta Pro. Isso estava errado, de um jeito que uma olhada na documentação teria esclarecido: para repositórios públicos, os minutos de build do GitHub são gratuitos. Artefatos e caches também. Nosso repositório é público desde o fim de maio — então nunca pagamos por um minuto e nunca vamos pagar. Em vez de consertar o tex
Marcel Dütscher
26 de jul.4 min de leitura
A SignPath disse não: nossas versões para Windows continuam sem assinatura por enquanto
Há alguns dias, contamos aqui no blog que tínhamos nos candidatado ao programa gratuito de código aberto da SignPath Foundation para obter um certificado de assinatura de código para nossos instaladores do Windows. Agora a resposta chegou — e é um não. Como este devblog não serve só para comemorar vitórias, mas para contar com honestidade como um projeto assim realmente anda, essa notícia também pertence aqui. Um lembrete rápido: do que se tratava? Programas do Windows sem as
Marcel Dütscher
15 de jul.2 min de leitura
Nosso GitHub agora fala: o podcast automático de desenvolvimento 🎙️
O desenvolvimento de Blocks Beyond The Stars acontece totalmente às claras no GitHub — cada commit, cada pull request, cada release está lá para ler. Mas sejamos sinceros: quem fica rolando uma lista de commits à noite? A partir de agora há uma opção mais confortável: você pode simplesmente ouvir as novidades do projeto. Nosso GitHub agora tem seu próprio podcast. O que é o Podlog? O Podlog é um serviço que acompanha um repositório do GitHub e o transforma automaticamente em
Marcel Dütscher
13 de jul.2 min de leitura
Assinatura de código gratuita para código aberto: nossa candidatura à SignPath 🔏
Quem instala nosso jogo no Windows talvez conheça o momento: “O Windows protegeu seu computador” — o SmartScreen avisa sobre um “editor desconhecido” e você precisa clicar em “Mais informações → Executar assim mesmo”. Isso não é vírus; é só porque nossos instaladores ainda não estão assinados. Queremos acabar com esse aviso — sem ter que comprar um certificado caro. O problema dos certificados de assinatura de código. Um certificado de editor para Windows (OV ou EV) custa din
Marcel Dütscher
12 de jul.2 min de leitura
Da tag do Git ao servidor no ar: nosso pipeline de lançamento
Hoje, um lançamento de Blocks Beyond The Stars consiste em um único comando: enviar uma tag do Git. Tudo o que vem depois é feito pela máquina. Neste artigo vou mostrar nosso pipeline de CI/CD — e por que o esforço compensa até em um projeto de hobby. O workflow de lançamento. Assim que uma tag como v0.7.4 é enviada, o GitHub Actions monta o pacote completo: instaladores para Windows (setup, portátil, MSI), uma versão para Linux, uma versão WebGL para o navegador e uma imagem
Marcel Dütscher
7 de jul.2 min de leitura
Manutenção do servidor sem expulsar ninguém
O que acontece de verdade com os jogadores quando precisamos atualizar o servidor? A resposta simples seria: puxar o plugue. Construímos a resposta melhor — e é um dos meus recursos favoritos, embora o ideal seja quase nem notar. O aviso. O servidor pode enviar uma mensagem de manutenção a cada mundo em execução. No jogo, aparece então um banner com contagem regressiva: "Reinicialização do servidor em 10 minutos." A mensagem precisa ser dispensada ativamente — mas só depois d
Marcel Dütscher
6 de jul.1 min de leitura
Senhas, limites de tentativas e contas sem e-mail
Blocks Beyond The Stars também é jogado por crianças. Isso molda não só o design do jogo, mas também a engenharia de segurança por trás dele. Três exemplos. Contas sem e-mail — de propósito. Uma conta de jogador conosco não exige endereço de e-mail. Isso não é um recurso que falta, é uma decisão: queremos o mínimo possível de dados pessoais, principalmente de jogadores jovens. O que não guardamos não pode se perder. (O outro lado, com sinceridade: por isso não existe "esqueci
Marcel Dütscher
6 de jul.1 min de leitura
Um pequeno VPS como frota de servidores de jogo
Todos os nossos mundos online — o portal, os Mundos Oficiais, os mundos criados pelos jogadores — rodam em um único servidor Linux alugado (VPS). Sem data center, sem conta de nuvem de cinco dígitos. Neste artigo vou mostrar como o servidor está montado e o que aprendemos pelo caminho. Primeiro, o reforço de segurança. Antes de o jogo ter permissão para entrar no servidor, veio a segurança básica: um firewall (ufw) que só abre as portas necessárias, o fail2ban contra tentativ
Marcel Dütscher
5 de jul.2 min de leitura
Como funcionam os nossos mundos hospedados
Seu próprio mundo na internet, onde os amigos podem entrar a qualquer hora — sem que ninguém precise montar um servidor. Essa é a ideia dos nossos Mundos Hospedados, e neste artigo vou mostrar para você o que realmente acontece por trás do botão "Jogar" no portal. O coração de tudo é o WorldHost: um pequeno serviço no nosso servidor que gerencia mundos. Cada mundo roda em seu próprio contêiner Docker — totalmente isolado, com seu próprio arquivo de save, seu próprio limite de
Marcel Dütscher
5 de jul.2 min de leitura
Bastidores: como fizemos 28 vídeos para o YouTube em 30 minutos 🎬
Como um pai, uma criança e uma IA transformaram uma pilha de gravações brutas de jogo em duas playlists completas — sem passar uma hora sequer em um editor de vídeo. Finalmente temos presença no YouTube para Blocks Beyond the Stars — 22 Shorts e 6 vídeos mais longos de Let's Play e tutoriais. E, sinceramente? A forma como eles foram feitos é uma história que vale a pena contar, porque a "edição" de verdade levou cerca de meia hora. Aqui está o processo completo. Passo 1: o Ju
Marcel Dütscher
2 de jul.3 min de leitura
Mais de 1000 testes para um jogo de hobby — desperdício?
Nosso projeto já tem bem mais de mil testes automatizados: cerca de 990 no lado do servidor, uns 120 no cliente Unity. Para um projeto de família, isso parece exagero. É o contrário — e eis o porquê. Os testes são nosso segundo desenvolvedor. Num projeto solo, não há ninguém para dizer na revisão de código: “Peraí, isso quebra a criação de itens.” Os testes são esse colega. Cada mecânica do jogo — receitas, oxigênio, fome, comportamento das criaturas, senhas de mundo — tem te
Marcel Dütscher
2 de jul.2 min de leitura
Um jogo de voxels no navegador
Blocks Beyond The Stars não roda só como programa para Windows e Linux, mas também direto no navegador — sem instalação, basta um clique no portal. O caminho até aqui foi mais instrutivo do que esperávamos. O Unity WebGL é um mundo à parte. O Unity exporta para a web há bastante tempo, mas o diabo mora nos detalhes. Nosso maior tropeço: no navegador não existem threads de segundo plano de verdade como na build nativa. Nosso sistema de terreno normalmente constrói as malhas da
Marcel Dütscher
30 de jun.2 min de leitura
O dia em que nossos shaders sumiram da build
No editor do Unity, tudo parecia perfeito. Na build final: superfícies rosa e efeitos faltando. Bem-vindo a uma das armadilhas mais chatas do Unity — e a algumas parentes dela. Shader stripping. Ao compilar, o Unity joga fora tudo que aparentemente não é necessário — inclusive shaders. O problema: se você carrega shaders em tempo de execução via Shader.Find() (como fazemos com nossos mais de 20 shaders personalizados para água, atmosfera, hologramas e mais), o Unity não vê ne
Marcel Dütscher
27 de jun.1 min de leitura
Luz num mundo de voxels: luzes reais ou flood fill?
Um jogador coloca uma lâmpada luminosa na sua base. O que acontece tecnicamente? Essa pergunta inocente desencadeou uma decisão fundamental para nós — e a resposta é um bom exemplo de como a solução “mais moderna” nem sempre é a melhor. Opção A: luzes reais do Unity. Cada bloco brilhante vira uma fonte de luz pontual, e o motor calcula tudo. Fica ótimo — mas não escala. Um mundo de voxels pode ter centenas de blocos brilhantes à vista; luzes pontuais em tempo real nessa quant
Marcel Dütscher
27 de jun.1 min de leitura
100% gerado por IA: nosso fluxo de trabalho com Unity 6, .NET 8 e Python
Uma das perguntas que mais recebemos é: Como exatamente vocês constroem um jogo multiplayer de voxels complexo inteiramente com IA? A resposta curta: com diretrizes muito rígidas. A IA é fantástica para escrever código, mas perde rápido a perspectiva da arquitetura. Por isso impus uma arquitetura cliente/servidor rígida desde o primeiro dia. Nossa stack tecnológica num relance: Cliente: Unity 6 para renderização, entrada e geração de malhas de voxels. Servidor: Servidor dedic
Marcel Dütscher
26 de jun.1 min de leitura
A reformulação gráfica: mais visual sem trocar de motor
Em algum momento, o diagnóstico honesto estava na mesa: o jogo era bom de jogar, mas parecia um protótipo. Em vez de namorar outro pipeline de renderização ou até outro motor, fizemos uma única pergunta: quanto visual ainda está escondido no URP do Unity se levarmos ele ao limite? A resposta: surpreendentemente muito. Antialiasing (SMAA). Mundos de blocos são feitos de arestas — e arestas tremeluzindo estragam qualquer screenshot. O SMAA as suaviza sem deixar a imagem borrada
Marcel Dütscher
26 de jun.1 min de leitura
Da MIT para a AGPL: por que mudamos a licença
Blocks Beyond The Stars é código aberto — desde o começo. Mas a licença é algo que mudamos de forma fundamental pelo caminho: da licença permissiva MIT para a AGPL-3.0. Aqui está o porquê. O que a MIT teria significado: Com a MIT, qualquer pessoa pode pegar nosso código, modificá-lo e revendê-lo como produto fechado — sem devolver nada. Para bibliotecas, isso muitas vezes é exatamente o certo. Para um jogo completo com servidores, pareceu errado: alguém poderia ter pegado nos
Marcel Dütscher
25 de jun.1 min de leitura
Texturas e sons de IA no pipeline de assets
Blocks Beyond The Stars não tem artista gráfico nem designer de som. Mesmo assim, cada bloco novo ganha sua própria textura e cada recurso novo, seu som. Nossa ferramenta para isso: IA generativa — com um fluxo de trabalho bem claro em volta. Texturas. Os tiles dos blocos novos são criados com modelos de imagem da OpenAI. O prompt descreve material, estilo e a estética voxel do jogo; o resultado é reduzido ao tamanho do tile e encaixado no nosso atlas de blocos — uma textura
Marcel Dütscher
23 de jun.2 min de leitura
bottom of page