
WebGPU endlich im Web

Wir freuen uns, ankündigen zu können, dass Evergine jetzt mit WebGPU im Web läuft.
Mit diesem neuen experimentellen Template können Entwickler Evergine-Anwendungen direkt in modernen Browsern erstellen und ausführen und dabei die WebGPU-API der nächsten Generation voll ausschöpfen. Auf Basis von .NET 8 und der Emscripten-Toolchain bringt diese Release erstmals GPU-beschleunigtes Rendering und Compute-Funktionen von Evergine ins Web – für höhere Performance, fortschrittliche visuelle Effekte und einen einheitlichen plattformübergreifenden Workflow.
Was ist WebGPU?
WebGPU ist eine moderne Grafik-API, die Entwicklern Low-Level-Zugriff auf die GPU bietet und damit fortschrittliche Rendering-Techniken und Rechenfunktionen ermöglicht.
Anders als WebGL, das auf OpenGL basiert (einer API, die inzwischen zugunsten effizienterer Alternativen wie Vulkan und Metal als veraltet gilt), überwindet WebGPU die Einschränkungen herkömmlicher APIs durch eine schlankere und effizientere Schnittstelle für die Grafikprogrammierung.

Einer der wichtigsten Vorteile von WebGPU gegenüber WebGL ist die Unterstützung von Compute Shaders. Das steigert die Performance in anspruchsvollen Anwendungen und eröffnet neue Möglichkeiten für komplexe Simulationen. WebGPU wurde mit Blick auf moderne Programmierparadigmen entwickelt, sodass Entwickler Code schreiben können, der nicht nur performant, sondern auch wartbar ist.
Aktueller Stand der Unterstützung
WebGPU wird von immer mehr Browsern unterstützt und dürfte sich zu einem zentralen Standard für Grafik- und Compute-Anwendungen der nächsten Generation im Web entwickeln. Die aktuelle Browserunterstützung und Nutzung können Sie hier einsehen: caniuse.com – WebGPU.
- Chrome und Edge unterstützen WebGPU seit Version 113 vollständig.
- Android Chrome bietet auf den meisten modernen Geräten ebenfalls native Unterstützung.
- Safari (macOS und iOS 17+) enthält jetzt integrierte WebGPU-Unterstützung. Seit Safari 26.0 ist WebGPU standardmäßig aktiviert.
- Firefox bietet teilweise Unterstützung und arbeitet aktiv an der vollständigen Implementierung.

Gewichtet man die Grafik nach Browser-Marktanteilen, wird deutlich, dass der Großteil der Nutzer bereits WebGPU-Unterstützung hat:

Was sich in dieser Evergine-Release geändert hat
Bisher lag unser Fokus auf WebGPU Native (Desktop). Jetzt unterstützt Evergine WebGPU im Web über die WASM/Emscripten-Toolchain, die mit .NET 8 ausgeliefert wird. In der Praxis bedeutet das:
- Evergine-Projekte können für WebAssembly kompiliert und im Browser ausgeführt werden und dabei die von Emscripten bereitgestellten WebGPU-APIs aufrufen.
- WebGPU.NET (das Low-Level-Binding von Evergine) wurde aktualisiert und stellt die von der Emscripten-Runtime bereitgestellte WebGPU-C-API für verwalteten C#-Code bereit.
Grundlagen der Integration in Evergine
WebGPU.NET, C#-Binding für WebGPU
Wir haben WebGPU.NET, unser eigenes C#-Binding für die WebGPU-Integration in Evergine, aktualisiert. Es stellt nun die von Emscripten bereitgestellten API-Header bereit, um die Kompatibilität in Webbrowsern zu verbessern.
Shader-Übersetzung von HLSL nach WGSL mit Naga
Um die Konsistenz bei der Shader-Entwicklung zu wahren, implementieren wir mit Naga eine Übersetzungsschicht von HLSL nach WGSL. In dieser Release haben wir die Bibliotheksversionen auf 26.0.0 aktualisiert. Damit lassen sich auch komplexere Shader übersetzen, die in früheren Versionen zu Fehlern führten.
Die in der vorherigen Release verwendete Naga-Version (22.1.0) erzeugte bei der Übersetzung aus SPIR-V mehrere Inkonsistenzfehler, sodass komplexe Shader in WebGPU nicht stabil eingesetzt werden konnten.
Aktuelle experimentelle Phase
Obwohl sie noch experimentell ist, unterstützt die Integration bereits zentrale Funktionen: Standard-Rendering von Meshes und Materialien, Skinning, Morph Targets und komplexe Compute-Aufgaben. Damit können Entwickler dynamische, visuell anspruchsvolle Anwendungen erstellen, die die Möglichkeiten moderner GPUs nutzen.
Erste Schritte mit dem experimentellen WebGPU-Template
Um mit der experimentellen WebGPU-Integration zu beginnen, erstellen Sie in Evergine ein neues Vanilla-Projekt und fügen wie gewohnt ein WebGPU-Profil hinzu:

Bekannte Einschränkungen
Bei der Verwendung des experimentellen WebGPU-Web-Templates sollten Sie einige wichtige Einschränkungen beachten:
- RGBA32Float-HDR-Texturen: Die meisten mobilen GPUs bzw. Browser (Chrome) unterstützen keine RGBA-Texturen mit 32-Bit-Gleitkommawerten, daher sind echte HDR-Texturen auf vielen Smartphones und Tablets nicht verfügbar.
- Depth-Clip-Steuerung / Schattenartefakte: Die mit .NET 8 ausgelieferte Emscripten-Toolchain stellt keine Depth-Clip-Steuerung bereit. Das kann zu Artefakten beim Shadow Mapping führen (insbesondere zu Schatten von Objekten, die sich eigentlich hinter der Kamera befinden).
- GPU-Partikel und Post-Processing: Fortgeschrittene Post-Processing-Effekte und GPU-Partikelsysteme werden in WebGPU noch nicht unterstützt. Wir hoffen, sie in künftigen Releases bereitstellen zu können.
