We are excited to announce the release of Verge3D 4.9 for Blender! This new version brings direct export to standalone HTML file, auto sliding around an obstacle in first person mode, support for multi-material objects and shared materials, better handling of cloned objects, the possibility to replace shared textures individually, more control over procedural lines, integration with Blender 4.4, and further optimizations.
Export to HTML
You can now squeeze a Blender scene into HTML format. The resulting standalone .html
file bundles the engine, meshes, and textures together. Unlike with the standard Verge3D app that requires a local server or uploading to a website, it can be opened like a regular file on any computer or device equipped with a web browser.

It is indeed a cool feature, however we don’t recommend using it in a normal production process. HTML is not a very efficient format for packing things into it, and there is no Puzzles, physics, texture compression, dynamic text and so on – basically it works like Sneak Peek. Still it can be a convenient way to share some 3D interactives with your colleagues or clients.
Overcoming Obstacles
We improved the first person controls significantly by implementing automatic sliding along a wall or around an obstacle. This prevents the user from getting stuck, resulting in a much smoother experience, especially on mobile where you can move only forward (no strafing controls).

Here are the link to the updated First Person demo – just feel the difference!
We also fixed the bug when the initial direction of the camera did not correspond to what is set in the modeling tool.
Multi-Material Objects and Shared Materials
Verge3D users sometimes face two major sources of issues when creating advanced configurators. One is multi-material objects and the other is when a same material is shared by different objects. With this update, we addressed both those problems by adding two new options to the relevant material puzzles.

First option first: the puzzle assign material used to work with the very first material of a multi-material object. From now on, you can access/replace the required material by its index as authored in the 3D modeling software by enabling multi-material index for the puzzle.
In the following simplistic example, the cube’s 2 materials are named “first” and “second”. Now you have the power to replace either of it by the “third” material – something that was not possible with Puzzles before.

What about the second case? The material puzzles used to work on a material name, which is always the same for similar-named and/or shared materials. So if you update such a material with a puzzle, it will update all objects that bear it. Yet sometimes you may want to pick a single material assigned to a concrete object, rather than to do them all.

This can now be achieved thanks to that second option – return unique material id. When enabled, the puzzle material from would return a unique material identifier instead of its name thus enabling a finer control. You can then use this ID (which looks like 5c464bf0-043a-40ee-b864-5c026436d7de
) to pass it into other material puzzles.
Here is how it works – all 3 cubes share a same shiny material, but you can still vary its inputs independently for each object:

Handling the Clones
When cloning objects, the newly created copies used to inherit a same material shared by all the clones. Another issue is if the original object happens to belong to a group (called collection in Blender), the clone does NOT inherit it – in other words, the group selector puzzle won’t work for the copies.
To provide you with more control, we made it possible to change the said behavior by using two new options added to the clone object puzzle: also clone materials and preserve object groups. If enabled, the first one allows you to update the material of an individual clone. The second option simply adds the clones into the same group as the original object.

On the above screenshot, 10 randomly positioned copies are created in the same group, with their materials copied too. This allows you to individually set the color for any clone clicked by the user.
On the other note, we also fixed an old problem with colors shared between cloned materials.
Shared Textures
Here is the final use-case in the sharing series – you can now replace a texture individually for every object even if it is shared by many. For that we added the self-explanatory option, prevent texture sharing, to the respective puzzle:

In the above-pictured example, all 3 cubes share the same texture yet it’s still possible to independently apply a new image to a required object.
All upgraded puzzles are fully backward compatible, so the old behavior is preserved and you don’t need to fix anything in your existing puzzles.
Blender Integration
With this update we introduce support for Blender 4.4 released just recently. The main feature of this new Blender version is a system of action slots. Basically, an action can now contain animations from different Blender data-blocks, e.g. object movement and shape key animation bundled in a single action.

We dropped the official support for Blender 3.0-3.3 which are 4 years old. The minimally supported Blender version is now 3.4 released in the end of 2022. This version is included in ChromeOS repository so we decided to keep it for a while.
You can now use the tone-mapping option Khronos PBR Neutral (which can be set under Render > Color Management > View Transform) first appeared in Blender 4.2. It is a fast and the most efficient way to tone-map the high dynamic range scene.

You should prefer this view transform type over AgX or Filmic when Standard (enabled in the default Verge3D cube scene) is not sufficient.
We optimized export of multiple and/or long animations. On rusty occasions the export is performed up to 10 times faster.
Speaking of export, the progress is now updated more smoothly in the cursor. Also a prolonged export shows the freezing alert less often.
Blender-Related Fixes
We fixed the Reroute node not working properly in Verge3D in some cases. Thanks for reporting this on the forums.
We fixed the Clamp option of the Map Range node exported incorrectly. Thanks for reporting this on the forums.
We fixed the Follow Path constraint not working with empties. Thanks for bringing this up on the forums.
We fixed freezing of the App Manager when opening .blend
files under ChromeOS.
Finally we fixed the issue with shape key animation applied to the mesh which in turn is shared between different objects.
Lines
When a line is created using the draw line from obj puzzle, it is now automatically assigned a distinct name. For example, if the object’s name is “Cube”, then the line drawn from it will be named “CubeLine”. You can then put this name into other puzzles, e.g. to change the line color (see below).

In other news, this very puzzle now correctly works if the 3D canvas is offset on the page – particularly, in the viewport of the Puzzles Editor.
Finally, you can now change the color of lines (either of wireframe-rendered meshes or created using the draw line puzzle) via the set color in material puzzle. See the above example where the line color is accessed by the “magic” color property.
Optimization
We continued our optimization efforts with this update. This time we focused on reducing the CPU load. For big scenes (like 1000+ separately rendered objects) it is the CPU that turns out to be the bottleneck, causing slow rendering even on powerful graphics cards.
So we addressed this problem by reviewing and reworking several aspects in the engine, such as preparing materials for rendering, updating transformation matrices, reflections and SSR calculations, and even the commonly used object selector puzzle. As a result, we managed to double the FPS in some of our tests!
WordPress plugin
Verge3D WordPress plugin can now handle filenames starting with dot (that is, hidden files on macOS and Linux). Particularly, the dreaded .DS_Store
file won’t break your WordPress uploads anymore.
The PDF generator will work even if the server is configured to prevent write access to the user directory.
Finally, we cleaned the plugin from unused templates and code, and also fixed some potential security issues.
Other Improvements
Verge3D-specific setting Fit to Camera Edge now allows for negative values for its Fit Offset (available for camera-parented objects). This spares you the need to use extra empties/dummies to shift your objects outside the screen edges.

Service Tools menu is used to show up using ~~~ triple tilde keys, but this works only on the QWERTY keyboard. The menu can now be invoked on various national keyboard layouts too, such as AZERTY (widespread in France and Belgium), and other (Italian/Spanish/Portuguese/Japanese/…) keyboards using the most top-left key instead of tilde.

We added pointer-events to the list of options for the HTML/CSS puzzles. This option allows you to disable pointer events for an element – for example, to make some button temporarily unclickable.

The set timer puzzle now uses a very big number instead of Infinity for its repeat input. This is to work around the problem with copying and pasting this puzzle reported by the community.
The Verge3D tool chain now relies on the newest Python 3.13 particularly found on Fedora 41. The minimally supported version of Python now is 3.8, so be sure to update it if necessary.
The puzzles get / set morph factor can now work with lists and groups of objects (per request on the forums). To make it possible, enable flexible target input.

Finally, there were various minor UI tweaks here and there in the App Manager.
Bugs
We fixed the regression with multiple exec script puzzles in a same scenario.
We fixed the crash in VR mode when using order-independent transparency. This affected our demo Virtual Reality which now works properly. Thanks for bringing this up this on the forums.
A non-zero API property Scene.backgroundBlurriness no longer cripples the background image.
Both the synth and MIDI playback puzzles no longer crash if they are invoked multiple times.
Background music now works in the E-learning demo on mobile.
We fixed problems with Verge3D Network occurred after Verge3D is re-installed into the same folder (that is Next-Next-Finish works smoothly now).
Documentation
We continued our never-ending work on the User Manual which received a new bunch of updates and improvements. Among significantly reworked sections are the Puzzles Reference, Shadows, HTML Interfaces, Verge3D Life Cycle, and API Reference.

The downloadable sample files linked in the Server-Side Rendering and Plugins chapters have been updated to reflect recent changes in the engine.
Overall, we updated around 140 images across the docs to reflect the current state of the UI, and to provide a better resolution. We also mopped up all orphaned assets and images in the User Manual folder making the distribution slightly smaller.
Finally, we added info about common limitations, issues and gotchas in relevant sections, and provided more usage examples for puzzles.
Update Now!
Get the new version of Verge3D from the downloads page! Let us know how it works for you, or suggest new features for implementation on the forums. We’d be happy to hear your feedback!