News

Progress report: Performance, Grouping, Normals, UV mapping

General, 10/07/08 (gmueckl)

The bad news first: development has slowed almost to a stand still in the last couple of months. The good news: not all hope is lost and there has been some progress. In particular, the mesh rendering performance has improved, grouping of objects is now possible and mesh objects can be merged into a single big mesh. Also, mesh normals are now stored explicitely and everything about UV coordinates and textures is about to be redone almost from scratch to make it work for real.

Immediately after the release the development of Moonlight|3D has gone forward at quite a high speed, but real life intervened and had me concentrate on lots of other things instead. Therefore, this project is now seeing massive delays. This progress report, in particular, should have been out months ago. And the situation probably will not get better in the foreseeable future. Despite this, Moonlight|3D has seen improvements.

The first one was an attempt to improve mesh performance. The changes that were made in the mesh code between 0.1.5 and 0.2.0 changed a lot of internals and prepared it for improvements in both speed and memory usage, but actually caused a performance decrease by the time Moonlight|3D 0.2.0 was released. Since the release, some additional improvements made performance in the backend increase again (but there's a catch that I'll explain in a second) and mesh rendering in the 3D view is now based on OpenGL display lists and it therefore has become a lot faster.

Meshes now also have explicitly stored normals for each face vertex. These can be updated automatically so that they match the face normal (producing hard edges in renderings) or so that they match the average of the adjacent face normals (producing the impression of smooth, round surfaces in renderings). This means that rounded objects like spheres don't look awkwardly faceted any more in renderings. You can of course set this individual for each face vertex in a mesh, making it possible to have smooth areas and hard edges where you want them to be. In the future, you will also be able to edit mesh normals manually, once the user interface for this is implemented. The bad news about all of this is that automatic update of face normals mentioned above currently works with a rather low performance, typically eating up the performance improvements that the mesh code has seen otherwise, causing noticeable regressions in the current nightly builds.

Also new to the nightly builds since Moonlight|3D 0.2.0 are grouping of objects and merging of mesh objects. It is now possible to group several objects and and transform the whole group. Similarly you can now merge mesh objects into a single mesh. This makes it easier to create a complex object by starting out with a whole set of primitives instead of only one.

The operator graph editor is seeing some improvements. The graph view can now be zoomed in or out and graph nodes can now be moved around freely. This requires a new logic for laying out graph nodes which, unfortunately, does not yet work convincingly enough. Also, the positions of the graph nodes are not yet saved to file and are invariably lost when a file is reopened. This will be fixed in an upcoming nightly. All in all, the operator graph editor is still a big construction site and will likely remain that way for a while.

Work was also started on an overhaul of all the UV coordinates and textures features in order to make them actually useful. This work will most like not be completed in the next release. Instead this will probably be temporarily utterly broken in Moonlight|3D 0.2.1, but become the main focus for Moonlight|3D 0.2.2.

I cannot say when the next release of Moonlight|3D will be made because development has slowed down so much. But you are always welcome to check our nightly builds and comment on them. We really depend on your feedback!


Print - Return