Optimizing and Improving

Rickard & Michael S.: This past week most of our time has been spent on optimizing the mesh generation to create as small models as possible (based on file size) while still keeping “enough” details to be able to distinguish individual stones with the size of a couple of centimeters. So far one promising approach has been to upsample the models at an early stage to fill holes and other errors caused by stereo shadows, and also to increase the amount of details. At a later step the models are downsampled again for effective loading time and rendering. The asynchronous loading from disk to RAM has been working for a while, but now it’s time to start uploading models and texture to the GPU asynchronously to prevent stuttering caused by non-asynchronous uploading. This is done by mapping a buffer, and then sending a pointer to that buffer into a worker thread that handles all the expensive I/O work.

Matthew Territo: I picked up some old, in-progress work again and added configuration options to control the Launcher’s debugging output. You can use the -d or -debug flag on the command line, or set a Launcher-specific LogLevel in the openspace.cfg configuration file.

Kalle Bladin: I’m finally getting some good result from the globe-browsing refactoring. I have reworked the cache and how tile textures are uploaded to graphics memory to increase performance. I will try to do some rigorous testing in the dome to compare PBO texture uploading with regular texture data transfer.

Jonathan Bosson: The multi-touch interface is starting to look good! The function computing the velocity deceleration used to be called each simulation step, i.e. each frame. This bound it to the frame rate and lead to inconsistent behavior depending on the system. Instead, now the deceleration function is called at a constant rate that can be defined by the user. Other bug fixes involved bad precision in direct-manipulation on huge planet sizes, as well as mouse+touch interactions intervening with each other. As the backlog of tasks starts to shrink I’m looking forward to this week’s feedback to get a set of fresh eyes on the interface.

Oskar & Michael N: Different methods for optimization of decoding of JPEG 2000 images were investigated last week. A GPU decode approach using Compute Shaders or FBOs would make a lot of sense for our use case, since the large image is going up there anyways. A test version of this has been implemented in a separate branch, but the main issue right now, before any testing can be done, is to get the raw compressed byte stream from a .jp2 image (and throw away the .jp2 boxes and other metadata). The openjpeg library does not seem to support this, and it seems like a lot of work to understand the underlying structure of the .jp2 container, so this will probably be put on hold for a while. The resolution-dependent buffer will be investigated further this week after some refactoring. As we’ve now received the massive data sets that are going to be used for the SUN-EARTH event in June, it is no longer feasible to re-trace field lines every time we run the program. Focus has therefore been on implementing functions that can read and write field line states to .json and binary files. The user can now also choose to look at a subset of the field lines where a certain quantity is within a given range.

Klas Eskilson: CEF is now being successfully built together with OpenSpace on Windows too. A working web renderer is also in place on Windows, supporting most web features. Basically any URL can be loaded and rendered on top of OpenSpace. The next step is to add interaction callbacks and do a cleanup of the somewhat messy code.