• Advertisement
Sign in to follow this  

Trying to make an object glow

This topic is 2169 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm attempting to make an object appear to glow, using my deferred shading renderer. The object has a light source at its origin, casting a light on the object's surroundings. However because the light is inside the object, the light doesn't illuminate the object's outer surface at all, so I'm having to resort to tricks.

As an experiment, I tried adding a flag to the diffuse texture in the G-buffer to indicate whether the object is glowing. The lighting shader then renders all pixels with that flag at full light, ignoring lighting calculations.

This somewhat works. The object is fully lit, however it is now subject to artifacts from neighboring light volumes. Normally a light's attenuation ensures that the edges of the light volume are not visible. But now, if one of those edges overlaps an object marked as glowing, the edge is drawn fully lit, bathing half of the overlapped object in a solid shade of the neighboring light's color.

I'm sure there is a better way to make an object appear to glow, within a deferred shading renderer. Any other ideas or references would be appreciated.

Share this post


Link to post
Share on other sites
Advertisement
One way to do it would be to mark your 'glowing' materials in the g-buffer (as you're doing), then copying the diffuse colour of the marked pixels from the g-buffer into the final buffer after the lighting results have been accumulated.

Share this post


Link to post
Share on other sites

One way to do it would be to mark your 'glowing' materials in the g-buffer (as you're doing), then copying the diffuse colour of the marked pixels from the g-buffer into the final buffer after the lighting results have been accumulated.

Good idea, I'll give that a try, thanks!


if the lights in the center of the object, why not just flip all your normals?

Also a good idea, which I hadn't considered, thanks!


Ultimately though, what I'm currently doing is a temporary hack more than a final solution. I would ultimately like to find a way to have the object glow, but still receive color from other nearby glowing objects. Like it glows a particular color, but you see traces of another color on one side from another object nearby. That is the final result I want, but I don't yet have any idea how to get there.

Share this post


Link to post
Share on other sites

Ultimately though, what I'm currently doing is a temporary hack more than a final solution. I would ultimately like to find a way to have the object glow, but still receive color from other nearby glowing objects. Like it glows a particular color, but you see traces of another color on one side from another object nearby. That is the final result I want, but I don't yet have any idea how to get there.


Actually you could do as I said before but copy emissive pixels into the lighting results buffer before the lighting stage and accumulate light contributions on top of the emissive pixels. This could be problematic if you're using a light at the centre of the object, though; since that light is simulating (cheating) the light being emitted at the surface of the glowing object, it shouldn't affect the object itself. You could account for this by adjusting the emissive material by pre-subtracting the light source's colour from the emissive material's diffuse colour. This isn't all that flexible, though.

I'm not sure I understand what you're trying to achieve; is it a very subtle, stylized glow or an emissive material? In the latter case I think that you can safely ignore contributions from other light sources.

Share this post


Link to post
Share on other sites
You need to differentiate between glowing(emissive) materials and light sources. A light source illuminates surrounding surfaces which are faced towards the source. A glowing or emissive material is just an other parameter to your light calculation:
final_light = sum_of(diffuse_lights) + sum_of(specular_lights) + emissive_light
In combination with a bloom effect you get a nice glow effect for these kind of surfaces.

When you need a glowing light source, you need to combine both effects. First, the light emitting parts of your model need a emissive material surface. Secondly you need to place a light , not necessarily inside the model, but atleast close to the emitting surface. Placing it outside the surface sometimes help to light the none glowing model parts like a handle etc.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement