Getting ready for the Buildathon

Gene: Last week I worked more on satellite rendering using TLE data, and got this working. Satellite position is a little off in some places, so I am switching to an earth-centered inertial coordinate system next to try to improve the position accuracy.

Alex: Last week I was mostly busy with helping out the Buildathon gang to get started before the big event next weekend. On the side, I have updated the version of ImGUI that we are using so that we have better support for MacBook Retina displays and other High DPI display systems. In addition, we now have fancy new GUI features to play around with! Other than that, there is some slow ongoing process with redesigning the DownloadManager and making it fit for public consumption.

Eric: For the week before the Buildathon I was helping participants who were working on compiling OpenSpace on their own computers, and as a part of that updating our documentation. The instructions for Windows computers are now much more refined and detailed. The instructions for Linux still need work, and to help me improve them I’ve dusted off an older computer and installed Ubuntu on it to use to test the proceedure (and the code).

Globe Browsing progress report

Erik and Kalle:
Since our last blogpost in mid July, we have implemented quite a few features, both within the globebrowsing module and the core and base module of OpenSpace. Most of the core and base module features are byproducts of the development of the OSIRIS-REx visualization, for which we were both hired an extra month. Starting with these general changes: all scene graph nodes now have a transform relative to their parent node which can be either static or driven by SPICE, as configured in each node’s own .mod file to be able to define hierarchies of renderable models, as well as renderable trails that follow the rotation of its parent (useful for launch trails). We have also added the ability to schedule scripts to be automatically triggered at specific times. These scripted events are bidirectional, meaning different scripts may be specified depending on whether time progresses forward or backward. We have also implemented a new instrument times parser used for camera events in the OSIRIS-REx visualization. Furthermore, we have invested quite some time in investigating and solving a synchronization bug manifested in the Hayden Planatarium. After understanding the issues, the common pitfalls were abstracted away for future developers by the added classes SyncEngine, Syncable and SyncData.

Along with the OSIRIS-REx visualization, we also updated all matrix calculations to be done in double precision on the CPU, so that the single precision operations on the GPU can be handled in higher precision. Using this, a smoother rendering of SPICE derived trails has also been implemented to avoid jagging effects due to limited precision.

In the globebrowsing module, there have been some change as well. The TileProvider interface has been iterated a few times and is now allowing tiles to be generated on the fly. Using this, two new implementations of TileProviders have been added. First, a TileIndexTileProvider — rendering the tile index as text onto the tile as they are requested, which is useful for debugging. The second is a SizeReferenceTileProvider, which generates geological size references in meters or kilometers on each tile, calculated using the globe ellipsoid. Furthermore, the GUI has been improved, and now allows users to do basic image processing, such as gamma correction, alpha blending and magnification on a per-texture-layer basis. We have done some updates on the shading of globes so that night textures are not necessarily needed for shading. Some temporary atmospheric and water effects has also been implemented for nicer rendering. Shader code has been DRY-refactored and doxygen documentation has been written for most important globebrowsing classes.

When it comes to interaction, the interaction speed in the globebrowsing interaction mode is relative to the actual distance to the surface, and no longer to the reference ellipsoid. This enables easier control over speed close to the surface of globes. We also implemented a smooth spherical linear interpolation between quaternions that define the direction when changing the focus node. We also solved a problem which caused inaccuracies of globe browsing interaction at high delta time, and added key bindings for setting friction.

Atmosphere and Orbital Elements

There’s been a whole lot of writing going on, as Alex, Erik, and Kalle all have been working on their theses. Meanwhile, there’s been some code development too:

During the last week I worked on getting the correct orbital position from the Kepler ephemeris. I’ve made some changes to the code, but still troubleshooting.

During the last week I worked on adapting the atmosphere code to make it possible to change the pre-computed parameters at rendering time (executing the pre-computation again for the new values). This change is important for both the teaching and debugging points of view. I am still working on the new modular implementation of the atmosphere and merging it with the globe browsing module.

This week was another week of writing, without producing any useful code. On the other hand, an overview paper about OpenSpace is progressing fast and should be available for semi-public consumption soon!

This past week I tweaked the Jenkins build status monitoring page, and made a pass through the build documentation for our Buildathon participants (mainly for Mac, but I want to improve the Linux page soon). I started investigating the “bug” that was preventing Ghoul to build on Linux, which I knew was somehow related to the external Google test module, but Alex found that having Jenkins make a clean build cleared the problem, so I don’t need to worry about that anymore.

Two-Line-Element ephemeris and Build Status

Last week I worked on the Mac version: build issues after merge with latest develop branch, and Jenkins Mac node. Mainly I worked on getting Two-Line-Element ephemeris to work. A feature with simulated orbiting satellites was working before a recent merge. After the merge, however, the satellites were stationary, and so I dug in to troubleshooting it. This week I got Kepler and TLE ephemeris working with the new translation/rotation/scale in scenegraphnodes, module file format, and new Documentation scheme.

This week I created a build status page in the Github wiki which gives a big-picture overview of the status of all of our build jobs on the Jenkins server. There is now a link to the main page menu, under Development, which will take you directly to that status page. As that page shows (at least as of this writing) building the Ghoul library is failing. This is probably because the name was changed on the Google Test module, and it’s probably responsible for keeping the Windows build of the master branch from building. I’ll be adding more test builds to Jenkins, and fixing those that don’t work, or at least tracking down the reason behind the failures.

Adding documentation after ASTC

The developers have been working a lot since the last post here, but not saying much about that. We’re trying to get back in the habit of letting people know about our progress (and problems).

This week has been focussed on merging the different feature branches that were used for the ASTC conference — globebrowsing and osirisrex — back into the develop branch. In addition to that, there were a lot of preparations for both the ASTC conference as well as the annual culture night in Norrköping, during which we presented OpenSpace to a sold-out house. Besides this, there was more work to be done on preparing documentation with Emil. We are now set on a path for easier use and I hope you will like it!

This week, I’ve been working on improving the look and feel of the documentation of our lua interfaces, to make it easier for newcomers as well as experienced OpenSpace developers to get an overview of our APIs. The documentation is generated when OpenSpace launches, and is written as html files into the documenation folder. I used Handlebars.js for templating, which makes it easy to change the structure of the documentation, and the css-library Bootstrap for styling.

Now that we’ve moved the main project site to the new server, I’ve been looking at the system we use for nightly builds, Jenkins. Alex had already set it up, so I started by understanding what he’d done, and then making some small adjustments. We’ve added a Mac node, so I’ve been working with Gene to try to get builds working on that as well (but it’s not working yet). I’ve also started looking at how we can package up OpenSpace for wider distribution, including our upcoming Buildathon at the AMNH. We’ll likely use Wix to make an MSI installer for Windows, but before that is working we may just put together some zip files that can be unpacked and dropped into place, just to get started.

ISI user meeting at AMNH

Alex: All of this week was focussed on preparing work for the OpenSpace ISI user meeting happening at AMNH in New York. These fixes consist of cleaning scene files, reenabling the unit tests, preparing a Juno presentation, and other various fixes.

Eric: These past few weeks I’ve been working on building OpenSpace on my Mac, and to learn more about the layout of the source code I made it a bit more challenging by requiring that I build everything from source instead of relying on brew. It almost worked, but it appears that the current distribution of freeimage cannot be built on a newer Mac from the source package distributed by their project. Meanwhile, I was asked to join the ISI partners meeting at AMNH and to demonstrate the software on Mac and Windows, and just in the nick of time I was able to get it all to build (using brew for libraries as needed) on my Mac. And it’s a good thing I did, because the hands-on demo turned into an impromptu install-fest, attempting to install a working copy on several Macs so that our ISI partners could take home a copy. It worked for one machine but failed for two others; and again I learned a lot from the process. I think (or at least hope) it also communicated to them where we are in the development process (it works, but isn’t easy to distribute it yet) and how willing we are to help them get it working. It’s clear that some further effort is needed to package up the executable into a Mac app that one can simply drag to the Applications folder, so that we can get it out to more people to test on more machines and more graphics cards. And similarly, we need to package it up on Windows as an installer to get it out to more Windows machines. I’ll be looking into this next.


Alex: This week was mostly focussed on preparing a presentation at Almedalen, an open Swedish event where almost all politicians are present and listen to novel ideas shaping the future of the country. Here is to hoping that everything is going well!

Kalle & Erik: This week has been spent on the issue of solving a long lasting bug in our height map rendering. The idea is to read extra row-and columns of pixels for each tile, and pass that along with a compensating UV-transform to the shader. Doing this will enable correctly interpolated and aligned height data along chunk edges. We have also worked more on the interaction mode used for globe browsing. The interaction rotation is now more free, it is possible to change variables used in the interaction and the camera now follows the position change and the rotation of the globe.


Alex: This week was focussed on presenting OpenSpace at the International Planetarium Society conference in Warsaw, showing off the combined work by the team. It was a great success and we had many useful discussions about future collaborations.

Michael & Sebastian: Our work on the iSWA integration is getting closer to its end, and we are making our final touches. The last week we have been improving on the methods for data processing before render and analyzed them. We have also continued the refactoring and bugfixing and presented our work to our Stakeholder at the NASA/LWS Heliophysics Summer School. This resulted in some feedback that we will attend to next.

Erik & Kalle: During the week of IPS we have been focusing on adding the ability to include new types of datasets. To visualize Mars we have been using AMNH’s local datasets. The CTX mosaic of mars images can now be rendered together with the Mola height map of Mars. We have also added a monitoring class that is used to track internal data and output it as CSV which is visualized using D3.


Alex: This week was focussed on preparing for the IPS conference in Warsaw, in which we are going to have a 1h presentation to talk about OpenSpace. The bulk of the work was to integrate Emil’s, Michael&Sebastian’s, and Erik&Kalle’s work into a single branch and getting it all working together. Also, Matthew and Gene were visiting us in Norrköping to get ramped up on the project and I’m looking forward to a fruitful future!

Erik & Kalle: The most valuable progress this week has been mainly two things. First is the performance increase due to the change of caching OpenGL Uniform IDs instead of querying them by strings for every draw call. The second is the implementation of a new class DebugRenderer which is used to render vertices in clipping space. This renderer is used for rendering bounding boxes and bounding polyhedra for chunks, which has been useful for visual proof of concepts and debugging. We also tested the globe browsing feature in the Hayden Planetarium with great success. After three hours in the dome we found one bug that could easily be fixed the day after.


Alex: This week was dominated by the EuroVis conference, which went exceptionally well. The keynote was a full success and is available online ( In the code, I implemented a more fine-grained method to record performance data for individual methods in preparation for the upcoming sprint to focus on improving the performance of our various components.

Kalle & Erik: The implementation of TileProvider is chosen dynamically after reading the XML dataset config file. We had a meeting with Jonathas regarding the issues of merging our work with his work on the rendering of atmospheres. We have also worked a lot with refactoring of some of the code relating to the different categories of layers a globe can have. These categories are currently color (base layer), night texture, height map, water mask and overlay. Other improvements include a preprocessing step for some tile datasets, where things as min and max values are kept track of, which for the height dataset are used by the frustum- and horizon culling. We have also implemented a tile splitting scheme that considers the projected screen area of a tile instead of only its distance to the camera to determine if it should split or merge.

Michael & Sebastian: Recently we reveived more ionosphere data files to test our visualization with, and we noticed that things were not moving as expected. The problem was with a dependency of Kameleon, which has not been updated for a longer time period. Last week we also spent a few days participating in the SW REDI Boot Camp at CCMC to learn about space weather, which will be useful when writing our thesis.

1 2 3 4 5 6 7