Peter Young
Visualisation Research Group


Select the above image to enter the 3D visualisation
or you can view the full size image shown above.

About CityScape

CityScape was an early attempt at creating a software landscape from various information about a program. As with several of the other visualisations shown in these pages, CityScape was a one off visualisation used for fleshing out an idea. It concentrated solely on visualising some aspects of a single function, including the control flow and data useage. The aim was to create a landscape by visualising all the functions in program in a similar manner. It was hoped that each function would have it's own characteristic appearance and properties creating a landscape distinctive to that program. This landscape could then be explored freely, with distinctive landmarks and features of the functions aiding in navigation. Although not further persued, this visualisation lead the way to some of the later work in creating a software landscape, such as File-Vis and Software City. The concept seemed valid, but the level of abstraction was too low for such a large visualisation, i.e. it took up too much space and showed too little information.

The construction of the CityScape visualisation is fairly simple. It consists of a number of levels which represent the various levels of nesting and scoping within the control structure of a function. The "roads" represent the control structure of the function with arrows indicating the direction of flow. At intersections (conditional statements), green and red arrows indicate the direction of flow for the true and false conditions respectively. As a new statement block is entered, such as a while loop body, the road banks upwards to a new level. When this block is exited then the road banks down again to the previous level. More complex and deeply nested functions could be seen to have a high number of levels and have very sprawling road networks.

Data is represented in the visualisation by the coloured towers or buildings. Each data item, such as a variable or constant is represented as a building. The pattern and size of each building corresponds to the particular data type of that variable. Solid buildings represent the creation of the data item and include a text label to identify the type and name of the variable. Translucent buildings represent a use of the data item, with a horizontal red arrow indicating a "write" or assignment to an item, all other uses indicating a "read".

In the CityScape screenshot shown above, a number of festures can be identified. The visualisation pictures a very simple function which uses four variables, three integers and a character pointer (string), the red and yellow variables are parameters. The function contains two nested structures (the first level up represents entering the function body), a while loop and a conditional branch. Similar operations are performed in both branches, that of an assignment to the string dependent on the two blue variables.

As previously mentioned, the CityScape visualisation visualises information at a level of abstraction too low and presents too little information to be of any real use. At this level it is easier to read the source code than it is to interpret the visualisation. The main advantage coming from this is the creation of a landscape with features dependent on the program being visualised. The File-Vis and Software City visualisations use this technique to a much greater extent and produce some interesting results. They both concentrate on much higher levels of abstraction, where the visualisation is playing a lesser part in understanding the code itself, but more aiding the understanding of the structure of the program and allowing navigation through it.

About the demo

In order to view this demo visualisation you will require a browser with Superscape's Viscape VR plug-in installed. It would also be an advantage to have a high color display configured.

Warning! It should be noted that this demo is extremely slow due to the construction of the virtual world and the grouping used. This demo was intended purely to try out some new ideas and is not designed as a useable visualisation. There is very little point in viewing this demo using Viscape as all the features are evident from the screenshot shown above.

Navigation through the 3D environment can be facilitated simply by using the directional control icons at the bottom of the frame. Alternatively, a more efficient though trickier control method can be activated by selecting the 3D frame then pressing the space bar. This produces a white box called the dead zone. Moving the mouse out of this box will result in movement through the 3D world. Various methods of movement can be facilitated by using the left and right mouse buttons in conjunction with moving the pointer. The left mouse button allows rotation control over pitch and yaw (i.e. turning on the spot) and the right mouse button allows translation horizontally and vertically (moving left/right, up/down while facing the same direction).

This page is maintained by Peter Young, please send any comments, jokes, insults or general abuse to (

Last updated: Monday 19 May, 1997.