Sign in to follow this  
wildboar

Blob Shadow

Recommended Posts

wildboar    320
I am trying to implement a simple blob shadow for a low spec game. I need to implement it in the most efficient way possible since there is no much ms left to spare per frame to rendering.

1) Is it possible to somehow get fragments position in the shader and when rendering the ground get xyz position of player and make the shader draw a black circle shape?

2) Raycasting the ground from player feet downwards 2000.0f units and drawing a quad at that position. Should I raycast the entire mesh every frame like this or skip frames or what? Is this a good method to do it?

3) Any other easy method to do it?

Share this post


Link to post
Share on other sites
max343    346
One way I can think of is: after you finished all your regular rendering, turn off depth writes (but keep the reads), change the depth function to less-equal and turn on blending, then draw a quad just above the floor (and below the player's bbox) with increasing intensity in alpha as you go outwards from the center (maybe something like 1-gaussian) and zero in all other color channels. You don't necessarily have to use alpha for this as you can use SRC_COLOR.

This should give you a simple circle with decreasing intensity blob below the player. You can also factor in player's distance from the floor so that the circle falls of faster.

[s]EDIT: A small refinement so that it'll look better when there's nearby geometry present which should also be "shadowed" by the model.
Render all geometry except for player models. Disable depth completely and enable blending. Draw the quad (just as you would do before, parallel to the floor) with the same circle. Re-enable depth and disable blending. Draw the model.[/s]
Scrap it. It won't play nice with occluding geometry. Though the initial approach will continue to function. Edited by max343

Share this post


Link to post
Share on other sites
lauris71    841
You can get fragment coordinate (in viewport system) with glFragCoord.
Player position can be given with uniform.
The problem is that with this approach you are comparing each fragment with player. Depending on your scene complexity this may be complete overkill. Such shadow is basically spotlight with negative luminosity.
Drawing quad on ground under the feet of player may be faster solution, especially if you can reuse some other shader.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this