Godot 4 allows you to export your game to HTML5 with WebGL support, enabling it to run in modern web browsers. This feature is a significant step forward in making Godot a versatile game engine for both desktop and web development.
To export your game to HTML5 with WebGL support, you need to select the HTML5 export template in the Godot project settings. This template is specifically designed for HTML5 export and includes the necessary settings for WebGL support.
With WebGL support, your game will run smoothly in most modern web browsers, including Google Chrome, Mozilla Firefox, and Microsoft Edge.
Check this out: Basic Website Template Html
Exporting to HTML
Exporting to HTML is a great way to share your Godot 4 project with the world. If a runnable web export template is available, a button appears in the editor to quickly open the game in the default browser for testing.
You can also use a Custom HTML shell file if you have one, which will override the default HTML page. This is especially useful if you want to customize the look and feel of your exported game.
The default HTML page will display a debug output below the canvas if you turn on Export with Debug, showing JavaScript and engine errors. This can be super helpful for debugging your project.
You can also use the browser-integrated developer console, usually opened with the F12 key, to get more information, including WebGL errors. This is a lifesaver when you're trying to track down tricky bugs.
Godot 4 and WebGL
Godot 4.0 and later can only target WebGL 2.0 using the Compatibility rendering method.
The recommended option for WebGL support across all browsers is WebGL 1.0, which provides the best performance.
Godot 4
Godot 4 is a significant upgrade for game development. Godot 4.3 promises to be one of the best recent releases for Web exports.
Single-threaded exports have been a major issue for Web exports in Godot 4.x. Unfortunately, serious revisions are needed to improve the experience.
Making games for the Web using Godot 4.x is still not as seamless as we would like it to be. Godot 4.3 fixes one of the biggest issues relating to this.
Here's an interesting read: 6 3 4 Speakers Fit 6 1 2
WebGL Version
Godot 4.0 and later can only target WebGL 2.0 using the Compatibility rendering method.
If you're looking for the best performance, WebGL 1.0 is the recommended option, as it's supported on all browsers.
Godot's GLES3 renderer targets high-end devices, but the performance using WebGL 2.0 can be subpar.
Some features are not supported in WebGL 2.0 specifically, so it's essential to consider this when choosing your renderer.
Most browsers support WebGL 2.0, but Safari has several issues with WebGL 2.0 support that other browsers don't have.
For now, we recommend using a Chromium-based browser or Firefox if possible, especially if you're targeting Safari users.
You can check which browsers support WebGL 2.0 by visiting the Can I use WebGL 2.0 page.
Related reading: 6 1 2 Speakers Fit 6 3 4
Troubleshooting
Godot 4's export to HTML can be finicky, but don't worry, we've got some common issues covered.
If you're getting a "Failed to export" error, check that your project is set to export to HTML in the Export Preset dropdown menu.
Make sure your scene hierarchy is clean and organized, as Godot 4 can get confused if there are too many nodes or duplicate names.
If your exported HTML doesn't show any graphics, ensure that your project's graphics are set to export as a texture, not a sprite.
Here's an interesting read: A Basic Html Project
Coop-Coeppwa for Threaded Builds
If you're having trouble with threaded builds, you might want to check out the COOP-COEPPWA feature. This feature allows you to export your game with thread support without modifying the server's header responses.
To use COOP-COEPPWA, you'll need to export your game as a Progressive Web App. This is because the PWA build sets up a Service Worker that intercepts requests from the server and injects the missing COOP-COEP headers.
This can be a game-changer for developers who need to export their game with thread support, as it eliminates the need to manually modify the server's header responses.
Additional reading: Itext Insert Image in Header File from Html
Boot Splash Not Displayed
If the boot splash isn't displayed while loading, don't worry, it's not a major issue. The default HTML page doesn't show the boot splash by design.
You can still access the boot splash image, though - it's exported as a PNG file. This means you can use it in a custom HTML page if you want to display it.
The boot splash image is available for use in custom HTML pages, giving you a chance to get creative with your setup.
Readers also liked: How to Use Notepadd for Html Coding
Next Steps
The next steps for Godot Engine's Web export are exciting. We're working to finalize and stabilize samples playback for the Web.
Right now, the node chain system is still in development, but it should eventually support audio effects on buses. This will open up new possibilities for Web game developers.
The current Web build size is a concern - the uncompressed .wasm file is around 40 MB, and even compressed with Brotli, it's still 5 MB. We're exploring ways to reduce this size.
If you have C/C++ experience and feel up to contributing, you can join the #web team on the Godot Engine developers chat. Your expertise could help make a big difference.
Consider reading: How to Edit Picture Size in Html
File Serving and Build
The generated .html file can be used as DirectoryIndex in Apache servers and can be renamed to e.g. index.html at any time, its name is never depended on by default.
The other exported files are served as they are, next to the .html file, names unchanged. The .wasm file is a binary WebAssembly module implementing the engine.
The .pck file is binary, usually delivered with the MIME-type application/octet-stream. The .wasm file is delivered as application/wasm.
Delivering the files with server-side compression is recommended especially for the .pck and .wasm files, which are usually large in size. The WebAssembly module compresses particularly well, down to around a quarter of its original size with gzip compression.
The .js file contains start-up code and is used by the .html file to access the engine. The .png file contains the boot splash image, and it's not used in the default HTML page but is included for custom HTML pages.
Delivering the WebAssembly module (.wasm) with a MIME-type other than application/wasm can prevent some start-up optimizations.
Take a look at this: Text Font Size Html
Shader and Build Limitations
Exporting a project from Godot 4 to HTML5 can be a bit tricky, but let's break down the shader and build limitations you need to be aware of.
Shader language limitations are a major concern, especially when using dynamic loops. WebGL 1.0, which is used when exporting to HTML5, doesn't support dynamic loops, so shaders using those won't work there.
Another important consideration is that some features might not work as expected due to limitations in WebGL 1.0. However, this is not explicitly stated in the article, so we'll stick to the facts we have.
The lack of support for dynamic loops in WebGL 1.0 is a significant limitation for shaders. This means you'll need to rewrite your shaders to accommodate this limitation if you want to export your project to HTML5.
Sources
- https://godot-doc.readthedocs.io/en/3.0/getting_started/workflow/export/exporting_for_web.html
- https://docs.godotengine.org/en/stable/tutorials/export/exporting_for_web.html
- https://godotengine.org/article/progress-report-web-export-in-4-3/
- https://docs.godotengine.org/en/stable/tutorials/export/exporting_projects.html
- https://docs.godotengine.org/en/3.2/getting_started/workflow/export/exporting_for_web.html
Featured Images: pexels.com