More like you can wait for loading Unreal Engine 5 applications for WebGPU today ;)
The car configurator demo loads a 117 MBytes WASM blob and then hundreds of tiny files between a few hundred bytes to a few KBytes, both extremes are worst case for a web application, it's quite hilarious really.
The demo didn't finish loading while writing this comment, and it doesn't look like the loading of those tiny files will ever end...
Which demo did you try? The car configurator? Also if you're using Firefox, WebGPU isn't supported there yet, so I recommend trying using a Chromium browser.
In my case, several of the WebGPU demos on https://simplystream.com/demos fail (while keeping on falsely showing "Loading") with the error message (in DevTools):
"WebGPU requestDevice failed, trying low spec DOMException: Failed to execute 'requestDevice' on 'GPUAdapter': Required limit (64) is greater than the supported limit (32)."
Honestly Unreal is incredibly suspect in these kinds of applications. Unreal's biggest hallmark is the incredible amount of shaders it generates (thousands for a simple scene) which leads to constant shader compilation delays and stutters even on desktop.
I can't imagine it being good in a web scenario where you can't even precompile.
I bet there's a lot of cheap wins by bundling all those tiny files in a few bigger ones. But minimizing the WASM blob for a humongous native engine like Unreal Engine 5 sounds like a real challenge. Even when this is reduced by 90% it's still 10x bigger than Unity's web output, which is 10x bigger than a specialized WASM game engine designed for the web as "first class citizen".
I have higher hopes for the web people (like PlayCanvas, Babylon, threejs, etc...) writing a proper WASM game engine by "scaling up" their experience of building browser rendering engines, than the traditional "native game engine" people "scaling down" to web requirements (especially when it comes to time needed to start into the game - the entire asset loading system of native engines needs to be rebuilt from scratch for this).
We've actually managed to reduce the WASM runtime for UE5 to just 8MB compressed.
In regards to downloading assets, we've built out an asset streaming system to address this. It allows you to dynamically load in just what you need, when you need it, while everything else that isn't needed right away can be fetched at runtime.
I remember the experience of Unreal Engine demos compiled to asmjs a decade ago being more or less the same, taking absolutely forever to load before anything happens. It doesn't feel like much progress has been made on that front.
Those aren't as bad, about 20 seconds to get going from a cold cache. Car Configurator is incredibly slow though, I timed it at about 8 minutes to load from scratch and when it finally got there it was unusably laggy until I refreshed and let it start again with a pre-warmed cache. According to Chromes internal task manager the CarConfig tab is continuously using about 500% CPU (i.e. five entire cores) and 5GB of RAM despite very little going on in the demo. This is on a current-gen desktop processor.
That's pretty neat, not much in the way of progress bar for me but they load in about 30 seconds. And it seems a little choppy at times but playable. Reminds me of late stage flash era games.
I like the portability aspect, but between the microstutters, broken textures, and visual glitches, I'm not particularly impressed by these. I kind of feel like Java did this in the browser ten years ago, albeit at a lower resolution.
I guess it still needs work. It's not even available yet on Firefox, but I expected Chrome to work at the very least.
Edit: oh, GPU support doesn't work on Linux, that explains the weirdness. Guess I'll wait for either Firefox or Chrome to release their final releases before I start experimenting with this!
If anyone here is using PlayCanvas then I would love to know why you chose it over the abundance of other game engines out there.
Every time I've taken a look at this engine it has always felt very limited. And with a $15/month subscription just to be able to create private projects I just can't justify it personally. I would love to be convinced otherwise though.
- If an minor engine release breaks existing project, the editor supports running and building with the last minor and patch release. Minor releases should never break existing projects unknowningly (shader chunks was the last (and painful) known big breaking change). The PlayCanvas team are usually pretty good at dealing with reported minor version breakages.
If you do take on another web 3D project after this work is done, hopefully this will help with reconsideration :)
Any idea how close Apple is to shipping stable WebGPU? They are the main bottleneck in terms of marketshare, Chrome has shipped it on Windows and Android already.
It’s in advanced safari iOS feature flags right now, and has been for a while. It works on the demos for PlayCanvas, but I can’t speak to long term stability .
What sort of things will compute shaders on the web unlock that wasn't possible before? Asking as someone with only a little graphics programming experience
They unlock a lot of advanced graphics techniques that are too slow to do CPU-side but work well in parallel on GPU. It's a pretty wide variety of things, but e.g. lighting, mesh manipulation, terrain, voxels, post-processing.
I think you'll begin to see more advanced particle systems and physical simulations for a start. And 3D Gaussian Splatting will probably benefit too (since compute will probably enable much faster sorting of splats). So it's not really that this stuff wasn't possible before...but compute will enable these techniques to run far faster.
With WebGPU, Stable Diffusion in the browser (watch out, once you click the "Generate" button, it will fetch 2 GByte of daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaata) (and probably make your laptop hang whiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiile generating, as you can tell by my typing).
I think Playcanvas would do well to focus on the basics, like being able to export/import variables in the standard js way, being able to develop offline, using your own source control. I could go on.
You can do all that, when you develop without online Editor. In that regard, there is no difference between PlayCanvas, BabylonJS or ThreeJS. You can pick the one you are more familiar with.
Developing offline with the engine-only (https://github.com/playcanvas/engine) is obviously an option, but I wouldn't hold your breath for an offline editor.
That issue was opened in 2022. Honestly if you really get into the nitty gritty of PC it becomes quickly apparent there’s some very strange design choices and priorities.
You can produce some great stuff but there are many dev-exp headaches
https://simplystream.com/demos
Edit: These demo should load faster, but use WebGL:
https://topdown.tiwsamples.com/
https://vehiclegame.tiwsamples.com/