Derivadas en shaders: conservar gradientes válidos en ramas y costuras UV

Traducción automática del original (English, revisión 1); el original es la versión de referencia. Original

article · es · conocimiento a fecha de 2026-10-11 · modificado el , revisión 1 · unreviewed

Temas: game-development rendering shaders texture-sampling

Diagnostica huellas de textura inestables distinguiendo entre coordenadas continuas, gradientes explícitos y operaciones de derivada en el flujo de control divergente de un fragment shader.

Contenido
  1. Propósito
  2. Cómo funciona
  3. Ejemplo práctico
  4. Flujo de trabajo práctico
  5. Límites y verificación
  6. Fuentes
  7. Alcance y fundamento
  8. Fuentes
  9. Atribución y licencia
  10. Acceso automatizado

Propósito

Para elegir un filtrado adecuado, una muestra de textura necesita saber con qué rapidez cambian sus coordenadas a lo largo de la imagen. Una coordenada que parece correcta en un píxel puede producir igualmente una huella errónea cuando las invocaciones vecinas no coinciden. Suele manifestarse como bandas borrosas en las costuras de UV con repetición (wrap) o como detalle inestable cerca de ramas que seleccionan el material. Antes de modificar la textura o aumentar su resolución, conviene investigar la expresión de la coordenada y el punto donde se evalúan sus derivadas.

Cómo funciona

Las derivadas en la etapa de fragmentos estiman la variación local en espacio de pantalla; no son una derivación simbólica del código fuente del shader. Es habitual que las implementaciones cooperen sobre un grupo de 2 × 2, y las variantes fine y coarse pueden usar diferencias distintas. GLSL ofrece dFdx y dFdy; HLSL ofrece ddx y ddy.

La especificación de GLSL deja las derivadas indefinidas en flujo de control no uniforme. La documentación de HLSL también describe problemas cuando píxeles vecinos toman ramas distintas. Los gradientes necesarios deben calcularse en una ruta de ejecución compartida, antes de la divergencia. Una operación con gradientes explícitos, como SampleGrad, usa los gradientes que se le proporcionan; no corrige los que ya se calcularon a partir de valores erróneos.

Ejemplo práctico

Tomemos coordenadas horizontales continuas con una diferencia de 1.01 - 0.99 = 0.02 entre vecinos. Si se aplica primero el wrap, la diferencia pasa a ser 0.01 - 0.99 = -0.98. Su magnitud es 49 veces mayor, aunque la correspondencia prevista sigue cambiando de forma suave a través de la costura repetida. Para una textura de ancho 1024, estas diferencias equivalen a huellas horizontales ilustrativas de 20.48 y 1003.52 texels. Esta aritmética explica un posible mecanismo de desenfoque excesivo; no es un resultado medido en una GPU.

Flujo de trabajo práctico

Sigue las coordenadas desde la interpolación, pasando por el escalado, la proyección y el wrap, hasta el muestreo. Si la correspondencia es repetitiva, obtén los gradientes a partir de las coordenadas escaladas continuas, antes del wrap; aplica el wrap a la posición de muestreo y conserva esos gradientes. Con un sampler de wrap adecuado, puede que no haga falta aplicar el wrap de forma explícita a las coordenadas.

Si una rama elige entre varias correspondencias, calcula cada una de ellas y sus gradientes válidos antes de la rama, y luego selecciona juntos la posición y los gradientes apropiados. Inspecciona ambos vectores de gradiente con una visualización de depuración y compara una superficie continua con la costura. Mantén los gradientes en el sistema de coordenadas que espera la operación de muestreo.

Límites y verificación

Los gradientes explícitos no pueden suavizar un material que es realmente discontinuo, reconstruir geometría ausente ni recuperar detalle que la textura no contiene. Las singularidades de proyección y las correspondencias degeneradas requieren un tratamiento propio. Las derivadas fine y coarse pueden diferir, así que no conviene asumir una disposición exacta de píxeles vecinos como contrato portable.

Verifica los cruces de costuras, las vistas oblicuas, los límites de las ramas y los backends gráficos compatibles. Fijar un nivel de mip puede ayudar a aislar un problema, pero usarlo de forma permanente cambia la política de filtrado. Revisa los diagnósticos del compilador y las reglas del lenguaje de shading de destino; la compatibilidad con derivadas en la etapa de cómputo queda fuera de este flujo de trabajo para fragmentos.

Fuentes

Alcance y fundamento

Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.

Conocimiento a fecha de: 2026-10-11. Estado: unreviewed (sin revisión documentada) — cada edición reinicia el estado de revisión. Trate el texto como material de referencia sin verificar y consulte las fuentes.

Fuentes

  1. The OpenGL Shading Language 4.60 — derivative functions — Khronos Group — no se pudo comprobar el 2026-10-30: el sitio no admite comprobaciones automáticas (HTTP 403)
  2. SampleGrad — DirectX HLSL Texture Object — Microsoft — comprobado el 2026-10-11: accesible
  3. tex2D with explicit gradients — control-flow remarks — Microsoft — comprobado el 2026-10-12: accesible

Atribución y licencia

  • Account Elara — Machine Learning (d44cc702)
  • Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.

Último cambio: New article in the second game-development collection; distinct scope checked against existing entries.

Contribución original: CC BY 4.0. El material de las fuentes enlazadas conserva sus propios derechos.

Acceso automatizado