Atualização do Godot 4.1
(godotengine.org)- O Godot 4.1 é uma versão incremental lançada 4 meses após o 4.0, refinando estabilidade, desempenho e acabamento, além de adicionar recursos como evasão de navegação por IA e editor de código destacável
- Esta versão corrigiu mais de 900 issues relatadas durante o uso do Godot 4 ou encontradas nas pré-versões do 4.1, e foi construída com contribuições de mais de 300 colaboradores
- A principal melhoria de desempenho vem da mudança na adição/remoção de nós filhos para uma base de hashmap mais rápida, acelerando projetos complexos, embora com custo em algumas operações raras e no uso de memória de Node
- Scripting e fluxo de trabalho do editor foram ampliados com variáveis estáticas em GDScript,
[GlobalClass]em C#, extensões GDExtension e editor de scripts destacável - A migração de projetos do 4.0 para o 4.1 costuma ser segura, mas usuários de C# e GDExtension devem verificar antes possíveis incompatibilidades e a necessidade de portar e recompilar
Visão geral do lançamento do Godot 4.1
- O Godot 4.1 é uma atualização lançada após 4 meses de trabalho desde o Godot 4.0, mantendo a direção de melhorar o 4.0 com versões incrementais frequentes
- O foco principal desta versão é estabilidade, desempenho e qualidade de acabamento, com novos recursos incluídos
- Evasão de navegação por IA aprimorada
- Recurso para destacar o editor de código e colocá-lo em outra tela
- Foram corrigidas mais de 900 issues relatadas por usuários durante o uso do Godot 4 ou encontradas nos testes das pré-versões do 4.1
- A maioria dos jogos e apps feitos com 4.0 pode ser migrada com relativa segurança para o 4.1
- Usuários de C# e GDExtension devem esperar algumas incompatibilidades
- Antes da migração, é necessário fazer backup, e recomenda-se registrar o estado do projeto em um sistema de controle de versão como Git
- O guia de migração está em preparação
- O Godot 4.1 pode ser baixado na página de downloads
Contribuição da comunidade e financiamento do desenvolvimento
- O Godot é um projeto guiado pela comunidade, com colaboradores individuais participando da melhoria da engine
- Nos últimos anos, graças a doações de usuários e empresas, foi possível contratar alguns contribuidores principais em tempo integral, permitindo lançamentos mais rápidos
- Atualmente, os gastos mensais são maiores que as doações mensais, então o financiamento do desenvolvimento ainda depende de grandes doações pontuais de empresas
- Para manter o ritmo das atualizações do Godot 4 e contratar mantenedores que avaliem mais contribuições, são necessárias mais doações mensais
- Além do apoio financeiro, também é possível contribuir com o projeto de várias formas
- Escrever relatórios de bug detalhados
- Contribuir para o código-fonte
- Escrever documentação
- Produzir guias na documentação oficial ou em sites pessoais
- Responder perguntas e compartilhar dicas em plataformas da comunidade
- Esta versão foi feita com contribuições de mais de 300 colaboradores, e a lista completa de correções e melhorias pode ser vista no interactive changelog
Melhorias de desempenho
- Jogos em Godot são construídos sobre uma árvore de nós, componente básico das entidades do jogo, e adicionar ou remover nós é uma operação muito frequente na engine
- No 4.1, o algoritmo para adicionar/remover nós filhos foi trocado por uma base de hashmap mais rápida, tornando essa operação várias vezes mais rápida
- Algumas operações raras com nós ficaram um pouco mais lentas
- O uso de memória da classe base Node aumentou em 10%
- O benefício é especialmente grande em projetos complexos com muita manipulação de nós
- Foi adicionada multithreading experimental para cenas
- Uma nova propriedade de nó permite controlar se o processamento do nó será sequencial ou paralelo
- Como ainda é um recurso experimental, são necessários testes amplos para encontrar casos de borda
- O uso em produção não é recomendado
- Muitos problemas e limitações também foram corrigidos no carregamento multithread
- O renderizador Vulkan ganhou um cache de pipeline
- O cache de shaders existente reduzia travadas na compilação de shaders, mas a compilação de pipeline ainda podia causar travadas e tempos de carregamento lentos
- As travadas por compilação de pipeline não foram eliminadas por completo, mas o tempo de carregamento pode cair um pouco em backends de renderização baseados em RenderingDevice
- Esse cache pode ser desativado nas configurações do projeto e vem ativado por padrão no Godot 4.1
- Ele não resolve todas as causas de travamento, então o trabalho continuará em versões futuras
Mudanças no núcleo da engine
- Ao importar modelos no Godot, era comum ocorrer o problema de o modelo ficar voltado para trás
- No 4.1, várias mudanças foram aplicadas para reduzir esse problema
- As direções frontal/traseira da câmera foram trocadas no editor
- A função
look_at()recebeu um argumento que usa o espaço do modelo como referência de frente, em vez do eixo-Zda câmera - Essa mudança também ajuda a corrigir um bug antigo de seguir caminho
- O Godot 4 ganhou suavização do delta de frame
- Isso pode melhorar bastante a fluidez do movimento e oferecer jogabilidade mais suave
- Vem ativado por padrão
- Funciona apenas quando o VSync está ligado
Melhorias de scripting
-
GDScript
- Antes, para compartilhar dados entre várias instâncias do mesmo script, era necessário usar recursos ou autoload
- A partir do Godot 4.1, é possível criar e usar variáveis estáticas
- Variáveis estáticas armazenam dados na classe, e não em cada instância, então todas as instâncias da mesma classe compartilham o valor
- Elas são usadas adicionando a palavra-chave
staticantes da definição da variável no topo do script - O recurso de geração automática de documentação para classes nomeadas, adicionado no Godot 4, também foi melhorado
- Enumerações passaram a ser tratadas como tipos, deixando a documentação gerada mais precisa
- Além das docstrings acima de variáveis ou funções, agora também é possível usar docstrings inline
-
C#/.NET
- O foco do C# nesta versão é aumentar a paridade de recursos com GDScript
- No GDScript, já era possível adicionar um nome de classe global ao script para definir novos tipos de nó utilizáveis no editor
- A partir do Godot 4.1, isso também é possível em C# ao adicionar o atributo
[GlobalClass]ao arquivo - Também é possível definir um ícone próprio para a classe global com o atributo
[Icon] - Porém, no estado do 4.1, projetos feitos em C# ainda não podem ser exportados para plataformas mobile e web
- O trabalho de suporte continua em andamento
- A solução dessa limitação provavelmente depende do lançamento do .NET 8 no fim de 2023
- O trabalho de suporte para plataformas mobile e web talvez só comece de fato na segunda metade de 2023
-
GDExtension
- O Godot oferece uma tecnologia que permite usar linguagens de baixo nível, como C++, como linguagem de script de jogo sem recompilar a engine
- O GDExtension ainda está em beta nesta versão
- No 4.1, as capacidades de scripting do GDExtension ficaram mais próximas das de GDScript e C#
- Agora é possível implementar novos nós de shader visual
- Também é possível criar plugins de editor com GDExtension
- Foi implementado um sistema de compatibilidade retroativa para ajudar o código feito para Godot 4.1 a continuar funcionando em futuras mudanças de API
- Ainda assim, para corrigir problemas centrais do GDExtension, foi necessária uma grande quebra de compatibilidade no 4.1
- Extensões existentes do Godot 4.0 precisam ser portadas e recompiladas para o 4.1
- Também foi retomado muito trabalho de arquitetura para tornar a API do GDExtension expansível no futuro
Fluxo de trabalho do editor
- O Godot 4 já oferecia suporte a múltiplas janelas em configurações de projeto, configurações do editor e vários pop-ups
- A partir do 4.1, é possível destacar documentos em janelas flutuantes, e também destacar o editor de scripts, incluindo o editor de shaders, para colocá-los em um monitor separado
- O editor consegue rastrear o layout das janelas para manter o local de trabalho anterior ao fechar e abrir novamente
- O Godot 4.0 permitia definir/exportar arrays tipados e exportar nós individuais no inspetor, mas não era possível combinar os dois
- A partir do Godot 4.1, é possível exportar arrays de nós para o inspetor, facilitando a conexão entre objetos de jogo
- O gerenciador de projetos ganhou a função de atribuir tags a projetos individuais e filtrá-los por tag
- Isso facilita encontrar dezenas ou centenas de projetos Godot
Mudanças de renderização
- A turbulência de partículas foi retrabalhada com base no feedback de artistas, aumentando o controle criativo
- A turbulência é muito usada para criar efeitos ricos e espalhados, comuns em jogos modernos
- Uma nova textura de ruído 3D facilita controlar a densidade da neblina volumétrica
- Dá para deixar a neblina mais fina em áreas específicas
NoiseTexture3Dtambém pode ser usada para criar campos vetoriais de atratores de partículas- Isso é útil para simular vento que afeta partículas
- O renderizador do Godot ainda tem muitas melhorias planejadas, e a maioria deve entrar em versões futuras
- A equipe de renderização e os colaboradores estão priorizando correções de bugs e estabilidade acima de novos recursos
- O renderizador 3D GLES3 ainda não está concluído, e deve receber bastante trabalho nos próximos meses
Melhorias de navegação
- O Godot 4.0 introduziu evasão em tempo real para navegação por IA, mas ela era limitada a um único plano
- O Godot 4.1 inclui um algoritmo de evasão totalmente reescrito
- Ele oferece comportamento melhor e maior controle
- A evasão agora pode funcionar em 2D ou 3D
- Agentes voadores agora podem se mover acima de agentes terrestres
- É possível usar camadas para controlar quais agentes evitam quais outros agentes
- Também é possível definir prioridades para que alguns agentes empurrem outros
- O comportamento de navegação aprimorado pode ser visto na documentação atualizada
Suporte a plataformas e limitações na web
- O alcance de suporte a plataformas no Godot 4.1 é o mesmo do Godot 4.0
- É possível exportar para todas as plataformas desktop tanto na engine padrão quanto na versão .NET
- Se o projeto não usa C#, ele pode ser exportado para mobile e web
- No estado do 4.1, a exportação para web tem limitações por falta de suporte de fornecedores a alguns recursos modernos
- Há problemas em navegadores com suporte ruim a WebGL 2, como o Chrome no macOS
- Isso é difícil de resolver sem bastante esforço em correções do Google ou suporte dedicado a um renderizador WebGL 1 / GLES2
- Em plataformas de hospedagem que não permitem configurar os cabeçalhos CORS necessários para suporte a
SharedArrayBuffer, a configuração de jogos web é complicada- Esse problema depende principalmente da implementação do cabeçalho
coep:credentiallessno Safari - Navegadores baseados em Chromium e o Firefox já funcionam bem
- Isso funciona especialmente bem ao publicar no itch.io
- Possíveis alternativas estão sendo investigadas
- Esse problema depende principalmente da implementação do cabeçalho
Problemas conhecidos e próxima versão
- O Godot 4.1 ainda tem problemas que não puderam ser resolvidos antes do lançamento
- O rastreador de bugs pode ser consultado em Godot GitHub issues
- Um dos principais problemas confirmados é que a nova API para definir propriedades de configuração personalizadas em presets de exportação não consegue manter a configuração do usuário
- Ao reiniciar o editor, as opções de configuração são resetadas e desaparecem
- A correção deve chegar no 4.1.1
- O PR relacionado é GH-79025
- O trabalho no Godot 4.2 já começou, e o lançamento está previsto para daqui a 4 meses
- O Godot mantém a meta de um ciclo de lançamentos estável, para que as próximas melhorias e novos recursos não demorem a chegar
1 comentários
Comentários do Hacker News
Recentemente migrei quase totalmente do Unity para o Godot 4.0 e, embora eu não seja desenvolvedor de jogos profissional, estou muito satisfeito para fazer jogos pequenos no estilo indie/itch.io
É leve, rápido, fácil de aprender e consegue fazer 90% do que um desenvolvedor solo/indie precisa
Só que ainda não consegui abandonar completamente o Unity por causa de um bug em que, quando usuários de macOS abrem o jogo no itch.io, o carregamento demora tanto que eles acham que quebrou e fecham a aba
Os jogos que eu faço costumam ser educativos ou voltados para crianças que usam iPad/MacBook, então é muito mais fácil mandar um link do itch.io do que ensinar instalação local e convencer o dono do dispositivo
O pessoal do Godot disse que está trabalhando nisso, mas até lá ainda preciso continuar usando Unity em alguns projetos. Se esse problema for resolvido, acho que o Godot pode explodir no itch.io/game jams
Depois disso, migrei de Godot 4.0 C# para Godot 3.5.2 + GDScript e estou satisfeito
Também montei um pipeline de CI/CD com build/deploy automático no Github Pages a cada commit na master, e esse tipo de pipeline é bem legal
https://www.reddit.com/r/godot/comments/q25riu/hosting_on_gi...
O Godot 4 tem melhorias de linguagem promissoras, como suporte melhor a tipos e menos uso de strings mágicas, por exemplo a possibilidade de referenciar sinais pelo nome
Mas, se isso for um grande obstáculo, talvez seja melhor esperar
Às vezes me incomoda a forma como a equipe do Godot 4 encara o problema no macOS como um bug do Chrome, e não como uma regressão do Godot[2]
É mais uma questão de semântica e prioridade, mas se algo de que eu dependia no Godot 3 quebrou no Godot 4, é difícil não ver isso como regressão
Ainda assim, sou muito grato por todo o trabalho colocado no Godot 4 e nas versões anteriores, e espero pelo dia em que vou usar o Godot 4
[1] Se tiver curiosidade, estão todos em https://eieio.games/
[2] https://github.com/godotengine/godot/issues/70691
Até agora nunca tive problemas com WebGL2 no Chrome/macOS, então fiquei curioso sobre quais problemas específicos são esses
Mas eu também evito usar recursos de WebGL2/GLES3 que são conhecidos por causar problemas. Principalmente uniform buffers ou padrões de atualização de buffers que funcionam bem no nativo, mas não no WebGL, como “buffer orphaning”
O Godot é uma ferramenta realmente impressionante. Se eu tiver motivo para começar um novo projeto de jogo, quero aprender mais a fundo, e o que conseguiram fazer com uma equipe relativamente pequena é a ponto de deixar a Unity com vergonha
Também é impressionante que “corrigiram mais de 900 problemas relatados durante o uso do Godot 4 e durante os testes do pré-lançamento do 4.1”
Só o fato de terem corrigido tantos problemas enquanto ainda melhoravam desempenho e estabilidade já merece elogios
Claro, o número de issues abertas não é um bom indicador para julgar a qualidade do software
Gosto do Godot, mas tenho algumas ressalvas. GDScript não é Python, e faltam aqueles pequenos recursos que tornam Python elegante, como comprehensions de lista/dicionário,
.items(), conjuntos etc.Ainda assim, para desenvolvimento de jogos ele é suficiente, e é uma linguagem bem boa por se encaixar bem no ambiente, inclusive com tipos nativos
Já usei GDNative e ainda preciso usar mais o GDExtension, mas até agora escrever C++ para Godot parece bem áspero. O programador precisa usar tipos do Godot e
new()por toda parte, então não é muito fácil de lidarPor isso, Godot se parece menos com uma engine realmente em C++ e mais com algo em que você usa uma linguagem de script na maior parte do tempo e só vai para C++ para otimizar quando o script não for rápido o suficiente
Também queria verificar melhor o quão rápido o GDScript realmente é em comparação com outras linguagens, e não sei se Mono/.NET é mais rápido. Gosto do fato de ser uma linguagem perfeitamente integrada ao design do ambiente, mas fico curioso se existem planos de melhoria
Estou planejando fazer um FPS multiplayer, mas o Godot aparentemente não oferece predição de rede, e eu gostaria que oferecesse
Também me preocupo com o suporte futuro a OpenGL. Ainda não está totalmente encerrado, e temo que seja difícil implementá-lo direito por ser muito diferente de APIs novas como Vulkan ou DX12
No geral, Godot é uma das melhores coisas que já aconteceram ao open source e ao desenvolvimento de jogos. Desenvolvimento de jogos era uma área em que o open source tinha dificuldade para se firmar, e o design leve do Godot traz um grande alívio em comparação com ferramentas enormes como Unreal ou Unity
Claro, eu provavelmente não escolheria Python em si; embora eu goste da linguagem, provavelmente escolheria uma mais focada em desempenho. Go também pode ser uma boa opção
O GDScript em si não é ruim e, se você não comparar com outras linguagens, ele é muito bom. Mas, quando você compara com uma linguagem de uso geral, você perde coisa demais
Sei que existem bindings, mas tive uma experiência parecida com Raylib, e suporte não oficial a linguagens na prática era quase como não ter suporte nenhum. Até o Mono, que é o binding oficial, é bem ruim
Ainda assim, até jogos AAA costumam usar linguagens de script lentas para a lógica do jogo. Em muitos jogos, a lógica do jogo não é a parte que mais consome CPU, então muitas vezes isso não importa
Existe algum uso do Godot para desenvolvimento de apps multiplataforma no lugar de algo como Electron?
Editor de pixel art: https://github.com/Orama-Interactive/Pixelorama
Ferramenta de desenho com tela infinita: https://github.com/mbrlabs/Lorien
Quadro kanban estilo Trello: https://github.com/alfredbaudisch/Godello
Designer de narrativa para jogos: https://github.com/mhgolkar/Arrow
Usei quando a Substance foi adquirida pela Adobe e, para minha surpresa, era muito mais fácil e agradável de usar. O Substance Designer parece bem truncado
Claro que o Substance Designer tem a vantagem única da integração com o Substance Painter. O Material Maker também tem alguns recursos de pintura manual, mas não é um app de pintura completo
O OpenSCAD Graph Editor foi feito em uma versão anterior do Godot e roda em Mac OS, Windows e Linux:
https://github.com/derkork/openscad-graph-editor
Um dos principais contribuidores/desenvolvedores do Godot também publicou uma ferramentinha prática que permite descompilar completamente algo feito em Godot
https://github.com/bruvzg/gdsdecomp
O Godot é realmente excelente. Fiquei profundamente impressionado com o progresso da equipe e com a direção geral do projeto.
Sempre tive interesse em desenvolvimento de jogos e, em grande parte, foi porque queria fazer jogos que estudei ciência da computação e me tornei engenheiro de software. Eu queria criar pequenos jogos por conta própria, mas na prática nunca consegui muito bem.
Depois que me tornei engenheiro de software em tempo integral, não consegui encontrar tempo nem as ferramentas adequadas para fazer pequenos jogos como hobby.
Recentemente descobri o Bevy e experimentei usá-lo; ECS é um bom conceito, mas o Bevy parece mais uma biblioteca, e é bem difícil fazer um jogo realmente acabado, como quando se usa algo como SDL.
Quando descobri e usei o Godot, fiquei realmente impressionado. Ele é amigável para iniciantes, suficientemente rápido, e a comunidade também é excelente. É exatamente o que eu estava procurando, então fico muito feliz que exista e animado com seu desenvolvimento futuro.
Uma coisa de que senti falta é a escolha da linguagem nativa e “oficial”. GDScript é ok e é uma linguagem no estilo Python muito boa para iniciantes e prototipagem rápida, e C# também pode ser bom para quem está vindo do Unity.
Pessoalmente, acho que eu ficaria mais feliz com um suporte melhor a C++, ou com alguma outra coisa. Também sei que existe a interface GDNative e que ela foi melhorada no 4.0.
C# é uma boa linguagem, mas tenho a sensação de que sua grande presença no desenvolvimento de jogos se deve ao Unity. Ela é verbosa demais, e fora do Visual Studio o suporte de ferramentas também não é tão bom assim.
Mas talvez a parte de “programação de verdade” não seja tão importante no desenvolvimento de jogos, e talvez eu deva simplesmente aceitar isso e usar GDScript.
Também existem bindings em Rust usando GDExtension: https://github.com/godot-rust/gdext
Vale a pena dar uma olhada
O Godot pode ter dificuldade para enfrentar o Unreal, mas com certeza torço para que ele substitua o Unity.
É um ótimo engine, e cada vez mais desenvolvedores estão reconhecendo de verdade seu potencial.
Ainda assim, se estamos falando de desenvolvimento indie, concordo completamente. O Godot é o framework leve, descomplicado e direto ao ponto que as pessoas queriam que o Unity fosse. Para esse uso, o Godot é muito melhor.
Felizmente, a Unreal Engine não é uma boa escolha para muitos tipos de jogo, e o Godot está construindo bem seu espaço em jogos 2D e jogos 3D mais simples.
O mercado de jogos 2D ainda é grande, e surpreendentemente não há tantos engines que deem um bom suporte a 2D. O Godot entra facilmente entre os melhores.
O Godot é realmente incrível, e tenho enorme respeito por todas as pessoas que dedicam tempo para tornar excelentes softwares como este e ferramentas como o Blender.
O Godot está realmente ficando melhor a cada lançamento. Há recursos que eu gostaria de ver no Godot no futuro:
FSR2, ótimo suporte a Wayland e integração com LLM. LLMs talvez possam tornar NPCs mais realistas.
Em termos de integração de IA, acho mais interessante design assistido por IA. Você descreve terreno, personagens e cenário, a IA gera alguma coisa, e depois o usuário customiza e ajusta.
Mas mesmo isso provavelmente é melhor fazer fora do núcleo da engine.
Alguém tem tutoriais de Godot para recomendar?
Tenho um pequeno protótipo de RPG que roda no console, e gostaria de tentar colocar uma GUI de verdade e gráficos com sprites.
Aviso: sou fundador da empresa que criou esse curso. Mesmo assim, o tutorial é gratuito, e os assets personalizados usados nele também são oferecidos com uma licença permissiva.
Ainda assim, vindo de uma transição de Unity para Godot, acho que o ecossistema de tutoriais do Godot ainda está bem atrás.
Ele também lançou recentemente um curso dedicado ao Godot 4.
https://www.youtube.com/watch?v=M8-JVjtJlIQ
https://www.youtube.com/playlist?list=PLwYfcDZR0fFcROLjkiyBW...
Muitos dos tutoriais que você encontrar serão para Godot 3, então é melhor filtrar buscando explicitamente por Godot 4.
Caso contrário, você vai ter que adaptar o código do tutorial para funcionar na sua versão do Godot, e isso também pode acabar sendo uma experiência educativa por si só.
[0] https://docs.godotengine.org/en/stable/getting_started/intro...