Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Prototipando níveis com CSG
CSG significa Constructive Solid Geometry (Geometria Sólida Construtiva), e é uma ferramenta para combinar formas básicas ou malhas personalizadas para criar formas mais complexas. Em softwares de modelagem 3D, o CSG é mais conhecido como "Operadores Booleanos".
A prototipagem de níveis é um dos principais usos do CSG no Godot. Essa técnica permite aos usuários criar as formas mais comuns combinando primitivas. Ambientes internos podem ser criados usando primitivas invertidas.
Nota
Os nós CSG no Godot são destinados principalmente para prototipagem. Não há suporte integrado para mapeamento UV ou edição de polígonos 3D (embora polígonos 2D extrudados possam ser usados com o nó CSGPolygon3D).
Se você estiver procurando uma ferramenta de design de níveis fácil de usar para um projeto, pode preferir usar o FuncGodot ou o Cyclops Level Builder.
Ver também
Você pode verificar como utilizar nós CSG para construir diversas formas (como escadas ou estradas) utilizando o projeto de demonstração Constructive Solid Geometry demo project.
Introdução aos nós de CSG
Assim como outros recursos do Godot, o CSG é suportado na forma de nós. Estes são os nós CSG:
CSGCylinder3D (também suporta cone)
Características das ferramentas CSG
Cada nó CSG suporta 3 tipos de operações booleanas:
Union: A geometria de ambas as primitivas é combinada, e a geometria que se intersecta é removida.
Intersection: Apenas a geometria que se intersecta permanece, o resto é removido.
Subtraction: A segunda forma é subtraída da primeira, deixando uma reentrância com o seu formato.
PolígonoCSG
O nó CSGPolygon3D faz a extrusão ao longo de um polígono desenhado em 2D (nas coordenadas X, Y) das seguintes maneiras:
Depth: Extrudado para trás por uma determinada quantidade.
Spin: Extrudado enquanto gira em torno de sua origem.
Path: Extrudado ao longo de um nó Path. Esta operação é comumente chamada de lofting.
Nota
O modo Path deve receber um nó Path3D para funcionar. No nó Path, desenhe o caminho e o polígono no CSGPolygon3D fará a extrusão ao longo do caminho fornecido.
Malhas personalizadas
Malhas personalizadas podem ser usadas para o CSGMesh3D, desde que a malha seja manifold (variedade topológica). A malha pode ser modelada em outro software e importada para o Godot. Múltiplos materiais são suportados.
Para que uma malha seja usada como uma malha CSG, é necessário:
ser fechado
que cada aresta se conecte a apenas duas faces
que possua volume
E é recomendado evitar:
volume negativo
auto-interseção
faces internas
O Godot usa a biblioteca manifold para implementar as malhas CSG. A definição técnica de "manifold" usada pelo Godot é a seguinte, adaptada da definição de "manifold" daquela biblioteca:
Cada aresta de cada triângulo deve conter os mesmos dois vértices (por índice) que exatamente uma outra aresta de triângulo, e os vértices inicial e final devem trocar de lugar entre essas duas arestas. Os vértices dos triângulos devem aparecer em ordem horária quando vistos do lado de fora da malha manifold do Godot Engine.
Tornando uma malha existente manifold com o Blender
Se você tem uma malha existente que ainda não é manifold, pode torná-la manifold usando o Blender.
No Blender, instale e ative o complemento 3D Print Toolbox.
Selecione a malha que deseja tornar manifold. Abra a barra lateral clicando na seta:
Na aba 3D Print, sob Clean Up, clique no botão Make Manifold:
A malha agora deve ser manifold e pode ser usada como uma malha personalizada.
Combinador CSG 3D
O nó CSGCombiner3D é uma forma vazia usada para organização. Ele apenas combinará os nós filhos.
Ordem de processamento
Cada nó CSG processará primeiro seus nós filhos e suas operações: união, intersecção ou subtração, na ordem da árvore, e as aplicará a si mesmo uma após a outra.
Nota
No interesse do desempenho, certifique-se de que a geometria CSG permaneça relativamente simples, pois malhas complexas podem demorar um pouco para serem processadas. Se estiver adicionando objetos juntos (como uma mesa e objetos de uma sala), crie-os como árvores CSG separadas. Forçar objetos demais em uma única árvore acabará afetando o desempenho. Use operações binárias apenas onde você realmente precisar delas.
Prototipando um nível
Nós vamos prototipar uma sala para praticar o uso das ferramentas CSG.
Dica
Trabalhar na projeção Orthogonal oferece uma visão melhor ao combinar as formas CSG.
Nosso nível conterá estes objetos:
um quarto,
uma cama,
uma lâmpada,
uma mesa,
uma estante de livros.
Crie uma cena com um nó Node3D como nó raiz.
Dica
A iluminação padrão do ambiente não fornece um sombreamento claro em alguns ângulos. Mude o modo de exibição usando Display Overdraw no menu da viewport 3D, ou adicione um nó DirectionalLight para ajudar a enxergar claramente.
Crie um CSGBox3D e nomeie-o como room, ative Invert Faces e altere as dimensões da sua sala.
Em seguida, crie um CSGCombiner3D e nomeie-o como desk.
Uma mesa possui uma superfície e 4 pernas:
Crie 1 nó filho CSGBox3D no modo Union para a superfície e ajuste as dimensões.
Crie 4 nós filhos CSGBox3D no modo Union para as pernas e ajuste as dimensões.
Ajuste o posicionamento deles para se assemelhar a uma mesa.
Nota
Os nós CSG dentro de um CSGCombiner3D só processarão suas operações dentro do combinador. Portanto, os CSGCombiner3Ds são usados para organizar nós CSG.
Crie um CSGCombiner3D e nomeie-o como bed.
Nossa cama consiste em 3 partes: a cama, o colchão e um travesseiro. Crie um CSGBox3D e ajuste suas dimensões para a cama. Crie outro CSGBox3D e ajuste suas dimensões para o colchão.
Vamos criar outro CSGCombiner3D chamado pillow como filho de bed. A árvore de cena deve ficar assim:
Combinaremos 3 nós CSGSphere3D no modo Union para formar um travesseiro. Dimensione o eixo Y das esferas e ative a opção Smooth Faces.
Selecione o nó pillow e mude o modo para Subtraction; as esferas combinadas vão cortar um buraco no colchão.
Tente mudar o nó pai de pillow para o nó raiz Node3D; o buraco desaparecerá.
Nota
Isso serve para ilustrar o efeito da ordem de processamento do CSG. Como o nó raiz não é um nó CSG, os nós CSGCombiner3D são o fim das operações; isso mostra o uso do CSGCombiner3D para organizar a cena CSG.
Desfaça a herança depois de observar o efeito. A cama que você construiu deve ter esta aparência:
Crie um CSGCombiner3D e nomeie-o como lamp.
Uma luminária consiste em 3 partes: a base, o poste e a cúpula. Crie um CSGCylinder3D, ative a opção Cone e faça dele a base. Crie outro CSGCylinder3D e ajuste as dimensões para usá-lo como o poste.
Usaremos um CSGPolygon3D para a cúpula da luminária. Use o modo Spin para o CSGPolygon3D e desenhe um trapézio enquanto estiver na Front View (teclado numérico 1); essa forma fará a extrusão em torno da origem e formará a cúpula.
Ajuste o posicionamento das 3 partes para que pareça com uma luminária.
Crie um CSGCombiner3D e nomeie-o como bookshelf.
Usaremos 3 nós CSGBox3D para a estante de livros. Crie um CSGBox3D e ajuste suas dimensões; esse será o tamanho da estante.
Duplique o CSGBox3D, encurte as dimensões de cada eixo e altere o modo para Subtraction.
Você quase construiu uma estante. Crie mais um CSGBox3D para dividir a estante em dois níveis.
Posicione seus móveis em seu quarto como quiser e sua cena deve ficar assim:
Você prototipou com sucesso um nível de sala com as ferramentas CSG no Godot. As ferramentas CSG podem ser usadas para projetar todos os tipos de níveis, como um labirinto ou uma cidade; explore suas limitações ao projetar seu jogo.
Usando texturas protótipo
O Material 3D Padrão e Material ORM 3D do Godot suporta mapeamento triplanar, que pode ser usado para aplicar automaticamente uma textura a objetos arbitrários sem distorção. Isso é útil ao usar CSG, já que o Godot ainda não suporta a edição de mapas UV em nós CSG. O mapeamento triplanar é relativamente lento, o que geralmente restringe seu uso a superfícies orgânicas como terrenos. Ainda assim, ao criar protótipos, ele pode ser usado para aplicar texturas rapidamente a níveis baseados em CSG.
Nota
Se você precisar de algumas texturas para prototipagem, o Kenney fez um conjunto de texturas de protótipo com licença CC0.
Há duas maneiras de aplicar um material a um nó CSG:
Aplicá-lo a um nó CSGCombiner3D como uma sobreposição de material (Geometry > Material Override no Inspetor). Isso afetará seus filhos automaticamente, mas tornará impossível alterar o material em filhos individuais.
Aplicar um material a nós individuais (Material no Inspetor). Dessa forma, cada nó CSG pode ter sua própria aparência. Nós CSG subtrativos aplicarão seu material aos nós nos quais estão "cavando".
Para aplicar o mapeamento triplanar a um nó CSG, selecione-o, vá até o Inspetor, clique no texto [empty] ao lado de Material Override (o Material para nós CSG individuais). Escolha New StandardMaterial3D. Clique no ícone do material recém-criado para editá-lo. Abra a seção Albedo e carregue uma textura na propriedade Texture. Agora, abra a seção Uv1 e marque Triplanar. Você pode alterar o deslocamento (offset) e a escala da textura em cada eixo mexendo nas propriedades Scale e Offset logo acima. Valores mais altos na propriedade Scale farão com que a textura se repita com mais frequência.
Dica
Você pode copiar um StandardMaterial3D para reutilizá-lo em outros nós CSG. Para fazer isso, clique na seta do menu suspenso ao lado de uma propriedade de material no Inspetor e escolha Copy. Para colá-lo, selecione o nó ao qual deseja aplicar o material, clique na seta do menu suspenso ao lado de sua propriedade de material e escolha Paste.
Convertendo para MeshInstance3D
Desde o Godot 4.4, você pode converter um nó CSG e seus filhos em um nó MeshInstance3D.
Isso possui vários benefícios:
Gerar lightmaps (baking), já que o UV2 pode ser gerado em um MeshInstance3D.
Gerar occlusion culling (baking), já que o processo de geração de occlusion culling só leva em consideração MeshInstance3D.
Tempos de carregamento mais rápidos, já que a malha CSG não precisa mais ser reconstruída quando a cena é carregada.
Melhor desempenho ao atualizar a transformação (transform) do nó se você estiver usando a malha dentro de outro nó CSG.
Para converter um nó CSG em um nó MeshInstance3D, selecione-o e escolha CSG > Bake Mesh Instance na barra de ferramentas. O nó MeshInstance3D será criado como um nó irmão. Note que o nó CSG usado para a geração não é ocultado automaticamente, então lembre-se de ocultá-lo para evitar que sua geometria se sobreponha à do MeshInstance3D recém-criado.
Você também pode criar uma forma de colisão trimesh usando CSG > Bake Collision Shape. O nó CollisionShape3D gerado deve ser um filho de um nó StaticBody3D ou AnimatableBody3D para ser eficaz.
Dica
Lembre-se de manter o nó CSG original na árvore da cena, para que você possa realizar alterações na geometria posteriormente, se necessário. Para modificar a geometria, remova o nó MeshInstance3D e torne o nó CSG raiz visível novamente.
Exportando como glTF
Pode ser útil estruturar um nível usando CSG e depois exportá-lo como um modelo 3D para importá-lo em um software de modelagem 3D. Você pode fazer isso selecionando Scene > Export As... > glTF 2.0 Scene.