Importando cenas 3D

Importador de cena 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 supports the following 3D scene file formats:

  • glTF 2.0 (recommended). Godot has full support for both text (.gltf) and binary (.glb) formats.

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

  • OBJ (Wavefront) format + their MTL material files. This is also fully supported, but pretty limited (no support for pivots, skeletons, animations, PBR materials, ...).

  • ESCN, a Godot-specific format that Blender can export with a plugin.

  • FBX, suportado através da biblioteca Open Asset Import. No entanto, 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.

Exporting glTF 2.0 files from 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 Godot, as texturas fazem parte do arquivo do material do objeto.

arquivos embedded glTF funcionam da mesma forma que arquivos binários. Eles não fornecem funcionalidade extra em 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.

Nota

Blender does not export emissive textures with the glTF file. If your model uses one, it must be brought in separately.

Exportando arquivos DAE no Blender

Blender has built-in COLLADA support, but it does not work properly for the needs of game engines and should not be used as is.

Godot provides a Blender plugin that will correctly export COLLADA scenes for use in Godot. It does not work in Blender 2.8 or newer, but there are plans to update it in the future.

Exportando arquivos ESCN do Blender

The most powerful one, called godot-blender-exporter. It uses a .escn file, which is kind of another name for a .tscn file (Godot scene file); it keeps as much information as possible from a Blender scene. However, it is considered experimental.

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

Exporting textures separately

While textures can be exported with a model in certain file formats, such as glTF 2.0, you can also export them separately. Godot uses PBR (physically based rendering) for its materials, so if a texturing program can export PBR textures, they can work in Godot. This includes the Substance suite, ArmorPaint (open source), and Material Maker (open source).

Nota

For more information on Godot's materials, see Spatial Material.

Exporting considerations

Since GPUs can only render triangles, meshes that contain quads or N-gons have to be triangulated before they can be rendered. Godot can triangulate meshes on import, but results may be unpredictable or incorrect, especially with N-gons. Regardless of the target application, triangulating before exporting the scene will lead to more consistent results and should be done whenever possible.

To avoid issues with incorrect triangulation after importing in Godot, it is recommended to make the 3D DCC triangulate objects on its own. In Blender, this can be done by adding a Triangulate modifier to your objects and making sure Apply Modifiers is checked in the export dialog. Alternatively, depending on the exporter, you may be able to find and enable a Triangulate Faces option in the export dialog.

To avoid issues with 3D selection in the editor, it is recommended to apply the object transform in the 3D DCC before exporting the scene.

Importar fluxos de trabalho

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

O processo de importação é altamente customizável, já que diferentes desenvolvedores possuem diferentes necessidades.

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.

Root Scale

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

Godot will not reimport materials that are stored in external files unless you remove the associated .material file before reimporting.

To force reimporting materials every time the 3D scene is reimported, change the material storage mode in the 3D scene by selecting it in the FileSystem dock, going to the Import dock then setting Material > Storage to Built-In instead of 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.

Garanta tangentes

Se texturas com mapeamento de normal forem usadas, as malhas precisam ter matrizes tangentes. Essa opção garante que as tangentes sejam geradas se não estiverem presentes na cena de origem. Godot usa Mikktspace para isso, mas é sempre melhor ter gerado as tangentes no exportador.

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.

Light Baking

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 Baked lightmaps.

Arquivos Externos

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

Animation options

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

To modify animations from an imported 3D scene, you need to change the animation storage option from Built-In to Files in the Import dock. Otherwise, changes made to animations from Godot will be lost when the project is run.

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.

Script de filtro

É 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

It is possible to specify multiple animations from a single timeline as clips. For this to work, the model must have only one animation that is named default. To create clips, change the clip amount to something greater than zero. You can then name a clip, specify which frames it starts and stops on, and choose whether the animation loops or not.

Scene inheritance

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!

Import hints

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

All the suffixes described below are case-sensitive.

Remover os Nós (-noimp)

Objects that have the -noimp suffix will be removed at import-time no matter what their type is. They will not appear in the imported scene.

Create collisions (-col, -convcol, -colonly, -convcolonly)

The option -col will work only for Mesh objects. If it is detected, a child static collision node will be added, using the same geometry as the mesh. This will create a triangle mesh collision shape, which is a slow, but accurate option for collision detection. This option is usually what you want for level geometry (but see also -colonly below).

The option -convcol will create a ConvexPolygonShape instead of a ConcavePolygonShape. Unlike triangle meshes which can be concave, a convex shape can only accurately represent a shape that doesn't have any concave angles (a pyramid is convex, but a hollow box is concave). Due to this, convex collision shapes are generally not suited for level geometry. When representing simple enough meshes, convex collision shapes can result in better performance compared to a triangle collision shape. This option is ideal for simple or dynamic objects that require mostly-accurate collision detection.

However, in both cases, the visual geometry may be too complex or not smooth enough for collisions. This can create physics glitches and slow down the engine unneccesarily.

To solve this, the -colonly modifier exists. It will remove the mesh upon importing and will create a StaticBody collision instead. This helps the visual mesh and actual collision to be separated.

The option -convcolonly works in a similar way, but will create a ConvexPolygonShape instead.

The option -colonly can also be used with Blender's empty objects. On import, it will create a StaticBody with a collision node as a child. The collision node will have one of a number of predefined shapes, depending on Blender's empty draw type:

../../../_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 Collision shapes (3D) para uma visão abrangente das formas de colisão.

Criar navegação (-navmesh)

A mesh node with the -navmesh suffix will be converted to a navigation mesh. The original Mesh object will be removed at import-time.

Cria um Veículo (-vehicle)

A mesh node with the -vehicle suffix will be imported as a child to a VehicleBody node.

Crie uma Roda de Veículo (-wheel)

A mesh node with the -wheel suffix will be imported as a child to a VehicleWheel node.

Rigid Body (-rigid)

A mesh node with the -rigid suffix will be imported as a RigidBody.

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

Animation clips in the COLLADA document that start or end with the token loop or cycle will be imported as a Godot Animation with the loop flag set. Unlike the other suffixes described above, this does not require a hyphen.

In Blender, this requires using the NLA Editor and naming the Action with the loop or cycle prefix or suffix.