Los motores de física manejan dos cargas de trabajo muy diferentes. Los cuerpos rígidos necesitan las consultas de profundidad de penetración y dirección de separación cubiertas en la detección de colisiones con SDF . Los sistemas de partículas y las interacciones de cuerpos blandos necesitan lo contrario: consultas por partícula contra superficies implícitas complejas, a escalas donde los métodos basados en mallas serían prohibitivamente costosos. Este artículo cubre las tres formas en que los SDF sirven a esa carga de trabajo: respuesta de colisión discreta, campos de fuerza continuos y la representación de level set utilizada en la simulación de fluidos basada en rejillas.
Si la convención de signos o el gradiente no están claros, la visión general de los Campos de Distancia con Signo construye ambos desde los primeros principios. Para la visión general de todo el motor, consulta los SDF en el desarrollo de videojuegos .
Respuesta de Colisión de Partículas
Cuando una partícula entra en un volumen definido por un SDF (es decir, cuando ), la lógica de respuesta necesita proyectar la partícula de vuelta a la superficie y reflejar su velocidad. El SDF proporciona todo lo necesario en dos evaluaciones:
void resolveParticleCollision(inout vec3 position, inout vec3 velocity,
SDF volume, float bounceFactor) {
float d = evaluateSDF(position, volume);
if (d >= 0.0) return; // Not penetrating
vec3 normal = normalize(gradientSDF(position, volume));
// Push particle back to surface
position -= d * normal;
// Reflect velocity about the surface normal
float vn = dot(velocity, normal);
if (vn < 0.0) {
velocity -= (1.0 + bounceFactor) * vn * normal;
}
}
El gradiente da la normal de la superficie en el punto límite más cercano, y multiplicar por la distancia negativa -d proyecta la partícula exactamente a la superficie. La reflexión de velocidad usa la fórmula de espejo estándar con un factor de rebote configurable que controla la pérdida de energía en el impacto. Un factor de 1.0 conserva toda la energía cinética (rebote elástico perfecto); 0.0 elimina por completo la componente normal (la partícula se desliza a lo largo de la superficie).
Un ejemplo práctico muestra cada línea haciendo trabajo real. Toma un SDF de esfera de radio 1 en el origen, una partícula en con velocidad y un factor de rebote de 0.8.
La evaluación de distancia: , así que . La partícula está 0.057 unidades por debajo de la superficie. El gradiente normalizado es .
Proyección: position -= d * normal suma , dando , cuya longitud es exactamente 1. La partícula se asienta sobre la superficie.
Reflexión: . Debido a que (la partícula se movía hacia adentro), la actualización de velocidad resta de la velocidad, dando . La componente hacia adentro fue eliminada e invertida con un rebote: la partícula abandona la superficie con una componente normal escalada por el factor de rebote.
Este patrón escala a millones de partículas en la GPU porque cada partícula necesita solo una evaluación de distancia y una evaluación de gradiente, ambas puramente aritméticas. No hay estructura de aceleración que recorrer ni triángulo que localizar. El gradiente en sí cuesta más que la distancia: un gradiente de diferencias centrales muestrea el campo seis veces, o cuatro veces con un stencil tetraédrico, así que una respuesta de colisión completa es aproximadamente siete evaluaciones de campo por partícula. Eso sigue siendo trivialmente barato comparado con localizar y probar un triángulo.
Dos casos límite merecen atención. Las partículas que entran más profundo que su radio en un solo paso (la versión discreta del problema de tunelización) necesitan el mismo sphere casting del spoke de colisiones, o un tope en la corrección por paso para que un único impacto violento no teletransporte la partícula al lado equivocado del campo. Y cuando el factor de rebote es 0, la línea de reflexión se omite por completo y solo se ejecuta la proyección; esta es la configuración común para humo y polvo, que deben asentarse y deslizarse en lugar de rebotar como una pelota de ping-pong.
Campos de Fuerza Basados en SDF
El gradiente del SDF también puede impulsar fuerzas continuas en lugar de eventos de colisión discretos. Un campo de repulsión mantiene las partículas alejadas de un volumen aplicando una fuerza proporcional a qué tan cerca están:
vec3 sdfRepulsionForce(vec3 position, SDF volume, float maxDistance, float strength) {
float d = evaluateSDF(position, volume);
if (d > maxDistance) return vec3(0.0);
// Force falls off linearly from maxDistance to surface,
// then increases linearly for penetration
float forceMagnitude = strength * (1.0 - d / maxDistance);
vec3 direction = normalize(gradientSDF(position, volume));
return forceMagnitude * direction;
}
Esto crea un límite suave a lo largo del cual las partículas se deslizan en lugar de chocar con un rebote discreto. En la propia superficie la fuerza está a plena potencia, en maxDistance es cero, y entre ambos cae linealmente. La misma dirección de gradiente que sirve a la respuesta de colisión ahora sirve como dirección de la fuerza.
Un ejemplo práctico: una partícula 0.5 unidades fuera de una superficie, con maxDistance = 2.0 y strength = 3.0. La magnitud de la fuerza es , empujando directamente en dirección opuesta a la superficie. Una partícula 1.5 unidades fuera recibe , una cuarta parte de la fuerza. La relación es una línea recta desde la fuerza completa en la superficie hasta nada en el radio de corte, lo que hace que el límite se sienta suave y predecible.
El campo de fuerza es útil para campos de viento alrededor de edificios (el edificio es una unión de SDF de cajas, y las partículas sienten un empujón cerca de sus caras y bordes), efectos de repulsión magnética y para mantener partículas de humo dentro de un contenedor definido por operaciones CSG. Debido a que la fuerza depende solo del campo y del punto, se compone con cualquier otra fuerza (gravedad, arrastre, turbulencia) mediante una simple suma de vectores.
La Conexión con la Simulación de Fluidos
Los campos de distancia también son centrales en la simulación de fluidos basada en rejillas, donde la misma representación aparece en dos lugares. En el método de level set, la superficie del fluido se rastrea implícitamente como el conjunto de nivel cero de una función de distancia con signo. Cada paso de simulación advecta el campo con la velocidad del fluido y luego lo renorma para que se mantenga cerca de un verdadero campo de distancia; la superficie está donde el campo cruza el cero. Esto evita los dolores de cabeza de topología de rastrear una malla de superficie explícita a través de salpicaduras, gotas y masas de fluido que se fusionan.
El SDF también reaparece en el paso de proyección de presión, donde la ecuación de Poisson se resuelve en celdas de rejilla clasificadas como fluido, sólido o aire por su signo de distancia. Las celdas dentro de la geometría sólida (distancia negativa al campo sólido) reciben condiciones de contorno que empujan el campo de velocidad fuera de los obstáculos. El mismo campo que define la superficie de fluido visible también define dónde está restringida la resolución de presión.
Este es un tema más profundo de lo que una sección puede cubrir, pero vale la pena saber que la representación de SDF se extiende sin problemas desde la física de videojuegos en tiempo real hasta la dinámica de fluidos computacional completa: mismo campo, misma convención de signos, mismo conjunto de nivel cero, solo con advección y renormación añadidas encima.
Resumen
A escala de partículas, el contrato de los SDF reemplaza la búsqueda por aritmética:
- Respuesta de colisión evalúa el campo una vez para la penetración, lee el gradiente para la normal, proyecta la partícula a la superficie y refleja la velocidad con un rebote configurable.
- Campos de fuerza escalan el gradiente por una función de caída para crear límites suaves a lo largo de los cuales las partículas se deslizan en lugar de rebotar.
- Simulación de fluidos rastrea la superficie como un level set advectado y restringe la resolución de presión con signos de distancia.
La matemática de penetración que inicia esta cadena, los vectores de traslación mínima y los sphere casts, es el tema de la inmersión profunda en detección de colisiones . El otro lado de la física con SDF, lo que sucede cuando el propio entorno se deforma, vive en la inmersión profunda en terreno destructible .