Key takeaways
- A site model is geometry: positions, heights, roof pitch and azimuth. Shade follows from the sun’s position, so the model’s errors become shade errors.
- On 21 December, one 35 ft tree shades 14.5% of our invented example array’s area on average.
- On level ground a shadow is height divided by the tangent of the sun’s elevation. Our 35 ft tree casts about 59 ft at midday on 21 December in Raleigh.
- In our test scene, a 1 m height error moves winter array shade by 2.4 to 4.7 points. A 5 degree pitch error moves it by less than 1 point.
- Models are snapshots. Aurora’s help gives a case where the LIDAR was collected before a tree was removed. Aurora says its LIDAR shading excludes obstructions on the roof surface, so you add them.
To build the model in software, start with the best 3D solar design software list.
3D solar modelling at a glance
A site model turns a site into objects with sizes and positions. All reported shade is calculated from them.
| Item | Detail |
|---|---|
| Core formula | Shadow length on level ground = height ÷ tan(sun elevation). Module shade = share of sample points whose ray to the sun hits an object. |
| Output and range | Percent of module area in shade at each time step. Our example: 14.5% on 21 December and 0.3% on 21 June (hourly means). |
| Where it matters | Module placement, shade reports, production estimates, remote design without a roof visit. |
| Standard or rule | No single standard for model accuracy. Each tool and each data source sets its own. |
| In software | Roof design tools build the model. Simulation tools such as PVsyst take a 3D scene for near shading. |
Why 3D solar modelling matters for installers
It decides where modules go and how much shade the proposal admits. A tree or chimney missing from the model means a yield promise the roof cannot keep.
The model is the geometry. Shading analysis is the sun calculation run on it. A shade report or TSRF check inherits every error in the model.
What does a 3D site model hold?
A site model holds four kinds of object. Each has a position and a height: roof planes, rooftop obstructions, trees and neighbours, and terrain.
- Roof planes: Google’s Solar API describes each roof segment by pitch, azimuth and plane height at its centre.
- Obstructions: OpenSolar says tall objects such as chimneys cast a real shade cone, and low vents have little effect. Aurora says its LIDAR shading excludes obstructions on the roof surface, so you add them. See keep-out zones.
- Trees and neighbours: Aurora’s LIDAR shading counts them from elevation data. Trees you add supplement the LIDAR shading, so check what the LIDAR already shows first.
- Terrain and far hills: ground mounts need terrain modelling. Distant ridges are usually a horizon profile, not model geometry.
Where does the 3D model come from?
Company documents describe five routes. Each has its own limit.
- Aerial or satellite surface. Google Solar API returns a digital surface model, RGB, flux and hourly shade layers. HIGH is 0.1 m low-altitude aerial. MEDIUM is high-altitude aerial. LOW and BASE are 0.25 m satellite. Limit: the imagery date is returned and called approximate.
- Imagery plus LiDAR. Aurora’s help article says its AI builds the roof model from HD imagery and LIDAR in under 15 seconds (company claim, October 2026). See LiDAR. Limit: needs both at the address. Otherwise use expert design or draw it.
- Drone photogrammetry. Scanifly names a drone mesh, Google 3D and LiDAR as scene layers. See drone site survey. Limit: the company pages state no accuracy figure.
- Drawn over imagery. Easy-PV: drag buildings onto the map, then set heights and pitches. HelioScope: adjust a keepout’s height until its shadow matches the one in the image. Limit: needs the image’s date and time, and HelioScope gives no tolerance.
- 3D file import. PVsyst near shading needs a detailed 3D scene. Arka 360’s export guide shows PVsyst importing 3ds, DAE and PVC files. Scanifly lets you add your own 3D models. Limit: format lists come from a partner’s help, not PVsyst’s page.
How does a 3D model turn into shade on each module?
The software finds the sun’s direction, then traces a ray from each module back to the sun. If the ray hits an object, that point is in shade.
- Get the sun’s elevation and azimuth for each time step. We used pvlib’s default method, an implementation of NLR (formerly NREL)’s SPA.
- Turn each pair into a sun direction vector in the model’s coordinates.
- Place sample points across every module. We used 36 per module.
- Trace a ray from each point towards the sun and test it against every object.
- Module shade is the share of points that hit. Array shade is the average over modules.
On level ground, a shadow’s length is height ÷ tan(elevation). On a roof rising away from the sun, divide by tan(elevation) + tan(pitch). A module facing away from the sun gets no direct light, so shade is not counted then.
Shadow length calculator
Enter a height and a sun elevation to get a shadow length. Switch modes to turn a shadow measured in imagery into a height. It refuses an elevation below 0.5 degrees and warns below 5.
Worked example: a tree and a chimney on one roof
We built one example scene and traced the sun through two days. The tree puts 14.5% of the array in shade on 21 December. The chimney shades almost none on 21 June.
| Item | Value |
|---|---|
| Site and sun | Raleigh, NC (35.78 N, 78.64 W). pvlib 0.16.1, geometric elevation, hourly clock time (EST in December, EDT in June). |
| House and roof | 40 ft by 28 ft, gable ridge east to west, eave 10 ft, ridge 17 ft. South face 6:12 (26.6 degrees), 15.65 ft up the slope. |
| Array | 18 portrait modules, 3.7 ft by 5.65 ft, in 9 columns and 2 rows on the south face. Setbacks not applied. |
| Chimney | 2 ft by 2 ft on the ridge, top at 21 ft. |
| Tree | Opaque solid cylinder: crown radius 8 ft, 8 to 35 ft high, centred 32 ft south and 10 ft east of the house’s south-west corner. |
| Method | 36 sample points per module, beam light only, front-lit hours only. |
Figure 1. On 21 December the tree’s shade on the array peaks at 42.4% at 14:00 (37.5% at 13:00). On 21 June it shades none, because the sun’s path decides where its shadow lands.
Shade starts late morning, peaks mid-afternoon and fades as the sun moves west.
| Time (EST), 21 Dec | Sun elevation / azimuth (deg) | Tree-top shadow on level ground (ft) | Array in shade | Modules touched (of 18) |
|---|---|---|---|---|
| 08:00 | 5.9 / 125 | 339 | 0.0% | 0 |
| 09:00 | 15.3 / 135 | 128 | 0.0% | 0 |
| 10:00 | 23.0 / 147 | 82 | 0.0% | 0 |
| 11:00 | 28.3 / 161 | 65 | 8.6% | 3 |
| 12:00 | 30.7 / 177 | 59 | 32.1% | 8 |
| 13:00 | 29.7 / 192 | 61 | 37.5% | 10 |
| 14:00 | 25.6 / 207 | 73 | 42.4% | 9 |
| 15:00 | 18.8 / 220 | 103 | 10.0% | 3 |
| 16:00 | 10.1 / 231 | 196 | 0.0% | 0 |
- A long shadow is not shade. At 08:00 the shadow is 339 ft long but points north-west, away from the roof. Array shade is 0%.
- Direction decides. Shade shows from 11:00, peaks at 42.4% at 14:00 and ends by 16:00. At 13:00, the model output shows 10 modules touched and 3 fully shaded.
- Summer is nearly clear. The hourly mean is 0.3%. In the 15-minute model run, the chimney shades 3.5% of the array at 08:00 and 16.5% at 07:15, when the low east-north-east sun first reaches the roof.
- Time step matters. The December mean is 14.5% on the hour and 13.6% with 15-minute steps. June moves from 0.3% to 0.9%.
Limits: area, not energy. Beam light only. An opaque crown. One example site. Using 144 sample points per module gave the same 14.5%. A separate shadow-polygon test matched the ray casting for the tree on five hours. For the energy side, see mismatch loss.
What do model errors cost?
Height and position errors move shade most. In our scene, a 1 m error in height or distance changes winter array shade by 2.4 to 4.7 points. A 5 degree pitch error changes it by under 1.
A Google research paper on satellite-derived models reports about 1 m mean absolute building height error. It also reports about 5 degrees roof pitch error. That is for its research model and test set, scored against aerial-derived labels. It is not for any product. We used those sizes only as test errors.
| Change to the model | Array in shade, 21 Dec (hourly mean) | Change (points) | 21 Jun |
|---|---|---|---|
| Base case | 14.5% | 0.0 | 0.3% |
| Tree top modelled 1 m (3.3 ft) taller | 16.9% | +2.4 | 0.3% |
| Tree top modelled 1 m shorter | 9.8% | -4.7 | 0.3% |
| Roof modelled 1 m higher | 9.8% | -4.7 | 0.3% |
| Roof modelled 1 m lower | 16.9% | +2.4 | 0.3% |
Position matters as much as height. The next table adds position, pitch and leaf cover.
| Change to the model | Array in shade, 21 Dec (hourly mean) | Change (points) | 21 Jun |
|---|---|---|---|
| Tree modelled 1 m closer to the house | 18.3% | +3.8 | 0.3% |
| Tree modelled 1 m further away | 10.5% | -4.0 | 0.3% |
| Roof pitch modelled 5 degrees steeper | 13.8% | -0.7 | 0.3% |
| Roof pitch modelled 5 degrees shallower | 15.1% | +0.6 | 1.7% |
| Crown modelled as passing half the beam | 7.3% | -7.3 | 0.3% |
- Relative height is what counts. A roof modelled 1 m too high gives the same 9.8% as a tree modelled 1 m too short.
- Pitch matters little in winter. A shallower roof also faces the early summer sun, which the chimney blocks, so June rises to 1.7%.
- Trees are not solid. A 1983 preliminary study of six deciduous trees reported about 90% of light blocked in full leaf. For the one tree it details, bare winter branches blocked 40% to 50%. A crown that passes half the beam halves our winter figure, by simple scaling.
How solar software handles 3D solar modelling
Only Aurora documents an AI-built model from imagery plus LIDAR. OpenSolar and Easy-PV are manual, and PVsyst imports a scene built elsewhere.
| Software | Builds or imports a 3D site model? | Method |
|---|---|---|
| Aurora Solar | Yes | AI from imagery plus LIDAR (add-on), expert drawn (add-on), or manual |
| OpenSolar | Yes | Manual design |
| Easy-PV | Yes | Manual on a satellite map |
| HelioScope | Partly | LiDAR view (Pro and Enterprise) and shade-matched heights |
| Scanifly | Partly | Drone, Google 3D or LiDAR layers |
| PVsyst | Partly | Imported 3D scene |
Partly: the company pages cover only some of the job. What each company documents:
- Aurora Solar. Site model holds roof geometry, obstructions and surrounding structures. Rooftop obstructions drawn by hand. (Aurora help centre, Oct 2026)
- OpenSolar. Obstructions with set width, depth and height. Tall objects cast a shade cone. (OpenSolar support, Oct 2026)
- Easy-PV. Buildings and obstructions dragged on, heights and pitches set, shading calculated. (Easy-PV help, Oct 2026)
- HelioScope. LiDAR from two sources fits obstruction heights. The company pages do not describe a 3D model or file import. (HelioScope help centre, Oct 2026)
- Scanifly. Update post names the layers. Help adds a tree library and your own 3D models. Formats not stated. (Scanifly post and help, Oct 2026)
- PVsyst. Near shading needs a detailed 3D scene. Import formats come from a partner’s help. (PVsyst help, Arka 360 help, Oct 2026)
For tools that also handle layout, proposals and sales, see the best solar design software list.
Common mistakes with 3D solar modelling
FAQs
What is the difference between 3D solar modelling and shading analysis?
The model is the scene: roof, obstructions and trees with sizes and positions. Shading analysis runs the sun across that scene and reports solar access. The same model also drives panel layout.
How accurate is a 3D solar model?
In this example’s scene, a 1 m height error moved winter array shade by 2.4 to 4.7 points, and a 5 degree pitch error by under 1. Google’s research paper reports about 1 m height error and 5 degrees of roof pitch error for its satellite model on its test set. Few companies publish figures for their own models, and Aurora’s help gives none for its AI model.
Do I need LiDAR or a drone to build one?
No. Easy-PV and OpenSolar let you draw the scene over imagery. Aurora’s AI model needs both HD imagery and LIDAR at the address. Otherwise it points you to expert or manual design.
How long is a shadow?
On level ground, height divided by the tangent of the sun’s elevation. A 35 ft tree at 30.7 degrees casts about 59 ft. Use the calculator above for roofs and slopes.
Related terms
- Shading analysis: the sun calculation run on the model.
- Solar panel layout: where modules sit on the modelled roof.
- LiDAR: laser elevation data used to build or check a model.
- Drone site survey: photos turned into a 3D mesh.
- Keep-out zone: an obstruction area where modules cannot go.
- Terrain modelling: ground shape for mounted arrays.
- SketchUp solar plug-in: an add-on that adds PV tools to SketchUp.
Next step: check that a tool lets you set tree and roof heights, then compare the best 3D solar design software.
Sources
All sources checked October 2026.
- Data and accuracy. Google Solar API, data layers and API reference. Satellite Sunroof, arXiv 2408.14400. Youngberg (1983), Arboriculture and Urban Forestry 9(11).
- Company documentation. Aurora, creating a 3D site model. Aurora, LIDAR shading. HelioScope, LIDAR. HelioScope, shade-based height. OpenSolar, obstructions. Easy-PV, 3D design mode. PVsyst, shadings. Arka 360, PVsyst 3D scene import. Scanifly update post and import models.
- Method. pvlib, get_solarposition.
Last updated 30 October 2026. Next scheduled review: 30 January 2027.