Migración de WebGL a WebGPU

Rate this content
Bookmark

En esta presentación, exploraré la transición de WebGL a WebGPU, demostrando cómo estos cambios afectan el desarrollo de juegos. La charla incluirá ejemplos prácticos y fragmentos de código para ilustrar las diferencias clave y sus implicaciones en el rendimiento y la eficiencia.

FAQ

WebGL es una tecnología que permite a los desarrolladores web incorporar objetos 3D en los navegadores sin necesidad de complementos adicionales. La versión de escritorio de WebGL debutó en 1993, y WebGL 1.0, basado en OpenGL ES 2.0, se lanzó en 2011. En 2017, se introdujo WebGL 2.0, que se basa en OpenGL ES 3.0 lanzado en 2012, ofreciendo varias mejoras y nuevas características.

WebGPU es una API que ofrece a los desarrolladores más control y flexibilidad sobre los recursos de hardware gráfico. Se basa en Vulkan, Direct3D 12 y Metal, proporcionando una plataforma multiplataforma que soporta Mac, Windows y Chrome OS, con planes de expansión a Linux y Android. WebGPU está diseñada para ofrecer un alto rendimiento y optimización en gráficos web.

WebGL utiliza contextos vinculados a lienzos específicos para la renderización, mientras que WebGPU utiliza un dispositivo que puede controlar el renderizado en múltiples lienzos o ventanas. Además, WebGPU reemplaza la necesidad de programas separados mediante una tubería que combina sombreadores y otros estados de renderizado, ofreciendo un proceso más modular y menos propenso a errores.

En WebGL, las variables uniformes se pueden establecer directamente a través de llamadas a la API o agrupar en buffers uniformes en WebGL2 para mejorar la eficiencia. En WebGPU, se maneja exclusivamente a través de buffers uniformes, lo que permite cargar datos en un solo bloque grande, optimizando el rendimiento y la gestión de recursos.

La transición a WebGPU ofrece un control más profundo sobre el hardware gráfico, una mayor eficiencia en la gestión de recursos y un proceso de desarrollo más robusto y modular. Esto resulta en gráficos más optimizados y eficientes, lo que es crucial para aplicaciones web complejas y de alto rendimiento.

Una de las herramientas disponibles para convertir GLSL a WGSL es Naga, una biblioteca de Rust que puede utilizarse incluso directamente en el navegador con la ayuda de WebAssembly. Esto simplifica la transición a WebGPU para los desarrolladores que trabajan con shaders.

En WebGPU, es esencial ajustar las matrices de proyección para que generen salidas que van de cero a uno, adecuándose al rango de profundidad de WebGPU. Esto se puede lograr mediante bibliotecas como GLMatrix, que ofrecen funciones específicas para este ajuste, o ajustando la matriz de proyección antes de su aplicación para adaptarse al nuevo rango.

Dmitrii Ivashchenko
Dmitrii Ivashchenko
21 min
28 Sep, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla explora las diferencias entre WebGL y WebGPU, con un enfoque en la transición de WebGL a WebGPU. Se discute el proceso de inicialización y los programas de sombreado en ambas APIs, así como la creación de tuberías en WebGPU. La comparación de los uniformes destaca el uso de buffers uniformes para mejorar el rendimiento. La charla también cubre las diferencias en las convenciones entre WebGL y WebGPU, incluyendo texturas, espacios de vista y recorte. Por último, se mencionan las diferencias en el rango de profundidad y la matriz de proyección entre las dos APIs.

Available in English: Migration from WebGL to WebGPU

1. Introducción a WebGL y WebGPU

Short description:

En esta charla, exploraremos las diferencias entre WebGL y la próxima versión de WebGPU y aprenderemos cómo preparar el proyecto para la transición. WebGL tiene una historia que se remonta a 1993, y la primera versión estable, WebGL 1.0, se lanzó en 2011. WebGL 2.0, lanzado en 2017, trajo varias mejoras y nuevas características. WebGPU, construido sobre Vulkan, Direct3D 12 y Metal, ha estado progresando significativamente y es compatible con varios motores.

Hola a todos. Soy Dmitry Vaschenko, un ingeniero de software líder en My.Games. En esta charla, exploraremos las diferencias entre WebGL y la próxima versión de WebGPU y aprenderemos cómo preparar el proyecto para la transición.

Comencemos explorando la línea de tiempo de WebGL y WebGPU, así como el estado actual de WebGL y WebGPU. WebGL, al igual que otras tecnologías, tiene una historia que se remonta al pasado. La versión de escritorio de WebGL debutó en 1993. En 2011, se lanzó WebGL 1.0 como la primera versión estable de WebGL. Se basaba en OpenGL ES 2.0, que se introdujo en 2007. Y este lanzamiento permitió a los desarrolladores web incorporar objetos 3D en los navegadores sin necesidad de complementos adicionales. En 2017, se introdujo una nueva versión de WebGL, llamada WebGL 2.0. Esta versión se lanzó seis años después de la versión inicial y se basaba en WebGL ES 3.0, que se lanzó en 2012. WebGL 2.0 vino con varias mejoras y nuevas características, lo que lo hace aún más capaz de producir gráficos 3D potentes en la web.

Últimamente, ha habido un creciente interés en nuevas API de gráficos que ofrecen a los desarrolladores más control y flexibilidad. Tres API notables aquí son Vulkan, Direct3D 12 y Metal. Juntas, estas tres API crean la base para WebGPU. Vulkan, desarrollado por el Grupo Kronos, es una API multiplataforma que proporciona a los desarrolladores un acceso de nivel inferior a los recursos de hardware gráfico. Esto permite aplicaciones de alto rendimiento con un mejor control del hardware gráfico. Direct3D 12, creado por Microsoft, es exclusivo para Windows y Xbox, obviamente, y ofrece a los desarrolladores un control más profundo sobre los recursos gráficos. Y Metal, una API exclusiva para dispositivos Apple, diseñada por Apple, por supuesto, con un rendimiento máximo en mente de su hardware. WebGPU ha estado progresando significativamente últimamente. Se ha expandido a plataformas como Mac, Windows y Chrome OS, ahora disponible en Chrome y en las versiones 113. Se espera que se agregue soporte para Linux y Android pronto. Hay varios motores que admiten o están experimentando con WebGPU. Por ejemplo, Babylon.js admite completamente WebGPU, mientras que Tree.js actualmente tiene soporte experimental. Play Canvas todavía está en desarrollo, pero su futuro parece prometedor. Y Unity anunció el soporte temprano y experimental de WebGPU en la versión alfa 2023.2. Cocoa's Creator 3.6.2 admite oficialmente WebGPU. Y finalmente, Construct actualmente solo admite la versión 113 o posterior de Chrome en máquinas con Windows, MacOS y Chrome OS. Teniendo esto en cuenta, parece una decisión inteligente comenzar la transición hacia WebGPU o al menos preparar los proyectos para una transición futura. Ahora exploremos las principales diferencias de alto nivel.

2. Inicialización de la API de gráficos y programas de sombreado

Short description:

Cuando se trabaja con API de gráficos como WebGL y WebGPU, el primer paso es inicializar el objeto principal para la interacción. WebGL utiliza contextos para representar una interfaz para dibujar en un elemento de lienzo HTML5 específico, mientras que WebGPU introduce el concepto de un dispositivo que proporciona más flexibilidad. En WebGL, el programa de sombreado es el enfoque principal y crear un programa implica varios pasos. Sin embargo, este proceso puede ser complicado y propenso a errores.

Y al comenzar a trabajar con API de gráficos, el primer paso es inicializar el objeto principal para la interacción. Este proceso del proyecto tiene algunas diferencias entre WebGL y WebGPU, lo que puede causar algunos problemas en ambos sistemas. En WebGL, este objeto se llama contextos. Y este contexto representa una interfaz para dibujar en un elemento de lienzo HTML5. Obtener estos contextos es fácil, pero es importante tener en cuenta que está vinculado a un lienzo específico. Esto significa que si necesita renderizar en varios lienzos, necesitará múltiples contextos.

Y WebGPU introduce un nuevo concepto llamado dispositivo. El dispositivo representa una abstracción de GPU con la que interactuará. El proceso de inicialización es un poco más complejo que en WebGL, pero proporciona más flexibilidad. Una ventaja de este modelo es que un dispositivo puede renderizar en varios lienzos o incluso en ninguno. Esto proporciona flexibilidad adicional, permitiendo que un dispositivo controle el renderizado en múltiples ventanas o contextos.

WebGL y WebGPU son dos métodos distintos para administrar y organizar el pipeline de gráficos. En WebGL, el énfasis principal está en el programa de sombreado, que combina sombreadores de vértices y fragmentos para determinar cómo se transforma el vértice y cómo se colorea cada píxel. Para crear un programa en WebGL, es necesario seguir varios pasos. En primer lugar, es necesario escribir y compilar el código fuente de los sombreadores. A continuación, es necesario adjuntar los sombreadores compilados al programa y luego vincularlos. Después, es necesario activar el programa antes de renderizar. Y por último, es necesario transmitir datos al programa activado. Este proceso proporciona un control flexible sobre los gráficos, pero puede ser complicado y propenso a errores, especialmente para proyectos grandes y complejos.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Una Guía del Comportamiento de Renderizado de React
React Advanced Conference 2022React Advanced Conference 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
React es una biblioteca para "renderizar" UI a partir de componentes, pero muchos usuarios se encuentran confundidos acerca de cómo funciona realmente el renderizado de React. ¿Qué significan términos como "renderizado", "reconciliación", "Fibers", y "committing"? ¿Cuándo ocurren los renderizados? ¿Cómo afecta el Contexto al renderizado, y cómo las bibliotecas como Redux causan actualizaciones? En esta charla, aclararemos la confusión y proporcionaremos una base sólida para entender cuándo, por qué, y cómo React renderiza. Veremos: - Qué es realmente el "renderizado" - Cómo React encola los renderizados y el comportamiento de renderizado estándar - Cómo se utilizan las claves y los tipos de componentes en el renderizado - Técnicas para optimizar el rendimiento del renderizado - Cómo el uso del contexto afecta al comportamiento del renderizado - Cómo las bibliotecas externas se integran en el renderizado de React
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
¿Demasiado JavaScript te está agobiando? Los nuevos marcos que prometen no usar JavaScript parecen interesantes, pero tienes una aplicación React existente que mantener. ¿Qué tal si Qwik React es tu respuesta para un inicio de aplicaciones más rápido y una mejor experiencia de usuario? Qwik React te permite convertir fácilmente tu aplicación React en una colección de islas, que pueden ser renderizadas en el servidor y rehidratadas con retraso, e incluso en algunos casos, se puede omitir la rehidratación por completo. Y todo esto de manera incremental sin una reescritura.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
¡React 18! ¡Funciones concurrentes! Tal vez ya hayas probado las nuevas APIs como useTransition, o tal vez solo hayas oído hablar de ellas. Pero, ¿sabes cómo React 18 logra las mejoras de rendimiento que trae consigo? En esta charla, echemos un vistazo bajo el capó de las características de rendimiento de React 18: - Cómo React 18 reduce el tiempo que tu página permanece congelada (también conocido como TBT) - Qué sucede exactamente en el hilo principal cuando ejecutas useTransition() - Cuál es la trampa con las mejoras (¡no hay torta gratis!), y por qué Vue.js y Preact se negaron rotundamente a lanzar algo similar
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Nuestra comprensión del rendimiento y la experiencia del usuario ha evolucionado mucho a lo largo de los años. Las herramientas de desarrollo web necesitan evolucionar de manera similar para asegurarse de que sean centradas en el usuario, accionables y contextuales donde se refiere a las experiencias modernas. En esta charla, Addy te guiará a través de cómo Chrome y otros han estado pensando en este problema y qué actualizaciones han estado haciendo a las herramientas de rendimiento para reducir la fricción para construir grandes experiencias en la web.
Optimización de juegos HTML5: 10 años de aprendizaje
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Optimización de juegos HTML5: 10 años de aprendizaje
Top Content
El motor de juegos de código abierto PlayCanvas está construido específicamente para el navegador, incorporando 10 años de aprendizaje sobre optimización. En esta charla, descubrirás la salsa secreta que permite a PlayCanvas generar juegos con tiempos de carga increíblemente rápidos y tasas de fotogramas sólidas como una roca.
Construyendo Experimentos Divertidos con WebXR & Babylon.js
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Construyendo Experimentos Divertidos con WebXR & Babylon.js
Top Content
Durante esta sesión, veremos un par de demostraciones de lo que puedes hacer usando WebXR, con Babylon.js. Desde experimentos de audio en VR, hasta juegos casuales en VR en una máquina de arcade hasta un uso más serio para crear nuevas formas de colaboración usando AR o VR, deberías tener una comprensión bastante buena de lo que puedes hacer hoy.
Consulta también el artículo para ver el contenido completo, incluyendo ejemplos de código: artículo. 

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Crea un Juego Con PlayCanvas en 2 Horas
JSNation 2023JSNation 2023
116 min
Crea un Juego Con PlayCanvas en 2 Horas
Top Content
Featured WorkshopFree
Steven Yau
Steven Yau
En esta masterclass, construiremos un juego utilizando el motor WebGL de PlayCanvas desde el principio hasta el final. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la escritura de scripts, la creación de UI y mucho más.
Tabla de contenido:- Introducción- Introducción a PlayCanvas- Lo que vamos a construir- Agregando un modelo de personaje y animación- Haciendo que el personaje se mueva con scripts- 'Falsa' carrera- Agregando obstáculos- Detectando colisiones- Agregando un contador de puntuación- Fin del juego y reinicio- ¡Resumen!- Preguntas
Nivel de la masterclassSe recomienda familiaridad con los motores de juegos y los aspectos del desarrollo de juegos, pero no es obligatorio.
Construyendo aplicaciones web que iluminan Internet con QwikCity
JSNation 2023JSNation 2023
170 min
Construyendo aplicaciones web que iluminan Internet con QwikCity
Featured WorkshopFree
Miško Hevery
Miško Hevery
Construir aplicaciones web instantáneas a gran escala ha sido elusivo. Los sitios del mundo real necesitan seguimiento, análisis y interfaces y interacciones de usuario complejas. Siempre comenzamos con las mejores intenciones pero terminamos con un sitio menos que ideal.
QwikCity es un nuevo meta-framework que te permite construir aplicaciones a gran escala con un rendimiento de inicio constante. Veremos cómo construir una aplicación QwikCity y qué la hace única. El masterclass te mostrará cómo configurar un proyecto QwikCity. Cómo funciona el enrutamiento con el diseño. La aplicación de demostración obtendrá datos y los presentará al usuario en un formulario editable. Y finalmente, cómo se puede utilizar la autenticación. Todas las partes básicas para cualquier aplicación a gran escala.
En el camino, también veremos qué hace que Qwik sea único y cómo la capacidad de reanudación permite un rendimiento de inicio constante sin importar la complejidad de la aplicación.
Cómo crear arte generativo increíble con código JavaScript simple
JS GameDev Summit 2022JS GameDev Summit 2022
165 min
Cómo crear arte generativo increíble con código JavaScript simple
Top Content
WorkshopFree
Frank Force
Frank Force
En lugar de dibujar manualmente cada imagen como en el arte tradicional, los artistas generativos escriben programas que son capaces de producir una variedad de resultados. En esta masterclass aprenderás cómo crear arte generativo increíble usando solo un navegador web y un editor de texto. Comenzando con conceptos básicos y avanzando hacia la teoría avanzada, cubriremos todo lo que necesitas saber.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
PlayCanvas de principio a fin: la versión rápida
JS GameDev Summit 2022JS GameDev Summit 2022
121 min
PlayCanvas de principio a fin: la versión rápida
Top Content
WorkshopFree
João Ruschel
João Ruschel
En esta masterclass, construiremos un juego completo utilizando el motor PlayCanvas mientras aprendemos las mejores prácticas para la gestión de proyectos. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la gestión de activos, scripting, audio, depuración, y mucho más.