Skip to main content
GameDev.net gamedev.net
🔒 Locked

Water Reflections + Different Planes

Started by riuthamus Jan 19, 2013 at 3:29 AM 16 replies 3.1k views
Original Post
riuthamus
riuthamus

Normally, you would have 1 plane and reflect from there. How do you do this when you have 15 different planes? With a block based world we could have reflections coming from all over the place depending on where a player placed the water

Bacterius
Bacterius

You mean 15 different planes of water? Or something else like reflective blocks, etc...?

“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”
riuthamus
riuthamus

think levels. Maybe the water is flowing down, how would one reflect the part that is flowing down? We already have 1 reflective surface based off of a very large plane. What if the water moves or moves to another plane... how to reflect from there? Telanor should be up in about an hour, when he gets up i will have him post here and give some more information.

Telanor
Telanor
It's not so much flowing water we're trying to deal with but rather lots of flat pools of water on different planes. How do you get proper reflections for all of them without having to render the scene for each pool individually?
kalle_h
kalle_h
It's not so much flowing water we're trying to deal with but rather lots of flat pools of water on different planes. How do you get proper reflections for all of them without having to render the scene for each pool individually?

You could try using screenspace local reflections. To hide ugly artifacts with screenspace technique limitations create one cubemap that contain close enough result for reflections. Blend between local reflection and cubemap when reflection vector start to point towards camera. This method will give you reflections everywhere so you need to use roughness, specular color or someting else to dampen spots where you don't want mirror like reflections.
Telanor
Telanor
Aren't screen space reflections only suited to smaller indoor areas? And how would you use a single cubemap work for all the different reflections?
kalle_h
kalle_h
Aren't screen space reflections only suited to smaller indoor areas? And how would you use a single cubemap work for all the different reflections?
Cubemap would be used only if screenspace does not contain valid data. Sky box would be good candidate for it.
It does no matter much if the area is indoor or outdoor because everything is gathered from screenspace so relative distances does not matter.

There is quite good picture comparion showing the effect in outdoor scene http://blogs.amd.com/play/2012/06/06/fast-and-beautiful-the-directx®-tech-of-nexuiz/
riuthamus
riuthamus

Eh, that link seems dead...

Telanor
Telanor
Skybox for what...? We use a dynamic sky and using a static skybox for the reflections wouldn't match the world it's reflecting. The screenshots in that link showing screen space reflections don't really make much sense. There are literally no reflections in the image they're showing, instead it seems to show the difference between two different lighting setups...
kalle_h
kalle_h
Skybox for what...? We use a dynamic sky and using a static skybox for the reflections wouldn't match the world it's reflecting. The screenshots in that link showing screen space reflections don't really make much sense. There are literally no reflections in the image they're showing, instead it seems to show the difference between two different lighting setups...
You always could render dynamic cubemap from location of player and use that as fallback solution if screenspace does not have data for reflections.
There is another screenshot http://img23.imageshack.us/img23/935/screenshot0000gx.jpg
riuthamus
riuthamus

Skybox for what...? We use a dynamic sky and using a static skybox for the reflections wouldn't match the world it's reflecting. The screenshots in that link showing screen space reflections don't really make much sense. There are literally no reflections in the image they're showing, instead it seems to show the difference between two different lighting setups...


You always could render dynamic cubemap from location of player and use that as fallback solution if screenspace does not have data for reflections.
There is another screenshot http://img23.imageshack.us/img23/935/screenshot0000gx.jpg

eh.. what? formatting on that is off so i have no clue what you are trying to say. Sorry man, i appreciate you trying to help us btw.

kalle_h
kalle_h


Skybox for what...? We use a dynamic sky and using a static skybox for the reflections wouldn't match the world it's reflecting. The screenshots in that link showing screen space reflections don't really make much sense. There are literally no reflections in the image they're showing, instead it seems to show the difference between two different lighting setups...

You always could render dynamic cubemap from location of player and use that as fallback solution if screenspace does not have data for reflections.
There is another screenshot http://img23.imageshack.us/img23/935/screenshot0000gx.jpg



eh.. what? formatting on that is off so i have no clue what you are trying to say. Sorry man, i appreciate you trying to help us btw.



Sorry about that formatting it must be forum software bug, noticed that couple times now. Finally found good picture with outdoor screenspace reflections. https://twitter.com/iquilezles/status/291255436420718593/photo/1/large
riuthamus
riuthamus

oh that looks amazing... so what are you suggestion, to use screenspace instead of cube?

kalle_h
kalle_h
oh that looks amazing... so what are you suggestion, to use screenspace instead of cube?
Cubemap is only fallback when reflection ray point outside of screenspace. So at edges of screen you start smoothly blend towards cubemap reflection instead. Same should be also done when reflection ray start point towards camera. Another option would just fade reflections off at edge cases but that would make these areas too dark.
Think technique as image based lightning that dynamically replace cubemap samples with better data if avaible.
Telanor
Telanor
I can't seem to find any documentation on how screen space reflection is even done. Are there any tutorials anywhere?
Hodgman
Hodgman

oh that looks amazing...

Inigo Quilez is an amazing graphics tinkerer, he built that landscape in a weekend, and that water in an hour... That's an order of magnitude more productive than most of us could hope to be at these tasks wink.png

I can't seem to find any documentation on how screen space reflection is even done. Are there any tutorials anywhere?

I'm not aware of any tutorials, but the principle is the same as parallax mapping techniques (parallax occlusion mapping, quadtree displacement mapping, etc), except that --
* with parallax mapping, you start with a ray that is outside of the "volume". Assuming your texture repeats, the ray will eventually intersect with the volume somewhere.
* with screen-space reflections, your starting ray is already inside the "volume", maybe heading in or maybe heading out. You need to deal with the cases where the ray leaves the volume.
-- in either case, you step along that ray through the volume until you find a collision.

The naive implementation is just to truncate the ray to two dimensions and step one pixel at a time. To speed this up, you can approximate by stepping 'n' pixels at a time.
Fancier parallax techniques (POM, QDM, etc) are basically ways to implement this basic idea more efficiently/accurately.
riuthamus
riuthamus


Inigo Quilez is an amazing graphics tinkerer, he built that landscape in a weekend, and that water in an hour... That's an order of magnitude more productive than most of us could hope to be at these tasks wink.png

Hm...perhaps we can all obtain it some day. rolleyes.gif

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.