Blend4Web 16.12 Released
We are glad to present a new version of Blend4Web, an open source platform for creating 3D browser applications. In the concluding release of this year, we are delivering more improvements in the Project Manager, making available the Emission node from Blender Cycles renderer, providing the possibility to select an object when looking at it in a VR headset and implementing several advanced optimization techniques which significantly speed up the loading and rendering of huge 3D scenes.
Once again, the Project Manager is one of our focal points. The text editor, introduced in the previous release, turned out to be a popular tool among users. Based on feedback received, today we are adding the possibility to create new files with the New File button as well as save files under a new name (Save As). The editor also highlights the name of a file which is currently being edited.
Heads up! We have made a very important change which affects the file structure of your applications - something that has also been suggested on community forums. Starting today, all files related to newly created Blend4Web apps are conveniently placed within a dedicated projects/ folder inside the SDK. This includes source Blender files, exported scene files, external resources, HTML/CSS/JS code and files generated by the build procedure.
The old system will continue working so you can safely stick to it for the rest of the development cycle of your application. However, if you decide to migrate to the new system, it can be done rather easily by clicking update file structure to the right of your project. This operation will create a new project with the same name, so you can consider dropping the old one after checking the integrity of the upgraded project. Please notice that for programmed apps you'll also need to manually replace the method call m_config.get_std_assets_path() with the m_config.get_assets_path("Your_Project_Name") method, since the assets directory is now located within the folder of each individual project.
In the previous release we introduced preliminary support of Blender's non-real-time renderer Cycles. This month, the list of available Cycles nodes has been supplemented with the Emission node which is used, for example, to create lamp surfaces like in the following scene.
You can download the source .blend file from Blend Swap to check how it works in Blend4Web.
The material library has grown with two cold-winter-related entries: snow and ice. These beautiful materials are available in both Blend4Web PRO and CE so everybody has a chance to use them for designing an interactive X-Mas card to amuse their relatives and friends!
We have made it possible to select objects by simply looking at them - a feature especially useful for WebVR appications. The new API method pick_center() from the scenes module facilitates detecting which object is currently at the center of the screen.
Batching, Frustum Culling and LODs
If you are developing applications with huge, extended scenes filled with lots of objects, like in the Farm, the intro scene of Petigor's Tale or upcoming Capri, this will probably be of great interest to you.
As you may remember, the static batching optimization technique was improved some time ago by utilizing clustering (as we call it). This basically means that all objects in a scene are grouped according to location so that another optimization technique called frustum culling can more effectively work on hiding those groups which are temporarily out of camera view.
This month, the algorithm, which sorts objects into particular groups (called clusters), has been further refined to recognize an additional parameter, namely the LOD (level-of-detail) distance. Although this technique generates more batches, potentially resulting in more WebGL draw calls, it proved to be more effective as more batches can now be hidden through the standard LOD-switching mechanism.
Please note that the clustering technique is not applied to your scenes by default - you have to enable it by setting a non-zero Cluster Size value under the Scene tab (measured in Blender units). For more control over the LOD-related component, we have added the LOD Cluster Size Multiplier, which you can play around with to max out performance.
From now on, the engine will handle the loading of textures more efficiently, ignoring already loaded files by checking their URLs. This will result in quicker loading and less of a memory footprint if your app dynamically loads scenes with the same textures in them, if you use the change_image() method on several objects at once or if you simply use a texture somewhere else in your scene.
Somewhat related to the above-mentioned feature are the new API methods prefetch() and unfetch(). Using these functions you can load additional assets in the background while the user is busy playing with your app.
And, finally, lamp objects of the (unsupported) AREA type are now deemed as SUN and accompanied by a corresponding error message in the browser console.
For this release we have also fixed several bugs. Particularly, logic nodes will now work perfectly with Wacom pen tablets and so will video textures broken by a recent Chrome/Android update. For the complete list of other changes and bug fixes please refer to the release notes.
Although there will be a separate announcement on this topic, we would like to send our holiday greetings to all. We wish you happy 3D web development in the new year!