# View analysis

Undertaking a view analysis can be a very powerful design tool. Sometimes we want to maximise visibility, say from a balcony to a point of interest, while other times we want to minimise the visual impact, say adjacent to heritage listed buildings. Below are a few options available to Grasshopper users to undertake a view analysis:

### Simple 2D – Isovist

One of the simplest methodologies for undertaking a view analysis is to use an isovist. An isovist is the volume of space visible from a given point in space. Isovists are naturally three-dimensional, but they may also be studied in two-dimensions. Grasshopper has a native isovist component which generates 2-dimensional isovists. Ladybug also has a ‘view rose’, however I have found this to be less robust. This methodology is best utilised for simple scenarios where 2D resolution is sufficient. For example:

- Urban planning;
- Shopfront visibility in a retail mall;
- Patient visibility from a hospital’s nurse station;
- Etc.

In this scenario, the ‘fitness’ of the solution can be considered the area of the isovist. The larger the area, the greater the visibility.

### Simple 3D – Isovist

To get a more spatial understanding of a view, we can use a 3D isovist. The script below is based on Andrew Heumann’s script, which can be downloaded here. Essentially want we want to do is to create a semi-sphere which will be our ‘sky dome’. We then need to subtract any objects which will block the views, that is, the context. It is then just a matter of a simple mesh ray to generate the isovist. In this scenario, the ‘fitness’ of the solution can be considered the volume of the isovist. The larger the volume, the greater the visibility.

### Advanced – Ladybug view analysis

If you want to evaluate views from a surface, say from a façade, Ladybug’s ‘View Analysis’ component is ideal. The component will allow you to run the analysis using either view type or points. A view type is an integer representing the type of pre-generated view analysis that you would like to conduct:

- 0 = Horizontal Radial. The percentage of the 360 horizontal view band visible from each test point. Use this to study horizontal views from interior spaces to the outdoors.
- 1 = Horizontal 60 degree cone of vision. The percentage of the 360 horizontal view band bounded on top and bottom by a 30 degree offset from the horizontal (derived from the human cone of vision). Use this to study views from interior spaces to the outdoors. Note that this will discount the ‘_geometry’ from the calculation and only look at ‘_context’ that blocks the scene.
- 2 = Spherical. The percentage of the sphere surrounding each of the test points that is not blocked by context geometry. Note that this will discount the ‘_geometry’ from the calculation and only look at ‘_context’ that blocks the scene.
- 3 = Skyview. The percentage of the sky that is visible from the ‘input _geometry’.

Alternatively, you may have specific points that you want to test the visibility of. This may be points of interest, such as an iconic building, park or sea views. The example below is using 3 points of equal weighting. If the points require different weighting, that is, if some views are more important than others, then simply enter in relative value into the optional ‘viewPtsWeight’ input. Ladybug will produce a colour coded mesh based on the number of points visible from each test point. To allow for an accurate comparison between options, it is important that a legend parameter node is connected with a low and high bound input. This will ensure that the legend will remain consistent from option to option. Without enabling this, Ladybug will automatically adjust the min/max bounds which will make comparing options difficult.

Hi, I’m a student of engeineering and architecture from Perugia, Italy. First of all I apologize for my poor english. I’m a beginner user of grasshopper and I’m trying to make a visiblity analysis for my thesis. To get into the details I wanted to replicate the analysis I saw in this video

(Dynamic Viewshed) . Do you think is possible? And which option, instrument or plugin I can use in your opinion?

Hi Federico. If you just want to animate it, I suggest you draw a path (spline) and the use the point on curve component to define the current point. Then simply animate the slider. You can then combine this with the methodologies above.

If you want exactly as in the video which looks as though it has a view cone (90 deg horizontal, 45 deg vertical), then it is just a matter of modifying the 3d isovist script to be a cone, rather than a hemi-sphere.

Hi Paul, I have tried to replicate the definition “Simple 3D Isovist” but I can’t obtain the same result you got. In particular, at the end of the process, I obtain a planar mesh on the XY plane and not a trimmed sphere. Where can I download the definition you showed in the article?

Hi Fedrico. I’ve uploaded the files. You can find the link to a *zip file with all three examples at the end of the post. Let me know if you are still having problems.

Hi Paul, thank you so much for the files. I’m still having some troubles. Eye pt and Center pt are the same point? I set eye pt and center pt as the same point and then I set the context breps but I still obtain a planar mesh. Another question, if the semi-sphere is bigger than the area containing all the context breps it will still be cutted?

https://we.tl/NPsDKKyIpQ

Here is what I get.

Hi Frederico. The eye point is the same as the centre point (although you may want to move it up 1600mm to be more accurate). Are you working in mm or meters? You may need to modify the resolution/radius/etc of the mesh sphere. Yes as you can see from the image, if the semi-sphere is bigger it will still be subtracted.

Hi Paul. Amazing work on these definitions. I was wondering, do you think it is possible to isolate only the rays that stay semi-infinite? Thus visualizing only the extent of sky seen at one given point?

Hi. Thanks for your feedback. Which analysis method are you referring to? For the isovist analysis, you would just need to filter out the rays based on a conditional statement so that you only returned the ones that matched the same radius parameter (that is, infinite rays). If you just want so see which parts of the sky you can see than there is a Ladybug component that does that called ‘Ladybug_Shading mask’. But that is a different tutorial all together.