LEED Daylight Option I is now publicly available on Pollination!

Hello :pollination: community!

We are glad to announce that the LEED daylight recipe and app for LEED Option I are now available on Pollination. You can use the recipe to run the studies, and the app to visualize and explore the results of the study.

Unlike all the other available solutions in the market, you can review every step of the process on GitHub.

LEED Daylight Option I


Users who are familiar with the annual-daylight recipe will notice that leed-daylight-option-one is very similar. This is due to the fact that both recipes use the two-phase-daylight-coefficient as the foundation for simulating annual daylight and generating a results folder. In fact, there are only two critical differences:

Aperture groups | Modeling

For an accurate LEED daylight option I simulation, it is required that the model include aperture groups. A dynamic_group_identifier property must be set on all Honeybee Apertures. An aperture group is made up of apertures that have the same dynamic group identifier. All the apertures in an aperture group should be connected to the same room/sensor grid. Adding states is not required.

Grouping the apertures can be a tedious task, especially for large models. For this reason, there is an automated option for aperture grouping, however, this is currently only exposed in the Ladybug Tools Grasshopper plugin. We are working on making this available in the CAD plugins as well. See below for a tutorial video on how to prepare your models.

Shade transmittance | Recipe input

The shade transmittance, which is a multiplier value used in place of solar shading, accounts for the dynamic shading schedule for each aperture group. Shade transmittance is a value greater than 0 but less than 1. A shade transmittance value is assigned to each aperture group. When the dynamic schedule is calculated, the aperture group has two states: unshaded and shaded (with the shade transmittance value). The multiplier value will be applied to the hourly illuminance values whenever the dynamic schedule calls for the shaded state. The shade transmittance recipe inputs are either a single float value that will be used for all aperture groups or a JSON file of a dictionary where each key and value pair is the aperture group identifier and shade transmittance, respectively.

Below is an example of a valid shade transmittance JSON file.

	"Room1_North": 0.05, 
	"Room1_South": 0.02,
	"Room2_North1": 0.05,
	"Room2_North2": 0.05,
	"Room1_Skylight": 0.02,
	"Room2_Skylight": 0.02

2% rule | Dynamic schedules

The 2% rule is used to compute the dynamic schedule. There is a check for each hour of the analysis period to see if 2% or more of the sensor points or floor area receive 1000 direct illuminance. If the total of all unshaded aperture groups in a room yields less than 2% for a given hour, the unshaded states will be used to calculate sDA. If the percentage is greater, it will check all combinations of shaded aperture groups and choose the combination that returns the highest percentage of less than 2%, i.e. the least shaded combination.

Spatial Daylight Autonomy (sDA)

The sDA is calculated by employing dynamic schedules of shade transmittances that have been found to adhere to the 2% rule. The number of hours where a sensor point receives 300 lux (target illuminance) or more is added together and compared to the total occupied hours, which is 3650 for the standard 8 am to 6 pm occupancy schedule. Each sensor point must achieve the desired illuminance for 50% of the occupied hours, or 1825 hours. The final sDA value is the percentage of sensor points that meet the target illuminance at least 50% of the time.

Annual Sunlight Exposure (ASE)

The calculation of ASE is performed independently of sDA and is based on the direct sunlight calculation. The ASE is calculated using the unshaded state of the aperture groups. The number of hours where a sensor point receives >1000 direct illuminance is summed. If this is no more than 250 occupied hours the sensor point is said to pass ASE. The final ASE value is the percentage of sensor points that receive >1000 direct illuminance for no more than 250 occupied hours.

LEED Opt 1 Recipe Overview

LEED Opt 1 Add Aperture Groups and Shading Schedules


The app takes the output of a leed-daylight-option-one study and presents the results in several tabs:

  • Summary report: A summary report that provides an overview of all sensor grids combined, including the LEED points awarded. It also presents ASE and sDA for each sensor grid in a table.
  • States schedule: Visualize the dynamic shading schedules for each aperture group. The schedules are calculated based on the 2% rule.
  • Direct Illuminance: For each sensor grid, visualize the percentage of floor area where the direct illuminance is greater than 1000 lux.
  • Visualization: A 3D visualization of Daylight Autonomy (with shading) and the number of hours with direct illuminance greater than 1000 lux.

LEED Opt 1 Daylight Simulation and Visualization using Pollination Apps


  • As of now it is not possible to export a PDF report of the results.
  • See this post for LEED Option II.

We are looking forward to hearing your feedback on these recipes which will help us to prioritize the next steps of the development.


This looks awesome @mikkel - looking forward to trying it out!

1 Like

Hi @mikkel, please would you be able to share the model/script from the LEED Opt 1 Add Aperture Groups and Shading Schedules video?


For reference, I’m attempting to set up a similar box model for testing. This is the script I’m working on
HB Daylight - Aperture Group Sample.gh (45.5 KB)

Currently hitting this error:

Test running in the python script editor this is the error:

Runtime error (RuntimeException): None zero return code: 1

  line 99, in run_command, "C:\Program Files\ladybug_tools\python\Lib\site-packages\honeybee_radiance_command\_command_util.py"
  line 188, in run, "C:\Program Files\ladybug_tools\python\Lib\site-packages\honeybee_radiance_command\_command.py"
  line 860, in _aperture_view_factor, "C:\Program Files\ladybug_tools\python\Lib\site-packages\honeybee_radiance\cli\multiphase.py"
  line 155, in script

Hi @charliebrooker,

There was a bug in the 1.6.1 version of the component when using the view factor method. If you update with LB Versioner you should get the 1.6.2 version (which works for your sample).

Here is the model from the video in case you still need it:


Hey @mikkel, @mostapha, @chriswmackey,

Please could you push a new Pollination Grasshopper Installer that includes the 1.6.2 HB Automatic Aperture Group component?

Keen to get the installer added to our IT distributed software.


Hi @mikkel, thanks for looking into this.

I’m just trying again with the 1.6.2 component but I’m still hitting the same issue with my test script. Any idea what might be causing the issue?

Thanks, Charlie

Here’s the script with the 1.6.2 component in.
HB Daylight - Aperture Group Sample 1_6_2 ver.gh (45.4 KB)


Hi @charliebrooker,

Can you check if this solves your issue? It might take 30-60 minutes before you will get the new version of honeybee-radiance with LB Versioner. If you want to test it immediately you can copy the attached file to C:\Program Files\ladybug_tools\python\Lib\site-packages\honeybee_radiance\cli and overwrite the existing file.
multiphase.py (48.4 KB)


Perfect, all seems to be working well my side

Thanks again @mikkel!


Hi @mikkel and Pollination community,

I’m modelling an office block, and with an external glazing LT of 0.6 I’m getting this output.

Lowering the LT to 0.47, the note on line 4 is removed.


I assume that even with blinds down there are times of year when the LT 0.6 simulation results in too large an area of the room being above 1000 lux.

Do you happen to know if this is a common result for sDA ASE analysis? I assume that the typical solution is to use a lower LT blind, or is there something else I’ve missed?

Side note - I appreciate with the internal rooms in this model and some larger floor depths that achieving any credits may not be possible no matter the combination of glass and blind LT.

Many thanks,

Hi @charliebrooker,

I think it looks reasonable but it is difficult to tell without knowing the model. Those internal rooms are really not in your favour.

It is not always easy to find the right balance. The goal here is to reduce the number of hours where the shading is applied since this will increase the sDA – while still complying with the hourly 2% rule. Here are some of the things that I experienced when working on the recipe.

  1. Decrease the LT of the glazing.
  2. Decrease the shade_transmittance.
  3. Add exterior shading. This is really counterintuitive since adding shading surely will decrease the amount of daylight. While that is true for a static model, exterior shading can help reduce the number of hours where shading is applied, which in return can increase the sDA.
  4. Subdivide the aperture groups, e.g., two groups of four apertures instead of one group of eight apertures. The difference is that in the latter case, everything is shaded when the 2% rule says so, but in the former case maybe one shaded group is enough, while the other is unshaded.

How are the apertures grouped? Do you have one group per room (and two groups in the corner rooms)?

What Radiance parameters did you use?

Hi @mikkel,

Thanks for the response and your advice.

Another key piece of information is the north is roughly at 90deg CW (north arrow pointing right) and the location is London.

The thought behind this was a bit rushed, the model is set up with each room having a single aperture group.

I’ll definitely adjust the set up so that at least for the corner rooms have a minimum of two groups, one per orientation. I can see how multiple groups per orientation could also be a benefit, particularly when the sun is around SE/SW (there are some vertical fins to somewhat benefit).

Radiance parameters wise both simulations were performed on low settings except -ab 5, I’m intending to test at higher settings next week.

I’m still very curious about the times when over 2% of the room area is above 1000 lux. Going purely on anecdotal good practice daylight design I would have expected I should be pushing for an LT of 0.6-0.7. I would have also thought that a 0.05 LT for a blind would be a good balance of transmittance and glare reduction. In IES LM 83 23 the default blind has a 5% transmittance that is fully diffuse (no specular transmission). Is this how the recipe treats the blinds?

Another thing I can think of that should be improved in our model is the lack of border shades / reveals, which I hope will help to limit the direct illuminance to the sensors.

Thanks again!

I believe there is an output for that. You can also use the LEED Daylight Option I app to identify those hours for each room.

Hi @charliebrooker,

I think that -ab 5 is good enough to show what is possible to achieve with the model. I asked because the default parameters are likely not good enough to increase the daylight autonomy values to a point where you can achieve an sDA value that rewards credits. However, increasing the parameters (-ab) will not influence the direct results, so you can run a faster -ab 1 simulation just to get some quicker feedback on the 2% rule / ASE.

This is not how is it set up in the recipe. The “blinds” are not diffuse since there is no concept of real blinds in the recipe. The shade_transmittance value that you can change is basically multiplied by the illuminance values of the default state. This is also why the users do not have to set up any states for the aperture groups.

If this proves to be a general problem, the approach can be changed. That would require the addition and simulation of another state used for shading. The base recipe, two-phase-daylight-coefficient, is set up to do this. I imagine another approach could be to keep the shade_transmittance input, and then the recipe will modify the model and add the shading state using a generic fully diffuse blind modifier based on the input.

1 Like

Thanks @mikkel - please correct me if I’m wrong (very much aware I’m a beginner when it comes to Radiance), but would modelling the blinds as diffuse help with the “problem” of the ASE 2% hourly limit being exceeded?

I need to learn more Radiance so I can understand what I should be doing to test these kinds of ideas myself.

Happy to privately share the model if it’s of any use/interest to you.

Hi @charliebrooker,

Not necessarily. It would be something that I would have to test first.

I will be happy to look at the model.