A while ago I experimented with 3D SpaceSyntax and efficient computation of 3D isovists and other local properties like signed distance volume voxels, etc… .

It was part of my GI-Radiosity Program and uses the same core algorithm to get a massive amount of scene-intersections and texture updates in reasonable interactive times.

The datapoints were computed for all surface texture locations as well as a regular 3D grid of voxels.

Now, it can be quite difficult to develop and verify these evaluations and results in 3D.

So to further improve the 3D algorithms it feels like a good idea to use a similar approach in 2D. I’ve already built a 2D GI-Radiosity solver which works in real time, and also uses (more or less) the same global-line algorithm as the 3D version does. This is really neat, because without any overhead I can basically port the 2D evaluations directly to 3D and vice versa.

 

This post starts off with some local isovist properties I have been working on lately. The Model used in the screenshots is the “gallery.dxf” scene that comes with DepthMapX.

My implementation uses the aforementioned 2D “Global Line Radiosity” method and is built in Java/Processing and iterates entirely on the GPU using OpenGL and GLSL shaders.

 

 

Isovist Area

This is one of the most common evaluations. At each location the area of the visible space is computed. https://en.wikipedia.org/wiki/Isovist

2D Local SpaceSyntax – Isovist Area

Isovist Formfactor

An approach to visualize the “compactness” or roundness of the isovists. Red areas for example mark “strechted out” locations that have access to very large areas and at the same time are somewhat squeezed in its surroundings.

This is still WIP as I am still experimenting here.

2D Local SpaceSyntax – Isovist Form Factor

Average Axis Length

At each location the average length of all axis passing through is computed. It also gives somehow a useful shading for Ambient Occlusion.

2D Local SpaceSyntax – Average Axis Length

Average Axis Length, normalized by the Isovist radius

At each location the average axis length is computed and normalized by the Isovist.

I Find this one particularly interesting since it somehow shows the level of “blobbiness” of a space and its separation through straight axis.

2D Local SpaceSyntax – Aerage Axis normalized by Isovist

Maximum Axis Length

For each location the longest axis passing through is computed.

2D Local SpaceSyntax – Max Axis Length

Maximum Axis Length, clamped

For each location the longest axis passing through is computed. The maximum axis length is clamped to a smaller value.

Interestingly this very simply change (in contrast to no clamping) kind of uncovers a network of paths and transition zones.

2D Local SpaceSyntax – Limited Max Axis Length

Maximum Axis Length, normalized by the Isovist

For each location the longest axis passing through is computed and normalized by the Isovist Axis.

The difference to computing the maximum-axis-only is, that it distinguishes a long axis from just a very long strechted but still compact space.

2D Local SpaceSyntax – Max Axis Length normalized by the Isovist

Maximum Axis Length, clamped and normalized by the Isovist

Same as above, but again with a clamped maximum length.

2D Local SpaceSyntax – Limited Max Axis Length normalized by the Isovist

Minimum Axis Length

Mimum Axis Length at each location. (Much less interesting than i expected it to be.)

2D Local SpaceSyntax – Min Axis Length

Maximum Distance

Maximum distance from a location to its surrounding space.

2D Local SpaceSyntax – Max Distance

Minimum Distance

Mimimum distance from a location to its surrounding space. This basically returns the classic signed distance field.

2D Local SpaceSyntax – Min Distance

 

 

TestCases

For developing and comparing I’ve integrated a couple more test-scenarious.  One of those is this simple 2D Layout and Isovist mapping.

2D Local SpaceSyntax – Isovist Area, T Space

 

 

It actually was a while ago and a result of a  conversation I had with Sam McElhinney since I started this 2D space syntax analysis to create these simple local evaluations.

Sam gives a nice overview of further more specialized spatial isovist measures here:

Spatial fields in Hypothetical Layouts

 

 

The next post will cover some aspects of 2D global measures.