Tone mapping

I currently think the system used is rather limited.

It appears to try give light detail across a massively wide dynamic range, and as such, imo, fails to give sufficient realism.

Has anyone else played with the tone mapping method?

I'm currently trying to implement a 4 stops wide (4 EV) digital camera type system of tone mapping, but I'm a little unsure how it all works right now.

c=colour.rgb*exposure seems to give a linear representation...

...what we might see with an SLR camera, but I'm not sure. Contrast seems much higher and realism feels better. It also shows up issues with specular intensities (they become lots more powerful than may be ideal on most materials)


I'm thinking that we need a nicely calibrated ToneMap method that tries to copy a real cameras dynamic range, to even start to tweak materials in game (diffuse, ambient, specular levels etc)...

The logarithmic method "ToneMapHDR" seemed to be lacking realism. It gave a good presentation of the dynamic range of the scene, but it didn't feel all that real to me...



Hmmmm, just starting to tinker, but I'd like to maybe have a system where we have about 4 linear stops, then about 4 stops at each end that knee out (exponential) to black or white out, ending up close to the ~ 13 stops the human eye is capable of seeing at any given 'glance' of a scene...
The current system appears to be up to 25 stops wide, possibly more, and it just makes the scene feel flat some times! Specular in particular feel to just become very subtle with such a wide dynamic range squished into the 255 levels of intensity we ultimately have...


Hmmmmm

Dave
 
I find that the amount of AA (samples=xx, coverage_samples=xx) really makes a difference. And ofcourse shadowmapping. ;) I've set that to 1024 mapsize, with a new dot(normal,position) in shadowmapping.cg to reduce the Z correction things look much better. I run around 150fps on Carlswood with the Lambo (csm on) at the start/finish line (Quadcore, nVidia GTX285, 195.62 instrumented drivers).
Changing the AA has interesting results on my setup. Seems like the default is pretty much as good as it gets - in the same location,
s = 4, cs = 16 (default) : 26 fps
s = 2, cs = 16 : 23 fps
s = 2, cs = 8 : 27 fps
s = 8, cs = 16 (max my card will run) : 17 fps
I have an AMD hex-core with nVidia 9500GT, I can easily see what's slowing me down :p
 
The CSM is the biggest killer of FPS.

And then it seems to be memory on the GPU that is hogged by the CSM process.

At work my Quadro 512meg is really crappy at 1600x900 with CSM on, yet it has 8gig ram and dual quad xeon, raptors etc.

At home my 756meg GTX275 (iirc), core2 duo 1.667ghz 2gig ram machine is about 5 times faster :D

My home PC was crappy and slow with my old 9800 GTX512meg card...

I think it's GPU ram that gets filled up with CSM!?


Dave
 
Most of the CSM seems to go into pixel shading; blurring per pixel and asking the shadowmaps for a shadow comparison. But it does begin to look good. :) Too bad PerfSDK doesn't really work well on my PC's; on 64-bit Win7 it isn't supported for 32-bit apps. On XP it bluescreens my PC, perhaps a full clean & reinstall of the nVidia drivers might help.

@Stereo: strange that s=2/cs=16 gave a lower result! Sometimes I need to run Racer twice or three times and get a different framerate.
 
It is odd... hrm.

It seems to be affected by which core the main thread is running on (in ^6 info). Sometimes it switches around between all the cores and is slow, other times it is just on 1 or 2 mostly and is fast. If I set cpu_affinity_mask to 2 cores (eg. 3, 6, 12) I get consistent fps rates of >=90% of the best possible. If it's set to 0, it ranges down to about 60% of the best I see.

In further testing it seems like s=2/cs=16 is just about identical fps to the others (s=4/cs=16, etc.) The only time I get a noticeable fps change is with cs=0, which turns off some of the transparencies as well.
 
Yes, I've noticed with physics.async=1 that the main thread tends to jump around on all cores! We're doing a big physics thread on a single core for some project, so that's why the extra masks are there (to control the physics thread cores, and the main thread's cores).
Funny how a thread should jump cores; perhaps the nVidia driver's 'OpenGL threading' has something to do with it? (it's set on Automatic by default - I tried it on a Mac once and it only got slower).

Samples=0 is never valid anymore for transparencies, since they use alpha to coverage, which depends on multisampling.
 

Latest News

How long have you been simracing

  • < 1 year

    Votes: 293 15.2%
  • < 2 years

    Votes: 204 10.6%
  • < 3 years

    Votes: 199 10.3%
  • < 4 years

    Votes: 147 7.6%
  • < 5 years

    Votes: 262 13.6%
  • < 10 years

    Votes: 226 11.7%
  • < 15 years

    Votes: 142 7.4%
  • < 20 years

    Votes: 116 6.0%
  • < 25 years

    Votes: 88 4.6%
  • Ok, I am a dinosaur

    Votes: 249 12.9%
Back
Top