Gyroscopic FFB attenuation on center enabled by default for Cosmic (necessary for pretty much all FFB wheels on the market);
Low speed physics (Sliding Fix) modified;
Kunos cubic interpolation LUTs (tyre load sensitivity and camber LUTs) no longer extrapolate (caused numerous issues for modders over the years including unexplained explosions and game crashes);
Cosmic suspension:
Bodies can now be declared for use with KS ARBs (necessary for custom chassis flex to work, otherwise front chassis is always used, giving incorrect stiffnesses);
Ball joints got adjustable geometry (syntax the same as distance joints);
Cosmic body flex (when using ARB_BODY) shows up visually (USE_FOR_ARB must be used; it is the flag for the rear chassis body);
Debug lines use exact joint positions;
Tyres:
Thermal Model v2 is supported (docs are coming soon);
Better edge-case contact normal calculation (limits contact normals to some threshold from tire radial normal; should avoid strange load spikes and other edge-case phenomena where rays contact the surface strangely);
Option to apply relaxation length to forces instead of slip (add [_EXTENSION] USE_RELAX_LENGTH_ON_FORCE=1);
Colliders:
Colliders have new wear function available (docs are coming soon);
Lua parameters are accessible (ALLOW_LUA_RESET=1 per collider lets Lua reset wear individually, e.g. in a pit stop);
Suspension:
Damper LUTs display correctly again in the Car Debug app.
Brakes:
Brake thermal model considers ABS (same issue in original physics as well, but to ensure backwards compatibility it won’t be fixed; thanks to Tuttertep for report).
Using lights.ksanim in ext_config.ini disables original AC headlights animation;
Automatic exposure stops updating when making a screenshot;
Custom track physics: randomized car placement no longer applies to the first car;
Replacing YEBIS with custom post-processing in WeatherFX style no longer breaks option for rendering VR HUD without post-processing;
VR Tweaks: corners masking optimization shouldn’t interfere with scene rendering;
NeckFX: drawing driver helmet no longer freaks out for a few frames when car teleports or turned back;
Skidmarks (especially dirt skidmarks) look a lot better in mirrors;
Few improvements to reflection cubemap downsampling for smoother reflections;
App Shelf layout fixed;
Android Auto YouTube fixed, now starting with one of random searches (YouTube no longer shows videos on its main page);
Proper PBR shaders (fuPBR…) fixed and should have correct brightness and reflectivity now (but for the best look they do need WeatherFX style with linear color space);
Refracting headlights in fog fixed;
Accumulation AA disabled and saving original screenshot option work if screenshot render scale differs from main render scale;
Light from exhaust flames flickers properly;
Softer shadows on clouds;
Default WeatherFX style: clamping for light pollution intensity to help with strange configs;
Old and pointless rally tweak (increasing light parameters for a single rally car on a rally track) removed;
AI tweak about 200 km/h fixed (wasn’t loading properly before);
Track surfaces: option to replace sine noise with customizable perlin noise;
Track gravity set in surfaces.ini now works online for servers using new CSP (also, setting altitude above 20 km alters gravity as well);
Live reloading for data_human_materials.ini;
New track option [BOUNCED_LIGHT] CAUSTICS=SPECTATOR_ONLY for better performance;
Objects Inspector: option to show AABB and bounding spheres for selected meshes;
New [EXTRA_RULES] RETAIN_BRAKES_TEMPERATURE_IN_PITS=1 session parameter;
Offline race [RACE] FORCE_BASE_PHYSICS=1 parameter for disabling extended physics;
New [STEER] SCALE_POSTPROCESS=1 parameter for controls.ini;
Configure rim friction for cars with blown tyres using [_EXTENSION] RIM_FRICTION_X=200 RIM_FRICTION_Z=100 in tyres.ini;
Use …__MASK for flame settings to specify which flames would go out of which sources;
smGlass shader: frosted look fixed, available with RefractionMatte = 1;
GrassFX: option to use AO to add extra self-shadowing (requires textures with correct AO), enabled by default for configs that use default grass textures;
New UseNormalsAlphaToMaskFlakes parameter for car paint materials;
Android Auto: cars can add new wallpapers for users to choose from.
New ac.DataLUT21 and ac.INIConfig:tryGet2DLut() to deal with 2D LUTs;
New fields: ac.StateCar.dirt, ac.StateSim.weatherConditions, ac.StateSim.cameraExposure, ac.StateSim.exposureMultiplier;
Field ac.StateCar.headlightsColor fixed;
New ac.convertHDRToLDR() for converting HDR values to LDR taking into account linear color space adjustments such as gamma or brightness multiplier;
New ac.getCarOptimalBrakingAmount() computing optimal brake pedal input for safe braking;
Local, angular and local angular velocities are working in replays;
Use web.socket() to connect to a WebSocket;
Web functions use normal error messages instead of numbers;
os.runConsoleProcess() handles separate stderr properly;
Audio events created from files: seek, get total duration and timeline position;
Create audio event group and add DSPs to them instead of actual audio events (for now only for audio events created from files or streams);
string.nextEmoji() fixed, new string.codePointAt() method;
Load original textures from car KN5s (even if overridden by a skin) with carN::kn5:: prefix;
Scene API preserves original texture names when replacing textures for things like :applySkin() to continue working;
:applySkin() no longer applies to KN5s loaded from Lua;
Icons and callbacks of ui.addSettings() fixed;
ui.onExclusiveHUD() is more reliable now if used by multiple scripts at once;
Load list of names of original KN5 textures with ac.collectKN5TextureNames();
Load original KN5 materials with ac.collectKN5MaterialProperties();
Shader templates updated, ready for linear color space;
Easy way to set up included files search locations when parsing car or track configs;
stringify.binary works with vectors and such even if they’re references and not pointers or values;
Loaded KN5 files no longer unload if containing reference gets garbage collected;
Saving extra canvases as DDS includes MIPs as well now;
:accessData() for extra canvases responds faster;
Geometry shots: YEBIS got proper FXAA 3.11 antialiasing on top and transparency support;
Geometry shots: option to include fake shadows when drawing a car separately, fake car shadows are drawn nicely when drawing the whole scene;
ac.getAirPressure() and ac.getAirHumidity() are fixed;
ac.ControlButton:boundTo() works properly if button is not bound to anything;
Calling UI functions outside of UI drawing context should raise an error instead of collapsing AC;
ui.UserIconsLayer() with non-default columns are working now;
render.on(): more event names to listen to;
TTS: tune volume and rate, select gender, get callback when finished and other improvements;
ac.mediaCurrentPeak(): argument to monitor mic peaks as well;
New table.same() for comparing table contents in fast and reliable way;
Gameplay API (apps, new modes, online scripts):
New ac.setExtraTrackLODMultiplier() for something like cameras flying over the track;
New ac.setBodyDirt();
Some of Lua apps API, such as resetting car, saving and loading car state, marking lap as spoiled, controlling app windows, starting/restarting/teleporting to pits, blocking Escape button, setting car active, has been moved to Gameplay API;
ac.tryToOpenRaceMenu() can select a tab to open as well;
New ac.tryToSkipSession() function;
Callbacks and timers are called for new modes when AC is paused;
Physics API:
New ac.resetColliderWears() function;
ac.disableCarCollisions() works online;
Lua apps:
ac.setExposureMultiplier() for altering that exposure slider;
ac.getSetupSpinners() returns list of items for extended entries properly;
Move Lua apps as well with ac.accessAppWindow();
Car physics scripts:
Effects of ac.overrideBrakesTorque() can be disabled now;
ac.overrideSpecificValue() for overriding some other special values;
Use ac.addElectricTorque() to add extra electric torque to certain wheels;
Number of controller inputs increased from 8 to 256;
Record controller inputs in replays;
Adding extra mass shouldn’t break car resetting its position anymore;
Functions manipulating wheels and tyres now can also take an enum to alter multiple ones at once;
[CUSTOM_SCRIPT_ITEM_…] entries use section name if ID is not set;
WeatherFX:
Switch to linear color space with ac.useLinearColorSpace():
A bunch of fixes activating with linear color space;
Updated IBL-based ambient;
Two-layer fog;
Use ac.setHDRToLDRConversionHints() to hint to AC how to convert HDR image to LDR image quickly;
Add extra multiplier for dynamic lights not causing them to deactivate with ac.setWeatherLightsMultiplier2();
Fog: optional different atmospheric absorption for different color channels;
Option to set an Earth texture for nicer horizons (and a view of Earth from outer space);
New ac.getSunMoonAngle() for precise eclipse estimation;
New ac.pauseCubemapUpdates();
ac.setWeatherTimeOffset() enables real sun trajectory with a large enough offset;
Sun light stops only if sun is actually below the horizon, not just if it’s Y component is below 0;
Default filmic contrast value received by post-processing callback is 0.5, as it should be;
New shared libraries:
Tweak stored car states (could be used to do proper momentum-saving portals, for example);
Access some chat functions;
Access some of Steam API;
Launch fireworks from custom points;
Saving files resets caches for Lua scripts based on existence of some files;
Option to keep background Lua workers in Lua Debug app for a certain time after they’re finished;