Loading - please wait...

This page requires a reasonably modern HTML5 browser
with both Javascript and WebGL enabled.

If this message is not soon replaced by an interactive 3D model,
then it is likely that your browser does not support this web app.
Check your JavaScript Console for specific error messages.

Sun Azi/Alt Direct Beam Diffuse Horz. Sky Patches Visible Sky




Size of each contour band:

Percentage Grid Area Above Target: %

Displays a contour on each grid showing the area(s) with values at or above the target value. The calculated percentage of total area is shown above.

Store Displayed Grid Data

No calculated grid data available to store.

Compare Stored Grid Data

No stored grid data available to compare.


2D Projection Method


Path Lines

Sky Subdivision Type

Sky Subdivision Angle

Available angles will change depending on the sky subdivision type.

CIE Standard General Sky

Sky radiance can vary enormously so this scale will unlock whenever you select a different sky.


Plane Normal



Projection (Shortcut keys: 1 to 6)


When checked, a realistic sky is rendered and the current/dynamic sky distribution is used to simulate ambient light and shadow contrast.

Select this option to render the 3D WebGL canvas in high resolution, even on a low-res monitor.


Displayed Dimension Units

This affects only the display of dimensions within the interface, not their stored values.

Displays editable dimension lines along the edges of blocks when they are selected.



Grid Normal Orientation

When checked, values are calculated at the center of each grid cell. When unchecked, the grid is extended out so that cell values lie on the outer boundary.

When checked, incident radiation is multiplied by the cosine of the surface normal incidence angle. When not checked, each point is treated as an integrating sphere measuring flux from all directions.

When checked, any grid points entirely inside a solid block are ignored and not included in calculations.


2D Projection Method


Path Lines

Sky Subdivision Type

Sky Subdivision Angle

Available angles will change depending on the sky subdivision type.

CIE Standard General Sky

Sky radiance can vary enormously so this scale will unlock whenever you select a different sky.


Time Zone

Set the orientation of the model relative to True North. This does not affect model geometry in any way, only the rotation of the sky relative to it.



The aim of this app is to calculate and visualise incident solar radiation falling on surfaces or solar flux passing through spatial regions. This can be done for any instance in time or over any period of the year. This data can then be used to quantify solar radiation, sun exposure, shading, overshadowing, rights-to-light or even the visibility of points in the model. You can also do volumetric analysis and use that data to optimise forms or generate site-specific solar envelopes.

In addition to spatial information, you can also view the detailed shading mask and solar radiation at any point in the model. A shading mask is simply a map of which parts of the sky dome are visible from a particular point and which are obstructed by opaque objects in and around the site.

The other key aim was to see if I could implement dynamic sky radiance/luminance mapping for use with the shading. The degree of shading at any point is usually quantified by the percentage of the sky that is occluded. However, the luminous distribution over the sky dome is typically quite uneven and varies significantly over short time periods. With this app, you can experiment with a range of different sky conditions and quantify shading based on the percentage of actual sky radiance that is occluded.

Why a Simple Block Model

The use of a really simple block model is actually quite important here. This app is all about being able to quickly and easily set up a site condition and get some immediate analytical feedback. Moreover, it's about design and using highly dynamic calculations to gain some insight into the way results change when the model changes. This means being able to readily create detailed scenarios entirely from scratch and then experiment intuitively with different design options and analysis conditions. When used creatively, multiple merged blocks can pretty closely approximate the majority of built forms.

I will obviously support arbitrary CAD/BIM geometry with more complex shapes and forms in the future. However, with this app, I really wanted the focus to be on the dynamic relationship between the model and the results, without needing a site file to import or having to first learn a quirky new 3D drawing system before being able to actually do or see anything.

Interesting Features

The following are some of this app's interesting features:

  • Using simple axially-aligned blocks to make editing simpler and more intuitive, as well as being able gto optimise ray-tracing for close to real-time shading calculations,
  • Performing some simple real-time constructive solid geometry (CSG) to union multiple intersecting axially-aligned blocks into a single solid,
  • Dynamically updating both a WebGL shading mask within the 3D context of the model and a 2D SVG shading mask to show real-time shading and sky effects,
  • Updating more than a thousand or so individual SVG path elements to show a dynamic 2D sky distributions can be quite slow, so this version actually renders the shading and dynamic sky distribution to a WebGL canvas beneath the 2D SVG Sun-path diagram, which is significantly faster,
  • Overlaying sky radiant distributions of the CIE Standard General Sky types that update dynamically whenever the date, time or location changes,
  • Being able to select different sky subdivision methods and subdivision angles to directly compare how accurate the sky segmentation really needs to be, and
  • The ability to display both shading and sprayed rays in a colour that reflects the obstructing object.

© Dr. Andrew J. Marsh, 2020.

View Manipulation

You can interactively adjust the 3D view of the model using a mouse, pen or stylus, or by touch on a tablet or phone. You can also use the items in the 3D View Settings popup.

Drag with the left/right button or a single finger,
or use the arrow keys.
Drag with the middle button or two/three fingers,
or use the A and D keys.
Use the scroll wheel or pinch with two fingers,
or use the W and S keys.

NOTE: You can use the Shift and Ctrl/Meta keys to adjust the increment of each scroll event or key press.

Keyboard Modifiers

The Shift and Ctrl/Meta keys are used pretty extensively to modify interactive data entry. This applies to all increment buttons, scroll wheel motion, slider controls and input elements.

Shift Key:
Increases input to larger values, usually by ten times or significantly larger increments such as 1 month for dates and 1 hour for times.
Ctrl or Meta Key:
Decreases input to smaller values, usually by one tenth or the smallest reasonable increment such as 1 day for dates or 1 minute for times.

NOTE: You can use the scroll wheel to edit a data value when hovering over any slider, numeric input or even table rows that indicate their editibility.


This page uses the following frameworks/components:

Bootstrap  v3.3.2
Copyright © 2011-2015 Twitter, Inc. - github.com/twbs,
http://getbootstrap.com/   (LICENSE)

Bootstrap-popover-x  v1.4.0
Copyright © 2014, Kartik Visweswaran, Krajee.com,
https://github.com/kartik-v/bootstrap-popover-x   (LICENSE)

Copyright © 2010-2015, Michael Bostock
http://d3js.org   (LICENSE)

jQuery  v1.11.2
Copyright © jQuery Foundation and other contributors,
https://jquery.com/   (LICENSE)

JSON Editor
Copyright © 2015 Jos de Jong - github.com/josdejong
https://github.com/josdejong/jsoneditor/   (LICENSE)

Copyright © 2011 Bruno Jouhier - github.com/Sage
https://github.com/Sage/jsurl/   (LICENSE)

KnockoutJS  v3.2.0
Copyright © Steven Sanderson and the Knockout.js team,
http://knockoutjs.com/   (LICENSE)

Knockstrap  v1.2.0
Copyright © 2013 Artem Stepanyuk - github.com/faulknercs,
http://faulknercs.github.io/Knockstrap/   (LICENSE)

Copyright © 2011 by Evan Wallace - https://github.com/evanw
https://github.com/evanw/lightgl.js/   (LICENSE)

Copyright © 2015, Ronny Lorenz. - github.com/RaumZeit
https://github.com/RaumZeit/MarchingSquares.js   (LICENSE)

Leaflet Maps API  v1.4.0
Copyright © Cloudmade, Vladimir Agafonkin - github.com/Leaflet,
https://leafletjs.com/   (LICENSE)

OpenStreetMap Map Data
Copyright © OpenStreetMap contributors - openstreetmap.org,
https://www.openstreetmap.org/about   (LICENSE)

Copyright © 2014 Federico Zivolo - github.com/FezVrasta
http://fezvrasta.github.io/snackbarjs/   (LICENSE)