Public GitHub Release: Horticulture Lighting Simulator, powered by Radiance

Hi everyone,

I’m excited to share the public GitHub release of a project I’ve worked on for quite a while:

Horticulture Lighting Simulator

A Radiance-based horticultural lighting simulation and 3D visualization engine.

GitHub repo: GitHub - luminousphotonics/horticulture-lighting-simulator: Radiance-based horticultural lighting simulation and 3D visualization engine. · GitHub

tooltip-demo

Before describing the project, I want to say clearly that this work would not exist without Radiance. I’m deeply grateful to Greg Ward and to the Radiance community for creating and maintaining the tool that made this project possible. Radiance gave me a way to test a lighting system idea with a level of rigor that would not have been available to me otherwise.

The problem I’m trying to solve

A standardized horticultural lighting platform for plant science research does not yet exist.

I do not mean that there are no reporting guidelines, measurement practices, growth chambers, or high-quality research fixtures. Those all exist. I mean something more specific:

There is no broadly adopted, open, modular lighting architecture that can be scaled across any sized controlled environment room (CER) while achieving a near-flat PPFD (a.k.a. the light plants use for photosynthesis) plane.

This is an important problem to solve because controlled environment plant research depends heavily on environmental repeatability. Light is one of the most important experimental variables, but in many CERs, PPFD varies significantly across the canopy plane. Researchers often deal with this limitation through tray rotation, reduced usable area, culling perimeter plants, or simply accepting spatial light variation as part of the experiment.

My view is that this should not be treated as unavoidable.

If plant science research had a standardized lighting platform designed from first principles around spatial PPFD uniformity, it could remove one major source of experimental variance. It would not solve every reproducibility problem in controlled environment research, but it would address a foundational one: inconsistent photon distribution across the plant canopy.

Solving that has a myriad of downstream cascading benefits for plant science research. That is the purpose behind my lighting system.

What the simulator does

The project compares three horticultural lighting systems:

  1. A conventional 8-bar LED grow light

  2. A legacy 1000W high-pressure sodium grow light

  3. My proposed modular LED system

The public repository supports precomputed Radiance playback for all three systems for faster simulations.

It also supports live Radiance execution for the proposed LED/SMD system through either:

  • a cross-platform Docker-based Radiance runtime, or

  • a local Radiance installation on Linux/macOS

Conventional LED and HPS live modes are not included in the public repo because the private/licensed IES assets are not distributed. They remain available through precomputed playback.

The internal Python package is still named rad_rebuild, but the public project is now released as:

horticulture-lighting-simulator

Visual Overview

Why the proposed system is different

Most horticultural lighting layouts are based on repeated placements of one fixture type in a regular grid.

My proposed system uses multiple fixture types arranged through a modular algorithmic layout strategy based on the centered square number sequence, OEIS A001844:

https://oeis.org/A001844

The goal is to support an infinitely scalable lighting architecture that can adapt to any sized square and rectangular CER while maintaining a maximal degree of PPFD uniformity across the measurement plane.

That layout strategy is also what made the 3D visualization work so difficult.

For the conventional LED and HPS systems, mapping CAD assets to fixture positions is relatively straightforward. For my system, the viewer has to interpret layout-generated fixture groups, map those groups to the correct CAD assets, preserve coordinate relationships, and keep the simulated PPFD plane aligned with the visual scene.

I failed at this several times over the past two years. The current version finally connects the layout engine, Radiance artifacts, CAD assets, and browser-based 3D viewer in a way that feels coherent and inspectable, and I’m really excited to share it with you all.

3D visualization and PPFD mapping

The app includes a browser-based Three.js/WebGL 3D Assembly Viewer.

It supports:

  • orbit, pan, and zoom

  • fixture visibility toggles

  • visual fixture height offset control

  • high/medium/proxy GLB LOD assets

  • an interactive Viridis PPFD layer

  • raw PPFD hover values from the underlying grid data

After running a simulation, the user can open the 3D assembly view, toggle the PPFD layer, and move the cursor over the measurement plane to inspect the photosynthetic photon flux density at that point.

The tooltip reads from the underlying Float32/grid data rather than sampling texture colors.

Why Radiance matters for this project

Radiance is the reason this project can be more than a visual layout tool.

The long term purpose is to use Radiance to test whether this lighting architecture can produce a near-flat illumination plane across any room size and target PPFD intensities, and to compare it against more conventional lighting approaches.

In other words, Radiance is not just a backend dependency. It is the scientific engine that makes the core question testable.

That question is:

Can a modular, scalable horticultural lighting platform be engineered to provide maximally uniform incident PPFD across any controlled environment research space?

This public release is my first serious step toward making that work inspectable.

What I would value feedback on

I would be grateful for feedback from the Radiance community on:

  • Radiance workflow assumptions

  • geometry and photometric modeling choices

  • precomputed playback design

  • PPFD mapping into the 3D viewer

  • documentation clarity

  • anything that looks technically questionable or worth improving

This is not an official Radiance project, and it is not a commercial lighting design platform. It is a public engineering and research project built around a lighting system concept I have been developing for several years.

The proposed LED system is connected to U.S. Patent No. 10,687,478, “Optimized LED Lighting Array for Horticultural Applications,” and to a solo-authored manuscript currently under peer review in Lighting Research & Technology.

Thank you again to Greg Ward and to everyone who has contributed to Radiance over the years. This project exists because Radiance exists.

Hi Austin,

This looks amazing! Any chance you’ll be able to present this at the Radiance workshop this August in Seattle?

Cheers,
-Greg

Hi Greg,

Thank you so much, that means a lot coming from you! I’m thrilled that the project resonates.

Yes, I would be honored to present at the Radiance Workshop in Seattle this August. I’m happy to put together a talk and demo focused on the horticultural lighting simulator, the modular layout approach, the Radiance integration, and the 3D PPFD visualization.

Please let me know what format or length would work best, or if there’s anything specific you’d like me to emphasize. I’m also happy to submit a title and abstract if needed.

Thanks again for the kind invitation and for all your work on Radiance over the years. Really looking forward to it!

Best,
Austin

Hello Radiance community! I’m happy to announce that:

(1) I’ll be attending this year’s International Radiance Workshop and (2) the public GitHub release has just received a major new update!

Link to GitHub repo here:

And if you want to play with the simulator without cloning the repo, you can find it here:

plant-flux-demo-small

For a clean comparison across all three systems, I recommend setting the Target PPFD to 275 if you’re running the default 10’ x 10’ layout, as that’s roughly the maximum PPFD the 1000W HPS system reaches in that space. FSPM Target PPFD will auto-adjust to 275 as you adjust the Target PPFD for the lighting systems.

Target Tolerance can stay at 20; that just sets the target PPFD range for the functional-structural plant modeling (FSPM) canopy to PPFD ±20.

If you want to try a bigger layout, HPS reaches roughly 428 PPFD on a 20’x20’ layout.

New features in this update

Plant-resolved FSPM visualization

The simulator now includes a plant-resolved FSPM layer that lets users compare lighting system performance alongside leaf-level exposure.

This adds two related but separate views:

  1. Plant-location target coverage: answers whether the lighting system is delivering the target PPFD at plant/leaf XY locations.
  2. Raw leaf-surface flux: shows receiver-based incident PPFD on angled and partially occluded plant surfaces.

Those two views are intentionally different. A horizontal/canopy-reference PPFD map can meet the target while raw angled leaf surfaces receive lower incident flux. The goal is to make that difference visible instead of hiding it behind one averaged metric.

Mesh-patch front/back leaf receivers

Each plant leaf is now treated as receiver geometry. Leaves are subdivided into 16 mesh patches, with receiver samples taken on both the adaxial (top) and abaxial (bottom) sides of the leaf surface.

For the default 10x10 layout, this produces 24,576 mesh-patch receiver samples across 768 leaves. Those samples are then aggregated from:

receiver sample → leaf → plant → crop

That structure lets the simulator show raw plant-surface flux without reducing the canopy to one averaged PPFD value.

This supports:

  • top-surface exposure inspection
  • underside/reflected-light diagnostics
  • leaf-level PPFD visualization
  • raw plant-surface flux in the 3D viewer

The public app does not render images server-side. It uses controlled Radiance receiver passes offline, stores compact precomputed artifacts, and then plays those results back in the browser.

Rex diffuse-transmissive leaf material

The plant-inclusive FSPM transport uses a Rex lettuce optical-profile-weighted leaf material based on published Rex leaf optical properties from Kang and Zhen (2025).

The app uses digitized absorptance, transmittance, and reflectance curves, integrated into five transport bands:

  • blue: 400–499 nm
  • green: 500–599 nm
  • orange: 600–624 nm
  • red: 625–699 nm
  • far-red: 700–750 nm

For each band, the simulator derives optical-profile-weighted A/T/R coefficients:

A = absorptance

T = transmittance

R = reflectance

Those coefficients define the diffuse-transmissive Rex leaf material used in the plant-inclusive receiver scene. Baseline PPFD artifacts remain plant-free; the plant layer is used for receiver-based FSPM transport and plant-surface flux analysis.

Updated 3D Assembly Viewer

The Three.js viewer now supports plant-aware visualization modes in addition to the original PPFD floor/plane heatmap.

Users can inspect the lighting layout, fixtures, plant canopy, and plant-surface PPFD behavior in one browser-based scene.

Natural-fit plant layouts

Plant grids now fit naturally inside each selected room size. The layout logic keeps plants centered inside the illuminated footprint without clipping or distorting the leaf geometry.

Expanded public precomputed dataset

The public precomputed release has been rebuilt for the new FSPM features.

Current public coverage:

  • 10x10 through 20x20 ft rooms
  • unique rectangular room layouts
  • Proposed LED System
  • Conventional LED System
  • 1000W HPS System
  • Standard quality
  • mesh-patch plant receiver granularity
  • multispectral mode off / scalar PPFD workflow
  • plants enabled across all systems

The full v2 public precomputed dataset installs to about 310 MB total. The hosted web app already has it installed. Local repo clones can install the expanded bundles with the included download script.

What I’d love feedback on

I’m especially interested in feedback from the Radiance community on:

  • whether the receiver-pass approach is technically reasonable
  • how I’m explaining the difference between target coverage and raw leaf-surface flux
  • any feedback on the plant surface-flux visualization style and whether you feel it could be improved
  • anything in the repo structure, artifacts, or documentation that could be clearer

This project is still very much a work in progress, but the new release is the first version where the public simulator feels much closer to the original research direction: comparing horticultural lighting systems not just by fixture-level PPFD and uniformity, but also by how that light interacts with a modeled plant canopy.

Looking forward to meeting some of you at the workshop and getting feedback from people who know Radiance far better than I do.