21 octobre 2025

WebGPU enfin sur le Web

Nous avons le plaisir d’annoncer qu’Evergine fonctionne désormais sur le Web avec WebGPU.
Ce nouveau template expérimental permet aux développeurs de créer et d’exécuter des applications Evergine directement dans les navigateurs modernes, en tirant pleinement parti de l’API WebGPU de nouvelle génération. Reposant sur .NET 8 et la chaîne d’outils Emscripten, cette release apporte pour la première fois dans Evergine le rendu et le calcul accélérés par GPU sur le Web, pour des performances accrues, des effets visuels avancés et un workflow unifié sur toutes les plateformes.

 

Qu’est-ce que WebGPU ?

WebGPU est une API graphique moderne qui offre aux développeurs un accès bas niveau au GPU, ce qui permet des techniques de rendu avancées et des capacités de calcul étendues.

Contrairement à WebGL, qui repose sur OpenGL (une API aujourd’hui dépréciée au profit d’alternatives plus efficaces comme Vulkan et Metal), WebGPU dépasse les limites des API traditionnelles en offrant une interface plus simple et plus efficace pour la programmation graphique.

L’un des principaux avantages de WebGPU par rapport à WebGL est la prise en charge des compute shaders. Cette capacité améliore les performances des applications exigeantes et ouvre de nouvelles possibilités pour créer des simulations complexes. WebGPU est conçu selon des paradigmes de programmation modernes, ce qui permet aux développeurs d’écrire du code non seulement performant, mais aussi maintenable.

 

État actuel de la prise en charge

WebGPU étend rapidement sa couverture dans les navigateurs et devrait devenir un standard clé pour les applications graphiques et de calcul de nouvelle génération sur le Web. Vous pouvez consulter la prise en charge actuelle par les navigateurs et leur utilisation ici : caniuse.com – WebGPU.

  • Chrome et Edge prennent entièrement en charge WebGPU depuis la version 113.
  • Chrome pour Android offre également une prise en charge native sur la plupart des appareils récents.
  • Safari (macOS et iOS 17+) intègre désormais la prise en charge de WebGPU. Depuis Safari 26.0, WebGPU est activé par défaut.
  • Firefox offre une prise en charge partielle et travaille activement à une implémentation complète.

Lorsque le graphique est pondéré par les parts de marché des navigateurs, il apparaît clairement que la grande majorité des utilisateurs bénéficient déjà de la prise en charge de WebGPU :

 

Ce qui change dans cette release d’Evergine

Jusqu’ici, nous nous concentrions sur WebGPU Native (desktop). Désormais, Evergine prend en charge WebGPU sur le Web grâce à la chaîne d’outils WASM/Emscripten fournie avec .NET 8. Concrètement :

  • Les projets Evergine peuvent être compilés en WebAssembly et s’exécuter dans un navigateur tout en appelant les API WebGPU exposées par Emscripten.
  • WebGPU.NET (le binding bas niveau d’Evergine) a été mis à jour pour exposer au code C# managé l’API C de WebGPU fournie par le runtime Emscripten.

 

Principes d’intégration dans Evergine

WebGPU.NET, binding C# pour WebGPU

Nous avons mis à jour WebGPU.NET, notre binding C# dédié à l’intégration de WebGPU dans Evergine, afin d’exposer les en-têtes d’API fournis par Emscripten pour une meilleure compatibilité avec les navigateurs web.

Traduction des shaders HLSL vers WGSL avec Naga

Pour garantir la cohérence du développement des shaders, nous implémentons une couche de traduction de HLSL vers WGSL à l’aide de Naga. Dans cette release, nous avons mis à jour la bibliothèque vers la version 26.0.0, ce qui permet de traduire des shaders plus complexes qui provoquaient des erreurs dans les versions précédentes.

La version de Naga utilisée dans l’ancienne release (22.1.0) produisait plusieurs erreurs d’incohérence lors de la traduction depuis SPIR-V, ce qui rendait instable l’utilisation de shaders complexes avec WebGPU.

Phase expérimentale actuelle

Bien qu’encore expérimentale, l’intégration prend déjà en charge les fonctionnalités essentielles : rendu standard des maillages et des matériaux, skinning, morph targets et tâches de calcul complexes. Ces fonctionnalités permettent aux développeurs de créer des applications dynamiques et visuellement riches qui tirent parti des capacités des GPU modernes.

 

Commencer à utiliser le template expérimental WebGPU

Pour commencer à utiliser l’intégration expérimentale de WebGPU, vous pouvez créer un nouveau projet vanilla dans Evergine et y ajouter un profil WebGPU comme d’habitude :

Limitations connues

Quelques mises en garde importantes à connaître lors de l’utilisation du template web expérimental WebGPU :

  • Textures HDR RGBA32Float : la plupart des GPU mobiles et navigateurs (Chrome) ne prennent pas en charge les textures RGBA en flottant 32 bits ; les véritables textures HDR ne sont donc pas disponibles sur de nombreux smartphones et tablettes.
  • Contrôle du depth-clip / artefacts d’ombres : la chaîne d’outils Emscripten fournie avec .NET 8 n’expose pas le contrôle du depth-clip, ce qui peut provoquer des artefacts dans le shadow mapping (notamment des ombres d’objets situés en réalité derrière la caméra).
  • Particules GPU et post-traitement : les effets de post-traitement avancés et les systèmes de particules GPU ne sont pas encore pris en charge avec WebGPU, mais nous espérons les proposer dans de prochaines releases.

 

David avila
Auteur
David Ávila
Plain Concepts Research