Dynamic weather conditions online with either a server plugin (documentation is coming soon) or custom acServer implementation;
New WeatherFX controller that uses OpenWeatherAPI to sync conditions with real weather dynamically;
State of wings used to hide and show additional car geometry is syncing online now;
FSR:
Whole thing reworked with officially released SDK:
Quality presets are different now;
Recommended level of sharpening is used now;
Option for adjusting MIP bias according to recommendations;
Old implementation is still present in case you wouldn’t like the look of the new one;
Option to set lower quality setting for left and right sides in triple screen mode;
Optional debug mode: hold Space to quickly switch to simple linear upscaling to compare;
Smoke fully reworked (apart from tyres heating and spawning logic):
New improved shading;
Improved smoke-cars collisions;
Better support for open-wheelers;
Tyre smoke spawns below car with extreme drifting angles;
Dust and splashes spawns around car, not just from wheels;
Dust flies off dusty wheels;
A bit of dust appears for some F1 cars with wooden skidpads when those touch the ground (and can be configured on per-collider basis, similar to sparks);
Clouds of dust spawn on collisions;
Smaller particles for bits of dirt and smaller splashes spawn in contact points;
Long-lasting smoke and dust (lasts for several minutes);
When on grass, instead of dust clouds, more subtle soil particles are used (color is set in track config);
New look for smoke from exhaust, heated brakes and damaged engine;
Smoke won’t show up inside a cockpit;
Colored smoke and dust lose saturation with expansion, with new config parameters to adjust the rate;
Smoke culling improved for further optimization and smoother transitions;
New options to adjust density and on-screen size, to balance between visuals and performance;
With ExtraFX, option to get smoke clipped by windows or, instead, rendered behind them;
Extra effect with smoke covering whole screen, to get effect of camera stuck in smoke much cheaper;
Pieces particles update:
Adjusted types chances, size and shading;
Collision detection now uses car heightmaps instead of depth buffer for more accurate results;
Size of sparks particles fixed, sparks no longer spawn with head-on collisions;
TyresFX:
Grass and dirt on tyres reworked, textures and rendering both;
Soil color is taken into account;
GrassFX:
Active ExtraFX pass option now properly supports fake car shadows reprojection;
Grass deformation updated, now takes into account grass height;
If you’re using original AC motion blur, it would affect grass as well now;
Smart Shadows:
Smooth transition between cascades reworked and is configurable now;
Disk shadows filtering removed, PCF is back until I figure out how to do it properly;
Nice Screenshots:
Old HDR fix thing is now replaced with brightness-based weighted average; much easier to deal with, and it produces better results;
Accumulation DOF: options to customize shape and samples distribution for bokeh;
New rendering modes: 360°, fisheye, split screen (new Content Manager supports custom modes for AC video settings);
Specify joypad index for joypads input mode;
Support for VAO patches v5 with spatial AO samples for dynamic objects;
New sky mesh with more evenly distributed triangles for better reflections and mirrors;
Option to hide console;
Option to create portals to other servers online for freeroam servers;
Scene tweaks from new photo mode app remain active with app hidden, or without replay (in a single-player race);
If VR failed to initialize, there’ll be a warning on loading screen (especially helpful if you accidentally chose wrong render mode);
Similar warning would be shown if ExtraFX would fail to initialize because of AC motion blur;
Chat shortcuts reworked: new UI system, now don’t trigger change in turbo, different approach for alternative set of messages;
Option to unbind digit buttons from changing turbo level;
Triple screen tweaks: option to always show driver name tags (with original system);
Semi-transparent shadows from smoke, flames, semi-transparent objects and such improved with Bayer dithering;
Button for manual control of speed limiter;
Online servers can alter speed limiter parameters, disable forced limiter (with configurable penalties), re-enable collisions in pits;
Walking out module: settings, improved transition, few fixes, selected car is the controlled one, tool for positioning cars a bit more easily;
Custom glare for distant headlights (experimental, disabled by default for now);
VR mirroring: option to fill the screen, new modes for anaglyph mode, additional settings;
Support for custom track tyres raycasting with a CSP plugin;
Option to fix audio alignment (seems like sometimes some AC cameras could break it);
Option to hide CPU occupancy warning;
Option to add border to AC window just in case;
PP-filters now can access additional auto-exposure options, for example, changing how fast AE changes (filters editor got new options in a sub-section of the AE section);
Support for secondary clutch axis (CM support is coming soon);
Option to hide driver name tags and driver points on track map for certain cars online via server config or extended server API;
New driver tags: option to control rendering distance;
Small tweaks: option to alter change AC audio volume during the race with buttons;
Option to remove 1 GB size cap for replays;
Double precision physics engine now enabled by default;
Freer camera: use pedals to smoothly control camera speed.
Override car data files related to visuals, such as lods.ini or lights.ini, by creating new files in extension/data_override folder;
Colorful shadowing: overall look improved, new parameters;
Masking pass shading improved, doesn’t look as messy with darker textures, new parameters;
Custom car physics:
Create hidden car setup items linked to some AC physics controller (for example, to create a suspension with ride height adapting to car speed);
Link clutch damage to exceedingly high torque;
Create extra links for any suspension, linking together hubs or attaching hubs to body with distance or fixed joints;
New inputs for dynamic physics controllers: DAMAGE_ENGINE, DAMAGE_GEARBOX (0 for original, 1 for fully damaged);
Custom track physics:
Soft walls fixed, with new MAX_DEPTH option to limit softness for collisions that are too deep (docs are coming);
Cars spawned aligned to track surface (optional, controlled by track’s physics config surfaces.ini, enabled by default with custom track physics);
Deformable track walls for deep collisions (with soft colliders), for tyre walls and such;
TyresFX:
New DIRT_OFFSET_K parameter, similar to DAMAGE_OFFSET_K;
Option to set custom meshes for different tyres;
[MESH_SPLIT_...]:
Set split name or material directly, or use existing material;
New mode COPY_FLIPPED to fix missing interior windows;
New INSERT_TO option to specify new parent for new meshes;
Parameter [BOUNCED_LIGHT] AMBIENT_MULT=0.2 for reducing ambient effect on bounced light now that new VAO patches for tracks have light bounces;
Parameter [REFLECTIONS_FX] INTERIOR_NODES=… for cars without properly set COCKPIT_HR now works better, affecting more CSP features;
New car instrument inputs for KERS;
Extra car switches (those extra A/B/C/D functions):
New extra E and extra F switches are added;
Switches now can have a name set in config to show in car description during loading;
Optionally, switch can operate in hold mode (active while button is pressed);
Optionally, switch can require stationary car to activate (like a speed key for Bugatty Veyron, for example), or neutral gear, or pressed brake pedal;
CSP configs can add extra comments about car features on loading screen;
Adjustable wings now can affect several nodes at once (easier to get LODs to work);
New ColoredBlackSpecular parameter for car paint shader improving look of multi-colored skins, enables automatically with fourth version;
Set soil color for tracks along with dirt and grass color;
Option to set soil, dirt and grass colors for different types of surfaces;
New track inputs:
CAR_DAMAGE_N for amount of damage of Nth car;
CAR_DAMAGE for maximum amount of damage of all cars (could be tied to roof lights of ambulances?);
ONLINE_RACE switching to 1 for online races;
TIME_SMOOTH: time of day in seconds without rounding;
In condition expressions, writing condition: prefix when referencing a different condition is no longer needed;
In places where previously track parameters could either be a number or reference a condition, now expressions are fully supported as well;
CONDITION for track lights and material adjustments now can use expressions too (although, without color support for now);
Issue with parameters MOVE_MESH_BEHIND and MOVE_MESH_IN_FRONT_OF unable to reorder elements within same parent is fixed;
Track configs now can set flame emitters;
New common/particles_track.ini with some presets for track particles (bonfire, stove, flare);
New common/displays.ini helping to easily create new quads for digital displays in cars;
Macro CustomEmissive_UseDiffuseAlpha fixed, now can use alpha from txDiffuse;
If you’re using wing animations to show and hide extra bits, now you can configure it so hidden geometry would actually be hidden, saving draw calls:
Car lights now can be bound to wing states, referencing wing ID and using LUT for brightness multiplier;
For simple cases with two states where hidden bit is either scaled down or moved far away, CSP should be able to guess things automatically;
Tool to quickly generate such animations with corresponding config is available on CSP wiki;
When copying coordinates from Objects Inspector, hold Shift for additional precision;
Brakes input for cars fixed, now uses [BASIC] BRAKES_THRESHOLD as default threshold;
Car config parameter [DATA] DISABLE_DIGITALINSTRUMENTSINI=1 to disable original digital instruments;
Track config parameter [DYNAMIC_OBJECTS] DISABLE_ONLINE_SYNC=1 to disable syncing of dynamic objects online and get them to start from initial position for each new connected client;
Tracks now can use custom model for static reflections or set shader replacements to act upon a default one (good for hiding trees on tracks like Monaco);
Problem with changes to semi-transparent shadows not applying live is fixed.
Live reload for Python apps with Python apps profiler, including fully automated option;
New functions for time control: ac.ext_getWeatherTimeMult(), ac.ext_setWeatherTimeMult(value);
New functions for advanced rendering: render to texture, use custom pixel shaders, access virtual mirror texture for custom virtual mirrors;
Function to check if VR is active or not;
Result of ac.newTexture() is cached now, feel free to re-create those textures each frame (although it would still be faster to save value locally);
Lua apps: IMGUI for UI, extra APIs, live icons, fullscreen drawing callback for optional fullscreen HUDs with custom virtual mirror, damage and fuel warning indicators (all optional);
WeatherFX:
API to create and manipulate dynamic lights for more advanced visual effects;
New ac.setSkyV2SunSaturation(number) to adjust sun saturation;
New ac.setTrackConditionInput(key, value) function which also allows to override AMBIENT input;
Functions to adjust VAO and extra AO samples parameters;
New sky-covering clouds using panorama textures as an alternative way to render clouds;
Option to load textures asynchonously, new function to unload textures;
New cloud material parameter normalFacingExponent for adjusting normal calculation (default value is 0.5);
New cloud parameter normalYExponent for shifting whole cloud shape, to get it to look more as if camera is below;
New cloud parameter topFogBoost for boosting fog at the top of the cloud;
Implementation and controller scripts now can do some work in parallel, reducing load on main core;
Controller scripts got new API for making HTTP(S) requests;
Lua scripts:
New module to create Objects Inspector tools using Lua, with extended API for creating various UI controls;
New table functions table.filter(), table.map(), etc.
New timer functions setTimeout, setInterval and clear… counterparts (similar to JavaScript);
New I/O functions io.exists(), io.load() and io.save() (only for scripts that would have access to I/O);
Load and store typed values with ac.storage (could be used to access string values based on keys or, for faster access, create localized holders);
ac.load(key) returns nil if no value with such key was stored before;
More functions to access more details about simulation state like type names, driver names and nationalities, etc.;
Lua scripts being unable to find referenced files nearby fixed;
Scriptable displays:
Script could be in a separate file (SCRIPT=script.lua, same as LUTs);
Access mirror texture to create displays with rear view camera and overlays;
Define new cameras (similar to rear view mirror) with optional post-processing and access them in script, for this like parking camera activating with reverse gear;
React to clicks on other meshes (optionally limiting area to certain UV coordinates), so they could act like buttons;
Change car state: switch headlights, high beams and extra toggles;
Control some of car inputs: alter ABS, TC, brake bias, turbo wastegate, engine brake, etc. (could be used to create a dashboard similar to one of BMWs with extra car settings);
New display.horizontalBar() function for simple drawing of a progress bar made out of segments;
API to create dynamic lights and custom audio events (including an option to load a custom soundbank);
API to access nodes and meshes and move them around, hide/show or change their material properties;
Scriptable displays for tracks (similar to cars scriptable displays with access to track conditions and ability to set custom condition inputs);
New values for car state for Lua scripts: KERS state, number of gears, number of turbos, H-shifter state and more for user controls and for specific cars.