Immersive Edge Path Bundling

Developed for 186.833 Visualisierung 2 at TU Wien 2023 by Manuel Eiweck
Result

Immersive Edge Path Bundling on a graph with 1k nodes and 2k links.

This project is based on the paper "Edge-Path Bundling: A Less Ambiguous Edge Bundling Approach" by Markus Wallinger, David Archambault, David Auber, Michael Nöllenburg and Jussi Peltonen.

General

The main purpose of edge bundling in general is to reduce visual clutter in a graph by grouping edges together. A commonly used approach is to use a force-directed layout algorithm to group edges. However, this can introduce edge ambiguities. Edge Path Bundling is an approach to avoid this ambiguity. Only related edges are bundled together on their shortest path between their endpoints.

Edge Path Bundling

Example how Edge Path Bundling works. Left: Example of an edge ambiguity. Middle/Right: Example of Edge Path Bundling. [paper]

Goal of Immersive Edge Path Bundling

The main goal of this project was to port the existing Edge Path Bundling algorithm to virtual/augmented reality. In order to achieve this, we first had to adopt the algorithm to work in 3D space. There were two main challenges to overcome:

3D space The original paper was designed for 2D space. To render our 3D scene we use Three.js and A-Frame for VR/AR support. The edge path bundling algorithm only uses references to nodes for bundling and never coordinates directly. This allowed us to easily port the algorithm to 3D space.

3D Layout algorithm The original paper uses datasets with a fixed layout e.g. airline routes. Due to our approach of extending the algorithm to 3D space, we loose the ability to use a fixed layout as such datasets usually only have 2D coordinates (latitude/longitude).
We therefore had to implement a 3D layout algorithm. We used the force-directed layout algorithm from vasturiano/three-forcegraph.

Source Code

Source code can be found on Github

Demo
Both versions share the same bundling and layout algorithm as well as the same data set with ~1k nodes and ~2k edges.
  1. 3D non VR example
  2. VR example

Development Process

The original graph in the 3D scenes with basic force based layout and no edge path bundling looked like this:

Original Graph

Original Graph

Basic Implementation

After implementing the edge path bundling algorithm, the graph looked like this:

Edge Path Bundling

First revision of Edge Path Bundling

Layout Optimization

We can see that the edge bundling works as intended. However, we still have a lot of visual clutter due to the force based layout. Markus Wallinger, the author of the original paper, suggested to only use a minimal spanning tree for the force based layout. Afterward, render all nodes as usual for the edge path bundling algorithm. This resulted in the following graph:

Second revision of Edge Path Bundling with an optimized layout.

Rendering Optimization

While the visual clutter is better than in the first revision, there is still room for improvement. We tried to clean this up by not rendering all edges at once, but only the ones where the start and end node is in the field of view of the camera. This resulted in the following graph:

Final result of Edge Path Bundling for orbit camera example.

Final result of Edge Path Bundling for VR example.

Implementation Details

General
The git repository contains multiple parts:

Examples folder: Contains the demos as well as this documentation you read right now.

three-forcegraph-edge-path-bundling: This is a git subrepo that is forked from vasturiano/three-forcegraph and extended with the layout algorithm and edge path algorithm.

aframe-forcegraph-component: This is a git subrepo that is forked from vasturiano/aframe-forcegraph-component and contains a npm link to the three-forcegraph-edge-path-bundling to drive the VR/AR demos.

Docker: A simple dockerfile that packs the locally built static html/css/js files generated by npm in a default nginx image for deployment. The docker images are uploaded here

Layout

After loading the JSON containing all the nodes and links. We apply the prim algorithm to each connected component of the graph. This results in a minimal spanning tree (MST) for each connected component. The link strength of all edges that are not required for the MST is set to 0. This results in a Tree like structure.

Afterward, we apply the force based layout algorithm to the graph. The forces are the default forces of the used library.

Finally, we apply the edge path bundling algorithm to the graph. Currently, we did not manage to calculate in the background. Therefore, the visualization freezes until the bundling is finished.

Rendering

For rendering we used an orbit camera for the 3D example and an first person camera for the VR/AR example. However, this is just defined in the examples as this is not part of our extended library.

To further reduce the visual clutter, we only render bundled edges if the start and end node are in the field of view. This is done by calculating the view frustum of the active camera and enabling/disabling the visibility of the edges accordingly.

Results and Future Work

While we managed to extend the edge path bundling algorithm to 3D space, we did not validate the results with different datasets or multiple users. Therefore, we cannot compare our result to the original paper. However, we believe that the edge path bundling in 3D space is a way to reduce clutter in general. Especially, when we compare the results to the original graph without edge path bundling or our first revision.

Visual Clutter: Using a MST for the layout algorithm only improved the clarity of the graph by a bit. We still have a lot of visual clutter. One way to further improve this could be to only render edges where the start and end node are in the field of view. This would reduce the visual clutter by a lot. Another could be to consider the layout for the edge path bundling algorithm or just implement filtering by the user (select certain nodes and edges to be rendered).

Benchmark results: A comparison to other edge bundling algorithms would be interesting in the future.

Implementation: While we use state-of-the-art libraries for rendering and VR/AR technology. Currently, there is no way to use our implementation in a production environment. A code cleanup, introducing flags to turn on/off our edge path bundling algorithm would allow us to create a pull request to the original library. This would ensure that our implementation is maintained and can be used by others. Another way would be to create a npm package ourselves.

References

Reference paper

M. Wallinger, D. Archambault, D. Auber, M. Nollenburg and J. Peltonen, "Edge-Path Bundling: A Less Ambiguous Edge Bundling Approach" in IEEE Transactions on Visualization & Computer Graphics, vol. 28, no. 01, pp. 313-323, 2022. doi: 10.1109/TVCG.2021.3114795

Arxiv Publication

Used technologies

Thanks to the Vis2 Team and Markus Wallinger for feedback during the project.