En matemáticas y sus aplicaciones, la función de distancia con signo o campo de distancia con signo ( SDF ) es la distancia ortogonal de un punto dado x al límite de un conjunto Ω en un espacio métrico (como la superficie de una forma geométrica), con el signo determinado por si x está o no en el interior de Ω. La función tiene valores positivos en los puntos x dentro de Ω, disminuye en valor a medida que x se acerca al límite de Ω donde la función de distancia con signo es cero, y toma valores negativos fuera de Ω. [1] Sin embargo, a veces también se toma la convención alternativa (es decir, negativo dentro de Ω y positivo fuera). [2] El concepto también se conoce a veces con el nombre de función/campo de distancia orientado .
Sea Ω un subconjunto de un espacio métrico X con métrica d , y sea su frontera . La distancia entre un punto x de X y el subconjunto de X se define como de costumbre como
donde denota el ínfimo .
La función de distancia con signo desde un punto x de X hasta está definida por
Si Ω es un subconjunto del espacio euclidiano R n con un límite suave por partes , entonces la función de distancia con signo es diferenciable casi en todas partes , y su gradiente satisface la ecuación eikonal
Si el límite de Ω es C k para k ≥ 2 (ver Clases de diferenciabilidad ) entonces d es C k en puntos suficientemente cercanos al límite de Ω. [3] En particular, en el límite f satisface
donde N es el campo vectorial normal interno . La función de distancia con signo es, por lo tanto, una extensión diferenciable del campo vectorial normal. En particular, la hessiana de la función de distancia con signo en el límite de Ω da la función de Weingarten .
Si, además, Γ es una región suficientemente cercana al límite de Ω como para que f sea dos veces continuamente diferenciable en ella, entonces existe una fórmula explícita que involucra la función de Weingarten W x para el jacobiano de variables cambiantes en términos de la función de distancia con signo y el punto límite más cercano. Específicamente, si T ( ∂ Ω, μ ) es el conjunto de puntos dentro de la distancia μ del límite de Ω (es decir, el vecindario tubular de radio μ ), y g es una función absolutamente integrable en Γ, entonces
donde det denota el determinante y dS u indica que estamos tomando la integral de superficie . [4]
Los algoritmos para calcular la función de distancia con signo incluyen el método de marcha rápida eficiente , el método de barrido rápido [5] y el método de nivel establecido más general .
Para la representación de vóxeles , un algoritmo rápido para calcular la SDF en la geometría del taxi utiliza tablas de áreas sumadas . [6]
Las funciones de distancia con signo se aplican, por ejemplo, en la representación en tiempo real , [7] por ejemplo el método de marcha de rayos SDF y la visión por computadora . [8] [9]
SDF se ha utilizado para describir la geometría de objetos en renderizado en tiempo real , generalmente en un contexto de raymarching, a partir de mediados de la década de 2000. En 2007, Valve está utilizando SDF para renderizar fuentes suaves de gran tamaño de píxel (o alto DPI ) con aceleración de GPU en sus juegos. [10] El método de Valve no es perfecto, ya que se ejecuta en el espacio raster para evitar la complejidad computacional de resolver el problema en el espacio vectorial (continuo). El texto renderizado a menudo pierde esquinas agudas. En 2014, Behdad Esfahbod presentó un método mejorado . GLyphy de Behdad aproxima las curvas de Bézier de la fuente con splines de arco, aceleradas por técnicas de discretización basadas en cuadrícula (que descartan puntos demasiado lejanos) para ejecutarse en tiempo real. [11]
Se introdujo una versión modificada de SDF como una función de pérdida para minimizar el error en la interpenetración de píxeles al renderizar múltiples objetos. [12] En particular, para cualquier píxel que no pertenece a un objeto, si se encuentra fuera del objeto en la renderización, no se impone ninguna penalización; si lo hace, se impone un valor positivo proporcional a su distancia dentro del objeto.
En 2020, el motor de juegos FOSS Godot 4.0 recibió iluminación global en tiempo real basada en SDF (SDFGI), que se convirtió en un compromiso entre la GI basada en vóxeles más realista y la GI horneada. Su principal ventaja es que se puede aplicar al espacio infinito, lo que permite a los desarrolladores usarlo para juegos de mundo abierto. [13]
En 2023, se lanzó un marco de interfaz de usuario "GPUI" para dibujar todos los elementos de la interfaz de usuario utilizando la GPU, muchas partes utilizando SDF. El autor afirma haber producido un editor de código Zed que se renderiza a 120 fps. El trabajo hace uso de la lista de primitivas geométricas de Inigo Quilez en SDF, el desenfoque gaussiano aproximado de Evan Wallace (cofundador de Figma ) en SDF y un nuevo SDF de rectángulo redondeado. [14]