Last updated on

Campos de Distancia con Signo: Una Introducción Visual

ENNLESPT-BR


Los campos de distancia con signo (SDF, por sus siglas en inglés) describen una forma con una sola función. En lugar de almacenar triángulos o segmentos de curva, se guarda una regla que responde dos preguntas para cualquier punto del espacio: ¿a qué distancia está la superficie más cercana y estoy dentro o fuera?

Esas dos respuestas abarcan más de lo que parece a primera vista. El renderizado, las colisiones, la iluminación, la animación y la navegación plantean preguntas de distancia y de lado, y un SDF responde a cada una evaluando la misma función en un punto distinto. Como la forma vive en una fórmula, puedes moverla, repetirla, mezclarla y tallarla con aritmética corriente.

Esta página construye el modelo mental con ejemplos interactivos en 2D y después traza hacia dónde lleva cada idea. Las secciones principales apuntan a artículos dedicados que desarrollan la teoría, el código y las ventajas y desventajas con todo detalle.

Qué Almacena un Campo de Distancia con Signo

Para cualquier punto p\mathbf{p}, un SDF devuelve un escalar con signo d(p)d(\mathbf{p}):

  • positivo fuera de la forma
  • cero en la superficie
  • negativo dentro de la forma

El valor absoluto ∣d(p)∣|d(\mathbf{p})| es la distancia más corta al límite, y el signo indica de qué lado estás. Un valor de d(p)=−0.12d(\mathbf{p}) = -0.12 significa que el punto está 0.12 unidades dentro de la forma. Un valor de d(p)=0.12d(\mathbf{p}) = 0.12 significa que está 0.12 unidades fuera. En cero, estás en la superficie. Ese único número reúne tanto una etiqueta de lado como una distancia, algo que una máscara binaria de dentro/fuera no puede decirte.

La información extra es lo que hace reutilizable el campo. Una malla registra dónde está la superficie; un SDF registra a qué distancia está cada punto del espacio de ella. Desplazar la superficie es entonces una sola resta. Evaluar d(p)−md(\mathbf{p}) - m agranda la forma en mm, y d(p)+md(\mathbf{p}) + m la encoge, lo que te da búferes de colisión, biseles y cáscaras sin reconstruir la geometría.

——
InsideSurfaceOutside

El explorador dibuja seis primitivas (círculo, caja, caja redondeada, segmento de línea, cápsula y polígono regular) como mapas de calor continuos, donde el color refleja la distancia con signo y una línea negra marca el contorno cero. Pasa el ratón por cualquier punto para leer el valor exacto y una etiqueta Interior, Superficie o Exterior. Cambiar de forma mantiene el mismo proceso de lectura mientras la fórmula cambia por debajo, y la fórmula se muestra sobre los controles deslizantes para que conectes cada parámetro con el campo que produce. Arrastrar los extremos del segmento y la cápsula demuestra que el campo sigue la geometría de inmediato, sin ninguna malla que reconstruir.

Bajo la superficie, cada primitiva es una expresión compacta. Esa es la siguiente idea que vamos a concretar.

Fórmulas de Distancia con Signo para Formas Simples

Toda escena SDF parte de primitivas con fórmulas compactas, y el círculo es el primer ejemplo natural:

d(p)=∥p−c∥−rd(\mathbf{p}) = |\mathbf{p} - \mathbf{c}| - r

El término ∥p−c∥|\mathbf{p} - \mathbf{c}| es la distancia euclidiana desde el punto de muestra p\mathbf{p} hasta el centro c\mathbf{c}. Restar el radio rr desplaza el cruce por cero hasta el límite. En el límite, la distancia al centro es igual a rr, así que la expresión vale cero; fuera es positiva; dentro es negativa, y la magnitud indica qué tan profundo está el punto. En código es una sola línea:

float circleSDF(vec2 p, vec2 center, float r) {
    return length(p - center) - r;
}

La caja sigue la misma idea de distancia menos extensión, aplicada por eje. Para una caja centrada en c\mathbf{c} con mitad de tamaño b\mathbf{b}:

q=∣p−c∣−bd(p)=∥max⁡(q,0)∥+min⁡(max⁡(qx,qy),0)\begin{aligned} \mathbf{q} &= |\mathbf{p} - \mathbf{c}| - \mathbf{b} \ d(\mathbf{p}) &= |\max(\mathbf{q}, 0)| + \min(\max(q_x, q_y), 0) \end{aligned}

∥max⁡(q,0)∥|\max(\mathbf{q}, 0)| mide a qué distancia está el punto de la cara más cercana cuando está fuera, y el segundo término informa la profundidad de penetración cuando está dentro. Sumarlos produce un único valor con signo que sigue el mismo contrato que el círculo: positivo fuera, cero en la superficie, negativo dentro.

La misma fórmula del círculo se generaliza directamente a tres dimensiones, lo que da el campo de distancia con signo para una esfera, una de las pocas formas con distancia exacta en todo el espacio. Para un catálogo más amplio que cubre triángulos, cápsulas, toros y más, consulta la referencia de funciones de distancia de Iñigo Quilez.

Combinación de Formas con Geometría Sólida Constructiva

Una sola primitiva rara vez basta para una escena. La mayoría de las formas se construyen combinando campos, y la técnica tiene un nombre formal: geometría sólida constructiva (CSG). Con mallas, las operaciones booleanas exigen cortar y retriangular superficies. Con los SDF, se reducen a unas pocas comparaciones entre valores de distancia.

Tres operadores cubren la mayoría de los casos:

  • unión: min(a, b)
  • intersección: max(a, b)
  • diferencia (A menos B): max(a, -b)

En cualquier punto, la superficie más cercana decide el valor combinado, así que el mínimo de dos distancias con signo es la distancia a su unión. La intersección conserva solo la región dentro de ambas formas, por eso toma el máximo. La diferencia invierte el signo del segundo campo para que su interior recorte el primero. Agujeros, recortes y espacios negativos se modelan así, y la misma operación impulsa la destrucción en tiempo real: cada cráter es una resta más en el árbol, seguida de Marching Cubes para extraer una malla nueva con la que renderizar. El artículo sobre terreno destruible sigue ese pipeline de tallar y extraer en detalle.

0.50
0 primitives
InsideOutside

La visualización se abre en modo Diferencia, con un anillo que talla un agujero redondeado en una caja. El azul marca el exterior y el rojo el interior, y cambiar la operación actualiza todo el campo: Unión fusiona las formas por sus bordes más cercanos, Intersección conserva solo la superposición, y la lectura al pasar el ratón informa la distancia combinada exacta en cualquier punto. Añade primitivas desde la paleta y arrástralas a su sitio para ver cómo se recompone el campo.

Mezcla Suave

min y max duros dejan pliegues afilados donde se encuentran las formas, que a menudo es justo lo que quieres. Para uniones orgánicas, un mínimo suave (smin) redondea la transición. Una forma común usa un ancho de mezcla kk:

h=clamp(0.5+0.5b−ak,0,1),smin(a,b,k)=mix(b,a,h)−kh(1−h)h = \mathrm{clamp}\left(0.5 + 0.5\frac{b-a}{k}, 0, 1\right), \quad \mathrm{smin}(a,b,k) = \mathrm{mix}(b,a,h) - k h(1-h)

Un kk pequeño se comporta casi como un min duro, y un kk mayor ensancha la región mezclada hasta que las formas fluyen entre sí. La misma construcción tiene variantes de intersección y diferencia suaves.

0.50
0 primitives
InsideOutside

Esta instancia empieza en Unión Suave. Subir el control de mezcla ensancha la costura; volver a Unión muestra la versión afilada de la misma superposición para comparar. La lectura al pasar el ratón muestra cómo cambia el valor en un punto a medida que kk suaviza la transición.

Suavizar es cómodo, pero altera la curvatura local y relaja la garantía estricta de distancia, un compromiso que importa cuando un ray marcher depende de tamaños de paso seguros.

Transformar, Repetir y Perturbar el Espacio

Muchas operaciones con SDF nunca tocan la fórmula de la forma. Transforman las coordenadas antes de evaluar:

  1. Traslación: evaluar en p−t\mathbf{p} - \mathbf{t}
  2. Rotación: evaluar en R−1pR^{-1}\mathbf{p}
  3. Escala: evaluar en p/s\mathbf{p}/s y multiplicar el resultado por ss
  4. Repetición: plegar las coordenadas con mod o fract para repetir una forma por el espacio

Como cada instancia comparte una sola fórmula, una definición de círculo puede convertirse en una rejilla de círculos, y una primitiva puede poblar una escena entera. El caso de la escala es el que hay que vigilar: dividir la entrada entre ss estira el espacio, así que el resultado bruto debe multiplicarse por ss para recuperar una distancia verdadera.

Las operaciones de dominio también se combinan con el ruido. Alimentar un SDF con coordenadas perturbadas produce superficies rocosas, fundidas o nubosas sin abandonar el flujo de trabajo basado en funciones. El ruido de valor, Perlin y fractal se cubren en el artículo sobre funciones de ruido.

Normales de Superficie a partir del Gradiente

Cuando una consulta encuentra un punto en la superficie, la siguiente pregunta suele ser hacia dónde mira esa superficie. La iluminación, los reflejos y la respuesta a colisiones necesitan esa dirección. Un SDF la responde sin un búfer de normales almacenado, porque la distancia aumenta más rápido en la dirección que apunta en sentido contrario a la superficie más cercana. Esa dirección es el gradiente ∇d(p)\nabla d(\mathbf{p}), y en el límite es la normal de superficie hacia afuera.

Gradient arrow Surface normal

La visualización superpone flechas de gradiente al mapa de calor. Cada flecha apunta en sentido contrario a la superficie más cercana, y las flechas cercanas al contorno cero se resaltan porque allí el gradiente es la normal. Pasa el ratón para colocar una sonda y leer la distancia, la dirección del gradiente y su magnitud; haz clic para fijarla y luego arrastra el control de épsilon. Un épsilon pequeño (0.001) agrupa las muestras de diferencias finitas y la dirección se vuelve ruidosa; un épsilon grande (0.5) suaviza el resultado pero lo desvía de la normal verdadera cerca de esquinas y curvaturas altas. El valor predeterminado 0.01 equilibra ambos para SDF analíticos.

La estimación por diferencias finitas muestrea el campo en pequeños desplazamientos a lo largo de cada eje:

∇d(p)≈[d(p+εx)−d(p−εx)d(p+εy)−d(p−εy)]\nabla d(\mathbf{p}) \approx \begin{bmatrix} d(\mathbf{p}+\varepsilon_x)-d(\mathbf{p}-\varepsilon_x) \ d(\mathbf{p}+\varepsilon_y)-d(\mathbf{p}-\varepsilon_y) \end{bmatrix}

Los puntos naranjas alrededor de la sonda marcan esos puntos de muestreo. Observa que la magnitud del gradiente se mantiene cerca de 1 en todo el campo. Esta es la propiedad eikonal (∣∇d∣=1|\nabla d| = 1) que cumplen los SDF exactos, y es la razón por la que el gradiente ya es un vector unitario: tras estimarlo, normalízalo antes de usarlo en la iluminación.

Campos Exactos, Campos Aproximados y Seguridad de Pasos

No todos los campos de distancia con signo informan una distancia verdadera. Una fórmula como la del círculo devuelve la distancia euclidiana exacta en todas partes. Un campo muestreado de una malla, una mezcla CSG suave o una superficie modulada por ruido devuelve un valor con signo y parecido a una distancia, pero que puede ser inexacto.

La dirección del error importa. Un campo que subestima la distancia (devolver 0.2 cuando el valor verdadero es 0.5) hace que un ray marcher dé pasos más pequeños, así que sigue convergiendo. Un campo que la sobreestima (devolver 0.5 cuando el valor verdadero es 0.2) puede dejar que un rayo atraviese una pared delgada. Los campos exactos se prefieren dondequiera que importen los márgenes de seguridad, como en rayos largos de cámara o la detección de colisiones, y los campos aproximados necesitan umbrales más ajustados. El artículo sobre ray marching cubre las reglas de seguridad de pasos en detalle.

Los glifos de fuentes, los modelos escaneados y las mallas creadas por artistas no tienen una fórmula compacta, así que sus campos se calculan y almacenan en lugar de derivarse. El artículo sobre campos de distancia con signo muestreados recorre todo el pipeline, desde encontrar el triángulo más cercano para cada muestra hasta resolver interior y exterior y elegir una resolución.

Dónde Encajan los SDF en un Pipeline

Los SDF son una representación geométrica entre varias, y encajan mejor donde las formas son procedurales, deformables o se consultan desde muchos lugares. Distintas aplicaciones aprovechan el campo de distintas maneras. Un sistema de partículas evalúa la distancia y el gradiente para cada partícula en vuelo, así que el coste por consulta importa más que la complejidad de la forma evaluada. Un sistema de navegación lee el valor del campo como holgura y el gradiente como una dirección hacia los obstáculos o en sentido contrario. Las sombras suaves y la oclusión ambiental usan el campo como una prueba barata de oclusión a lo largo de los rayos de luz en lugar de depender de mapas de sombras.

La tabla siguiente asigna las preguntas habituales a la evaluación del campo que las responde y al artículo que cubre esa aplicación en detalle.

Pregunta Qué aporta el SDF Leer a continuación
¿Dónde golpea un rayo la escena? pasos guiados por la distancia a lo largo del rayo Ray marching
¿Está este punto dentro de un volumen? el signo del campo Detección de colisiones
¿Cómo se separan dos objetos? profundidad de penetración por la magnitud, dirección por el gradiente Detección de colisiones
¿Dónde rebota una partícula? distancia y gradiente en la partícula Física y sistemas de partículas
¿Cuánta holgura tiene un punto? el valor del campo, con el gradiente apuntando al obstáculo más cercano Pathfinding de IA y navegación
¿Qué tan suave es una sombra? lo más cerca que pasa un rayo de luz de ocluir geometría Sombras y oclusión ambiental
¿Dónde talló una explosión? una resta CSG en el campo Terreno destruible

Las mallas siguen siendo la mejor opción para topología creada por artistas, flujos de trabajo de UV y rasterización de triángulos por hardware, y la mayoría de los pipelines de GPU se construyen alrededor de ellas. Los SDF ganan cuando necesitas consultas de distancia repetidas y baratas o formas que cambian en cada fotograma. Los motores de producción suelen conservar ambos: mallas rasterizadas para la escena visible y campos de distancia para las consultas espaciales que hay detrás. El artículo sobre SDF en el desarrollo de videojuegos expone esa estrategia híbrida en colisiones, física, IA, iluminación y terreno.

Resumen

Un campo de distancia con signo almacena la forma como una función escalar con dos garantías: la magnitud es la distancia a la superficie más cercana, y el signo indica de qué lado estás. A partir de esa única representación puedes:

  1. recorrer rayos con pasos seguros guiados por la distancia
  2. componer escenas con min y max
  3. estimar normales de superficie a partir del gradiente
  4. transformar y repetir coordenadas para construir diseños complejos

La mayoría de las técnicas avanzadas con SDF son variaciones de un bucle: evalúa el campo, usa el resultado, repite. Una vez que el contrato está claro, los artículos enlazados se convierten en variaciones de esa misma idea.