For spherical area lights, use an OmniLight3D or SpotLight3D and increase the light’s Size to a value above 0 (not to be confused with the Range property). This will also make shadows blurrier when far away from the surface receiving the shadow, which simulates real world penumbra.
For other light shapes, the easiest way to recreate area lights in Godot is to use global illumination of any kind. Emissive materials (materials with an emissive texture defined) will affect their surroundings when some kind of global illumination technique is in place.
If you want an area light that has no corresponding emissive material to be visible, you have 3 options:
Create a Meshinstance3D + BoxMesh with an emissive material, bake VoxelGI and hide the MeshInstance3D node after baking. The emissive lighting from the material will remain visible. This approach can’t be used with SDFGI, as baking happens in real-time with that method.
Create a MeshInstance3D + BoxMesh with an emissive material, enable Add UV2 in the BoxMesh’s properties, bake LightmapGI and hide the MeshInstance3D node after baking. The emissive lighting from the material will also remain visible in this case.
Use a Decal node with a GradientTexture2D in its Emission slot. This won’t look ideal as the lighting is purely additive, which doesn’t mimic real lighting, but it can work in a pinch. This method is also fully real-time.
Edit (January 2026): Area lights are being worked on in this pull request:
master ← CookieBadger:area-light-integration
opened 08:16PM - 02 Jul 25 UTC
This PR adds a rectangular area light source, implemented via Linearly Transform… ed Cosines (LTC) with textures. It makes use of a Lookup-Table added in the form of two .dds files, and adds some fields to the `LightData` struct in the light storage, and adds a new atlas for area light textures.
- Closes https://github.com/godotengine/godot-proposals/issues/11450.
- Closes https://github.com/godotengine/godot-proposals/issues/13214


<img width="1236" height="686" alt="image" src="https://github.com/user-attachments/assets/2fa77fef-bc7c-40f6-9d5e-a5a54419fd76" />
<img width="1234" height="685" alt="image" src="https://github.com/user-attachments/assets/a4b73578-d48d-401b-8e1b-d601c9cecc47" />
<img width="1237" height="693" alt="black_hole" src="https://github.com/user-attachments/assets/e36c0dd0-3c46-4fdb-b6e5-cfb786617765" />
<img width="1572" height="1102" alt="image" src="https://github.com/user-attachments/assets/627fa2a5-7812-4478-bff7-62dd00dbd0d8" />
<img width="1024" height="890" alt="image" src="https://github.com/user-attachments/assets/9963ed1a-7126-4e16-852a-16098156dffa" />
- [x] Integrate lights in VolumetricFog
- [x] Integrate lights in LightMaps
- [x] Integrate lights in VoxelGI
- [x] Implement texturing the light quad
Here's a list of steps on how to improve the feature in the future:
- Integrate anisotropy (https://github.com/AakashKT/LTC-Anisotropic/tree/main)
- Integrate light source in SDFGI (SDFGI is a complex system, ideally somebody who is familiar with it can integrate area lights)
- Integrate in Vertex Shading (if there's a demand)
Here's how shadows can be improved:
- Add shadows in Compatibility renderer (requires adding paraboloid or alternative shadow mapping to the GLES3 shader).
- Improve accuracy of paraboloid rendering in Forward renderers (currently area lights use the optimized version that was implemented for omni lights, but a more accurate represenation might better prevent leaks)
I believe we can also expand on and improve the feature in future PR, and have more nuanced discussions about e.g. the material subsystem.
One known issue is that specular light can leak through to a face that faces away from the area when viewing at a steep angle and a low roughness value. This is a literal edge case, and fixing it would likely require additional horizon clipping, so maybe we can live with the leak for now. It is present in the source LTC implementation, and the implementation in Unity, and I didn't notice until very recently.
The main sources for this technique are https://eheitzresearch.wordpress.com/415-2/ and https://blog.selfshadow.com/publications/s2016-advances/
In theory, it can be extended to arbitrary polygons, disks, and lines, to serve as the light surface (https://eheitzresearch.wordpress.com/757-2/), but I would worry about adding those in the future.
In the process of making this PR I investigated different techniques for lighting and shading. I investigated a Monte-Carlo sampling approach, and a most-representative point sampling approach, but both were outperformed by LTC, and contemporary research of non-raytraced dynamic area lights still seems to also focus around LTC.
I also investigated shadow sampling with many shadow maps on a new atlas, and adaptive sampling techniques, but those proved to be unusable due to the added implementation complexity. I figured the most suitable shadow technique was using 4 shadow maps per light and directional sampling with PCF to obtain a smooth result, but the shape of the penumbra was strangely warped, and the performance was not good. If you are curious, you may check it out at https://github.com/CookieBadger/godot/tree/area-light-quadriscopic-shadows. Another way to shadow area lights would of course be ray tracing (https://eheitzresearch.wordpress.com/705-2/), but I'm not aware of any developments of the engine in that direction. So, I decided to just integrate PCSS shadows for area lights, which are not physically accurate, but can look decent.
You can find a writeup and builds with several example scenes at https://github.com/CookieBadger/master-thesis-artifacts, but those already outdated as they are based on Godot 4.3. You'll also find a Thesis.pdf there, which is my Master's Thesis about this topic.
Any help with improving and maintaing this feature will be greatly appreciated.
1 Like