Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Blob Shadow


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
2 replies to this topic

#1 wildboar   Members   -  Reputation: 281

Like
0Likes
Like

Posted 20 November 2012 - 05:15 AM

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?

Sponsor:

#2 max343   Members   -  Reputation: 340

Like
0Likes
Like

Posted 20 November 2012 - 03:10 PM

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.

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.

Scrap it. It won't play nice with occluding geometry. Though the initial approach will continue to function.

Edited by max343, 20 November 2012 - 04:26 PM.


#3 Lauris Kaplinski   Members   -  Reputation: 841

Like
0Likes
Like

Posted 21 November 2012 - 12:10 AM

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/




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