Importando cenas 3D

Importador de cena do Godot

Ao lidar com assets 3D, Godot tem um flexível e configurável importador.

Godot trabalha com cenas. Isso significa que a cena inteira sendo trabalhada no seu DCC 3D favorito será transferida o mais próximo possível.

Godot suporta os seguintes formatos de arquivo de cena 3D:

  • glTF 2.0 (recomendado). Godot tem suporte total para formatos de texto (gltf) e binários (.glb).

  • DAE (COLLADA), um formato mais antigo que é totalmente suportado.

  • Formatos OBJ (Wavefront) + seus arquivos de material MTL. Também é oferecido suporte completo, mas bastante limitado (sem suporte para pivôs, esqueletos, animações, materiais PBR, ...).

  • ESCN, um formato específico do Godot que o Blender pode exportar com um plugin.

  • FBX, suportado através da biblioteca Open Asset Import. No entanto, o FBX é proprietário, por isso recomendamos o uso de outros formatos listados acima, se adequado para o seu fluxo de trabalho.

Simplesmente copie o arquivo todo da cena com a textura para o repositório do projeto, e o Godot fará uma importação completa.

É importante que a malha não esteja deformada pelos ossos quando for exportar. Tenha certeza que o esqueleto esteja setado em pose tipo T ou pose de descanso padrão antes de exportar usando seu editor 3D favorito.

Exportando arquivos DAE do Maya e 3DS Max

A Autodesk adicionou suporte nativo ao formato COLLADA no Maya e no 3DS Max, mas ele não funciona por padrão e não deveria ser utilizado. A menlhor maneira de exportar esse formado é usando os plugins OpenCollada. Eles funcionam bem, apesar de que nem sempre estão atualizados com a última versão do software.

Exportando arquivos glTF 2.0 do Blender

Há três maneiras de exportar arquivos glTF do Blender. Como um binário glTF (arquivo .glb), glTF embedded (arquivo .gltf), e com texturas (gltf + .bin + texturas).

Arquivos binários glTF são as menores das três opções. Eles incluem a malha e texturas configuradas no Blender. Quando trazidas para o Godot, as texturas fazem parte do arquivo do material do objeto.

Arquivos incorporados glTF funcionam da mesma forma que arquivos binários. Eles não fornecem funcionalidade extra no Godot, e não devem ser usados, pois têm um tamanho de arquivo maior.

Existem duas razões para usar glTF com texturas separadas. Uma delas é ter a descrição da cena em um formato baseado em texto e os dados binários em um arquivo binário separado. Isso pode ser útil para o controle da versão se você quiser rever as alterações em um formato baseado em texto. A segunda é que você precisa dos arquivos de textura separados do arquivo do material. Se você não precisa de nenhum desses arquivos, tudo bem usar glTF binários.

Aviso

Blend shape animations cannot be imported - they require manual animation within Godot.

Nota

As versões do Blender anteriores à 3.2 não exportam texturas emissivas com o arquivo glTF. Se o seu modelo usa um e você está usando uma versão mais antiga do Blender, ele deve ser trazido separadamente.

Por padrão, o Blender tem a eliminação de faces desabilitada nos materiais e irá exportar os materiais para combinar como eles renderizam no Blender. Isso significa que os materiais na Godot terão seu modo de eliminação definido como Desativado. Isso pode diminuir o desempenho, uma vez que as faces posteriores serão renderizadas, mesmo quando estão sendo selecionadas por outras faces. Para resolver isso, habilite Backface Culling na aba Materiais do Blender, então exporte a cena para glTF novamente.

Exportando arquivos DAE no Blender

O Blender possui suporte ao COLLADA nativamente, mas não funciona adequadamente para as necessidades de game engines e não deve ser usado.

O Godot oferece um plugin do Blender que irá exportar corretamente cenas COLLADA para uso em Godot. Ele não funciona no Blender 2.8 ou mais recente, mas há planos para atualizá-lo no futuro.

Exportando arquivos ESCN do Blender

O mais poderoso, chamado godot-blender-exporter. Ele usa um arquivo .escn, que é uma espécie de arquivo .tscn (arquivo de cena do Godot); ele retém o máximo de informações possível sobre uma cena do Blender. Entretanto, ele é considerado experimental.

O exportador ESCN tem um documento detalhado descrevendo seu uso e funcionalidade.

Exportando texturas separadamente

Embora as texturas possam ser exportadas com um modelo em determinados formatos de arquivo, como glTF 2.0, você também pode exportá-las separadamente. Godot usa PBR (renderização com base física) para seus materiais, portanto, se um programa de texturização pode exportar texturas PBR, elas podem funcionar no Godot. Isso inclui o Substance suite, ArmorPaint (código aberto) e Material Maker (código aberto).

Nota

Para mais informações sobre os materiais do Godot, veja Material Spatial.

Considerações de exportação

Como as GPUs só podem renderizar triângulos, as malhas que contêm quads ou N-gons precisam ser trianguladas antes de poderem ser renderizadas. O Godot pode triangular malhas na importação, mas os resultados podem ser imprevisíveis ou incorretos, especialmente com N-gons. Independentemente da aplicação alvo, triangular antes de exportar a cena levará a resultados mais consistentes e deve ser feita sempre que possível.

Para evitar problemas com triangulação incorreta após a importação no Godot, é recomendado fazer o DCC 3D triangular objetos por conta própria. No Blender, isto pode ser feito ao adicionar um modificador Triangular aos seus objetos e certificar-se de que Aplicar Modificadores esteja marcado na caixa de diálogo de exportação. Alternativamente, dependendo do exportador, você pode encontrar e ativar a opção Triangular Faces na caixa de diálogo de exportação.

Para evitar problemas com a seleção 3D no editor, é recomendado aplicar a transformação do objeto no DCC 3D antes de exportar a cena.

Fluxos de trabalho de importação

O importador de cenas do Godot permite diferentes fluxos de trabalho a respeito de como os dados são importados. Dependendo de muitas opções, é possível importar a cena usando:

  • Materiais externos (padrão): Onde cada material é salvado em um arquivo. Modificações serão mantidas.

  • Malhas externas: Onde cada malha é salva em diferentes arquivos. Vários usuários preferem lidar com malhas diretamente.

  • Animações externas: Permitir que animações salvas sejam modificadas e mescladas quando fonte for alterada.

  • Cenas externas: Salve cada um dos nós raiz das cenas importadas em uma cena separada.

  • Cena única: Um único arquivo de cena com tudo configurado.

../../_images/scene_import1.png

Já que diferentes desenvolvedores possuem diferentes necessidades, este processo de importação é altamente personalizável.

Opções de importação

O importador possui diversas opções, que serão discutidas logo abaixo:

../../_images/scene_import2.png

Nós

Tipo da Raiz

Por padrão, o tipo do nó raiz nas cenas importadas é "Espacial", mas isso pode ser modificado.

Nome da Raiz

Permite setar um nome específico para o nó raiz gerado.

Escala da Raiz

A escala do nó raiz.

Script Personalizado

Um script especial para processar a cena inteira após ser importada pode ser provido. Isso é ótimo para pós processamento, mudando materiais, fazendo coisas divertidas com geometrias, etc.

Crie um script dessa forma:

tool # Needed so it runs in the editor.
extends EditorScenePostImport


func post_import(scene):
    # Do your stuff here.
    return scene # remember to return the imported scene

A função post_import recebe a cena importada como argumento (o parâmetro é o nó raiz da cena). A cena que será utilizada tem que ser retornada. Pode ser uma diferente.

Armazenamento

Por padrão, o Godot importa uma única cena. Essa opção permite especificar que cada um dos nós abaixo da raiz serão uma cena separada e a instancia na cena importada.

Claro, instanciar essas cenas importadas em outros lugares manualmente também funciona.

Materiais

Localização

Godot tem suporte a materiais em malha ou em nós. Por padrão, materiais serão colocados em cada um dos nós.

Armazenamento

Materiais podem ser armazenados na cena ou em um arquivo externo. Por padrão, eles são armazenados em arquivos externos para que seja possível editá-los. Isso acontece porquê a maioria dos DCCs 3D não possuem as mesmas opções de material que o Godot.

Quando os materiais são compilados, eles serão perdidos toda vez que a cena principal for modificada ou importada.

Nota

O Godot não irá reimportar materiais que estão armazenados em arquivos externos, a menos que você remova o arquivo .material associado antes de reimportar.

Para forçar a reimportação de materiais sempre que a cena 3D é reimportada, altere o modo de armazenamento na cena 3D selecionando-o na dock do FileSystem, indo para a dock de Importação e configurando Material > Storage para Built-In em vez de Files.

Manter ao Reimportar

Uma vez que materiais são editados para usar as ferramentas do Godot, o importador vai manter os que foram editados e ignorar os que vieram da cena inicial. Essa opção está presente somente se os materiais são salvos como arquivos.

Malhas

Comprimir

Faz as malhas usarem números menos precisos para múltiplos aspectos da malha, a fim de economizar espaço.

Estes são:
  • Transform Matrix (Localização, rotação e escala) : 32-bit float para 16-bit signed integer.

  • Vértices : 32-bit float para 16-bit signed integer.

  • Normals : 32-bit float para 32-bit unsigned integer.

  • Tangentes : 32-bit float para 32-bit unsigned integer.

  • Cores dos Vértices : 32-bit float para 32-bit unsigned integer.

  • UV : 32-bit float para 32-bit unsigned integer.

  • UV2 : 32-bit float para 32-bit unsigned integer.

  • Pesos de Vertex : 32-bit float para 16-bit unsigned integer.

  • Ossos de Armature : 32-bit float para 16-bit unsigned integer.

  • Índice de Matriz : 32-bit ou 16-bit unsigned integer baseado em quantos elementos existem.

Informação adicional:
  • UV2 = O segundo canal UV para texturas detalhadas e texturas lightmap previamente calculadas.

  • Índice de Array = Uma matriz de números que numeram cada elemento das matrizes acima; Ou seja, eles numeram os vértices e normais.

Em alguns casos, isso pode levar à perda de precisão, por isso, desativar essa opção pode ser necessária. Por exemplo, se uma malha é muito grande ou há várias malhas sendo importadas que cobrem uma grande área, comprimindo a importação desta malha(s) pode levar a lacunas na geometria ou vértices não estarem exatamente onde deveriam estar.

Garantir Tangentes

If textures with normal mapping are to be used, meshes need to have tangent arrays. This option ensures that these are generated if not present in the source scene. Godot uses Mikktspace for this, but it's always better to have them generated in the exporter.

Armazenamento

As malhas podem ser armazenadas em arquivos separados em vez de embutidos. Isso não tem muito uso prático a menos que se queira construir objetos diretamente com eles.

Esta opção é fornecida para ajudar aqueles que preferem trabalhar diretamente com malhas em vez de cenas.

Bake de Mapa de Luz

Se a malha é ou não usada em lightmaps previamente calculados.

  • Desativado: A malha não é usada em lightmaps previamente calculados.

  • Habilitar: A malha é usada em lightmaps previamente calculados.

  • Gen Lightmaps: A malha é usada em lightmaps previamente calculados, e desembrulha uma segunda camada UV para lightmaps.

Nota

Para obter mais informações sobre cálculo prévio de luz, consulte Lightmaps Pré-Calculadas(Baked).

Arquivos Externos

As malhas e materiais gerados podem ser armazenados opcionalmente em um subdiretório com o nome da cena.

Opções de animação

Godot fornece muitas opções sobre como os dados de animação são tratados. Alguns exportadores (como Blender) podem gerar muitas animações em um único arquivo. Outros, como 3DS Max ou Maya, precisam de muitas animações colocadas na mesma linha do tempo ou, na pior das hipóteses, colocar cada animação em um arquivo separado.

../../_images/scene_import3.png

A importação de animações é habilitada por padrão.

Atenção

Para modificar animações de uma cena 3D importada, você precisa alterar a opção de armazenamento da animação de Embutido para Arquivos na dock de Importação. Caso contrário, alterações feitas nas animações do Godot serão perdidas quando o projeto for executado.

FPS

A maioria dos formatos de exportação 3D armazenam a linha do tempo de animação em segundos em vez de quadros. Para garantir que as animações sejam importadas da forma mais fiel possível, especifique os quadros por segundo usados para editá-los. Não fazer isso pode resultar em animações instáveis.

Filtrar Script

É possível especificar um script de filtro em uma sintaxe especial para decidir quais faixas de quais animações devem ser mantidas.

O script de filtro é executado contra cada animação importada. A sintaxe consiste em dois tipos de declarações, a primeira para escolher quais animações filtrar e a segunda para filtrar faixas individuais dentro da animação combinada. Todos os padrões de nome são realizados usando uma partida de expressão insensível, usando ? e * curingas (usando String.matchn() de baixo do capô).

O script deve começar com uma declaração de filtro de animação (como denotado pela linha começando com um @). Por exemplo, se quisermos aplicar filtros a todas as animações importadas que tenham um nome terminando em ''_Loop'':

@+*_Loop

Da mesma forma, padrões adicionais podem ser adicionados à mesma linha, separados por vírgulas. Aqui está um exemplo modificado para adicionalmente incluir todas as animações com nomes que começam com ''Arm_Left'', mas também excluir todas as animações que têm nomes terminando em ''Attack'':

@+*_Loop, +Arm_Left*, -*Attack

Seguindo a declaração do filtro de seleção de animação, adicionamos padrões de filtragem de faixa para indicar quais faixas de animação devem ser mantidas ou descartadas. Se nenhum filtro de faixa for especificado, todas as faixas dentro das animações encontradas serão descartadas!

É importante notar que as declarações do filtro de faixa são aplicadas para cada faixa dentro da animação, isso significa que uma linha pode incluir uma faixa, uma regra posterior ainda pode descartá-la. Da mesma forma, uma faixa excluída por uma regra inicial pode então ser reincluída mais uma vez por uma regra de filtro mais para baixo no script do filtro.

Por exemplo: inclua todas as faixas nas animações com nomes que terminam em ''_Loop'', mas descarte qualquer faixa que afete um ''Skeleton'' que termina em ''Control'', a menos que tenha ''Arm'' no nome:

@+*_Loop
+*
-Skeleton:*Control
+*Arm*

No exemplo acima, faixas como ''Skeleton:Leg_Control'' seriam descartadas, enquanto faixas como ''Skeleton:Head'' ou ''Skeleton:Arm_Left_Control'' seriam retidas.

Todas as linhas de filtro de faixa que não começam com um + ou - são ignoradas.

Armazenamento

Por padrão, as animações são salvas embutidas. É possível salvá-los em um arquivo em vez disso. Isso permite adicionar faixas personalizadas às animações e mantê-las após uma reimportação.

Otimizador

Quando as animações são importadas, um otimizador é executado, o que reduz consideravelmente o tamanho da animação. Em geral, isso deve ser sempre ativado a menos que você suspeite que uma animação pode ser quebrada.

Clipes

É possível especificar várias animações de uma única linha do tempo como clipes. Para que isso funcione, o modelo deve ter apenas uma animação chamada default. Para criar clipes, altere a quantidade do clipe para algo maior que zero. Em seguida, você pode nomear um clipe, especificar em quais quadros ele começa e termina e escolher se a animação será repetida ou não.

Herança de cena

Em muitos casos, pode ser desejado fazer modificações na cena importada. Por padrão, isso não é possível porque se o asset de origem mudar (arquivo fonte .dae, .gltf, .obj re-exportado do aplicativo de modelagem 3D), Godot reimportará toda a cena.

É possível, no entanto, fazer modificações locais usando Herança de Cena. Tente abrir a cena importada e o seguinte caixa de diálogo aparecerá:

../../_images/scene_import4.png

Em cenas herdadas, as únicas limitações para modificações são:

  • Nós não podem ser removidos (mas podem ser adicionados em qualquer lugar).

  • Sub-Recursos não podem ser editados (salve-os externamente como descrito acima para isso)

Fora isso, tudo é permitido!

Inferências de importação

Muitas vezes, ao editar uma cena, há tarefas comuns que precisam ser feitas após a exportação:

  • Adicionando detecção de colisão a objetos.

  • Definindo objetos como malhas de navegação.

  • Excluindo nós que não são usados no motor de jogo (como luzes específicas usadas para modelagem).

Para simplificar esse fluxo de trabalho, o Godot oferece alguns sufixos que podem ser adicionados aos nomes dos objetos em seu software de modelagem 3D. Quando importado, o Godot irá detectá-los e executar ações automaticamente.

Nota

Todos os sufixos descritos abaixo possuem sensibilidade de caixa.

Remover os Nós (-noimp)

Nomes de nó que tenham o sufixo -noimp serão removidos no momento da importação, não importa qual seja o seu tipo. Eles não aparecerão na cena importada.

Criar colisões (-col, -convcol, -colionly, -convcolonly)

A opção -col funcionará apenas para objetos Mesh. Se for detectado, um nó de colisão estática filho será adicionado, usando a mesma geometria da malha. Isto criará uma forma de colisão de malha de triângulo, que é uma opção lenta, mas precisa para a detecção de colisão. Esta opção é normalmente o que você quer para geometria de fase (mas veja também -colonly abaixo).

A opção -convcol criará uma ConvexPolygonShape em vez de uma ConcavePolygonShape. Ao contrário das malhas triangulares que podem ser côncavas, uma forma convexa só pode representar com precisão uma forma que não tenha ângulos côncavos (uma pirâmide é convexa, mas uma caixa oca é côncava). Devido a isso, formas de colisão convexas geralmente não são adequadas para geometria de fase. Ao representar malhas simples o suficiente, formas de colisão convexas podem resultar em desempenho melhor em comparação a formas de colisão triangulares. Esta opção é ideal para objetos simples ou dinâmicos que requerem detecção de colisão mais precisa.

No entanto, em ambos os casos, a geometria visual é muito complexa ou muito irregular para colisões. Isto pode criar falhas físicas e retardar o motor desnecessariamente.

Para resolver isso, existe o modificador -colonly. Ele removerá a malha na importação e criará uma colisão de StaticBody em seu lugar. Isso ajuda a separação da malha visual e da colisão real.

A opção -convcolonly funciona de maneira semelhante, mas criará um class_convexpolygonshap em vez disso.

A opção -colonly também pode ser usada com os objetos vazios do Blender. Na importação, ela criará um StaticBody com um nó de colisão como filho. O nó de colisão terá uma das várias formas predefinidas, dependendo do tipo de desenho vazio do Blender:

../../_images/3dimp_BlenderEmptyDrawTypes.png

Quando possível, tente usar algumas formas de colisão primitivas ao invés de malhas triangulares ou formas convexas. As formas primitivas costumam ter o melhor desempenho e confiabilidade.

Nota

Para uma melhor visibilidade no editor do Blender, você pode definir a opção "X-Ray" em colisão vazias e definir alguma cor distinta para elas em Preferências do Usuário > Temas > 3D View > Vazio.

Ver também

Veja Formas de colisão (3D) para uma visão abrangente das formas de colisão.

Criar navegação (-navmesh)

Um nó de malha com o sufixo -navmesh será convertido em uma malha de navegação. O nó original da Malha será removido no momento da importação.

Cria um Veículo (-vehicle)

Um nó de malha com o sufixo -vehicle será importado como um filho de um nó VehicleBody.

Crie uma Roda de Veículo (-wheel)

Um nó de malha com o sufixo -wheel será importado como um filho de um nó VehicleWheel.

Rigid Body (-rigid)

Um nó de malha com o sufixo -rigid será importado como um filho de um nó <class_RigidBody>.

Loop de animação (-loop, -cycle)

Clipes de animação no documento COLLADA que começam ou terminam com o token loop ou cycle serão importados como uma Animação do Godot com o sinalizador de loop marcado. Ao contrário dos outros sufixos descritos acima, isto não requer um hífen.

No Blender, isso requer o uso do Editor NLA e nomear a Ação com o prefixo ou sufixo loop ou cycle.