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.


Physically accurate ambient lighting from reflection map (Cube Map)


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

#1 Migi0027 =A=   Crossbones+   -  Reputation: 1987

Like
0Likes
Like

Posted 08 June 2014 - 12:10 PM

So in my scene I've got a set of direct lighting sources, and a skybox surrounding the entire scene, now the non-lit side of my meshes ( where lighting doesn't reach ) shouldn't realisticly be black, and since it's in space ( a part of the scene ), why not lit the meshes with the ambient skybox colors, as physically the skybox is the light reaching you from far ahead.

 

Assuming that I can accurately fetch the color on the mesh as if it was reflecting 100%, how would one go ahead and add this reflecting color to the final lighting output? ( Whilst still being physically accurate ).

 

If I wrote it in an awkward way please say it, so I can re phrase it.

Maybe this is simple and I'm just not seeing it.

 

Thank you for your time, I appreciate it.

-MIGI0027


Hi! Cuboid Zone
The Rule: Be polite, be professional, but have a plan to steal all their shaders!


Sponsor:

#2 phil_t   Crossbones+   -  Reputation: 3949

Like
0Likes
Like

Posted 08 June 2014 - 01:17 PM

You just add it to your lighting term (multiplied by the diffuse color of the object, and presumably multiplied by some value to indicate how much it "affects" the overall color of the object)..


Edited by phil_t, 08 June 2014 - 01:27 PM.


#3 Migi0027 =A=   Crossbones+   -  Reputation: 1987

Like
0Likes
Like

Posted 08 June 2014 - 01:45 PM

You just add it to your lighting term (multiplied by the diffuse color of the object, and presumably multiplied by some value to indicate how much it "affects" the overall color of the object)..

 

"and presumably multiplied by some value to indicate how much it "affects" the overall color of the object"

 

This is the part that gets me, of course I could test and see which one seems most realistic or eye-candy like, but isn't there any kind of, well, physically accurate method?


Hi! Cuboid Zone
The Rule: Be polite, be professional, but have a plan to steal all their shaders!


#4 spek   Prime Members   -  Reputation: 997

Like
0Likes
Like

Posted 08 June 2014 - 02:21 PM

I tried this once, and the result was... meh. But! That is partially because I did it cheap/wrong. What happened

- A cubemap was updated at the camera position, every cycle

- Each of the 6 cubemap faces was downsized ("blurred") to 1x1 pixels

- The result was stored as 6 colors (but you can also pass it as a blurry cubeMap texture)

- Objects would get their ambient lighting by mixing between the 6 colors, based on their normals

 

In essence, this method is more or less correct for objects (very) nearby to the camera, your player character for example. But obviously it's incorrect for other stuff in the scene. that catches the environment from a different position. Now I just tried to achieve very cheap semi-realtime G.I. lighting, but the problem is that the lighting changes with every step you take. If you step forward into a lightbeam, the whole background suddenly changes lights as well.

 

 

I'm not 100% sure, but I believe some games actually did use an effect like this (probably combined with statically baked ambient lighting), but "softened" this annoying light-change artifect by smoothly going over from one color into another. You could see this happening in GTA IV, when standing in front of a window in your appartment and then walking a few steps away from it.

 

Another trick to reduce wacky light-changes, is to exclude small/local lightsources in your initial cubeMap. For an outdoor area, mainly the sky, sun or moon are dominant. So, with some hacks a trick like this could work for you. It's far from accurate, but at least its very cheap & you can use the initial cubeMap for reflections nearby your camera as well.

 

 

But more convenient these days is to bake light into "probes", "ambient cubes", or whatever people call it. The idea remains the same, except that you will have multiple probes (sampled as cubemaps) scattered over your world. These probes don't move, and objects/geometry/particles/.../ have to pick the closest probe(s) to fetch their light from. You can pre-bake all your light into these probes, which allows pretty fast and quite decent G.I. However... it's not a realtime, dynamic solution by itself. Of course you could try to update all the probes all time, but it would kill your framerate. There are several tricks being invested by modern game engines to deal with this. Use less probes, spread the updates over multiple cycles, provide fast look-up information so they don't have to render complicated cubemaps, and so on. But so far the bottom line is that all realtime solutions I tried or heard of, are far from perfect. Too slow, too restricted, too memory consuming, or just too ugly.

 

But you can extend pre-baked probes with some dynamic information. Use SSAO or a similar techniques for local shading. And for day/night cycles, you can store an occlusion value in your probes (or lightmap, or geometry) that tells how much % effect the skybox has on this location. 0% would mean the probe can't see the skybox at all, and therefore won't be litten by it. And otherwise you can add some skybox light, using the surface normals and actual skybox color. Again, a fake. But a pretty cheap & effective one.



#5 phil_t   Crossbones+   -  Reputation: 3949

Like
0Likes
Like

Posted 08 June 2014 - 02:22 PM


but isn't there any kind of, well, physically accurate method?

 

Well using a skybox for ambient lighting is just a very rough approximation in the first place. If your object is lit by the sun's directional light, then to make that your rough ambient approximation as physically accurate as possible, ensure that the sky brightness/color is the correct relative value compared to the sun (whatever that is... I'm sure you could pull up some values from the internet :-) ).

 

I've fiddled around with various hacks to come up with some kind of global illumination for my game/engine. Basically I calculated occlusion and scene albedo values offline, and use those in my ambient lighting equation: http://mtnphil.wordpress.com/category/global-illumination-2/


Edited by phil_t, 08 June 2014 - 02:28 PM.





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