El artículo fue interesante, pero la parte del diagrama que muestra OpenGL / WebGL / WebGPU como si estuvieran construidos sobre Vulkan es incorrecta
WebGL y WebGPU funcionan directamente sobre D3D y Metal, sin pasar por Vulkan
Además, Vulkan no es open source, sino un estándar
WebGPU no está limitado al navegador; también existe como bibliotecas Dawn para C++ y WGPU para Rust, por lo que puede ejecutarse en Windows, macOS, Linux, iOS, Android, etc.
Vulkan funciona en un poco más de plataformas que DirectX, pero no viene incluido en la instalación base de Windows y no corre en macOS ni en iOS
Quiero agregar que Vulkan no es open source, sino un estándar abierto
La implementación real corre por cuenta de cada fabricante de hardware, y Vulkan en sí no es más que archivos de cabecera
Además, también funciona bien en plataformas de Apple mediante capas de traducción de Vulkan a Metal como MoltenVK o KosmicKrisp
Vulkan no es totalmente cross-platform, pero sí cubre un rango mucho más amplio que DirectX
DirectX se usa en Windows y Xbox; Vulkan está disponible en Linux, Android, Windows, Nintendo Switch, Switch 2, etc.
Habría que mencionar que WebGPU es una API unificada que se ubica sobre las APIs nativas de cada plataforma (DirectX, Vulkan, Metal)
Las APIs de Khronos tienen una enorme cantidad de extensiones, pero algunas son propietarias, así que la portabilidad se resiente
PlayStation no soporta Vulkan, y en Switch normalmente se usa NVN en lugar de OpenGL/Vulkan
El simple hecho de que Vulkan funcione en Windows ya me parece que lo hace más general que DirectX
Que Vulkan no funcione en ciertos entornos VNC de Linux no es un caso común
La mayoría de los usuarios reciben soporte para Vulkan a través de los drivers de GPU
La calidad del curso en este sitio es sorprendente
Hasta me darían ganas de apoyar el proyecto si vendieran el libro, aunque fuera en preventa
Lo sigo desde el primer artículo, y con cada publicación me impresiona más
Si quieres experimentar con shaders, recomiendo estos IDEs
shadertoy – basado en navegador, el más fácil y popular
Shadron – personalmente lo prefiero por su usabilidad, aunque es algo de nicho
SHADERed – toma tiempo acostumbrarse al UX, pero en funciones va sobrado
KodeLife – lo he escuchado mencionar, pero no lo he usado personalmente
Cables(cables.gl) también está bastante bueno
Tiene trabajos impresionantes de Kirell Benzi
Encontré wgshadertoy en el gestor de software de Mint
Soporta múltiples plataformas: flatpak, AUR, macports, Windows, etc.
En macOS o iPadOS, también se puede empezar fácilmente con shaders de Metal usando Playgrounds
También está Bonzomatic, que se usa en la demoscene para competencias de live coding de shaders
Programar es, al final, el proceso de traducir lo que una persona entiende a algo que la computadora pueda entender
Pero la programación GPU es muchísimo más difícil
Hay montones de trampas, inconsistencias entre hardware y software, y pocas herramientas de depuración, así que la experiencia de desarrollo es bastante mala
También da pena que la comunidad no parezca tener mucha voluntad de mejorar esto
OpenGL y las versiones anteriores a DirectX 12 intentaban abstraer los detalles del hardware, pero al final esa abstracción terminó siendo perjudicial
Al escribir un fragment shader, la parte menos intuitiva es la idea de recibir coordenadas y devolver un color
A diferencia de dibujar con un lápiz, el shader calcula la posición de cada píxel y decide su color
Hay que pensar en manipular el espacio en vez de mover objetos
Los vertex shaders se sienten más naturales porque producen la posición de los triángulos
Solo se siente poco intuitivo cuando se abusa de los fragment shaders
En realidad, se encargan de la última etapa del pipeline de renderizado, como el muestreo de texturas y los cálculos de iluminación
En PBR o renderizado diferido, la mayor parte del tiempo se comparten shaders comunes y solo se personalizan los efectos especiales
Esto no es un problema del shader en sí, sino una diferencia entre gráficos rasterizados vs. vectoriales
El shading no consiste en dibujar contornos, sino en representar materiales físicamente plausibles
La pintura se parece más al shading; el dibujo con pluma, no tanto
Usar un fragment shader para dibujar un rectángulo es un enfoque equivocado
El shader sirve para sombrear (shading) un rectángulo
En la práctica, el vertex shader define los bordes y el fragment shader rellena el interior
Con fines educativos, a veces se omite el vertex shader y se llena toda la pantalla con un fragment shader
La parte más difícil al aprender código para GPU es que la configuración inicial es compleja y poco clara
Conceptos como formatos de datos, orden de transformaciones y el límite entre CPU y GPU son difíciles, y además falta documentación
El sistema de variables globales de la GPU también confunde
Algunas de esas preguntas tienen que ver menos con la GPU y más con el diseño de la API
La GPU usa una arquitectura SIMT, así que la consistencia en el acceso a datos es importante
Las transformaciones se aplican secuencialmente dentro de cada hilo, y el límite entre CPU y GPU puede cruzarse varias veces según el presupuesto de rendimiento
Las variables globales son más bien constantes que se entregan igual a cada hilo, como los uniforms
En CUDA se puede acceder globalmente con operaciones atómicas, pero el costo en rendimiento es alto
Un curso introductorio de WebGL sería un buen punto de partida
El nivel de acabado del sitio es sorprendentemente alto
Los diagramas, la barra de desplazamiento y el estilo están muy bien hechos
Los shaders aparecieron antes que la GPU y también pueden ejecutarse en CPU
La esencia de la GPU es el modelo de ejecución SIMT/SIMD, y los shaders son esencialmente una especie de función callback
Creo que el hecho de poder escribirlos con el mismo pensamiento secuencial que en CPU es lo que les da su simplicidad y elegancia
Me impresionó especialmente que todas las ilustraciones estuvieran hechas en Figma
Dejé una respuesta diciendo que el feedback era excelente
El trabajo es realmente hermoso y está muy bien logrado
Coincido al 100%. Me pregunto si este sitio es una app personalizada hecha con Next.js
Excelente trabajo. Fue un gusto verlo de principio a fin
Recomiendo el video de Iñigo Quilez, “This painting is a mathematical formula”,
porque muestra muy bien el concepto de shaders que expresan las coordenadas x, y de cada píxel como una función
1 comentarios
Opiniones de Hacker News
WebGL y WebGPU funcionan directamente sobre D3D y Metal, sin pasar por Vulkan
Además, Vulkan no es open source, sino un estándar
WebGPU no está limitado al navegador; también existe como bibliotecas Dawn para C++ y WGPU para Rust, por lo que puede ejecutarse en Windows, macOS, Linux, iOS, Android, etc.
Vulkan funciona en un poco más de plataformas que DirectX, pero no viene incluido en la instalación base de Windows y no corre en macOS ni en iOS
La implementación real corre por cuenta de cada fabricante de hardware, y Vulkan en sí no es más que archivos de cabecera
Además, también funciona bien en plataformas de Apple mediante capas de traducción de Vulkan a Metal como MoltenVK o KosmicKrisp
DirectX se usa en Windows y Xbox; Vulkan está disponible en Linux, Android, Windows, Nintendo Switch, Switch 2, etc.
PlayStation no soporta Vulkan, y en Switch normalmente se usa NVN en lugar de OpenGL/Vulkan
Que Vulkan no funcione en ciertos entornos VNC de Linux no es un caso común
La mayoría de los usuarios reciben soporte para Vulkan a través de los drivers de GPU
Hasta me darían ganas de apoyar el proyecto si vendieran el libro, aunque fuera en preventa
Lo sigo desde el primer artículo, y con cada publicación me impresiona más
Tiene trabajos impresionantes de Kirell Benzi
Soporta múltiples plataformas: flatpak, AUR, macports, Windows, etc.
Pero la programación GPU es muchísimo más difícil
Hay montones de trampas, inconsistencias entre hardware y software, y pocas herramientas de depuración, así que la experiencia de desarrollo es bastante mala
También da pena que la comunidad no parezca tener mucha voluntad de mejorar esto
A diferencia de dibujar con un lápiz, el shader calcula la posición de cada píxel y decide su color
Hay que pensar en manipular el espacio en vez de mover objetos
Los vertex shaders se sienten más naturales porque producen la posición de los triángulos
En realidad, se encargan de la última etapa del pipeline de renderizado, como el muestreo de texturas y los cálculos de iluminación
En PBR o renderizado diferido, la mayor parte del tiempo se comparten shaders comunes y solo se personalizan los efectos especiales
El shading no consiste en dibujar contornos, sino en representar materiales físicamente plausibles
La pintura se parece más al shading; el dibujo con pluma, no tanto
El shader sirve para sombrear (shading) un rectángulo
Con fines educativos, a veces se omite el vertex shader y se llena toda la pantalla con un fragment shader
Conceptos como formatos de datos, orden de transformaciones y el límite entre CPU y GPU son difíciles, y además falta documentación
El sistema de variables globales de la GPU también confunde
Barebones WebGL in 75 lines,
Barebones 3D rendering with WebGL
Vulkan requiere muchísimo más código boilerplate que WebGL
La GPU usa una arquitectura SIMT, así que la consistencia en el acceso a datos es importante
Las transformaciones se aplican secuencialmente dentro de cada hilo, y el límite entre CPU y GPU puede cruzarse varias veces según el presupuesto de rendimiento
Las variables globales son más bien constantes que se entregan igual a cada hilo, como los uniforms
En CUDA se puede acceder globalmente con operaciones atómicas, pero el costo en rendimiento es alto
Un curso introductorio de WebGL sería un buen punto de partida
Los diagramas, la barra de desplazamiento y el estilo están muy bien hechos
Los shaders aparecieron antes que la GPU y también pueden ejecutarse en CPU
La esencia de la GPU es el modelo de ejecución SIMT/SIMD, y los shaders son esencialmente una especie de función callback
Creo que el hecho de poder escribirlos con el mismo pensamiento secuencial que en CPU es lo que les da su simplicidad y elegancia
porque muestra muy bien el concepto de shaders que expresan las coordenadas x, y de cada píxel como una función