Blob Shadow

Started by
1 comment, last by lauris71 11 years, 5 months ago
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?
Advertisement
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.
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.
Lauris Kaplinski

First technology demo of my game Shinya is out: http://lauris.kaplinski.com/shinya
Khayyam 3D - a freeware poser and scene builder application: http://khayyam.kaplinski.com/

This topic is closed to new replies.

Advertisement