How to light a colored line or simple polygon?

Started by
7 comments, last by Sachs 10 years, 10 months ago

Hello, everyone. How can I get the following effect ?

http://www.148apps.com/wp-content/uploads/2011/06/hardlines3.jpg

(Screenshot from game "Hard Lines", and the lighting lines are beautiful)

Thanks!

Advertisement

I'm guessing the transparent areas are just textures with some semitransparancy (alpha) in them

behind the line, you can draw a quad with a texture with the glow.

You'd actually need 3 quads, one for each endpoint and one for the middle. (the middle will be stretched to draw different length lines, and if you stretch the whole thing, the ends will get oblong and not look that good).

Then play a bit with alpha-value for blending them to get a nice glowy effect.

That is what is usually referred to as a 'bloom', and it is more or less just using a Gaussian filter to blur the colors. There is a sample chapter about how a similar effect is used in the game Tron from way back in the original GPU Gems book, which you can find online now for free. It tells you lots about how to implement such a system, and should get you on your way!

The reason I don't think it's a proper bloom, is the circular areas with double light intensity in the corners.

Looks very much like two layers of "glow-texture".

Also, not blurring is faster (even though modern mobile devices shouldn't have a problem)

That is what is usually referred to as a 'bloom', and it is more or less just using a Gaussian filter to blur the colors. There is a sample chapter about how a similar effect is used in the game Tron from way back in the original GPU Gems book, which you can find online now for free. It tells you lots about how to implement such a system, and should get you on your way!

When I use the Gaussian filter to blur a line(1-2 pixels) in the whole black background, the blurred line is dark and it's "glowing" range is small. Then I compose the tow lines, the final effect is not as clear as the game's. May be I missed something?

I haven't read the book, but I will check it later.

Anyway, thanks for your reply.

I'm guessing the transparent areas are just textures with some semitransparancy (alpha) in them

behind the line, you can draw a quad with a texture with the glow.

You'd actually need 3 quads, one for each endpoint and one for the middle. (the middle will be stretched to draw different length lines, and if you stretch the whole thing, the ends will get oblong and not look that good).

Then play a bit with alpha-value for blending them to get a nice glowy effect.

I have no idea with "a texture with the glow", could you give me some examples? Or you can tell me where I can find the texture? (I have already "googled" it, but can't find something useful.)

Thanks a lot.

1-2 pixels is too little for a bloom, you need to use a bigger kernel. A way to increase the kernel "for free" is to do the blurring on a downscaled image and finally draw a re-upscaled overlay. This can also improve performance.

Here's a image you can use for the fake bloom:
tn_gallery_163625_627_4127.png

Or you could do it procedurally in a pixel shader like so:


float fade(float2 uv)
{
    float2 radius = uv * 2 - 1;           // de-normalize tex-coords
    return saturate(1 - length(radius));  // fade according to distance to center
}

Then use this this value e.g. for an alpha. Give it a tint for the desired color and blend additively (or alpha-additively).

This is what the tex-coords should look for the three quads.


 (0,0)  (0.5, 0)       (0.5, 0)   (1,0)
..+--------+--------------+---------+
..|........|..............|.........|
..|........|..............|.........|
..|........|..............|.........|
..|........|..............|.........|
..+--------+--------------+---------+
 (0,1)  (0.5, 1)       (0.5, 1)   (1,1)
I'm with Olof, this looks like a fake bloom.

When I use the Gaussian filter to blur a line(1-2 pixels) in the whole black background, the blurred line is dark and it's "glowing" range is small. Then I compose the tow lines, the final effect is not as clear as the game's. May be I missed something?

I haven't read the book, but I will check it later.

Anyway, thanks for your reply.

Can you post a screenshot of what you are getting? I think we could easily work through the issue. I also think it would be worth your while to check out that chapter - even if you just skim through it, there is some good information in there.

Can you post a screenshot of what you are getting? I think we could easily work through the issue.


This is the screenshot: http://flic.kr/p/eDFLwx

I do this in GIMP:
1. I begin with a black background(layer 1).
2. Then draw the red(255, 0, 0) line (4 pixels) in the layer 2.
3. Copy layer 2 to layer 3
4. Use gaussian fliter(kernel size is 10x10) to blur the layer 2.
5. layer 3's mode is addition.

The problem is:
1. The middle red line isn't as bright as I expected. I guess it didn't blend correctly.
2. The "glowing" is also too dark.


I also think it would be worth your while to check out that chapter - even if you just skim through it, there is some good information in there.

Thank you for the advice.

1-2 pixels is too little for a bloom, you need to use a bigger kernel. A way to increase the kernel "for free" is to do the blurring on a downscaled image and finally draw a re-upscaled overlay. This can also improve performance.

Here's a image you can use for the fake bloom:
tn_gallery_163625_627_4127.png

Or you could do it procedurally in a pixel shader like so:



float fade(float2 uv)
{
    float2 radius = uv * 2 - 1;           // de-normalize tex-coords
    return saturate(1 - length(radius));  // fade according to distance to center
}

Then use this this value e.g. for an alpha. Give it a tint for the desired color and blend additively (or alpha-additively).

This is what the tex-coords should look for the three quads.


 (0,0)  (0.5, 0)       (0.5, 0)   (1,0)
..+--------+--------------+---------+
..|........|..............|.........|
..|........|..............|.........|
..|........|..............|.........|
..|........|..............|.........|
..+--------+--------------+---------+
 (0,1)  (0.5, 1)       (0.5, 1)   (1,1)
I'm with Olof, this looks like a fake bloom.

I got it! This method is easy and effective. Thanks a lot.

This topic is closed to new replies.

Advertisement