This is a quick extension to the previous post. The isovists are computed in realtime by sampling a huge mount of directions in parallel at each location (=each pixel).

To progressively compute the isovist area and other local measures, only the current sampling point for each pixel is required and kept in memory. However, to display the complete isovist geometry (e.g. as GL_TRIANGLE_FAN) the sampling points can optionally be stored in a 3d Texture (GL_TEXTURE_3D).


In this example, the number of layers then sets the amount of sampling points for each isovist at each pixel. This is only limited by the the graphics memory in the end and has basically zero impact to performance.

So in my demo, a 3d-Texture width dimensions

w = 1036, h = 690,  d = 256 ... 698 MB

is easily enough to get a good resolution with 512 sampling points per isovist per pixel – in realtime …. as mentioned before, this is only for displaying the isovists polygons, the other local measures have no upper limit.


I’ll probably add this change to my 3D Space Syntax app too since the process is basically the same. The 3D isovist geometry is a volumetric mesh then, which adds another level of complexity in terms of vertex connectivity and memory management, etc… .