Armory Should Use Spherical Area Lights
- Dominant language
- C++
- Stars
- 3.3k
- Forks
- 353
- Avg merge
- 3d 16h
- Merged PRs (30d)
- 1
Description
Currently Armory's lighting uses infinity small point lighting. In some cases that may be fine, but once you turn down roughness to low values (like 0.01) for very crisp surfaces or just make bigger lamp objects in scene, the specular reflections start to look odd or disappear whatsoever. From my experience, coding spherical area lights isn't hard at all and they give quite a bit of improvement to the lighting. For light radius, cycles already uses "size" parameter.
Regarding the code itself:
- for diffuse light attenuation refer to: https://imdoingitwrong.wordpress.com/2011/01/31/light-attenuation/
which provides fast approximation
- for specular lights think this way: instead of having 1 peak point where the brightness is max and then there's fallow, you need to have a plato that represents the light source with fallow on both sides. To calculate the plato size, try ray-sphere intersection (check the closest point on the sphere from the reflecting ray and use that point as light source position instead of light source's center).
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by locating Armory's lighting implementation and compare its point-light behavior with Cycles' existing size parameter. Review the linked diffuse attenuation reference and the proposed ray-sphere intersection approach; done means spherical area lights improve crisp-surface and larger-lamp reflections without losing the intended light-size behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- computer-graphics
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100