
Os campos de distância com sinal (SDFs, do inglês signed distance fields) descrevem uma forma com uma única função. Em vez de armazenar triângulos ou segmentos de curva, você guarda uma regra que responde a duas perguntas para qualquer ponto do espaço: a que distância está a superfície mais próxima e estou dentro ou fora?
Essas duas respostas cobrem mais terreno do que parecem à primeira vista. Renderização, colisão, iluminação, animação e navegação fazem perguntas de distância e de lado, e um SDF responde a todas avaliando a mesma função em um ponto diferente. Como a forma vive em uma fórmula, você pode movê-la, repeti-la, misturá-la e esculpi-la com aritmética comum.
Esta página constrói o modelo mental com exemplos interativos em 2D e depois mapeia para onde cada ideia leva. As seções principais apontam para artigos dedicados que desenvolvem a teoria, o código e os trade-offs por completo.
O Que um Campo de Distância com Sinal Armazena
Para qualquer ponto , um SDF retorna um escalar com sinal :
- positivo fora da forma
- zero na superfície
- negativo dentro da forma
O valor absoluto é a menor distância até a borda, e o sinal diz de que lado você está. Um valor de significa que o ponto está 0.12 unidades dentro da forma. Um valor de significa que está 0.12 unidades fora. Em zero, você está na superfície. Esse único número carrega tanto um rótulo de lado quanto uma distância, mais do que uma máscara binária de dentro/fora pode informar.
São essas informações extras que tornam o campo reutilizável. Uma malha registra onde está a superfície; um SDF registra a que distância cada ponto do espaço está dela. Deslocar a superfície passa a ser uma única subtração. Avaliar aumenta a forma em , e a encolhe, o que dá buffers de colisão, chanfros e cascas sem reconstruir a geometria.
O explorador desenha seis primitivas (círculo, caixa, caixa arredondada, segmento de linha, cápsula e polígono regular) como mapas de calor contínuos, em que a cor acompanha a distância com sinal e uma linha preta marca o contorno zero. Passe o mouse em qualquer lugar para ler o valor exato e um rótulo Dentro, Superfície ou Fora. Trocar de forma mantém o mesmo processo de leitura enquanto a fórmula muda por baixo, e a fórmula aparece acima dos controles deslizantes para você conectar cada parâmetro ao campo que ele produz. Arrastar as extremidades do segmento e da cápsula mostra que o campo acompanha a geometria imediatamente, sem malha para reconstruir.
Abaixo da superfície, cada primitiva é uma expressão compacta. Essa é a próxima ideia a tornar concreta.
Fórmulas de Distância com Sinal para Formas Simples
Toda cena SDF parte de primitivas com fórmulas compactas, e o círculo é o primeiro exemplo natural:
O termo é a distância euclidiana do ponto de amostra até o centro . Subtrair o raio desloca o cruzamento por zero até a borda. Na borda, a distância ao centro é igual a , então a expressão é zero; fora é positiva; dentro é negativa, e a magnitude informa a que profundidade o ponto está. Em código, é uma única linha:
float circleSDF(vec2 p, vec2 center, float r) {
return length(p - center) - r;
}
A caixa segue a mesma ideia de distância menos extensão, aplicada por eixo. Para uma caixa centrada em com meia-largura :
mede a que distância o ponto está da face mais próxima quando está fora, e o segundo termo informa a profundidade de penetração quando está dentro. Somá-los produz um único valor com sinal que segue o mesmo contrato do círculo: positivo fora, zero na superfície, negativo dentro.
A mesma fórmula do círculo se generaliza diretamente para três dimensões, o que dá o campo de distância com sinal para uma esfera, uma das poucas formas com distância exata em todo o espaço. Para um catálogo mais amplo cobrindo triângulos, cápsulas, toros e mais, veja a referência de funções de distância de Iñigo Quilez.
Combinando Formas com Geometria Sólida Construtiva
Uma única primitiva raramente forma uma cena. A maioria das formas é construída combinando campos, e a técnica tem um nome formal: geometria sólida construtiva (CSG). Com malhas, as operações booleanas exigem cortar e retriangular superfícies. Com SDFs, elas se reduzem a algumas comparações entre valores de distância.
Três operadores cobrem a maioria dos casos:
- união:
min(a, b) - interseção:
max(a, b) - subtração (A menos B):
max(a, -b)
Em qualquer ponto, a superfície mais próxima decide o valor combinado, então o mínimo de duas distâncias com sinal é a distância até a união delas. A interseção mantém apenas a região dentro das duas formas, por isso usa o máximo. A subtração inverte o sinal do segundo campo para que seu interior escave o primeiro. Furos, recortes e espaços negativos são modelados assim, e a mesma operação impulsiona destruição em tempo real: cada cratera é mais uma subtração na árvore, seguida de Marching Cubes para extrair uma malha nova para renderização. O artigo sobre terreno destrutível acompanha esse pipeline de esculpir e extrair em detalhes.
A visualização abre no modo Subtração, com um anel esculpindo um furo arredondado em uma caixa. Azul marca o exterior e vermelho o interior, e trocar a operação atualiza todo o campo: União funde as formas ao longo de suas bordas mais próximas, Interseção mantém apenas a sobreposição, e a leitura ao passar o mouse informa a distância combinada exata em qualquer ponto. Adicione primitivas da paleta e arraste-as para o lugar para ver o campo se recompor.
Mistura Suave
min e max puros deixam dobras afiadas onde as formas se encontram, o que muitas vezes é exatamente o que se quer. Para junções orgânicas, um mínimo suave (smin) arredonda a transição. Uma forma comum usa uma largura de mistura :
Um pequeno se comporta quase como um min puro, e um maior alarga a região misturada até as formas fluírem uma na outra. A mesma construção tem variantes de interseção e subtração suaves.
Esta instância começa em União Suave. Aumentar o controle de mistura alarga a emenda; voltar para União mostra a versão afiada da mesma sobreposição para comparação. A leitura ao passar o mouse mostra como o valor em um ponto muda conforme suaviza a transição.
Suavizar é conveniente, mas altera a curvatura local e relaxa a garantia estrita de distância, um trade-off que importa quando um ray marcher depende de tamanhos de passo seguros.
Transformar, Repetir e Perturbar o Espaço
Muitas operações com SDF nunca tocam a fórmula da forma. Elas transformam as coordenadas antes da avaliação:
- Translação: avalie em
- Rotação: avalie em
- Escala: avalie em e multiplique o resultado por
- Repetição: dobre as coordenadas com
modoufractpara ladrilhar uma forma pelo espaço
Como cada instância compartilha uma fórmula, uma única definição de círculo pode virar uma grade de círculos, e uma primitiva pode povoar uma cena inteira. O caso da escala é o que exige atenção: dividir a entrada por estica o espaço, então o resultado bruto precisa ser multiplicado por para restaurar uma distância verdadeira.
As operações de domínio também se combinam com ruído. Alimentar um SDF com coordenadas perturbadas produz superfícies rochosas, derretidas ou nubladas sem abandonar o fluxo de trabalho baseado em funções. Ruído de valor, Perlin e fractal são abordados no artigo sobre funções de ruído.
Normais de Superfície a partir do Gradiente
Quando uma consulta encontra um ponto na superfície, a próxima pergunta geralmente é para que lado essa superfície aponta. Iluminação, reflexões e resposta a colisões precisam dessa direção. Um SDF a fornece sem um buffer de normais armazenado, porque a distância aumenta mais rápido na direção que aponta para longe da superfície mais próxima. Essa direção é o gradiente , e na borda ele é a normal de superfície voltada para fora.
A visualização sobrepõe setas de gradiente ao mapa de calor. Cada seta aponta para longe da superfície mais próxima, e as setas próximas do contorno zero são destacadas porque ali o gradiente é a normal. Passe o mouse para posicionar uma sonda e ler a distância, a direção do gradiente e sua magnitude; clique para fixá-la e depois arraste o controle de épsilon. Um épsilon pequeno (0.001) aglomera as amostras de diferenças finitas e a direção fica ruidosa; um épsilon grande (0.5) suaviza o resultado mas o desvia da normal verdadeira perto de cantos e de alta curvatura. O valor padrão 0.01 equilibra os dois para SDFs analíticos.
A estimativa por diferenças finitas amostra o campo em pequenos deslocamentos ao longo de cada eixo:
Os pontos laranjas ao redor da sonda marcam esses pontos de amostragem. Observe que a magnitude do gradiente permanece perto de 1 em todo o campo. Essa é a propriedade eikonal () que os SDFs exatos satisfazem, e é por isso que o gradiente já é um vetor unitário: depois de estimá-lo, normalize antes de usá-lo na iluminação.
Campos Exatos, Campos Aproximados e Segurança dos Passos
Nem todo campo de distância com sinal informa uma distância verdadeira. Uma fórmula como a do círculo retorna a distância euclidiana exata em todos os lugares. Um campo amostrado de uma malha, de uma mistura CSG suave ou de uma superfície modulada por ruído retorna um valor com sinal e parecido com uma distância, mas que pode ser impreciso.
A direção do erro importa. Um campo que subestima a distância (retornando 0.2 quando o valor verdadeiro é 0.5) faz um ray marcher dar passos menores, então ele ainda converge. Um campo que superestima (retornando 0.5 quando o valor verdadeiro é 0.2) pode deixar um raio atravessar uma parede fina. Campos exatos são preferíveis onde margens de segurança importam, como em raios longos de câmera ou na detecção de colisão, e campos aproximados precisam de limites mais apertados. O artigo sobre ray marching cobre as regras de segurança dos passos em detalhes.
Glifos de fontes, modelos digitalizados e malhas criadas por artistas não têm uma fórmula compacta, então seus campos são calculados e armazenados em vez de derivados. O artigo sobre campos de distância com sinal amostrados percorre todo o pipeline, de encontrar o triângulo mais próximo para cada amostra a resolver interior e exterior e escolher uma resolução.
Onde os SDFs se Encaixam em um Pipeline
Os SDFs são uma representação geométrica entre várias, e se encaixam melhor onde as formas são procedurais, deformáveis ou consultadas de muitos lugares. Diferentes aplicações exploram o campo de maneiras distintas. Um sistema de partículas avalia distância e gradiente para cada partícula em voo, então o custo por consulta importa mais do que a complexidade da forma testada. Um sistema de navegação lê o valor do campo como folga e o gradiente como uma direção para perto ou para longe dos obstáculos. Sombras suaves e oclusão de ambiente usam o campo como um teste barato de oclusão ao longo dos raios de luz, em vez de depender de shadow maps.
A tabela abaixo mapeia as perguntas comuns para a avaliação do campo que as responde e para o artigo que cobre essa aplicação em profundidade.
| Pergunta | O que o SDF fornece | Leia a seguir |
|---|---|---|
| Onde um raio atinge a cena? | passos guiados pela distância ao longo do raio | Ray marching |
| Este ponto está dentro de um volume? | o sinal do campo | Detecção de colisão |
| Como dois objetos se separam? | profundidade de penetração pela magnitude, direção pelo gradiente | Detecção de colisão |
| Onde uma partícula quica? | distância e gradiente na partícula | Física e sistemas de partículas |
| Quanta folga um ponto tem? | o valor do campo, com o gradiente apontando para o obstáculo mais próximo | Pathfinding de IA e navegação |
| Quão suave é uma sombra? | o mais perto que um raio de luz chega de ocluir geometria | Sombras e oclusão de ambiente |
| Onde uma explosão escavou? | uma subtração CSG no campo | Terreno destrutível |
Malhas continuam sendo a melhor escolha para topologia criada por artistas, fluxos de UV e rasterização de triângulos por hardware, e a maioria dos pipelines de GPU é construída em torno delas. Os SDFs vencem quando você precisa de consultas de distância repetidas e baratas ou de formas que mudam a cada quadro. Motores de produção costumam manter os dois: malhas rasterizadas para a cena visível e campos de distância para as consultas espaciais por trás dela. O artigo sobre SDFs no desenvolvimento de jogos apresenta essa estratégia híbrida em colisão, física, IA, iluminação e terreno.
Resumo
Um campo de distância com sinal armazena a forma como uma função escalar com duas garantias: a magnitude é a distância até a superfície mais próxima, e o sinal diz de que lado você está. A partir dessa única representação, você pode:
- percorrer raios com passos seguros guiados pela distância
- compor cenas com
minemax - estimar normais de superfície a partir do gradiente
- transformar e repetir coordenadas para construir layouts complexos
A maioria das técnicas avançadas com SDF são variações de um único laço: avalie o campo, use o resultado, repita. Quando o contrato fica claro, os artigos vinculados se tornam variações dessa mesma ideia.