Jump to content

  • Log In with Google      Sign In   
  • Create Account


How to light a colored line or simple polygon?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
8 replies to this topic

#1 Sachs   Members   -  Reputation: 164

Like
0Likes
Like

Posted 04 June 2013 - 04:01 AM

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!



Sponsor:

#2 Olof Hedman   Crossbones+   -  Reputation: 2741

Like
1Likes
Like

Posted 04 June 2013 - 04:48 AM

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.



#3 Jason Z   Crossbones+   -  Reputation: 4905

Like
3Likes
Like

Posted 04 June 2013 - 04:50 AM

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!



#4 Olof Hedman   Crossbones+   -  Reputation: 2741

Like
2Likes
Like

Posted 04 June 2013 - 06:44 AM

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)

Edited by Olof Hedman, 04 June 2013 - 06:45 AM.


#5 Sachs   Members   -  Reputation: 164

Like
0Likes
Like

Posted 05 June 2013 - 12:13 AM

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.



#6 unbird   Crossbones+   -  Reputation: 4973

Like
3Likes
Like

Posted 05 June 2013 - 03:31 AM

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.

#7 Jason Z   Crossbones+   -  Reputation: 4905

Like
1Likes
Like

Posted 05 June 2013 - 04:38 AM

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.



#8 Sachs   Members   -  Reputation: 164

Like
0Likes
Like

Posted 05 June 2013 - 09:24 AM

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.


Edited by Sachs, 05 June 2013 - 09:31 AM.


#9 Sachs   Members   -  Reputation: 164

Like
0Likes
Like

Posted 05 June 2013 - 09:36 AM

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.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS