WebAssembly-Threads
Threads erlauben der Laufzeitumgebung, mehr als einen Prozessor gleichzeitig zu nutzen. Abgesehen von zusätzlicher Performance ermöglicht dies das gleichzeitige Ausführen von zwei oder mehr Aufgaben. Der bemerkenswerteste Effekt für die Wonderland Engine ist die nun flüssige Framerate beim Transkodieren von Basis-Texturen.
Browser-Unterstützung
WebAssembly-Threads sind seit Chrome Desktop 74 / Chrome Android 88 standardmäßig aktiviert.
Da der Oculus Browser eng den Veröffentlichungen von Chrome für Android folgt, bedeutet dies, dass Oculus Quest und Oculus Quest 2 in ihrer kommenden Version die Leistung von WebAssembly-Threads nutzen können.
Firefox unterstützt WebAssembly-Threads seit Version 79.0, welche am 28. Juli 2020 veröffentlicht wurde.
Nutzung für Game Engines
Threads erlauben es, Arbeiten gleichzeitig auszuführen oder einfach mit mehr Power auszuführen.
Ersteres ermöglicht es, Rendering neben CPU-intensiven Aufgaben zu betreiben, die einen großen Teil oder mehr als ein einzelnes Frame umfassen.
Abgesehen vom Laden von Assets ist Physik ein großartiges Beispiel dafür. Während die statischen Teile der Szene gerendert werden, kann eine Game Engine gleichzeitig die dynamischen Objekte simulieren.
Bedeutung für WebXR
In WebXR, insbesondere für Virtual Reality, sollte das Rendern mit einer flüssigen Framerate die oberste Priorität deiner Anwendung sein.
Da dies normalerweise die meiste Rechenleistung beansprucht und nur kleine Zeitfenster von wenigen Millisekunden übrig lässt, ist es wirklich schwierig, längere Verarbeitungsvorgänge ohne Unterbrechungen auszuführen.
Um solche Aufgaben zu erledigen, musst Du einen Service Worker / Thread verwenden, damit das Rendern fortgesetzt werden kann, während sie laufen.
Implementierung in Wonderland Engine
Mit der Version 0.7.3 nutzt Wonderland Engine WebAssembly-Threads durch ein internes Jobsystem, falls verfügbar.
Falls nicht verfügbar, wird es auf das Laden einer Laufzeitumgebung zurückgreifen, die ohne Threads läuft. Eine der ersten Zeilen in der Browser-Konsole wird entweder “WASM Threads wird unterstützt” oder “WASM Threads wird nicht unterstützt” sein.
Während die Wonderland Engine momentan das Jobsystem nur für die Beschleunigung und Glättung des initialen Ladens der Szene nutzt, werden wir nach und nach mehr Aufgaben in Threads auslagern. Dies wird die Performance deiner Projekte verbessern, ohne dass Du etwas ändern musst.