Thorsten > -----Original Message----- > From: thorsten.i.r...@jyu.fi [mailto:thorsten.i.r...@jyu.fi] > Sent: 01 October 2011 11:20 > To: FlightGear developers discussions > Subject: Re: [Flightgear-devel] Atmospheric haze modelling > > > Hi Curt, > > thanks for your comments and explanations. > > > We always recognized potential difficulties with blending the sky into > > the terrain. The original design used the fog color as the opengl clear > > color (the color that the display buffer is cleared to before starting > > to draw any > > of the frame). We blended the bottom of the skydome into the fog color. > > And then made sure we drew enough tiles to extend at least to the fully > > fogged range in all directions. This allowed us to "hide" the seam > > between the sky and the ground in the fog/haze at the horizon. > > Yes, as far as I can see, that's the only way this can be done and why the > scattering skydome shader never worked with the default terrain shading. > > As a side note: I've observed that we're currently fading into fog with > > exp(-d^2/vis^2) > > where d is distance and vis is visibility where I believe the physically > correct behaviour would be > > exp(-d/vis) > > Now, the only reason I can think of to do the square fading is that you > really get a hard cutoff after d = vis and minimize the amount of terrain > tiles you need for a seamless blending. On the other hand, the square > fading brings less fog for d< vis than there should be, and actually many > optical integrals rely on the factorization transmission (layer a) * > transmission (layer b) = transmission (layer a + layer b). So I would > prefer linear exponential fading. If the hard cutoff is the only rational > for square fading, then I'd propose to use > > exp(-d/vis - 0.1 (d/vis)^6) > > instead which for any distance d < vis gives linear fading and then has a > cutoff as efficient as square fading. Please let me know if there's any > other reason why the current code is as it is! > > > > One problem: tall > > mountains in the distance would be fog colored and extend visually up > > into the blue part of the skydome and look weird -- so the original > > design worked pretty well, but wasn't perfect. > > I would guess it is visually acceptable to let mountaintops never blend > into the horizon fog. In my current design it would be possible to do so, > provided the visibility passed to the tile manager is a clever combination > of ground and aloft visibility. > > Maybe that's actually the general solution - pass a function of different > visibility properties used by the shader to the tile manager. The simplest > solution is to pass the maximum of all visibilities, but that may load > more than one ever needs, so probably an angular weighted version > dependent on current altitude would be more useful. I can work the math > out... as long as it's possible to go for a solution like that. > > > Oh, and we also had some additional code that would change the fog color > > depending on your view angle relative to the sun ... so at sun set/rise > > the fog color would be oranger/redder looking at the sun versus > > looking away from it. > > I'm currently using gl_LightSource[0].diffuse as fog color - to the degree > that sunlight light changes, my version inherits that (seems to be working > fine so far). > > > So definitely we should try to figure out how to make your sky model > > blend with the terrain some how. > > It *seems* to be doing fine now after I introduced the harder fogging > cutoff - above the ground layer, it still uses /environment/visibility-m > to keep track of this part of the optical integrals, so the amount of > tiles loaded is actually sufficient - but at 50.000 ft or so I rountinely > have visibility values of 100 km. For me, Flightgear renders that still > stable and reasonably fast (I tried Custom France scenery, Hawaii as well > as Pacific Northwest as test cases), and only above 140 km I get unstable > behaviour (some of my Blackbird Screenshots were rather difficult). But on > slow machines, this'd probably be a show-stopper. But that's not a shader > problem but related to the weather code - that can be instructed to > provide a cutoff for visibility that is never exceeded. > > > One more thought while I'm writing. The current scattering effect > > skydome > > has a glitch/seam at the azimuth. Depending on the time of day it is > > more > > or less visible. It can be really ugly, I'd love to get this fixed if > > you happen to stumble on what's causing it as you play with all > > this code. > > I know... > > I'm really not a shader person, I have just one idea as to what the cause > might be (?). > > I've often observed that the edges of scenery tiles with the water > reflection shader have different colors. I have also on occasion seen fog > artefacts at just the same position. My theory as to what happens is that > the vertices in this case (= the tile edges) are rather far apart, so when > the vertex shader is asked to compute an angle for reflection or light > scattering or fogging, it must interpolate over a large area because the > vertices are far apart. If it interpolates linear, but the quantity to > interpolate is (as in this case) non-linear, then in a certain angular > regime there must be artefacts. > > In this case, there'd be nothing wrong with the shader, the vertices would > just too far apart to get it right. > > Now, I have no idea how many vertices the skydome has or if that is indeed > the problem - it's just my working hypothesis based on what I see. > > ThorstenB wrote: > > > And it'd be rather complicated to implement any other tile loading > > method instead of the current concept of loading all tiles within a > > certain range. The tile loader lives in a simple 2D world. It knows > > nothing about elevation of certain tiles etc. > > But can it be made to use a function of all visibility parameters used by > the shader? For zero elevation the problem is not difficult to solve, the > terrain shader basically does it for every vertex in the scene per frame > anyway - just solving it once every couple of frames for the tile manager > shouldn't be an issue, even Local Weather's Nasal code could do it. > > But we probably have something like min_elevation and max-elevation for > the scenery tiles we have already loaded, so these can be used to even > optimize the guess when the next tile might become visible. > > It'd be so cool to be able to load only the mountains sticking out of > haze... But I think we can do well enough without that gimmick. > > In completely different matters: > > Does anyone know of a short writeup of how the shader coordinate systems > are defined? I waste most of my time debugging code to find out that a > vector never was what I thought it should be because I started with the > wrong coordinate system, and that's starting to annoy me. Once I have the > vectors right, then everything works much faster... > > Thanks in advance! > > * Thorsten
Emilian and I have been working on the water shader, and have run into some show stoppers caused by the lack mf vertices in the ocean tiles - there are just 4 so far as we can see, so the junctions between tiles always show up as you speculate. It might be we can do something about this in due course. Vivian ------------------------------------------------------------------------------ All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-d2dcopy2 _______________________________________________ Flightgear-devel mailing list Flightgear-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/flightgear-devel