Introdução ao 3D

Criar um jogo 3D pode ser desafiador. Essa coordenada extra o Z pode fazer com que muitas técnicas comuns que ajudaram a fazer jogos 2D simplesmente não funcionem mais. Para ajudar nesta transição, vale a pena mencionar que Godot usa APIs similares para 2D e 3D. A maioria dos nós são o mesmo e estão presentes tanto nas versões 2D e 3D. De fato, vale a pena conferir o 3D tutorial de jogo de plataformas ou o 3D tutoriais de 3D kinematic character, que são quase que idênticos aos equivalentes 2D.

No 3D, a matemática é um pouco mais complexa que no 2D, então verifique a entrada :ref:`doc_vector_math`no wiki(que foi criada especialmente para desenvolvedores de jogos, não para matemáticos ou engenheiros) isto ajudará a preparar o caminho para você desenvolver jogos 3D com eficiência.

Nó Spatial

Node2D é o nó base para 2D. Control é o nó base para GUI. Seguindo esse raciocínio, o motor 3D utiliza Spatial para tudo que é 3D.

../../_images/tuto_3d1.png

Os nós espaciais têm uma transformação local, que é relativa ao nó pai (desde que o nó pai também seja ou herde do tipo Espacial). Esta transformação pode ser acessada como um 4×3 Transform, ou como 3 membros Vector3 representando localização, rotação de Euler (ângulos X, Y e Z) e escala.

../../_images/tuto_3d2.png

Conteúdo 3D

Ao contrário do 2D, onde o carregamento do conteúdo da imagem e do desenho é simples, o 3D é um pouco mais difícil. O conteúdo precisa ser criado com ferramentas 3D especiais (geralmente chamadas de ferramentas de criação de conteúdo digital, ou DCCs) e exportado para um formato de arquivo de troca a ser importado no Godot. Isso é necessário, pois os formatos 3D não são tão padronizados quanto as imagens.

Modelos criados com DCC

Existem duas formas de importar modelos 3D no Godot. A primeira e a mais comum é Importando cenas 3D, que permite que você importe cenas inteiras(justamente como a vê no DCC), incluindo animação, rigging, blend shapes, etc.

O segundo pipeline é importando arquivos .OBJ simples como recursos de malha, que podem ser colocados dentro de um nó MeshInstance para exibição.

Geometria gerada

É possível criar geometria personalizada usando o recurso ArrayMesh diretamente. Simplesmente crie seus arrays e use a função ArrayMesh.add_surface_from_arrays(). Uma classe auxiliar também está disponível, SurfaceTool, que fornece uma API mais simples e auxiliares para indexação, geração de normais, tangentes, etc.

De qualquer forma, este método é destinado a gerar geometria estática (modelos que não serão atualizados com frequência), pois criar arrays de vértices e enviá-los à API 3D tem um custo significativo de desempenho.

Geometria imediata

Se, em vez disso, houver um requisito para gerar geometria simples que será atualizada com frequência, Godot fornece um nó especial, ImmediateGeometry, que fornece uma API de modo imediato estilo OpenGL 1.x para criar pontos, linhas, triângulos, etc.

2D em 3D

Embora Godot tenha um poderoso engine 2D, muitos tipos de jogos usam 2D em um ambiente 3D. Usando uma câmera fixa (ortogonal ou perspectiva) que não gira, nós como Sprite3D e AnimatedSprite3D podem ser usados para criar jogos 2D que aproveitam a mistura com fundos 3D, paralaxe mais realista, efeitos de iluminação/sombra, etc.

A desvantagem é, claro, que aumentou a complexidade e reduziu o desempenho em comparação com o 2D simples, bem como a falta de referência de trabalho em pixels.

Ambiente

Além de editar uma cena, muitas vezes é comum editar o ambiente. Godot fornece um nó WorldEnvironment que permite alterar a cor de fundo, o modo (como em, colocar um skybox) e aplicar vários tipos de efeitos de pós-processamento integrados. Os ambientes também podem ser substituídos na câmera.

Viewport 3D

A edição de cenas 3D são feitas na aba 3D. Esta aba pode ser selecionada manualmente, mas ela é automaticamente ativada quando um nó Spatial (espacial) é selecionado.

../../_images/tuto_3d3.png

Os controles de navegação de cena 3D padrão são semelhantes aos do Blender (com o objetivo de ter algum tipo de consistência no pipeline de software livre...), mas são incluídas opções para personalizar os botões e o comportamento do mouse para serem semelhantes a outras ferramentas nas Configurações do Editor:

../../_images/tuto_3d4.png

Sistema de coordenadas

O Godot usa o sistema métrico para tudo. A física 3D e outras áreas são ajustadas para isso, então tentar usar uma escala diferente é geralmente uma má ideia (a menos que você saiba o que está fazendo).

Ao trabalhar com recursos 3D, é sempre melhor trabalhar na escala correta (defina seu DCC como métrico). Godot permite o dimensionamento pós-importação e, embora funcione na maioria dos casos, em raras situações pode introduzir problemas de precisão de ponto flutuante (e, portanto, falhas ou artefatos) em áreas delicadas, como renderização ou física. Certifique-se de que seus artistas sempre trabalhem na escala certa!

A coordenada Y é usada para "cima", embora para a maioria dos objetos que precisam de alinhamento (como luzes, câmeras, colisor de cápsula, veículo etc.), o eixo Z é usado como uma direção "apontando para". Esta convenção significa aproximadamente que:

  • X são lados

  • Y é para cima/para baixo

  • Z é frente/trás

Espaço e manipulação gizmos

A movimentação de objetos na visualização 3D é feita por meio de gizmos manipuladores. Cada eixo é representado por uma cor: Vermelho, Verde, Azul representam X, Y, Z respectivamente. Essa convenção também se aplica à grade e a outros dispositivos (e também à linguagem de shader, ordenação de componentes para Vector3, Color, etc.).

../../_images/tuto_3d5.png

Algumas combinações de teclas úteis:

  • Para posicionamento ou rotação encaixada, pressione Ctrl enquanto move, dimensiona ou gira.

  • Para centralizar a visualização no objeto selecionado, pressione F.

Menu "Exibir"

As opções de exibição são controladas pelo menu "Exibir" na barra de ferramentas da janela de exibição.

../../_images/tuto_3d6.png

Você pode ocultar os gizmos na visualização 3D do editor através deste menu:

../../_images/tuto_3d6_1.png

Para ocultar um tipo específico de gizmos, você pode desativá-los no menu "Exibir".

../../_images/tuto_3d6_2.png

Ambiente padrão

Quando criado a partir do Gerente de Projeto, o ambiente 3D tem um céu padrão.

../../_images/tuto_3d8.png

Dado o funcionamento da renderização com base física, é recomendável sempre tentar trabalhar com um ambiente padrão para fornecer luz indireta e refletida aos seus objetos.

Câmeras

Não importa quantos objetos são colocados no espaço 3D, nada será exibido a menos que uma Camera também seja adicionada à cena. As câmeras podem funcionar em projeções ortogonais ou em perspectiva:

../../_images/tuto_3d10.png

As câmeras são associadas a (e exibidas apenas para) uma janela de exibição pai ou avô. Como a raiz da árvore de cena é uma janela de exibição, as câmeras serão exibidas nela por padrão, mas se sub-janelas de exibição (como destino de renderização ou picture-in-picture) forem desejadas, elas precisarão de suas próprias câmeras filhas para exibição.

../../_images/tuto_3d11.png

Ao lidar com várias câmeras, as seguintes regras são aplicadas para cada janela de exibição:

  • Se nenhuma câmera estiver presente na árvore de cenas, a primeira que entrar nela se tornará a câmera ativa. Outras câmeras entrando na cena serão ignoradas (a menos que sejam definidas como atual).

  • Se uma câmera tiver a propriedade "atual" definida, ela será usada independentemente de qualquer outra câmera na cena. Se a propriedade estiver definida, ela ficará ativa, substituindo a câmera anterior.

  • Se uma câmera ativa deixar a árvore de cena, a primeira câmera na ordem da árvore ocupará seu lugar.

Luzes

Godot tem um limite de até 8 luzes por malha. Apesar disso, não há limitação de número de luzes, nem de tipos de luzes, na Godot. Podem ser adicionados tantos quantos desejar, desde que o desempenho permita, e não mais do que 8 luzes brilham em uma única malha.