Skip to content

Move PointLight to LTC#23400

Open
dylansechet wants to merge 8 commits intobevyengine:mainfrom
dylansechet:ltc_pointlight
Open

Move PointLight to LTC#23400
dylansechet wants to merge 8 commits intobevyengine:mainfrom
dylansechet:ltc_pointlight

Conversation

@dylansechet
Copy link
Copy Markdown
Contributor

@dylansechet dylansechet commented Mar 17, 2026

Objective

Move spherical area lights (PointLight with radius>0) to LTC.

This is a follow-up to #23288 and I'm working from that branch, only 7317542 is new.

Solution

I used the method described in this SIGGRAPH course ("Real-Time Line- and Disk-Light Shading" by Heitz and Hill). This PR is pretty much a direct translation of the reference GLSL implementation shared in the course.

This has the downside of breaking anisotropy for area lights, as we don't have the LTC lookup tables for it.

Testing

  • Ran many_lights
  • Compared to eevee/cycles, see showcase below

This PR seems to improve many_lights performance on my system (igpu), which makes no sense to me given the extra work it is doing. Could someone try to reproduce this ?

tracy

Showcase

Main
bevy_main_roughness=0 3

LTC
bevy_ltc_roughness=0 3

Cycles
cycles_roughness=0 3


grid

@dylansechet dylansechet changed the title LTC for PointLight Move PointLight to LTC Mar 17, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Your PR caused a change in the graphical output of an example or rendering test. This might be intentional, but it could also mean that something broke!
You can review it at https://pixel-eagle.com/project/B04F67C0-C054-4A6F-92EC-F599FEC2FD1D?filter=PR-23400

If it's expected, please add the M-Deliberate-Rendering-Change label.

If this change seems unrelated to your PR, you can consider updating your PR to target the latest main branch, either by rebasing or merging main into it.

@kfc35 kfc35 added A-Rendering Drawing game state to the screen S-Needs-Review Needs reviewer attention (from anyone!) to move forward labels Mar 17, 2026
@github-project-automation github-project-automation bot moved this to Needs SME Triage in Rendering Mar 17, 2026
@alice-i-cecile
Copy link
Copy Markdown
Member

This has the downside of breaking anisotropy for area lights, as we don't have the LTC lookup tables for it.

We should fix this before merging IMO.

@alice-i-cecile alice-i-cecile added C-Refinement Improves output quality, without fixing a clear bug or adding new functionality. D-Modest A "normal" level of difficulty; suitable for simple features or challenging fixes labels Mar 18, 2026
@tychedelia tychedelia requested review from JMS55 and atlv24 March 21, 2026 01:59
@holg
Copy link
Copy Markdown
Contributor

holg commented Mar 21, 2026

Great work and progress IMHO!
LTC area lights would let us replace some multi-light hack with a single area light per luminaire + a photometric profile texture for angular intensity modulation: physically correct and far fewer entities. (eulumdat_bevy)

Question about additional shapes: The current PR covers rectangular area lights. For real-world luminaire simulation,
disk/circular lights are equally important (most downlights and recessed ceiling fixtures have circular apertures),
and line/tube lights cover fluorescent and LED strip fixtures. Would contributions be welcome?
Dunno, to me it seems it would best be the more general approach in bevy_light needed for other

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Rendering Drawing game state to the screen C-Refinement Improves output quality, without fixing a clear bug or adding new functionality. D-Modest A "normal" level of difficulty; suitable for simple features or challenging fixes S-Needs-Review Needs reviewer attention (from anyone!) to move forward

Projects

Status: Needs SME Triage

Development

Successfully merging this pull request may close these issues.

4 participants