BookinglyTech News
Software

Un fragment shader con Voronoi muestra stutter en una GPU RTX 4070 por precisión de ruido

El autor descubrió que añadir la parte fraccionaria de un número al ruido procedural elimina el tirón en un shader de Voronoi que fallaba solo en una RTX 4070.

2 min de lecturaLobsters0 vistas

El programador implementó un shader de Voronoi para usar como fondo de un video musical y, tras probarlo en varios equipos, solo una máquina con Windows y una GPU RTX 4070 mostraba un stutter notable. Después de aislar el problema, identificó que la causa estaba en la generación de los centros Voronoi, concretamente en la llamada a la función de ruido que combinaba la posición del píxel con el tiempo.

En el fragmento crítico del código se calcula v = o * 398.0 + vec2(iTime * 1.3, iTime * 1.4); y luego c = o + noise2(v) / TILES;. La función noise2 proviene del artículo de Inigo Quilez sobre ruidos procedurales. En la RTX 2070 y en dispositivos integrados Intel la operación produce valores consistentes, pero en la RTX 4070 la precisión de punto flotante de la multiplicación y la suma introduce pequeñas variaciones que, al acumularse frame a frame, generan el tirón.

La solución encontrada fue forzar la parte fraccionaria del número a cero antes de usarla en el cálculo del ruido: v = floor(v);. Al truncar la fracción, el ruido se vuelve determinista en todas las plataformas, eliminando el desajuste temporal. Esta técnica, aunque sencilla, muestra cómo diferencias sutiles en la aritmética de GPU pueden afectar shaders que dependen de funciones pseudo‑aleatorias.

El shader completo está disponible en Shadertoy. El autor también compartió el código fuente en su repositorio de GitHub, donde se pueden observar tanto la versión original como la corregida.

Impacto para desarrolladores de gráficos

Este caso ilustra la importancia de considerar la precisión de punto flotante al diseñar algoritmos de ruido en shaders. En pipelines donde la reproducibilidad es crítica —por ejemplo, efectos visuales pre‑renderizados o simulaciones de física en tiempo real— es recomendable usar operaciones que eliminen la dependencia de la parte fraccionaria o emplear versiones de ruido con mayor robustez numérica. Además, probar en una variedad de GPUs antes del despliegue ayuda a detectar este tipo de inconsistencias.

Queda abierto investigar si la misma problemática aparece en otros tipos de ruido o en shaders que usan funciones trigonométricas con argumentos de alta frecuencia. La comunidad podría beneficiarse de un benchmark de precisión entre distintas arquitecturas de GPU.