24. Oktober 2024

Experimentelle Unterstützung für WebGPU Native

Mit großer Freude kündigen wir in der neuesten Version von Evergine die experimentelle Integration von WebGPU an. Diese bahnbrechende API soll eine höhere Leistung und fortschrittlichere Funktionen bieten als ihr Vorgänger WebGL.

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. Diese Fähigkeit steigert die Leistung grafikintensiver Anwendungen und eröffnet neue Möglichkeiten für komplexe visuelle Effekte und Simulationen. WebGPU wurde mit Blick auf moderne Programmierparadigmen entwickelt, sodass Entwickler Code schreiben können, der nicht nur performant, sondern auch wartbar ist.

Vorteile von WebGPU gegenüber WebGL

WebGPU bietet mehrere bemerkenswerte Vorteile und ist damit ein bedeutender Fortschritt in der Grafikprogrammierung:

  • Low-Level-Zugriff auf die GPU: WebGPU bietet Entwicklern eine feinere Kontrolle über GPU-Ressourcen und ermöglicht so effizientere Rendering- und Rechenaufgaben.
  • Unterstützung von Compute Shaders: Anders als WebGL unterstützt WebGPU Compute Shaders, sodass komplexere Berechnungen und Effekte direkt auf der GPU möglich sind.
  • Höhere Leistung: Dank einer effizienteren Architektur kann WebGPU die Fähigkeiten moderner Hardware nutzen, was zu schnellerem Rendering und schnellerer Verarbeitung führt.

Was ist WebGPU Native?

WebGPU Native ist eine Version der WebGPU-API für die Entwicklung von Anwendungen auf Desktop- und Mobil-Plattformen. Diese Integration ist ein wichtiger Schritt zur Erweiterung der Grafikfähigkeiten von Evergine. Mit der Unterstützung für den Desktop legen wir den Grundstein für eine künftige Erweiterung auf das Web.

Diese Integration ist unser erster Schritt, um die Unterstützung künftig auf das Web auszuweiten. Durch die Entwicklung auf dem Desktop bieten wir Entwicklern eine einfachere Debugging-Umgebung und die Möglichkeit, die Fähigkeiten von WebGPU in einem kontrollierten Umfeld zu erkunden.

Integration in Evergine

WebGPU.NET, C#-Binding für WebGPU

WebGPU.NET ist unser C#-Binding, das speziell für die Integration von WebGPU in Evergine entwickelt wurde. Dieses Binding ist öffentlich verfügbar, sodass Entwickler die Leistungsfähigkeit von WebGPU einfach nutzen können.

Shader-Übersetzung von HLSL nach WGSL mit Naga

Um die Konsistenz in der Shader-Entwicklung zu wahren, implementieren wir mit Naga eine Übersetzungsschicht von HLSL nach WGSL. Diese Bibliothek verwendet SPIR-V als Eingabe, um Shader in WGSL zu kompilieren, eine neue, speziell für WebGPU entwickelte Sprache. Dieser Ansatz stellt sicher, dass HLSL die primäre Sprache für die Shader-Entwicklung in Evergine bleibt, während die Übersetzung für die Nutzer transparent erfolgt.

Aktuelle experimentelle Phase

Derzeit befindet sich unsere Integration noch im experimentellen Stadium. Sie unterstützt jedoch bereits wesentliche Funktionen wie das Rendering von Standard-Meshes und -Materialien, Skinning, Morphing und einfache Compute-Aufgaben. Damit können Entwickler dynamische und optisch ansprechende Anwendungen erstellen, die die volle Leistung moderner GPUs ausschöpfen.

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:

Fazit: Die Zukunft der WebGPU-Integration

Künftig wollen wir WebGPU mithilfe von WASM und Emscripten vollständig in Webumgebungen integrieren und so die Reichweite von Evergine-Anwendungen erhöhen. Zu den künftigen Entwicklungen gehören die weitere Unterstützung bestehender Engine-Funktionen, etwa eine bessere Integration von Compute Shaders, PostProcessing und Partikelsystemen, sowie allgemeine Verbesserungen der Stabilität.

 

Während wir unser Angebot weiter innovativ ausbauen, laden wir Entwickler ein, diese spannende neue Integration zu erkunden und uns Feedback zu ihren Erfahrungen zu geben.

Mittelfristig beabsichtigen wir, die Evergine-Integration von OpenGL/WebGL abzukündigen, sobald Browser und Markt WebGPU als Standard etablieren.

David avila
Autor
David Ávila
Plain Concepts Research