This was brought up in these threads...
Major Cooke in 2017 - viewtopic.php?f=15&t=58005
GENTEK, Jaxxoon, and abbuw in 2018 - viewtopic.php?f=15&t=60683
To give an example of how this looks and why it's useful, here's the room I was looking at when I thought about it...
Spoiler:...as you can see, there's this window in the ceiling where all the light is coming from, and this area which has a hanging feature between it and that window, which should be casting a shadow, but doesn't because the lighting is a manually-applied illusion.
If, however, I could give that ceiling a darkening "glow", either through a subtractive or tinting variant on the current version, that might look a bit like this...
Spoiler: NOTE: This is ONLY A MOCKUP! I don't have an implementation of this!...which needs tweaking, because the levels are off, but I think could add a lot in terms of making the room look like it's realistically lit (and give me that "dark corners" feel I'm going for).
Notes on the internal code...
Looking into the code for the glowing flats, I'm realizing this feature is pretty much ALL GL.
The UDMF flags are [plane]glowcolor and [plane]glowheight (implying the suggested feature here would use something like glowsubtract and/or glowtint, or perhaps just glowtype with 0/unset being the current behavior), which set the GlowColor and GlowHeight variables in splane.
This is referenced in p_sectors.cpp with CheckSpriteGlow and GetWallGlow, which is then processed in HWWalls.cpp, setting a flag in he_drawstructs.h's HWWall called HWF_GLOW, but that's just to make sure the hardware renderer knows this needs to be done. I don't think this part would need to be changed for this to work.
The actual glow implentation happens in HWWall::RenderTexturedWall, where SetGlowPlanes is used to build actual 3D planar light-sources for GL to render, kept in the StreamData struct in hw_renderstate.h, which gets tossed into the wall's shader in gl_renderstate.h and gl_renderstate.cpp.... and around that point, it gets lost somewhere in the GL and Vulkan renderers, which is where I stop understanding what's going on. My assumption, however, is that the glowing 3D plane that was built into the shader is used to apply a glow effect, perhaps by drawing a gradient on the lightmap, perhaps with a single GL command. Someone with more knowledge of that system might know more on this.
The actual mapping feature being requested
Now, to have this be usable, there are a few ways it could be implemented from a front-end perspective.
One is subtractive, in which the value that's put in removes light by some inverted value, such that #FFFFFF would do nothing, while #000000 would do a lot. The value should be one-to-one from the mapper's end, to make it easier to actually use, but it could be inverted (and any other math) when the data is loaded to avoid having to calculate during rendering. That would effectively be a subtractive planar-light coming from the plane.
The other is tinting, in which it just changes the color of whatever it's touching without actually changing it. This might not look as good, because I'm not sure how it'd play with other lighting, but it would work for the whole "make dark corners" thing people seem to want to do with it, and would be less mathematically intensive, as Rachel pointed out...
Note that the code to check the glow would have to be modified for this, because #000000 is currently rejected as an invalid value. I propose removing the color-check and just checking the height, as that's really the only thing that would need to be set above 0 in 100% of use-cases, and I don't see why anyone would set that above 0 if they weren't trying to apply a glow effect.negative lights in general are just a bad idea. if you need shading just use real shading... the math on negative lights is really fucked
I'd rather it be a tint than straight up negative light but that's just me.
but tinting things is fine, darkening by shades (multiplicatively) is perfect.
I think the goal solution here should be to make both of them options, allowing mappers to select negative and/or tint either by using the UDMF flags of [floor/ceiling]glowsubtract and/or [floor/ceiling]glowtint, OR by making an integer variable named [floor/ceiling]glowtype with 0 being the current behavior. Perhaps some sort of intensity variable could also be added, so that greater control could be had for what goes on in that area between the plane and plane+height.
Anyway... I'm going real long here, and I don't know enough GL / Vulkan to actually propose a backend solution, I just noticed it'd be really useful and while people had proposed it, no one was going into detail on how to implement it.