Racer v0.8.11 is out

Ruud

RACER Developer
Yep, another version. Get it at http://www.racer.nl/download/racer0.8.11.zip (60Mb)

To testdrive, also check out Swiss Stroll Cg at http://www.racerdownloads.com/uploads_view.php?type=T&cmd=latest

Enjoy!
Ruud

The changes:

- Added standard_wave_banner_v.g for waving banners, see http://www.racer.nl/tutorial/waving_flag.html#banners
- Skidmark painting more robust (texture usage and render state could cause transparent or black renders)
- Non-Cg version still tried to load shadowmapping Cg shaders when renderer.shadowmapping.enable was 1
- Projected lights intensity back from 1.1 to 0.6( data/renderer/shaders_*/projected_texture_f.cg)
- Default shader_<x>.reflect value is now 1.0 (was 0)
- Modified per shader layer reading of .ambient a little; otherwise the global shader_<x>.ambient
did not default to the global shader_<x>.diffuse. This only really influences non-Cg .shd files.
- dyn_standard_reflect_window_v/f.cg improved to do per-pixel fresnel.
- Reflection shaders fixed to respond to ambient/diffuse more accurately ('diffuse=0 0 0' still gave a shadow).
- The Lambo brakediscs now heat up through an alpha layer, looks better
- shadowmapping.shadowintensity removed - shadows are ambient and need not be softened (would only include false diffuse lighting)
- Shader directories combined into data/renderer/shaders/*. Compilation uses -DCSM for shadowmapped variety.
- Shadowmapping optimized a little bit in the .cg shaders.
 
My current fave tweaks to make things look nicer (out of the box) (for CSM/HDR version)

constants.cg
const float smBlurAmount=2.0f/1024.0f;
(halved the factor from 4.0f to 2.0f)

lighting.cg
normalInfluence=(N.y+4)*0.2;
(reduced the normal influence on ambient significantly, so peak reduction is to 60% on downward pointing verts... feels much more natural, probably room for improvement on the function to get it strong around the top-dome area, and then fall off more steeply as the vert Y inverts to negative numbers)



These two tweaks make things a bit nicer imo.

Dave

Thanks for the tip it really makes it a lot better for me, even though I have no idea how to tweak shaders...
 
Headlight blinks off, was a shader problem.

data/renderer/shaders_*/projected_texture_f.cg being = 0.6 makes headlights too dim, I changed it to 0.9.

In ver 0.0810 I used the sky dome from carlswood on my Surfaces and sounds track, shader used
sky_clouds.tga and sky_night.tga. Ran with sky_daynight cg's. The day ok, moon came out round.

In ver 0.0811 I used my sky dome on my Surfaces and sounds track, shader used panoramic sky.jpg and sky_night.tga. Ran with sky_daynight cg's. The day ok, moon came out distorted.

Am I correct in assuming that the skies are now working right if we make them with domes/boxes and textured appropriately?

Thanks Ruud, now please don't mess with them!
 
Hi Ruud,

Really quick question.

Now we have skies that don't really want horizon details in them, is there a method to use to have planes that we use at very large distances (near the sky box) still render despite them being way beyond the draw distance?

Ie, tree lines, mountain regions, hills and so on, that ideally need to be at a realistically large distance away so they fog up nicely within the scene with distance, but actually get rendered...

Would this ideally use a specific shader a bit like the sky one so it is rendered when appropriate irrespecitve of the distance away?

Many thanks

Dave
 
Also, I'm not sure how/why but the reflections in the envmap are still far too 'bluey' compared to what we are seeing in the actual sky itself.

When I chrome the material it looks natural and reflects the sky nicely, but when using the default fresnel settings the reflections away from the full glancing angle, appear to blue up quite a lot... I'm just wondering if the ordering or the blend are correct here... it feels about twice as 'saturated' with colour as it needs to be with the fresnel in action.
As pure chrome it works correctly and feels natural, at 50% reflection chrome it does the same as above, gets very deep blue...

Just feeling a bit wrong, not sure if others feel the same or can sense check the process to check these things are working correctly (I already spotted double reflection strength on lit side with some basic experiments because things just looked a bit wrong...)

Try messing with shaders/fresnel.cg and see if you can find what's wrong. The Fresnel() function already caps at 0.9 (fresnel=min(fresnel,0.9)). The FresnelMix() function adds diffuse and reflection; perhaps the addition gives more saturation? (although it feels ok to add a reflection as extra light).
 
Now we have skies that don't really want horizon details in them, is there a method to use to have planes that we use at very large distances (near the sky box) still render despite them being way beyond the draw distance?

Ie, tree lines, mountain regions, hills and so on, that ideally need to be at a realistically large distance away so they fog up nicely within the scene with distance, but actually get rendered...

Would this ideally use a specific shader a bit like the sky one so it is rendered when appropriate irrespecitve of the distance away?

Try using sky=1 in the shader (shader_<x>.sky=1). That is the flag that makes the object use a 100,000m view distance. Apart from that, the sky flag is used internally to skip it while drawing shadowmaps/projected lights. You may get into trouble while rendering the distant objects, so use sort_offset=1 or higher (for the mountains.dof for example) to order it with respect to the sky 3D model.
 
Try messing with shaders/fresnel.cg and see if you can find what's wrong. The Fresnel() function already caps at 0.9 (fresnel=min(fresnel,0.9)). The FresnelMix() function adds diffuse and reflection; perhaps the addition gives more saturation? (although it feels ok to add a reflection as extra light).

I'll have to think up a logic test that will trip it up and show errors if they are evident. It's just a feeling for now but I have to be able to prove it with some test that will make it obviously wrong :D


As per the sort_offset, can that be set to any value? I thought it was a toggle 0/1 on/off, so decals or things we wanted to always be on top, had setting of 0.

But it looks like we can basically order the drawing with this then, so 0 is last, 1 is 2nd to last, 2 is 3rd to last etc etc?


Thanks

Dave
 
Never had so much trouble with any version of racer than this one! :( Lot´s of crashes when quiting game, replay, changing graphic settings etc. Also the lowest framerate I´ve ever had. Maybe I need to tweak a bit.. ?
Pretty much all of the tracks(that I liked) that worked very well with 0.8.8 are now either fully unusable(racer crashing while loading them) or completely buggered(all textures missing)

Now of course, I use an ATI card, so I have to use the noncg version. :rolleyes:
I am _not_ buying a new nvidia card any time soon, my Radeon HD3850 is just fine thanks. I do not need a power hungry space-heater in my currently very cool running PC.
Looks like all this CG shader s*** has finally done my oldish but very capable rig in. Nevermind it being able to play all the modern games that I have thrown at it, Racer wants less ..that is actually more.. but still less..:bad:

Yes; I understand that CG shaders are progress(kinda) for Racer.
I also understand that having an ATI card means my days using future versions of Racer are basically done. (so I am going to sthu here in a moment)
Yes; I knew this day would come. I was just hoping that it would not and putting it out of my mind.(denial ftw?)

I think I might have to retract my earlier post about trackir. It was kinda silly of me to make it before trying the new version of Racer and I have never gotten the impression that trackir was very popular or important to the Racer crowd anyway. :/
Not worth putting dev time into something few would use when there are plenty of other issues/half done things to still be fixed that everybody wants fixed.

Pay no mind, shutting the heck up now.:thumb:
 
Now without shadowmap ,rest on full I only get 30 fps "/. Last racer I was running at 100 fps. Why? I optimized all the racer.ini to my gpu.
Code:
;
; Racer settings - see www.racer.nl for specifics.
; Most settings come with comments as to what they do.
;
app
{
  ; Allow double runs?
  run_twice=0
  ; First run ever?
  first_run=0
  ; Keyboard support? (avoid scenes with keys)
  keyboard=1
}
machine
{
  ; Type of role (M=master, L=right etc). Used for loading images (loading_<role>.jpg) if not empty
  role=
}
process
{
  ; Dualcore/multicore options (Windows only)
  ; CPU affinity mask; 0=all CPU's, 1=CPU 0, 2=CPU 1, 3=CPU0 & CPU1 etc.
  ; Setting this to use only 1 CPU may help on some fast machine that give (s)low framerates
  cpu_affinity_mask=0
}
ini
{
  ; Controls file (new format since v0.5.2 beta 9.4; in data/controls/)
  controls=default.ini
  ; Possibly fall back on a local set of defining controls (useful for multiple different calibrations)
  ; Directory of the file is local on Windows
  controls_fallback=local.ini
  ; Locale file (languages); default is racer_english.txt
  locale=racer_english.txt
  ; Language ID (0=English, 1=French, 2=Dutch); for some internal texts
  locale_id=0
  ; Force feedback damping (for low speed)
  ff_damping=0.2
  ; Force feedback damping threshold (in m/s of tire velocity)
  ff_damping_threshold=1.0
  ; Let time-of-day automatically control lights?
  auto_lights=0
}
race
{
  ; Race settings
  ; Skip lights sequence at the start?
  quickstart=0
  ; Show 3..2..1 at (non-quick)start?
  show_start_numbers=0
  ; Show lights overlay texture at (non-quick)start?
  show_start_lights=1
  ; Track to drive
  track=carlswood_nt
  ; Which car to drive
  car=lambomurcielago
  ; Total #cars expected (if >1, waits before showing graphics)
  expected_cars=1
  ; Car setup
  ; Number of AI cars besides player car
  ai_cars=0
  ai_car=lambomurcielago
  ; Multiple different AI cars
  ai_car_multiple=
  ai
  {
    random_scenario=0
    performance=1.0 0.8 1.0 0.96 0.97 0.96 0.98 1.0 0.97 0.96
  }
  ; Player preferred grid position (0..ai_cars-1)
  grid_position=0
  ; Number of laps in race
  laps=0
  ; Maximum race time (in seconds)
  max_time_race=0
  ; Type of race ranking; 0=time/bestlap, 1=distance
  ranking=0
  ; Qualifying max laps (0=no qualifying)
  qualify_laps=0
  ; Qualifying time (in seconds)
  qualify_time=0
  ; Type of qualifying ranking; 0=racetime (doesn't make sense for qualifying), 1=distance, 2=bestlap
  qualify_ranking=2
  ; Event type; what type of race you're running; 0=Qualifying run, 1=Qual+Race, 2=Real race (default)
  event_type=2
  ; Racing class; 0=circuit (loops), 1=rally/A-B tracks. Only used for menu statistics and warp position.
  racing_class=0
  ; Driver id (name)
  driver=The_Driver
  ; Pace car present? (first AI car found)
  pace_car
  {
    ; Pace car #laps to assist
    laps=1
    ; Disappear immediately when done pacing?
    disappear=0
    enable=0
  }
  ; Driver level; see levels.*
  level=0
  ; Auto-return time (in ms; once a race ends, return to start for next lap; rally for example)
  ; 0 means no auto-return. Only works for point-to-point tracks
  auto_return_time=3000
  ; Competition name and id
  competition=ParmalatRace
  competition_id=2
  ; Customer ID (passed by RaceManager for example)
  cid=0000000001
  ; Heat number
  heat=14
  ; Time (s) to countdown towards end of session
  countdown_start=3
  ; Time (s) to cool down after a session (qualify)
  cooldown_time=3
  ; Time (s) to cool down after the race (show results)
  cooldown_time_race=10
  ; Time (s) for the start scene (after all cars are loaded, and just before the starting lights)
  ; Allow some time for multiplayer clients to settle down to trigger the race on each client at the same time.
  startscene_time=1
  ; Where to start in qualifying; 0=pits, 1=track
  qualify_start=1
  ; Speed of start lights (time in ms per light)
  time_per_light=1000
  ; Controls
  disengage_at_race_end=1
}
ghost
{
  ; Ghost car options (use 'ghost save <name>' to save current ghost lap in data/tracks/<trackname>/ghosts/<name>.ghost)
  enable=1
  ; Load ghost file upon starting race? (leave empty to skip loading)
  load=
}
rules
{
  ; When pitting (standing still currently), what is the distance of other cars before hiding car?
  pitstop_autohide_distance=250
}
gadgets
{
  ; Turn on the menu? If set to 0, the game immediately proceeds into Race
  menu=1
  ; Automatically go into replay mode?
  replay=0
  ; Turn on the game itself? Normally keep this at 1.
  game=1
}
loading
{
  ; Load bar Y
  bar_y=570
}
menu
{
  ; Background movie (leave empty for none)
  bgr=
  bgr_opacity=0.2
  bgr_scale_x=1
  bgr_scale_y=1
  ; Show wheel?
  wheel=0
  ; Running at x fps
  movie_fps=25
  ; Show buttons? (might not want a menu when using a Race Manager for example)
  show_buttons=1
  ; Show statistics? (best drivers etc)
  show_stats=0
  ; Paint logo?
  show_logo=1
  ; Paint title on top?
  show_title=1
  ; Show console in menu?
  show_console=0
  ; Redo fullscreen after x ms? (Mac Cinema HD ugly bugfix). Only for multiview slaves. 0 means no redo.
  redo_fullscreen=0
  ; Be CPU friendly in menu? (ms to wait every step)
  wait=30
  ; Screen saver time (in seconds)
  screen_saver=0
}
splash
{
  ; Image (must be 2^n sized); if not found no splash screen will be shown
  ; Size of image onscreen
  width=500
  height=350
  ; Duration of splash image onscreen (ms)
  time=500
  ; Fade out time
  fade_time=500
}
audio
{
  ; Turn off enable (0) in case of sound problems
  ; All platforms use FMOD (www.fmod.org)
  enable=1
  ; Set mastervolume; 0 is silent, 255 is maximum volume
  mastervolume=255
  ; Output; for Windows, use 'dsound', 'winmm', 'asio', 'openal', 'wasapi' (Vista) or leave empty
  ; to autodetect. For Linux, use 'oss', 'alsa', 'esd' or also
  ; leave empty. For Mac, use 'mac' (or empty).
  ; Try empty for starters. In case of trouble, try 'nosound' or enable=0 above.
  type=
  ; Output quality
  frequency=44100
  ; Bits per sample; 16-bits sounds much better and the mixer
  ; is optimized for 16-bit anyway.
  bits=16
  ; Speaker mode; -1=system default, 1=mono, 2=stereo, 3=quad (4.0), 4=surround (5.0), 5=5.1 (subwoofer), 6=7.1, 7=ProLogic (5.1)
  speakermode=-1
  ; Number of voices to allocate (defaults to 128)
  voices=128
  ; 3D rolloff factor; 1=default, nearing 0 means volumes don't roll off
  ; as quickly, while >1 means sounds will fade very quickly
  rolloff_factor=0.1
  ; Buffer size in ms; too low means cracking up the sound, too high
  ; will generate audible frequency updates (stepwise changes)
  ; Doesn't seem to work in Linux/SuSE7.3/ALSoundblaster
  buffersize=100
  ; Hook car audio to camera? (for more noise with incar cameras); default=1
  hook_incar_to_camera=0
  ; Generic effects on all audio
  distortion=0
  {
    ; Level 0..1
    level=0.5
  }
  reverb=0
  {
    new_var_here=0
  }
  flange=0
  {
    ; Drymix 0..1
    drymix=0.45
    ; Wetmix 0..1
    wetmix=0.55
    ; Depth 0..1
    depth=1.0
    ; Rate 0..20, default 0.1
    rate=0.1
  }
  ; Surface sounds
  road
  {
    volume=0
    ; Pitch determination
    pitch_scale=0.005
    pitch_offset=2
    smp0
    {
      sample=road.wav
      ; Speeds in m/s
      min=0
      max=9999
      natural=5
    }
  }
  grass
  {
    ; Pitch determination
    pitch_scale=0.005
    pitch_offset=2
    smp0
    {
      sample=grass.wav
      min=0
      max=9999
      natural=5
    }
  }
  gravel
  {
    ; Pitch determination
    pitch_scale=0.015
    pitch_offset=0.5
    smp0
    {
      sample=gravel.wav
      min=0
      max=9999
      natural=5
    }
  }
  sand
  {
    ; Volume determination
    volume_scale=0.5
    volume_offset=0
    ; Pitch determination
    pitch_scale=0.015
    pitch_offset=0.5
    smp0
    {
      sample=sand.wav
      min=0
      max=9999
      natural=5
    }
  }
  kerb
  {
    ; Pitch determination
    pitch_scale=0.02
    pitch_offset=2
    smp0
    {
      sample=kerb.wav
      min=0
      max=9999
      natural=5
    }
  }
  stone
  {
    ; Volume determination adjust as desired
    volume=1
    volume_scale=1
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=1
    smp0
    {
      sample=stone.wav
      min=0
      max=9999
      natural=1
    }
  }
  water
  {
    ; Volume determination adjust as desired
    volume=1
    volume_scale=1
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=0
    smp0
    {
      sample=water.wav
      min=0
      max=9999
      natural=0.7
    }
  }
  ice
  {
    ; Volume determination adjust as desired
    volume=0.9
    volume_scale=0.01
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=1
    smp0
    {
      sample=ice.wav
      min=0
      max=9999
      natural=1
    }
  }
  snow
  {
    ; Volume determination adjust as desired
    volume=1
    volume_scale=1
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=1
    smp0
    {
      sample=snow.wav
      min=0
      max=9999
      natural=1
    }
  }
  mud
  {
    ; Volume determination adjust as desired
    volume=1
    volume_scale=1
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=0
    smp0
    {
      sample=mud.wav
      min=0
      max=9999
      natural=1
    }
  }
  ; Environment sounds
  rain
  {
    ; Pitch determination
    pitch_scale=1
    pitch_offset=0
    smp0
    {
      sample=rain.wav
      min=0
      max=9999
      natural=1
    }
  }
}
music
{
  ; Several section with music choices
  ; Menu music (MP3/WAV etc)
  menu
  {
    ; song1=menu.mp3
    song1=
  }
  lobby
  {
    song1=lobby.mp3
  }
  replay
  {
  }
  race
  {
  }
}
replay
{
  enable=1
  ; Replay to view
  file=test
  ; Generic full-race replay buffer size (in bytes)
  size=10000000
  ; Ghost-car replay buffer size
  size_ghost=100000
  ; Recording interval (ms per step, default=100 which is 10Hz)
  interval=100
  ; Load standard replay (test.rpl) instead of actual replay?
}
multiplayer
{
  ; Always enable multiplayer; even your local car will connect
  ; through it's own server
  enable=1
  ; The host that serves the game. I.e. 'somehost' or '192.168.0.1'.
  ; Note that for v0.4.8, if 'server' is 'localhost', the machine
  ; is both client and server. Do NOT use the real machine name in
  ; this case, since Racer will think that the server is a remote
  ; machine, and no serving will take place.
  server=127.0.0.1
  ; Time (ms) to connect to server (per try!)
  timeout_connect=1000
  ; Retries when connecting to server
  connect_attempts=30
  ; Remote server; this indicates a fixed server you want to connect
  ; to when selecting 'Join' from the menu.
  ; This automatic selection is only used if 'use_remote_server'=1
  ; and generally you only want this on the Mac, where dialogs
  ; don't work yet.
  server_remote=10.1.90.111
  ; 'server_remote' is only used if the value below is 1
  ; This is needed on the Mac, where dialogs don't work yet.
  use_remote_server=0
  ; Expected number of clients. Leave at 0 unless you know in advance
  ; how many clients (including spectators) will/should connect.
  expected_clients=1
  ; Timeout for expected clients to arrive (in seconds)
  expected_clients_timeout=60
  ; Allow remote connects? (in other words, be a host?)
  ; If enabled (1) it will allow remote clients to connect.
  ; If 0, the server above will automatically be set at 'localhost'
  ; because Racer is always multiplayer, even in single player mode.
  allow_remote=1
  ; Communication port (normally 25000, for WAN latency tests port 25001 can be used with a computer inbetween running:
  ;   portforward 25000 25001 192.168.0.101 (where .101 = the multiplayer server)
  port=25000
  ; Time (ms) between car updates being sent to the server
  ; For example: 100 means 100ms is 10Hz, which seems about reasonable.
  ; Default for LAN     : time_per_update=10, linear_interpolation=1
  ; Default for internet: time_per_update=100, linear_interpolation=0
  time_per_update=100
  ; Type of interpolation; use linear for LAN play (1), splines for internet (0)
  linear_interpolation=0
  lag
  {
    ; Upon receipt of a packet, a spline interpolation is used to
    ; smoothly move the car to the new position. The time this takes
    ; is dependent on 'multiplayer.timet_per_update'.
    ; It is advised to keep time_per_update the same on every client
    ; (and server) for minimal interpolation weirdness.
    ; The 'correct_factor' is multiplied by the time_per_update to
    ; get the time in which the car is smoothly pushed to its new
    ; location (as just received from the latest network packet)
    ; Experimentation is probably useful for this value (0..2?).
    correct_factor=2
  }
  ; Spectator-only view?
  audience=0
  ; Camera mode in audience view (0=car, 1=track, 2=heli, 3=director)
  audience_camera_mode=1
  ; Internet based games
  internet
  {
    ; Obsolete tree; use multiplayer.listclient from v0.5.5 on.
    ; Are the races public for the internet?
    public=0
    ; List server to notify of races, so people can hook on to that listserver and see your race
    listserver=192.168.1.99
  }
  listclient
  {
    ; Where is our current listserver?
    host=lobby.racer.nl
    ; UDP port
    port=28100
    ; Your nickname/login with which to enter the listserver
    nick=MyNick
    ; Viewing extra's for development
    dev_flags=0
    ; Known listservers
    servers
    {
      count=1
      server0
      {
        host=127.0.0.1
        port=28100
      }
    }
  }
}
limits
{
  ; Max #milliseconds to simulate per graphics frame. If this is not
  ; attainable, the display will show 'SLOMO' (your fps is too low)
  max_sim_time_per_frame=500
  ; Max world size (Newton)
  world_size=10
}
car
{
  ; Y offset when warping the car
  warp_offset_y=0.01
  ; What is considered low speed? (rotational velocity of wheel in radians)
  low_speed=2.0
  ; Damping of forward/backward wheel speed reversal. This takes place
  ; when the car is coming to a stop; when a wheel reverses direction,
  ; the slip ratio is negated but damped using this factor. This is an
  ; addition to the SAE950311 damping method.
  ; Is also used laterally.
  damp_sr_reversal=0.0
}
stats
{
  ; Default info page; 0=none, 1=tire forces, 2=timing/race/aero, 3=surface,
  ; 4=controls, 5=network, 6=profile, 7=suspensions, 8=driveline/ai, 9=telemetry
  default_info=0
  ; Default info subpage - some info pages have multiple subpages
  default_info_sub=0
  ; Big info text font name
  font=realvirtue40
  ; Extra horizontal scale (on top of global scale)
  font_scale_x=1.0
  ; Smaller font scale; 1=default, <1=smaller, >1=larger
  scale=0.8
  ; Show FPS initially? (toggle with Ctrl-F)
  fps=1
  ; Show gear indicator as debug text? (toggle with Ctrl-G)
  show_gear=1
  ; Show car view initially? (toggle with Ctrl-V)
  show_dials_2d=1
  ; Race summary view; 0=nothing, 1=laps at bottom, 2=time comparisons (default), 3=last lap results (big),
  ; 4=session results (big), 5=ranking (spectator), 6=front/rear time difference
  race_view=2
  ; Limit race summary view toggling
  max_race_view=3
  ; Race lights vertical position (0..600)
  lights_y=250
  ; Time to keep info texts onscreen (ms)
  info_time=5000
  ; Info position; x=0 means center horizontally
  info_pos=200 50 0 0
  ; Flag position (carproblem/disqualify); normalized to a 800x600 display (0,0 is topleft); default is centered horizontally
  flag_pos=50 20 150 110
  ; Enable wrong-direction indicator? (flashing image)
  show_wrong_direction=1
  ; Alpha scale of data/images/standings.tga (fading)
  standings_alpha_scale=0.75
}
console
{
  enable=1
  ; Location
  x=200
  y=580
  maxline=10
  ; Initial activation?
  active=1
  ; Paint console onscreen? (can still do UDP output)
  paint=1
  ; Autohide? If >0, specifies time (in milliseconds) when to hide in
  ; case of no messages
  autohide=5000
  ; Alternative route; UDP output (hides console window, only outputs to UDP)
  ; If no host is defined, output goes to main computer console window.
  ; Preferred is to direct to a RaceManager directly to catch all messages upon startup
  host=
  port=26000
  ; UDP server (for reliable messages, with connections, using ENet middleware)
  port_server=26001
  ; Multithreaded port - this port only replies to simple ping commands, making
  ; sure you can check Racer's up state even if Racer is busy with something (load a track for example)
  ; Default port is 26002
  port_mt=26002
  ; Log file (outputs all console message into data/dump/<file>). Leave empty to cancel logging.
  logfile=
  log_append=0
}
environment
{
  ; Air density; taken here is density of air at 15 degrees Celcius,
  ; 59 degrees Fahrenheit, in kg/m^3. This and other values can be
  ; found at http://www.windpower.dk/stat/unitsw.htm
  air_density=1.225
  ; Gravity (in m*s^-2)
  gravity=9.80665
  ; Outside temperature in degrees Celcius
  temperature=20
  rain
  {
    ; Multiply grip of surfaces for full rain (1.0)
    grip_factor=0.6
  }
  snow
  {
    ; Multiply surface grip; normally around 90% (0.9) for good snow tires
    grip_factor=0.6
  }
}
assist
{
  ; Automatically engage clutch at low engine rpm? (if 0 it might still be turned on if it is 1 in the car.ini)
  auto_clutch=1
  ; Automatically shift? (if car isn't already an automatic)
  ; You can also use the script commands 'manual' and 'automatic')
  auto_shift=0
  ; Enable traction control? (if 0 it might still be turned on if it is 1 in the car.ini)
  ; (script commands 'tc on', 'tc off')
  traction_control=0
  ; Enable ABS? (if 0 it might still be turned on if it is 1 in the car.ini)
  abs=0
  ; Enable ASL? Limits to AI speed (helps braking before turns; active speed limiter)
  asl=0
  ; Time allowed offroad (ms) before auto-reset
  time_allowed_offroad=0
  ; Time allowed without wheel contact (flying or lying on back)
  time_allowed_nowheel=3000
  ; Time allowed without driving
  time_allowed_novelocity=0
}
controls
{
  ; Input time step (#ms per input update); 20=50Hz
  time_input=20
  ; Output time step (#ms per output update; FF)
  time_output=20
  ; Time (in ms) when a bad shift is done (no clutching or bad speedshift)
  ; This is then the delay before the actual gear really becomes active.
  bad_shift_penalty=250
  ; Following the steering angle.
  ; An attempt to make the car cameras point in the direction where
  ; the driver would like to look. With high speed, use a smaller angle,
  ; since this can otherwise be disturbing to look at.
  pov_follow
  {
    enable=0
    min
    {
      ; Speed in m/s (100 m/s=360 km/h), angle in degrees
      speed=5
      angle=10
    }
    max
    {
      speed=50
      angle=1
    }
  }
  ; On-center reduction of oscilattion (shimmy). Reducing steering wheel back and forth
  ; motion at higher speeds. The idea is to cut down force near zero steering.
  ; Center squeeze: the higher the number, the smaller the range where force is reduced.
  ; Values ranging roughly from 1 to 20.
  center_squeeze=10
  ; Center minfactor; makes sure that at zero steering, there is still some force left.
  ; Mathematically, Mz will not be reduced further than the original Mz times center_minfactor.
  center_minfactor=0.4
  ; Minimal car velocity before on-center reduction becomes active (m/s)
  center_velocity_threshold=50
  ; Maximum start throttle, to keep automatics from going to 5th when lights go out
  max_start_throttle=1.0
  ; Ignore safety on controllers?
  ignore_safety=0
  ; Multi-thread engaging of controllers? (quick motion up while loading the track)
  thread_engage=0
}
selcar
{
  ; Car selection options
  ; Rotate floor along with car?
  rotate_floor=1
  light
  {
    x=1
    y=4
    z=5
  }
}
helicopter
{
  ; Mass of helicopter
  mass=200
  ; Spring constant to pull heli above car
  k=1
  ; Damping to keep helicopter from overshooting car location
  damping=10
  ; Height of heli (avoid going to high for clipping and rendering speed)
  height=50
  ; Lens
  fov=50
}
graphics
{
  ; Default font (in data/fonts/)
  default_font=din14
  ; Hide cursor? 0=don't hide, 1=hide if fullscreen, 2=hide even if not fullscreen
  hide_cursor=0
  ; Use track-specific loading images? (data/tracks/<trackname>/loading.jpg)
  use_track_loading_image=1
  ; Show car names above cars? (default 0)
  show_names=1
}
minimap
{
  ; Small map indicating where all the cars are
  enable=1
  alpha=1.0
  x=800-200
  y=0
  wid=180
  hgt=180
}
pacecar
{
  ; The pacecar stops after 1 lap
  ; Minimal distance between pacecar and actual drivers (m); starts braking beyond this.
  min_distance=20
  ; Minimal pacecar distance in time (s); if time to impact gets under this value,
  ; the pacecar will drive.
  min_distance_time=20
  ; Maximum distance before pacecar begins to slow down to let
  ; drivers approach
  max_distance=60
  ; At which distance before the end of the last pacelap to stop pacing
  turn_off_distance=12000
  ; Distance upon which the pacecar is removed from the race after pacing ends
  disappear_distance=-100
}
;
; Graphics
;
resolution
{
  ; Resolution to play in
  fullscreen=0
  ; Avoid screen switch? (takes 1 of height)
  near_fullscreen=0
  ; No border? (for non-fullscreen windows without a border)
  no_border=0
  ; Position of (non-fullscreen) window; for x/y, -1 means center on the desktop (non-fullscreen only)
  x=-1
  y=-1
  ; Width and height of window (or fullscreen resolution)
  width=1280
  height=800
  ; Surround Gaming (Matrox Parhelia)
  ; Pixel aspect ratio; normally 1 (pixels onscreen are sized 1:1)
  aspect=1
  ; Rendering aspect; 1.333 for most VGA resolutions, 1.6 for example for a 1280x800 screen (Apple screens, 16:10). 0=automatic (width/height)
  render_aspect=0
  ; Pixel depth (RGB; use 16 or 32; 32 preferred)
  bits=32
  ; Alpha bits? Not really needed for normal shader operation, so keep at 0
  alpha_bits=0
  ; Depth buffer bits; 16 or 24
  z_bits=24
  ; Stencil buffer bits; is used for projective shadows, stencil shadowing
  stencil_bits=0
  ; Frequency (only implemented on Mac)
  ; Make sure the frequency is supported, otherwise you could damage your monitor!
  frequency=60
  ; Vertical sync? 0=off (max framerate, the default), 1=sync to display frequency, >1=set interval
  vsync=0
  ; Frame lock? (0=disable, 1=enable) Only works on nVidia Quadro cards.
  frame_lock=0
  ; Force frame lock enable/disable to succeed? (for tests on non-Quadro cards)
  frame_lock_force=0
  ; Swap group & barrier; for locking multiple computers/displays (nVidia Quadro cards only) - 0=off
  swap_group=0
  swap_barrier=0
  ; Gamma (only implemented on Mac)
  gamma=1.0
  ; Number of monitors; normally set to 1, may be set to 3 if for example
  ; a Matrox Parhelia is used.
  monitors=1
}
window
{
  ; On X-Windows systems, should we let the window manager manage us?
  ; (this gives a border)
  manage=0
}
fx
{
  ; #ms per fx interval (things like skidmarks, smoke etc)
  interval=20
  ; Fog hint; 0=don't care, 1=fastest, 2=nicest
  fog_hint=2
  ; Forward visibility (in good weather conditions) in meters
  visibility=1000
  ; Use track lighting?
  track_lighting=1
  ; Skid marks; number of skid mark points
  skid_mark_buffer=100
  skid_mark_enable=1
  ; Allow skid mark saving?
  skid_mark_save=1
  sun
  {
    ; Sun white-out factor; the bigger, the more whiteout. Try 50000 first.
    whiteout=0
    ; Visibility method; 0=always (if in frustum), 1=zbuffer, 2=raytrace (NYI)
    visibility_method=1
    ; Enable flare?
    flare=0
    ; Flare textures (8 textures, ac0..4 each); avoid texture switches
    ; by keeping equal textures together (i.e. 0 1 1 instead of 1 0 1)
    texture=0 1 1 2 3 3 4 4
    ; Length of flare distance to sun (1=sun itself, 0=center of screen,
    ; -1 is mirrored across screen center)
    length=1.0 0.5 0.33 0.6 0.4 -0.25 0.2 -1
    ; Size scaling; 1=128x128, <1=smaller, >1=bigger
    size=6.0 .5 .25 0.8 .5 .25 .25 1.2
    ; Time of day enforcing (HHMM); if empty, the track's sun settings are used.
    time_of_day=
    ; Speed of time progress; 0 if no progress, 1 for real-time etc.
    fast_time_factor=0
    ; Use actual system time for sun? (take real time of day if time_of_day is empty; overrules the track's special.ini gfx.time setting)
    auto_time_of_day=0
    ; Day-night zapping in the middle of a session
    day_night_ramp=0
    ; Start time for ramp (in minutes from midnight)
    day_night_ramp_start=14*60
    ; End time for ramp
    day_night_ramp_end=23*60
  }
  smoke
  {
    ; Number of particles reserved; the more, the slower things may be,
    ; but nicer graphics (decrease fx.interval for best effect)
    particles=200
  }
  ; Fade value if car has a problem (to prevent sickness); may need to be >0.5 to have an effect
  problem_fade=0.95
  ; Fade alpha scale (to keep fade from fully fading)
  fade_alpha_scale=0.2
}
filter
{
  ; These settings are overruled by the new gfx engine in Racer v0.5.2
  ; Use mipmapping? 0=none, 1=nearest, 2=linear
  mipmap=1
  ; Use trilinear filtering? If mipmap=0 and trilinear=1,
  ; bilinear filtering is used instead.
  trilinear=1
  ; Max anisotropy; the higher, the better the filtering
  ; Only supported on some cards. Values 1..?. 1 will not use any
  ; anisotropy, starting from 2 you'll get results.
  max_anisotropy=4
}
envmap
{
  ; Enable old-style spherical environment mapping?
  enable=0
  ; Live updating of track environment map? (very costly)
  live_track=1
  {
    ; Number of cubemap sides to update per frame (less=faster but more jerk)
    sides_per_frame=2
    ; Use an offscreen FBO? Faster, better
    fbo=1
    ; Number of FBO bits; 8 or 16 (HDR)
    bits=16
    ; Size of FBO (width & height)
    size=512
    ; Render once? This will generate a nice map, but never update it. Very fast
    render_once=0
  }
  ; Dozens of options controlling live track map should come here. :)
  ; Default environment map image for sphere environment mapping
  default_texture=smap_whitesun_add.tga
}
shadow
{
  ; Keeping the shadow above the track
  ; Use projected shadow for cars (on tracks)? Turn off when using shadow mapping (CSM).
  project_shadows=0
}
renderer
{
  ; Gfx engine rendering options
  ; Desired framerate - will reduce detail dynamically to obtain the framerate (0 to disable)
  desired_fps=0
  ; Throttler detail limits (0=nothing drawn, 1=full detail, >1=increased visibility range)
  min_detail=1.0
  max_detail=1.0
  paint
  {
    ; Show wire frame?
    wireframe=0
    ; Show vertex normals?
    normals=0
    ; Show triangles? (default=1)
    triangles=1
  }
  ; Note that some fog parameters are defined in <track>/special.ini
  ; Enable fog? (shaders can still turn fog off)
  fog=1
  ; Use array elements instead of 1 drawelements?
  use_array_elements=0
  ; Use single pass rendering instead of multitexturing? Don't set at 1 if you use Cg shaders
  single_pass=0
  ; Support Vertex Buffer Objects? (for cars and/or tracks). Often increases framerate if enabled.
  use_vbo=1
  ; Support projected lights? (default=1)
  projected_lights=1
  ; CSM shadow mapping
  shadowmapping
  {
    ; Enable shadow mapping? If enabled, changes the Cg shader directory to
    ; data/renderer/shaders_hdr_csm (!) instead of data/renderer/shaders_hdr
    enable=0
    ; nr of splits used, each split takes one extra render loop (3 should be enough)
    splits=3
    ; split distances 0 - 3, each distance higher than the previous one
    splitdist0=10
    splitdist1=60
    splitdist2=200
    splitdist3=1000
    ; Correction added in the shader because of floating point precision
    splitcor0=0.00025
    splitcor1=0.0005
    splitcor2=0.002
    splitcor3=0.005
    ; the amount of frames to skip to increase performance
    splitrenderjump0=0
    splitrenderjump1=0
    splitrenderjump2=0
    splitrenderjump3=0
    ; offset the framecount for jumping frames
    splitrenderoffset0=0
    splitrenderoffset1=0
    splitrenderoffset2=0
    splitrenderoffset3=0
    ; texture resolution
    mapsize=1024
    ; debug mode (paints splits)
    debug=0
    ; size of the debug polygons rendered
    dbgsize=128        
    shadowintensity=0
  }
  rain
  {
    ; Method of rain; 0=fullscreen poly (old), 1=Project Gotham Racing 4 particle boxes
    method=1
    ; Method 1: particles per box (there's a maximum of 20 boxes); default 10000 (rain 1 means 20*10000 particles visible); max=10900
    particles_per_box=10000
  }
  bloom
  {
    ; Bloom on top of HDR
    enable=1
    ; Size of first bloom FBO (more are created, each half the size of the one before)
    width=512
    height=512
  }
  auto_exposure
  {
    ; If enabled, calculates luminance of the scene and automatically adjusts the 'exposure'
    ; It then overrules any exposure setting from track special.ini files or the script 'exposure' command
    enable=0
    ; Decrease the amount of luminance calculations to improve framerate
    steps=20
    ; Linear response; exposure=offset-sceneLuminance*gradient
    offset=1.4
    gradient=0.85
    ; Minimal exposure
    min=0.4
    max=100.0
    ; Gradually change exposure with a Kalman filter
    filter_gain=0.05
  }
  motion_blur
  {
    ; Method: 0=disabled, 1=OpenGL accumulation buffers, 2=blur-texture, 3=bitmap (not functional), 4=FBO (fast texture based)
    ; Preferred is FBO (the future is going to do more & more with FBO's due to Cg shaders)
    method=4
    ; Direct setting of FBO size (if 0, the window size is used) - only used for multiview+mirrors currently
    fbo_width=0
    fbo_height=0
    ; (Method 1 only) Motion blur using accumulation buffers; 0=don't use, >1=number of passes (renders); can be slow!
    passes=4
    ; (Method 1 only) Mix scale; <1=darken, >1=brighten (sort of HDR)
    accum_factor=1.0
    ; (Method 2 & 4) Amount of blur; 0=nothing, 1=full.
    blur_alpha=0.5
    ; (Method 4 only)
    fs_filter1=bloom_shadows_f.cg
    ; (Method=4 only) Number of color samples for multisampled FBO (0=no multi-sampling, 2/4/8/16=samples); only works on nVidia cards 8xxx series and up
    samples=4
    ; CSAA coverage samples (only supported on nVidia cards that support CSAA)
    ; Typical use: CSAA 16x: samples=4, coverage_samples=16. Much faster than plain MSAA (samples=16).
    coverage_samples=16
    ; Generate velocity map? (for use in fullscreen shader) Creates velocity values in R & G channels using motion_blur_v/f.cg shaders.
    velocity_map=0
    ; Distortion for projectors
    distorter
    {
      ; Enable distortion? (also set motion_blur.fs_filter1 to bloom_distort_edge_lr_f.cg for example if enabled)
      enable=0
      ; Enter edit mode at startup?
      auto_edit=0
      ; Enable a test pattern at start 
      init_testpattern=2
      ; Transparency of control points
      points_alpha=1.0
      ; Texture size (must be a power of 2)
      texture_size=1024
      ; Control points defining a net to fit the screen in. The points are normalized
      ; (so 1 means the right or lower side of the screen, 0,0 is the origin at the top-left)
      ; Number order is row-column, so control_point_10 means row 1, col 0.
      control_point_00=0.000000 0.000000
      control_point_01=0.250000 0.028320
      control_point_02=0.500977 0.066406
      control_point_03=0.750000 0.026367
      control_point_04=1.000000 0.000000
      control_point_10=0.009766 0.250000
      control_point_11=0.250000 0.250000
      control_point_12=0.500000 0.250000
      control_point_13=0.750000 0.250000
      control_point_14=0.987305 0.250000
      control_point_20=0.024414 0.500000
      control_point_21=0.250000 0.500000
      control_point_22=0.515625 0.483398
      control_point_23=0.750000 0.500000
      control_point_24=0.977539 0.500000
      control_point_30=0.000000 0.750000
      control_point_31=0.250000 0.750000
      control_point_32=0.500000 0.750000
      control_point_33=0.750000 0.750000
      control_point_34=0.985352 0.750000
      control_point_40=0.000000 1.000000
      control_point_41=0.250000 1.000000
      control_point_42=0.500000 0.971680
      control_point_43=0.750000 0.989258
      control_point_44=1.000000 1.000000
    }
  }
  ; Enable depth of field rendering? (experimental); needs motion_blur_passes>=2
  depth_of_field=0
  ; Force ATI card? A number of measurements may be taken, since ATI drivers have some problems.
  ; Note that v0.5.3 beta 8+ already automatically tries to detect ATI cards and overrules this value
  ; if an ATI card is indeed found (will force it to 1).
  ati=0
  ; Fader PID proportional setting; 0.002 is ok, 1 means superfast fades
  fgr_pid_p=0.002
  edge_blend
  {
    ; Software edge blending
    ; From v0.8.5, this needs to be done in Cg shaders, not a texture onscreen!
    ; Still, even with Cg, the p and gamma values are used.
    enable=0
    ; Curvature of edge fall-off (1=linear, 2=curvy, 3=more curved)
    p=2.000000
    ; Gamma of projector (around 1.8..2.2, 1.0=linear)
    gamma=1.93
    ; Size of edge ramp in pixels
    width=256
    ; Side (1=left, 2=right, 1+2=left&right)
    sides=0
    ; Testing the setup; draw a test image? (see also the script commands 'edgetest on' and 'edgetest off')
    test_pattern=0
    ; Transparency of test pattern (defaults to 128)
    test_pattern_alpha=128
  }
  gpu_shaders=1
}
lod
{
  ; Level of detail
  enable=1
  ; Modifying LOD values being loaded.
  ; 1=normal, <1=objects move out quicker, >1=objects stay visible longer
  factor=1.0
}
mirrors
{
  ; Simple rectangular mirror at top? Use the mirror texture!
  ; So if used, also enable texture.enable (set to 1)
  simple
  {
    ; Draw simple mirror on top of screen? If 1, also set mirrors.texture.enable to 1.
    enable=0
    ; Position (if undefined, it is centered horizontally and placed near the top vertically)
    ; Size of simple mirror (onscreen)
    wid=350
    hgt=120
  }
  ; Mirror texture
  texture
  {
    ; If you don't enable the simple mirror, you may also turn this setting off to save memory & render time
    enable=0
    ; Use an FBO to render into? (faster if you have the graphics power)
    fbo=1
    ; Anti-aliasing of mirror (normally 0, but 2/4/8/16 may look better)
    fbo_samples=4
    ; Texture size; the larger, the sharper, but also more costly
    wid=512
    hgt=128
    ; FOV in mirror view
    fov=40
    ; Update rate (1=update every frame, 2=update every 2nd frame, 3=every 3rd etc)
    update_rate=2
    ; Visibility in mirror (distance in meters)
    visibility=100
    ; Haziness in the mirror (default: 1.0)
    extinction_factor=5
    ; LOD factor (default: 1.0); keep it low to get fast rendering
    lod_factor=0
    ; Offset
    offset=0 0 0
    ; Angle offset (yaw, in degrees)
    angle=0
    ; Texture coordinates; normally 0 and 1. Use 0.5..1 for the left part (the mirror is reversed!)
    tc_x_start=0
    tc_x_end=1
  }
}
textures
{
  ; Big hack for faster loads during testing
  enable=1
  ; Quality; 1=max, 2=halfsize, 4=1/4th etc. Must be power of 2.
  quality=1
  ; Support texture compression? (default is 1 (on) unless shaders specifiy compression=0)
  compression=1
  ; Maximum texture size; useful to cut down on really big texturemaps
  ; or supporting ancient gfxcards that can only deal with 256x256
  ; texturemaps.
  max_wid=2048
  max_hgt=2048
}
shaders
{
  ; Faster loading during testing; if set to 0, no (Racer) shaders are loaded
  enable=1
}
;
; Debug settings
;
debug
{
  ; Use blackboxrevised.dll to catch bugs?
  use_blackbox=1
}
dbg_car
{
  ; Several physics settings - can have a big impact on car behavior, so proceed with care!
  ; Initial rotational speed
  av_yaw=0
  av_pitch=0
  av_roll=0
  ; Initial speed
  vx=0
  vy=0
  vz=0
  ; car's grip, when set to 0, the level's values are used, else, this overrides the levels grip
  grip=0
  ; engine's torque, when set to 0, the level's values are used, else, this overrides the levels torque
  torque=0
  ; Disable slipangle usage? (for steady-state acceleration tests)
  no_sa=0
  ; Disable pitch jacking forces?
  no_jack_pitch=0
  ; Disable roll jacking forces?
  no_jack_roll=0
  ; Wheel rotation speed at start (100 for example)
  wheel_rvx=0
  ; Enable suspension rotational movement?
  suspension=1
  ; Enable wheels touching ground? (if 0, it's all car-track collisions)
  wheel_road=1
  ; Enable gravity working on the body? Actually enables all chassis
  ; forces (suspension, aero, gravity). Gives a floating car if 0.
  ; DOES NOT WORK ANYMORE FROM V0.8.7!
  gravity_body=1
  ; Apply friction circle?
  apply_friction_circle=1
  ; Method; 0=Genta (prefers longitudinal forces)
  ;         1=vector trim (equal mix of forces)
  ;         2=void (don't combine forces; should be testing only)
  ;         3=Gregor Veble's combined Pacejka
  ;         4=Cruden combined (not really useful yet)
  ;         5=none (for MF5.2 testing; automatically used if Pacejka model is set to Magic Formula 5.2)
  friction_circle_method=3
  ; Maximum slip length for combined slip calculations (5=understeery, 15=snap oversteers)
  max_slip_len=6.0
  ; Maximum tan(slipAngle); default is 0.75 (+/- 36 degrees), 20.0 (87 degrees) seems to work better
  max_tan_sa=20.0
  ; Adjust force direction when wheel starts locking?
  wheel_lock_adjust=1
  ; Apply friction (reducing) curve based on slip velocity?
  use_slip2fc=0
  ; Zero lateral tire forces? (focus on longitudinal only)
  lateral_tire_forces=1
  ; Automatic damping (car.ini's damping_predict_lat)?
  auto_damping=1
  ; Test for car-track collisions?
  track_collision=1
  ; On (multiplayer) collision, how much time to keep server master (steps)
  collide_time=25
  ; Use AABBTree to speed up wheel-track collision checking?
  use_aabb_tree=1
  ; Avoid using spline info in the track? (to compare WITH splines)
  no_splines=0
  ; Use suspension force instead of tire rate force to determine
  ; load for Pacejka curves? This may stabilize things a lot during
  ; braking, avoiding the tire's jittering behavior and using the more
  ; gradual and damped suspension force instead. I think that rules
  ; out wheel hop though.
  use_susp_as_load=0
  ; Maximum forces (to try to avoid sudden explosive physics)
  max_force=130000
  max_torque=130000
  ; Maximum tire penetration (limits tire load forces)
  max_tire_penetration=0.1
  ; Maximum camber angle (Pacejka doesn't work well with high camber)
  ; Angle is in degrees.
  max_camber=15.0
  ; Enable camber calculations? (sideway car movement bugs)
  enable_camber=1
  ; Start with AI driver?
  start_ai=0
  ; Rev limiter timing (ms to cut throttle on activation)
  rev_limiter_time=50
  ; Limiting velocities to avoid adding too much energy
  ; 350 m/s is around Mach 1 (1260 km/h)
  ; NO LONGER ENFORCED (Newton)
  max_linear_velocity=350.0
  ; Max rotational velocity (radians/sec), to keep from overly spinning
  ; NO LONGER ENFORCED (Newton)
  max_angular_velocity=10.0 
  ; Apply conservation of momentum after collisions?
  conserve_momentum=0
  ; #samples in conversion of torque curve to lookup-table (lut)
  engine_lut_steps=100
  ; Implicity integrate suspension? (much more stable since v0.8.7)
  susp_implicit_integration=1
  ; 24-07-08: suspension live rate slope was overly simple; set the next variable to 0 (default=1 for backwards compatibility)
  simple_susp_live_rate_slope=0
  ; Dampen wheel velocity when its sign changes? (perhaps more stable with really hard dampers, default=0)
  damp_vertical_velocity_reversal=0
  ; Add jacking forces in implicit integration mode (susp_implicit_integration=1), default is 0 for backwards compatibility
  ; 1 works well (?) for the F1-v2, 0 for older cars
  implicit_add_jacking_forces=0
  ; Use Tustin tire? (experimental; different integration of wheel movement, currently buggy)
  tustin_tire=0
  ; Damper force correction: 0=don't (before v0.6.3, v0.8.7+), 1=halfway to zero velocity (v0.6.3-v0.8.4), 2=to desired damper velocity (v0.8.5/v0.8.6)
  damper_correct_method=0
  limit_arb_forces=0
}
damping
{
  ; Body low-frequency wobble damping; torque threshold.
  ; totalTorque must be less than mass^2*damp_torque_threshold
  damp_torque_threshold=4.0
  ; Also, the car velocity squared(!) must be below damp_vel_threshold (m/s)
  damp_vel_threshold=3.0
}
ai
{
  ; Thinking rate (ms per step)
  time_per_update=1
  ; Looking ahead; velocity*lookahead_factor is the #meters the AI
  ; looks ahead (targeting)
  lookahead_factor=0.02
  ; Minimal lookahead distance; too smooth out steering at low speed
  lookahead_offset=1
  ; Steering response; frequency (lower=slower response, high=fast steering)
  ; Higher values reduce driver induced oscillation it seems.
  steering_frequency=100
  ; Throttle/brake response
  throttle_frequency=2
  ; Line adjustment factor; the higher, the more the car is pulled towards
  ; the driving line
  line_adjust=0.0
  ; Line adjust minimal distance; race distance to be completed before
  ; line adjusting starts
  line_adjust_distance=1
  ; Focus on AI car when it appears? (testing AI avoid other cars)
  focus=0
  ; Load AI lines at all?
  load_ai_lines=1
  ; Drive alongside player car? (matches velocity to stay near)
  ; Only works with car0=player, car1=AI
  drive_alongside=0
  ; Ignore other cars entirely?
  ignore_cars=0
  ; Velocity scale (global AI performance)
  scale_velocity=1.0
  ; Target U correction speed (default 1.0; lower is slower)
  target_u_correct=1.0
  ; Target smoothing to avoid jerky steering
  target_smd
  {
    mass=1
    k=140
    ; Keep damping close to optimal; sqrt(k)
    damping=10
    maxdist=0.5
  }
  ; Acceleration smoothing using PID controller
  pid_accelerate
  {
    proportional=-0.3
    derivative=0.01
    integral=0
  }
  pid_steering
  {
    proportional=100
    integral=0
  }
}
state
{
  ; Automatically load state at start? (simulates Ctrl-L)
  auto_load=0
}
dbg_controls
{
  ; Turn off controls altogether?
  update=1
  ; Debugging the engine (also set controls.update to 0 to keep control values)
  ; Throttle 0..1000
  throttle=800
  ; Brakes 0..1000
  ; Clutch 0..1000
  clutch=0
  ; Initial steering position (-1000..+1000)
  steer=-800
  ; Road noise velocity factor (smaller=less road noise at low velocity)
  ; Only deals with low velocity situations!
  road_noise_factor=0.1
}
timing
{
  ; Speed of simulation; this time (in milliseconds) gives the number
  ; of milliseconds for each integration step. Internally, the granularity
  ; of time is 1/1000th sec. So laptime accuracy upto 1/1000th sec
  ; is possible.
  ; However, this is quite a lot of computing, and some computers may not
  ; be able to catch up with this. In fact, REAL time may then move faster
  ; than the computer can keep up with (in which case FPS becomes 0!).
  ; So I suggest 5ms for example. This will make the simulation run at 200Hz.
  ; Keep it at least below 10; a simulation running at anything less
  ; than 100Hz becomes more and more instable.
  integration_time=1
  ; Draw each frame? For debugging, it is handy to see every integration step,
  ; instead of doing realtime stuff, which may go much to quickly.
  draw_every_step=0
  ; Slowmotion inserts <slomo> milliseconds of delay at every drawn frame
  slomo=0
  ; Exit after x frames?
  ; Exit after x physics steps?
  max_steps=0
  ; Quit Racer after max_steps physics steps?
  exit_after_max_steps=1
  ; Realtime scaling; actually allows slowmotion or fastmotion driving
  ; Scales the realtime clock.
  realtime_scale=1.0
}
gfx
{
  ; Display triangles of the spline surface?
  show_spline_tris=0
  ; Show car collision geometries?
  show_car_bbox=0
  ; Show movables collision geometries?
  show_movables_bbox=0
  ; Check OpenGL errors while running? (may slow down rendering)
  check_opengl_errors=0
  ; Show live envmapping render results? -1=none, 0..5=side selection
  show_live_envmap=-1
  ; Show car points/lines, like nullpoint, CG, rollcenters, contact patch locations,
  ; suspension, spline interpolated location (hit point), AI etc.
  show_car_points=0
  ; Show aerodynamics?
  show_aero=0
  ; Show AI lines (racing lines, lateral lines)
  show_ai_lines=0
  ; Show timelines?
  show_timelines=0
  ; Show best driving line?
  show_bestline=0
}
collision
{
  ; Car-track CFM (constraint force mixing). Use a small value near 0 for default,
  ; and increase to make the car body softer
  cfm=0.0001
  ; Car-track ERP (error reduction parameter). Use a value close to 1 (0.9?) for
  ; default behavior, and reduce to decrease movements of the car when hitting
  ; an object (takes more integration steps to correct the car position)
  erp=0.6
  ; Friction coefficient for car touching track (or fences etc!)
  mu=0.5
  ; Body restitution; 0=bouncy, 30=clay, >40 bouncy again?
  restitution=15
  ; Restitution for network collisions (car-car)
  restitution_network=0.9
  ; Player car is never affected by collisions with AI?
  ai_collide_rock=0
  ; Do car-car collisions?
  car_car=1
  ; Report car-track collisions? (in console) (variable renamed on 8-4-09)
  ; Does not work on Newton for the time being
  report_car_track_collision=0
}
log
{
  ; Logging telemetry groups (also use F3 to toggle logging while driving)
  enable=0
  ; Filename (in data/dump/) to log to (extension will be .log or .pds, depending on 'type' below)
  filename=the_log
  ; #ms per logging entry
  period=100
  ; Logging type (0=ASCII file, 1=PI Toolbox PDS (.pds))
  type=0
  groups
  {
    ; Suspension lengths (for ASCII, also the ARB force)
    suspension=0
    ; Slip angle per wheel
    slip_angle=0
    ; Slip ratio per wheel
    slip_ratio=0
    ; Tire forces (Fx/Fy/Fz); currently unsupported for PDS output (only ASCII)
    tire_forces=0
    ; Steering angle (per wheel) & force feedback
    steering=1
    ; Throttle/brake/clutch (clutch stored is actual controller input, no auto-clutch included)
    controls=1
    ; Orientation is unsupported for PDS output
    orientation=1
    ; XYZ and distance (in PDS, only distance is recorded)
    position=1
    ; Car velocity (3D in ASCII, 1D in PDS)
    velocity=1
    ; Angular velocity (not supported in PDS)
    angular_velocity=0
    ; AX/AY/AZ m*s^-2
    acceleration=1
    ; RPM, Gear, Engine torque
    engine=1
    ; AI (ai_line_delta)
    ai=1
  }
}
camera
{
  ; Initial camera mode (0=car, 1=track, 2=heli, 3=disco)
  initial_mode=0
  ; Initial car camera (if initial_mode=0)
  initial_car_camera=0
  ; Focus on last network car that entered?
  focus_network_car=0
  ; Focus on front (pole) car?
  focus_front_car=0
}
stability
{
  ; Test going from menu into game and back again. Waits a couple of seconds, then
  ; runs the game, exists again etc.
  ; This is to find bugs which only appear every couple of hours.
  test_inout=0
  ; Number of seconds to stay racing
  time_to_race=5
  ; Number of seconds in menu
  time_in_menu=2
}
levels
{
  level0
  {
    name=Pro
    grip=1.0
    torque=1.0
    ; FCS Motion override (1=Racer_GTilt, 2=Racer_0, 3=EPhyse)
    system_model_switch=1
  }
  level1
  {
    name=Semi-pro
    grip=1.2
    torque=0.75
    ; FCS Motion override
    system_model_switch=1
  }
}
pacenotes
{
  ; Location onscreen (center!) in virtual 800x600 screen
  x=400
  y=30
  ; Size
  wid=100
  hgt=100
}
dev
{
  ; Development options
  ; If strict mode is set to 1, any errors are treated as fatal when loading tracks/cars and Racer exists immediately
  ; Use this mode if you're developing cars or tracks to make sure they're clean (generate no QLOG warnings/errors)
  strict=0
  ; Leave message in QLOG on car.ini values that are taken from data/cars/default/car.ini instead of car's car.ini?
  ; Will generate a lot of noise, only for use while developing car.ini files.
  note_ini_fallback=0
  ; Show QLOG at exit automatically, if it contains errors or warnings? Only works on Windows (runs Notepad).
  log_last=1
  ; Debug messages, sends UDP packets to host:port (for use with a UDP terminal, such as 'udpterm')
  udp_out=
  ; Network wait to let a remote PC enter before the local one (multiplayer tests)
  ; In Racer upto v0.5.5, this leads to swapped driver names & cars
  wait_for_remote_client=0
  ; Fast start for BoundsChecker runs? (skips many driver inits for example)
  fast_start=0
  ; Add geometry triangles to AABB tree? (default: 1)
  add_geometry_to_aabb=1
  ; Optimize Newton collision trees (delete trackcollision.bin in the track's cache/ directory first to regenerate) - default is 1
  optimize_newton_tree=1
  ; Show memory reports in console?
  show_memory_usage=0
  ; Fake stats for sorting tests
  fake_laptime=0
  ; Hide audio for local car? (to listen to multiplayer cars)
  no_local_car_sound=0
  ; Force output of race results to statsclient even if the race is aborted?
  force_out_race_results=0
  ; Cache geode loading? (default:1); currently buggy when skinning cars
  cache_geodes=0
  internet_simulator
  {
    ; Enable delaying of packets sent out of the machine? (much better to use an extra machine with delayed portforwarding)
    enable=0
  }
  ; Flash screen every second? Used for network timesync tests to check timesyncing
  flash_network=0
}
 
Pretty much all of the tracks(that I liked) that worked very well with 0.8.8 are now either fully unusable(racer crashing while loading them) or completely buggered(all textures missing)

Now of course, I use an ATI card, so I have to use the noncg version. :rolleyes:
I am _not_ buying a new nvidia card any time soon, my Radeon HD3850 is just fine thanks. I do not need a power hungry space-heater in my currently very cool running PC.
Looks like all this CG shader s*** has finally done my oldish but very capable rig in. Nevermind it being able to play all the modern games that I have thrown at it, Racer wants less ..that is actually more.. but still less..:bad:

Yes; I understand that CG shaders are progress(kinda) for Racer.
I also understand that having an ATI card means my days using future versions of Racer are basically done. (so I am going to sthu here in a moment)
Yes; I knew this day would come. I was just hoping that it would not and putting it out of my mind.(denial ftw?)

I think I might have to retract my earlier post about trackir. It was kinda silly of me to make it before trying the new version of Racer and I have never gotten the impression that trackir was very popular or important to the Racer crowd anyway. :/
Not worth putting dev time into something few would use when there are plenty of other issues/half done things to still be fixed that everybody wants fixed.

Pay no mind, shutting the heck up now.:thumb:

The non-cg version is still pretty nice looking imo, but like plenty of content for the non-cg versions, a great deal is not set up properly either, so doesn't look so flashy etc.

Just look at Swiss Stroll, hardly an ugly track is it... and it flies along at a stupid frame rate on modern machinery. The problem is that very few people actually make tracks that look good to start with, irrespective of it being cg or non-cg.


All it needs it for people to spend the time to make quality content and it'll look good in both cg AND non-cg :D Just a bit better in CG :D

Dave
 
Well this is embarrassing. :S
I have missed the obvious - just rename the shader of old tracks or a copy of it and everything is fine. >_< Obviously there would be no falling back to a known shader name in the event that a _nocg version does not exists when using the nocg.exe. That would be confusing and illogical.

Well, anyway, in an effort to prepare for the future perhaps a basic outline of what to do to strip the cg stuff out of a shader file? For those that are not "into" shaders, I mean. As time passes there will be fewer tracks that come with no cg.


So I am guessing that we just remove the top cg related portion and then any instance of
~vf_blahblah
and uncomment things like
;blendfunc=blend
;mipmap=1
;depthwrite=1

?


*Edit
Also, will there ever be a smother transition of dash shadows? the different parts of the dash flickering light/dark at different times as you turn corners is quite unappealing. Or am I just missing something obvious here again?
[edit]nevermind, it is just the car setup stupidly I guess[/edit]

Please excuse me while a leave for a moment and try to track down why my esc key stopped being able to exit Racer. :pcbeat:
 
Well, i got rid of the texture arrays in CSM, it now uses a texture atlas instead.
(I even think it runs faster now)
That means it is likely to run on ATI cards, although we are not able to test it, since we don't have any ATI machines, but i can't see any reason why it should not work.


I will ask Ruud to release this version as soon as possible for testing

EDIT: I am now running on an ATI radeon 5850 and everything works fine, including CSM.. Some custom ATI hacks were needed in the code though. ATI does not handle alpha to coverage very well so some hacks were implemented there, and I got rid of the ATTR stuff in the shaders because ATI does not support that... Etc
 
As per the sort_offset, can that be set to any value? I thought it was a toggle 0/1 on/off, so decals or things we wanted to always be on top, had setting of 0.

But it looks like we can basically order the drawing with this then, so 0 is last, 1 is 2nd to last, 2 is 3rd to last etc etc?

Sort offset is indeed a number that can be used to control multiple items. Valid values are 0..99. This is because internally, a broad sorting order is used (like Quake3):

SORT_PORTAL=100,
SORT_SKY=200,
SORT_OPAQUE=300,
SORT_SHADOW=400, // Often used with polygon offset (before or after SORT_BLENDED_ALPHAFUNC)
SORT_BLENDED_ALPHAFUNC=500, // Blended materials+alphafunc (depthwrite=1 often)
SORT_BLENDED=600, // Blended materials without alphafunc
SORT_ADDITIVE=900,
SORT_RAIN=1000,
SORT_NEAREST=1500 // Last

Now only a few of these are used in Racer; really SKY, OPAQUE, BLENDED_ALPHAFUNC and BLENDED.
Blended_alphafunc is for road tracks for example (road decals). Sort_offset is just an offset to this value, so an object with sort_offset 2 will render later than an object with sort_offset 1. However, this is relative to the shader's original sort order (SORT_*)!

Far away mountains should use SKY shaders then, and relative positioning can indeed be done completely using sort_offset. Sorting is roughly:
- sort by shader's sort value (for example: SORT_SKY+sort_offset=201).
- sort by shader's Cg shaders (same shaders should render in sequence)

That's basically the main ordering. Some others such as depthwrite are checked but basically that's it.
 
Pretty much all of the tracks(that I liked) that worked very well with 0.8.8 are now either fully unusable(racer crashing while loading them) or completely buggered(all textures missing)

Now of course, I use an ATI card, so I have to use the noncg version. :rolleyes:

It's not that I want to annoy ATI users, but nVidia seems to have more flexible drivers and better support for things.
First, you don't need to use the non-Cg version; just turn off CSM (racer.ini, shadowmapping.enable=0) and it should mostly work on ATI.
Mitch put a 5750 (?) in his machine and has rewritten stuff to use a texture atlas, and got rid of a few ATTR9 signals in some of the more complex shaders (bumpmapping mostly) that still seem a problem for ATI.
Still, alpha_to_coverage looks like ATI is not dithering or something, but at least shadowmapping works on his ATI card.

v0.9 will be the new stable version, which hopefully will make track_nocg.shd and car_nog.shd content appear for the time to come. v0.8.12 with the ATI fixes will be released hopefully tomorrow afternoon (friday).

EDIT: Yeah, what Mitch said. ;)
 
Hmm... my 0.8.11 is way more blue than 0.8.10 was, and the chrome got dimmed quite a bit. More so on the body? Wheel uses a separate material but the shaders look the same to me.

Left is 0.8.10, right is 0.8.11. (both at Carlswood at 15:00)

Compromise seems somewhere in between the two but I didn't adjust anything so I don't know why the bumper's have gone all dark.

Code:
v_reflect
{  
  vertex_shader
  {
    file=dyn_standard_reflect_v.cg
  }
  ambient=.6 .6 .6
}
vf_reflect~v_reflect
{
  fragment_shader
  {
    file=dyn_standard_reflect_f.cg
  }
  fresnel
  {
    power=3.0
  }
}
vf_chrome~vf_reflect
{  
  fresnel
  {
    bias=0.9
    scale=0.1
    power=1.0
  }
}
shader_bodychrome~vf_chrome
{
  reflect=0.6
  specular=1 1 1
  shininess=15
  layer0
  {
    map=chrome1.tga
  }
  layer1
  {
    map=$trackenvmap
  }
}
shader_wheelchrome~vf_chrome
{
  specular=1 1 1
  reflect=0.6
  shininess=15
  layer0
  {
    map=wheel_color.tga
  }
  layer1
  {
    map=$trackenvmap
  }
}

Maybe that ambient=0.6 0.6 0.6 is affecting reflection brightness differently? With the fresnel bias @ 0.9 the material should be almost entirely reflection.


Less visible but there's quite a framerate difference between the two pics (15 for 8.10, 35 for 8.11) so I guess something's making my computer happier.
 

Attachments

  • color810811.jpg
    color810811.jpg
    57.7 KB · Views: 279
More bloom :(

In my view things are already too 'blown out' looking in many conditions.


As per your problem Stereo, the ambient shading is now also impacted by normals (too aggressively imo), so your 0.6 ambient is actually 0.3 ish on the horizontal normals, and pure black on the downward pointing ones... I find 1 1 1 ideal for ambient, for matte paint covered in clear coat lacquer...

I'm not sure how that is impacting chrome, which should just be pure reflection.

If 100% reflection is anything but 100% reflection, then the fresnel addition/mixing isn't working right.

I've also noticed things looking too blue in reflections, like the reflection mix with the diffuse/ambient isn't ideal. On chrome it looked ok here, but at say 50% reflection it was almost like the saturation was too intense. Should colour saturation drop as mix % drops?


Either way, your chrome is broken right now... I'm pretty sure it worked perfectly fine here, so mess with the ambient values and see if that gets intensity back. It shouldn't but it'll be a good logic check to see if it has influence (which it shouldn't I don't think as it's pure envmap that should be seen)

Hmmmm

Dave
 

Latest News

How long have you been simracing

  • < 1 year

    Votes: 356 15.6%
  • < 2 years

    Votes: 251 11.0%
  • < 3 years

    Votes: 243 10.7%
  • < 4 years

    Votes: 179 7.9%
  • < 5 years

    Votes: 302 13.3%
  • < 10 years

    Votes: 260 11.4%
  • < 15 years

    Votes: 166 7.3%
  • < 20 years

    Votes: 128 5.6%
  • < 25 years

    Votes: 99 4.3%
  • Ok, I am a dinosaur

    Votes: 293 12.9%
Back
Top