
WebGPU por fin en Web
Nos complace anunciar que Evergine ahora funciona en la Web con WebGPU.
Esta nueva plantilla experimental permite a los desarrolladores crear y ejecutar aplicaciones de Evergine directamente en navegadores modernos, aprovechando todo el potencial de la API WebGPU, de nueva generación.
Impulsada por .NET 8 y la herramienta Emscripten, esta versión introduce por primera vez en Evergine capacidades de renderizado y cómputo aceleradas por GPU en la web, lo que permite un mayor rendimiento, efectos visuales avanzados y un flujo de trabajo unificado entre plataformas.
¿Qué es WebGPU?
WebGPU es una API gráfica moderna que proporciona a los desarrolladores acceso de bajo nivel a la GPU, lo que permite implementar técnicas avanzadas de renderizado y capacidades de cómputo.
A diferencia de WebGL, que se basa en OpenGL (una API ahora obsoleta en favor de alternativas más eficientes como Vulkan y Metal), WebGPU supera las limitaciones de las APIs tradicionales ofreciendo una interfaz más moderna, optimizada y eficiente para la programación gráfica.
Una de las principales ventajas de WebGPU frente a WebGL es su compatibilidad con los Compute Shaders.
Esta característica mejora el rendimiento en aplicaciones exigentes y abre nuevas posibilidades para crear simulaciones complejas.
WebGPU está diseñado siguiendo paradigmas de programación modernos, permitiendo a los desarrolladores escribir código no solo más eficiente, sino también más mantenible.
Current support status
WebGPU está ampliando rápidamente su cobertura en los navegadores y se espera que se convierta en un estándar clave para aplicaciones de gráficos y computación de próxima generación en la web. Puedes consultar el soporte y uso actual de los navegadores aquí: caniuse.com – WebGPU.
- Chrome y Edge soportan completamente WebGPU desde la versión 113.
- Android Chrome también ofrece soporte nativo en la mayoría de los dispositivos modernos.
- Safari (macOS e iOS 17+) ahora incluye soporte integrado para WebGPU. Desde Safari 26.0, WebGPU está habilitado por defecto.
- Firefox tiene soporte parcial y está trabajando activamente para una implementación completa.
Cuando se pondera el gráfico según la cuota de mercado de los navegadores, queda claro que un gran número de usuarios ya cuenta con soporte para WebGPU:
Qué ha cambiado en esta versión de Evergine
Hasta ahora, nos habíamos centrado en WebGPU Native (escritorio).
Ahora, Evergine también es compatible con WebGPU en la Web, a través del toolchain WASM/Emscripten incluida con .NET 8. En la práctica, esto significa:
- Los proyectos de Evergine pueden compilarse a WebAssembly y ejecutarse en un navegador mientras llaman a las APIs de WebGPU expuestas por Emscripten.
- Se ha actualizado WebGPU.NET (la capa de enlace de bajo nivel de Evergine) para exponer la API C de WebGPU que proporciona el entorno de ejecución de Emscripten al código gestionado en C#.
Fundamentos de la integración en Evergine
WebGPU.NET, C# Binding para WebGPU
Hemos actualizado WebGPU.NET , nuestra biblioteca de enlace C# dedicada a la integración de WebGPU en Evergine, para exponer los encabezados de la API proporcionados por Emscripten, mejorando así la compatibilidad en navegadores web.
Traducción de shaders de HLSL a WGSL con Naga
Para mantener la coherencia en el desarrollo de shaders, estamos implementando una capa de traducción de HLSL a WGSL utilizando Naga. En esta versión, hemos actualizado la biblioteca a la versión 26.0.0, lo que permite soportar traducciones de shaders más complejas que anteriormente provocaban errores en versiones anteriores.
La versión anterior de Naga (22.1.0) a menudo producía inconsistencias al traducir desde SPIR-V, lo que generaba inestabilidad al usar shaders complejos en WebGPU.
Current Experimental Phase
Aunque la integración aún es experimental, ya se admiten funcionalidades básicas como:
- Renderizado de mallas y materiales estándar
- Skinning y morph targets
- Tareas de cómputo complejas
Estas características permiten a los desarrolladores crear aplicaciones dinámicas y visualmente ricas que aprovechan al máximo las capacidades de las GPU modernas.
Cómo empezar con la plantilla experimental de WebGPU
Para comenzar con la integración experimental de WebGPU, puedes crear un nuevo proyecto en Evergine y añadir un perfil WebGPU como harías normalmente:
Limitaciones conocidas
Existen algunas limitaciones importantes a tener en cuenta al utilizar la plantilla experimental de WebGPU en la web:
- Texturas HDR RGBA32Float: La mayoría de GPUs móviles y navegadores (como Chrome) no admiten texturas RGBA de 32 bits en coma flotante, por lo que las texturas HDR reales no están disponibles en muchos teléfonos y tablets.
- Control de profundidad / artefactos en sombras: La toolchain de Emscripten incluida con .NET 8 no expone el control de depth-clip, lo que puede provocar artefactos en el sombreado, especialmente sombras generadas por objetos que en realidad están detrás de la cámara.
- Partículas GPU y postprocesado: Los efectos de postprocesado avanzados y los sistemas de partículas en GPU aún no son compatibles en WebGPU. Esperamos añadir soporte en futuras versiones.