Thorsten wrote

> -----Original Message-----
> From: Renk mailto:thorsten.i.r...@jyu.fi]
> Sent: 22 April 2012 12:03
> To: FlightGear developers discussions
> Subject: Re: [Flightgear-devel] Water shader issues
> 
> 
> After the last related discussion, I've really been thinking a while if I
should
> bring this up again or not. I don't want to annoy people just for the sake
of it,
> I know open source development is often a thankless task in which one
> frequently gets to hear more complaints about things not working than
> thanks for things working, and all in all I perfer a pleasant atmosphere
on the
> mailing list, and critique of someone's code tends to lead to the
opposite.
> 
> But then, we had a performance discussion, and I had my share of criticism
> about my use of Nasal slowing things down, and in the end it's information
> which is better transmitted than not.
> 
> Let me nevertheless start off by thanking all the people who worked on the
> shader codes I've been looking at - I learned a lot about how this is done
and
> what can be done by just taking things apart and putting it back together
> again, I have often enjoyed the effects before starting to mess with
shaders
> myself, and I guess many others also do.
> 
> I've been over the water sine wave shader again, seeing if I could make
run it
> faster. What I found reminded me of something I (mean-spirited as I am)
did
> to a PhD student starting to work for me. I asked him to write a code
> evaluating a quantum mechanical scattering process.  He did so using an
> established general-purpose Monte Carlo integral solver. I wrote a code
for
> the same problem, we compared the results and they were the same, so we
> did solve the same problem and had the same solution - just my code was
> 100 times faster. Afterwards, he was ready to accept that he can learn
from
> me how to code physics properly.
> 
> That miracle was accomplished by me telling the integral solver where
> performance is needed and where not (technically, this involves using an a
> priori suitably biased sampling distribution, which after the fact gets
> corrected by conditional probability calculus - which can be proven to
work,
> but looks like black magic). To give a very simple simple example, if we
want
> to evaluate r^2 pi and know r^2 with an accuracy of 10%, it isn't really a
good
> strategy to spend an hour to calculate a billion digits of pi. It requires
to
> understand the problem and not use all-purpose, but specially designed
> problem-solving strategies.
> 
> The same accuracy statement is true of the shaders by the way - so far all
I
> have seen use the Blinn-Phong shading model, so it's completely useless to
> aim for an accuracy beyond what that can deliver, because Blinn-Phong is
> already an approximation which limits the precision that can be achieved.
> 
> Now, it struck me that the water shader computes wave patterns and foam
> on a meter-scale. It does so even for a pixel which is 120 km distant (and
> which probably represents an area of 100x400 m or so). We first calculate
a
> very detailed wave pattern and foam for that pixel, then let the renderer
> average everything out again to give the pixel a color. That didn't strike
me as
> a particularly efficient way to do things.
> 
> I replaced the wave pattern in the distance by something that averages to
> the same thing. That's not the average wave pattern (=a flat surface)
> because reflected light intensity is a non-linear function of the surface
> distortion, but noise with the right amplitude, leading to the same
standard
> deviation and the same average, gets the job done. I also asked not to
> compute any foam beyond some other distance. As a result, the shader
> performance jumped from 30 fps to 42 fps in a benchmark situation (ufo at
> 30.000 ft looking at the horizon, 120 km visibility range).
> 
> In general, how much performance one spends on distant stuff doesn't
> influence the visuals drastically, because these pixels are more and more
> fogged and more and more details are averaged out. But more than 80% of
> the vertices in the scene are farther than half the visibility range, and
a fair
> share of pixels is, and that's the stuff you see from a typical cockpit
> perspective. So in terms of performance, simplifying the rendering of
distant
> objects counts a lot.
> 
> I have spent 30 minutes testing the visual impression of my changes in
> different winds, in different light and from different altitudes, and I
could not
> spot any problem - the shader just ran faster. Despite this, it's possible
that
> there is a problematic situation somewhere. But the answer to this should
> not be to revert the changes, the proper answer should be to code an
> exception dealing with the particular problem.
> 
> I did not get the impression that there was so far any attempt made to
> optimize the performance of the water sine shader. It's difficult to
compare
> directly since I added the whole terrain haze and lightfield rendering,
but I
> suspect that if all I did (remove redundant operations, throw per-frame
> constant computations out of the shader, do not use textures to sample
> constant colors, do not interpolate the normal of water, do simplified
> rendering for large distances,...) would be applied to the original water
> shader, it could run twice as fast in many situations without any loss of
visual
> detail.
> 
> I know that it's tempting to ignore me, because at the end of the day I
still
> don't really know a lot about how the technical aspects of 3d rendering
work.
> But on the other hand, once we're inside the shader, it's just an
algorithm to
> compute a physics problem. And this I know in all likelihood much better
than
> most people on this list. So do with the information what you like.
> 

I'm sure this is all very well and good - but what are we meant to be
testing/doing/patching? Your last patch was all very good - except it only
worked with advanced weather, so I was forced to abandon it. The water-sine
shader is intended to work with both forms of weather, and so it is
inevitably compromised. It would be good if the weathers could be
harmonised.

Vivian





------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to