Voltar para o Blog
Quest Log

Godot CSG: blockout e prototipar cenário 3D rápido

Sala em greybox na Godot 4 montada com nós CSG cinza, com porta e janela cavadas por subtração

Aprenda a usar os nós CSG da Godot 4 para fazer blockout e prototipar cenário 3D rápido: cavar portas, testar escala e liberar a jogabilidade antes da arte.

Antes de gastar horas modelando paredes, escadas e móveis, vale responder uma pergunta mais barata: esse nível é divertido de percorrer? É para isso que existe o blockout, e na Godot 4 a forma mais rápida de fazer isso é com os nós CSG. Neste guia você vai aprender a usar Godot CSG para prototipar cenário 3D com formas simples, cavar portas e janelas por subtração e testar a jogabilidade de verdade antes de tocar em qualquer arte final.

O que é blockout (ou greybox) e por que fazer

Blockout, também chamado de greybox, é a versão de rascunho do seu nível. Você monta o espaço todo com caixas e cilindros cinza, sem textura, sem iluminação caprichada e sem nenhum modelo detalhado. O objetivo é validar três coisas de uma vez:

  • Layout: os caminhos fazem sentido? O jogador se perde? Existe um gargalo bom ou um beco morto ruim?
  • Escala: a porta tem o tamanho certo em relação ao personagem? O teto sufoca ou o salão fica vazio demais?
  • Jogabilidade: dá para pular aquele vão? A cobertura protege num tiroteio? O ritmo de exploração funciona?

O ganho é econômico. Mudar uma parede de lugar no blockout leva dez segundos. Mudar a mesma parede depois que ela já foi modelada, texturizada e iluminada leva horas e desanima qualquer um a corrigir o que está ruim. Blockout barato significa que você refina o design enquanto ainda é fácil errar.

Os nós CSG da Godot 4

CSG quer dizer Constructive Solid Geometry, ou geometria sólida construtiva. A ideia é montar formas complexas combinando formas simples com operações booleanas. A Godot 4 traz um conjunto de nós prontos para isso, todos com o prefixo CSG:

  • CSGBox3D: a caixa. É o nó que você mais vai usar. Piso, parede, teto, degrau, plataforma, quase tudo começa como uma caixa.
  • CSGCylinder3D: cilindro e cone. Ótimo para colunas, tubos, torres e pilares.
  • CSGSphere3D: esfera. Boa para cúpulas e formas arredondadas.
  • CSGPolygon3D: cria um sólido a partir de um polígono 2D que você desenha, com opção de extrudar ou girar em torno de um eixo. Serve para rampas, molduras e perfis irregulares.
  • CSGMesh3D: usa uma malha qualquer como operando booleano, caso você precise subtrair uma forma que não é primitiva.
  • CSGCombiner3D: não desenha nada sozinho. Ele agrupa outros CSG e resolve as operações booleanas dentro daquele grupo de forma isolada.

As três operações booleanas

Todo nó CSG (menos o Combiner) tem uma propriedade chamada Operation com três valores:

  • Union: soma os volumes. Duas caixas que se encostam viram uma só forma contínua. É o padrão e o que você usa para juntar paredes.
  • Intersection: mantém só a parte onde os dois volumes se sobrepõem. Menos comum no dia a dia, mas útil para cortar um canto em ângulo.
  • Subtraction: remove o volume deste nó do que veio antes dele. É o truque mais poderoso do blockout. Quer uma porta na parede? Coloque um CSGBox3D no lugar da porta, marque como Subtraction, e o vão aparece.

A ordem importa. Os nós CSG são resolvidos de cima para baixo na árvore da cena. Uma subtração só afeta o que está acima dela na mesma hierarquia, então a posição do nó na lista de filhos muda o resultado.

Fluxo prático: montando uma sala

Vamos montar um cômodo de teste. Crie uma cena 3D com um nó raiz e adicione um CSGCombiner3D dentro dela. Todo o blockout desta sala vai morar dentro do Combiner, o que garante que as subtrações fiquem contidas aqui e não vazem para o resto do mapa.

Antes de mais nada, ligue o snap da grade. No topo da viewport 3D, ative o snap e defina um valor redondo, como 0.5 ou 1 metro. Isso é o que mantém suas proporções limpas: paredes alinhadas, espessuras consistentes e nada de números quebrados que estragam a leitura de escala. Trabalhar no grid é metade do segredo de um blockout que não vira bagunça.

O piso. Adicione um CSGBox3D como filho do Combiner. Deixe algo como 8 de largura, 0.2 de altura e 6 de profundidade. Esse é o chão da sala.

As paredes. Duplique o box (Ctrl+D) e transforme em parede: fina em um eixo, alta no outro. Uma parede de 8 de comprimento, 3 de altura e 0.2 de espessura fecha um lado. Posicione com o snap, duplique e gire para fechar os quatro lados. Deixe todas em operação Union para que o conjunto vire um bloco sólido de paredes.

A porta, por subtração. Aqui entra a mágica do CSG. Adicione um novo CSGBox3D, dimensione como uma porta (1 de largura, 2.1 de altura, 0.5 de espessura para atravessar a parede toda) e posicione encaixado numa das paredes. Mude a Operation dele para Subtraction. O vão da porta aparece cavado na parede. Se o buraco ficou no lugar errado, arraste o box no snap até acertar. É instantâneo.

A janela. Mesma receita. Outro CSGBox3D em Subtraction, menor, posicionado mais alto na parede. Em segundos você tem uma abertura de janela. Esse é o motivo de o CSG ser tão bom para prototipar: você esculpe o espaço em vez de montá-lo peça por peça.

O corredor. Duplique o piso e as paredes para criar um corredor saindo da porta. Conecte um cômodo ao outro e você já tem o começo de um nível navegável. Repita o padrão sala mais corredor e o mapa cresce rápido.

Um material para ler a escala

Blockout cinza puro engana o olho. Sem nenhuma variação de tom, é difícil julgar distâncias e alturas. Crie um StandardMaterial3D simples com uma cor neutra e, de preferência, uma textura de grid (a própria Godot exporta uma, ou você usa uma textura quadriculada). Aplique o material no CSGCombiner3D pela propriedade Material. Com o quadriculado, cada quadrado vira uma régua visual e a leitura de escala fica honesta. Um segundo material de cor levemente diferente ajuda a destacar áreas que o jogador pode pisar contra áreas que são só parede.

Se quiser dar um passo além na leitura do espaço, uma luz direcional básica já revela relevo e profundidade que o cinza chapado esconde. Não precisa caprichar agora, mas se for testar clima e sombras vale ver como configurar a iluminação 3D na Godot para o greybox não ficar completamente plano.

Próximo nível
Quer aprender isso na prática?

No CursoGame.Dev você sai dos tutoriais soltos e constrói jogos publicáveis, com trilha progressiva, quests práticas e feedback real.

Conhecer a plataforma
+500 alunos4.9/5Garantia 7 dias

Colisão: ande no seu blockout

Prototipar cenário parado na tela não vale nada. Você precisa entrar no nível e caminhar por ele. Felizmente a Godot resolve isso com um clique: selecione o nó CSG raiz da sua sala (o CSGCombiner3D serve bem) e ative a propriedade Use Collision no inspetor. A engine gera uma forma de colisão a partir da geometria CSG resultante, incluindo os vãos que você cavou.

Agora adicione um CharacterBody3D com um script de movimento simples, ou reaproveite um personagem que você já tenha. Se você nunca montou um controlador de personagem em 3D, o passo a passo do seu primeiro jogo 3D na Godot cobre exatamente isso e encaixa direto no seu greybox. Dê play e caminhe. É aqui que o blockout paga: você sente na hora se o corredor é apertado demais, se a porta trava a passagem, se o salão é grande demais para o ritmo que você queria.

Alternar o blockout com um snippet tipado

Quando você começar a modelar por cima do greybox, é útil ligar e desligar o blockout para comparar. Um script curto e tipado no nó raiz resolve:

extends Node3D

@export var blockout: Node3D

func _unhandled_input(event: InputEvent) -> void:
    if event.is_action_pressed("toggle_blockout"):
        alternar_blockout()

func alternar_blockout() -> void:
    if blockout == null:
        return
    blockout.visible = not blockout.visible

Mapeie uma ação chamada toggle_blockout no Input Map, arraste o CSGCombiner3D para o campo exportado e uma tecla passa a esconder ou mostrar o rascunho. O foco continua sendo o editor e os nós, mas esse atalho economiza muito clique quando o blockout vira referência.

Limites e a hora de migrar para malhas

O CSG é imbatível para prototipar, mas não é a escolha para o jogo final. Cada operação booleana é recalculada quando algo muda, e uma cena cheia de subtrações vira peso desnecessário em tempo de execução. A geometria gerada também não tem UVs limpas nem topologia otimizada, então texturizar bem em cima de CSG é sofrido.

A regra prática é simples: assim que o layout estiver aprovado e o nível divertido de jogar, congele o blockout e comece a modelar por cima. Mantenha o CSG visível como referência, modele a arte final na escala exata dele e vá substituindo forma por forma. Quando terminar de exportar suas malhas, o caminho de levar modelos do Blender para a Godot mostra como importar mantendo escala e orientação corretas, que é justamente o que o greybox já definiu para você.

Vale reforçar que o blockout não é só sobre formas: ele é o momento de aplicar bom design. Se você quer que o rascunho já nasça guiando o jogador, com ritmo, marcos visuais e leitura clara, revise os princípios fundamentais de level design antes de encher o mapa de caixas. Um greybox bem pensado economiza retrabalho de arte mais tarde.

Resumo do fluxo

Junte as peças e o ciclo fica assim: monte piso e paredes com CSGBox3D em Union dentro de um CSGCombiner3D, cave portas e janelas com boxes em Subtraction, mantenha tudo no snap da grade, aplique um material quadriculado para ler a escala e ligue Use Collision para andar no nível. Teste, ajuste, teste de novo. Só depois que estiver bom você troca o CSG por malhas modeladas. Prototipar cenário 3D na Godot com CSG é rápido, reversível e barato, que é exatamente o que a fase de design precisa ser.

Perguntas frequentes

CSG serve para o jogo final ou só para prototipar?

CSG é feito para prototipar. As operações booleanas recalculam a malha em tempo real, o que custa performance. Depois que o layout for aprovado, substitua o blockout por malhas modeladas em uma ferramenta como o Blender.

Como cavo uma porta em uma parede com CSG?

Coloque um CSGBox3D na posição da porta, deixe ele como filho de um CSGCombiner3D junto com a parede e mude a operação do box de porta para Subtraction. O volume dele passa a ser removido da parede, abrindo o vão.

O jogador consegue andar em cima do blockout CSG?

Sim. Ative a propriedade Use Collision no nó CSG raiz (ou no CSGCombiner3D). A Godot gera a colisão a partir da forma resultante e você já testa o movimento do personagem no greybox.

Qual a diferença entre CSGCombiner3D e agrupar nós comuns?

O CSGCombiner3D isola as operações booleanas de um grupo. Sem ele, todos os CSG de uma cena se combinam entre si. Com ele, você separa uma sala da outra e evita que uma subtração afete o cenário inteiro.