Option to increase conditions limits allowing for controllers to set temperatures and wind speed outside of safe ranges;
Default WeatherFX style update:
Optional linear color space:
Finally, correct rendering;
Major visual rework with this option active;
Humidity and pressure are taken into account;
Actual lightnings in thunderstorms;
New upper clouds layers;
Falling stars at night (pretty small chance to see them though)
Auroras look slightly improved;
All extra effects are now optional;
YEBIS replacement:
Default/sensitometric tonemapping function adjusted to be more accurate;
Auto-exposure is a lot closer to YEBIS version now;
New physics experiments available for offline races:
Extended physics for all cars;
Extra lateral contact points (helps with curbs and shifts contact point left and right altering FFB);
Sun shadows affecting surface temperature moved to physics experiments section;
Alternative for AC physics threadpool distributing cars computation along cores;
Alternative optimal braking computation (alters AIs and keyboard steering when some wheels don’t touch the ground);
Make procedural noise to affect multiple tyre rays more accurately;
Replace sine noise on some surfaces with perlin;
Get procedural noise (sine or perlin) to alter contact normals as well;
Early collider activation is enabled by default again, this time much safer and uses number of wheels touching ground instead;
New experiment for tweaking car collider meshes: makes sure early collider activation won’t have any problems like before;
New experiment for expanding collider boxes vertically: decreases changes of a box phasing through the ground and, as a result, whole car passing through if falling flat;
New experiment for smooth transition to 0° steering angle when AC is paused (to make sure nothing would break because of sudden change like that);
Mouse steering:
When active, CSP apps, F5 and cockpit cameras ignore mouse;
Option to change behavior with a Lua script;
Option to use middle mouse button for a toggle;
Traffic Planner and its mode:
Fix for large buses not being rendered when close to edges of the screen;
Option to export a line as a new AI spline;
New chance field for cars with a bit of built-in guessing;
Track Adjustments:
Snap tyre grooves to underlying meshes so shadows wouldn’t double;
Experimental: enable biased double-sided shadows for all meshes to prevent detached shadows;
Experimental: fix misconfigured tyre grooves so they would still be drawn before fake shadows;
New options in New behavior:
Get AIs to use gas pedal properly with level below 80%;
Fix wrongly set upshift threshold based on RPM limiter (more advanced logic will be available soon);
Switch to a safe AI spline metadata raycasting (solves crashes if there is no physics surface exactly underneath AI spline);
Radio update (in case you were missing music in AC, thanks to badradio.nz for the idea):
List of stations and the actual playback are now handled on CSP side, while Lua scripts can connect to it and control things;
Default list of stations updated, including more up-to-date ones;
CSP uses advanced API provided by radio.co and laut.fm to collect extra information about currently playing music;
Android Auto: playback moved to CSP side, support for new features such as album covers and track info (if available);
New Internet Radio app on App Shelf: automatically resumes playback on launches (optional, enabled by default), convenient UI to manage list of stations;
Photo mode app:
Use mouse wheel for zooming when viewing a complete screenshot;
Screenshots with resolution multiplier use FSR for downsampling (unless zoomed in);
Hotkey for preview shot is working again, now switched to Alt+F8 (apparently Ctrl+F8 toggles mouse);
Smart Shadows:
Option to compute splits automatically based on distance for simpler adjustments and better splits arrangement;
Option to draw shadows around camera instead of drawing them in front;
Shadows stabilization is greatly improved;
New experimental option in General/Development (at the bottom) enabling instant replays online;
New apps switcher appearing with Ctrl+Tab (Tab button no longer shows leaderboard if any modifier is pressed);
New taskbar: desktop icons are replaced with previews (use settings to select icons instead if needed);
Alternative gear up and gear down mappings are handled on CSP side for more reliability;
Option to keep handbrake engaged after holding it for some time;
Live weather controller: new Open-Meteo weather provider;
Few finished physics experiments are no longer experiments and enabled by default everywhere;
Walking Out mode: getting out of a car preserves its input state including steering angle;
Add a bit of G-force based shaking to bumper or bonnet cameras in general settings;
VR tweaks: a few fixes to SPS and post-processing, option to change mouse pointer color, option to get pointer to fade faster;
Unnecessary settings hidden to clean things up;
IMGUI fonts now contain more special symbols;
New render stats app: an option for slower averages, a few fixes for timers;
Smart Mirror: option to show virtual pieces for mirrors not visible in the main viewport;
Photo Mode app: toggle car dirt and damages;
DXGI tweaks: option to limit AC to 30 FPS in background;
Ping is shown in driver tooltip for other drivers;
FSR: option to use custom pixel density, including a value above 100% for more details;
CSP Debug: control more aspects of current weather in offline races;
GrassFX: option to skip loading old grass meshes to speed up loading and reduce memory consumption;
Chat TTS: option to use multiple voices;
New CPU optimization preventing loading of certain audio samples for other cars (might help a bit with 30+ car servers);
New option in Small Tweaks to increase GPU priority of web browser backend processes (enabled by default, should prevent issues with HAGS in Windows 11);
GUI: option to draw AC apps together with IMGUI UI for better interoperability and similar blurred backgrounds;
ExtraFX: options to only use effects in replays;
CSP Debug app: option to render car colliders;
New pause: admins can restart or skip sessions from there directly;
New AI Spline Editor app on the App Shelf: load an AI spline and tweak its trajectory and sides by dragging them around;
Traffic planner: copy a lane with an offset, specify vertical offset when exporting splines;
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);
TORQUE_MODE_EX now disabled entirely for axle suspension types (prevents any potential issues that may arise from it);
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);
GPU constant buffers data is now 64-bytes aligned to work a tiny bit faster;
Raycasting static meshes checks AABB as well for a slight speedup;
Win keys stop Ctrl-based AC shortcuts as well;
AI-activating shortcut working without Ctrl held down fixed;
Advanced chunks optimization leading for tyre grooves to turn black on some tracks fixed;
Missing material variable warnings in log.txt should be muted now (pretty pointless warning anyway);
Cars should no longer spawn on roofs with aligned teleportation of custom tracks physics;
Shadows not working properly on a distant square when sun is low fixed;
Removed broken Python shared library option (it wasn’t of much use);
SkidmarksFX: fading on loading fixed (config wasn’t respected), fading values are now printed in CSP log with Skidmarks fading prefix;
Spotify music detection removed (wasn’t that reliable or informative, and everybody has moved to Windows 10 with much better music status system);
Logic for disallowing overlapping of AC forms updated, now shouldn’t cause apps to jump around too much; overlapping highlight is fixed too;
Users with non-latin usernames can be tagged by typing first latin symbol or digit instead and pressing Tab;
CSP should be able to handle files in UTF-16/32 BE/LE with/without BOM encodings (might lead to change in behavior if you’d be using a car with some config incorrectly saved in UTF-16 and failing to be parsed before);
App Shelf: main lua file is extracted last and renamed after extracting, should ensure there’ll be no failed installations;
As seemingly proven to not cause issues, AABB for reflections option is hidden and enabled by default;
GrassFX transitions are smoother;
Collapsed apps with automatic sizing load their previous sizes properly;
Mouse steering should work properly with pause menu;
VAO-only and normals views are working with linear color space now (by switching to old shaders sets);
New driver tags no longer stop working with paused race or replay;
IMGUI glow in transparent areas fixed;
GPU priority increased by default;
Smoke interaction with fast driving cars adjusted;
Skidmarks, grass and fake shadows should be better clipped for interior cameras;
AC should no longer crash when a mesh selected in Objects Inspector has been removed;
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);
Distant lights can pair with associated meshes with a new [LIGHTS_DISTANT_LAYER_…] meshes list and DISTANT_LAYER lights option stopping them from contributing to overall lights limit (docs are coming soon);
Lights with large radius or fade-out distance now will end up in a separate 4 km chunks thing (previously it was only 800 m chunks, and fade-out distance wasn’t taken into account at all);
Lights with fade-out or range larger than 4 km will count as dynamic and remain outside of chunks;
New online option: CUSTOM_MOTION = 1, RESET resetting interpolation when car teleports (once tested and verified, will be enabled by default for all servers);
Tracks: add alternative splines named ext_alt_fast_lane_?.ai to ai folder and CSP would use those for random cars for something like alternative paths NFS5 Porsche style (not used by track day car respawning for now);
Use MATERIAL_FLAG_1 = 1 on MultiMap_emissive shaders to switch to UV2 for txEmissive;
Use MATERIAL_FLAG_2 = 1 on MultiMap_NMDetail shaders to use alpha of txDetail as a multiplier for reflectivity as well;
UV2 patches no longer load if generated from non-triangulated meshes (CM update filtering things on its side is coming soon);
emSkipDiffuseMap for emissive shaders now takes values in-between of 0 and 1, allowing to limit txDiffuse contribution;
Set emSkipDiffuseMap to -1 (or use CustomEmissive_UseDetailInsteadOfDiffuse mixin) to switch emissive shaders to use txDetail as a multiplier to txEmissive (instead of txDiffuse);
Add a second argument 1 to CLUSTER_THRESHOLD for lights and such in track configs to switch to clustering in 3D (slightly slower);
New [BASIC] INTERIOR_CLIPPING = … option for cars specifying if grass, skidmarks and fake shadows should be clipped for interior views (by default enabled for non-open wheelers);
New FORCE_MINUS_TWO_LOD_BIAS thing for shader replacements (please don’t use unless really have to);
New trees: AO baking now can be adjusted;
Hidden experimental option general.ini/DEV/NANORT_SCENE_RAYCAST to build accelerating structures for faster mesh raycasting (might increase memory consumption and make first raycasts slow);
Hidden experimental option general.ini/DEV/VIRTUAL_REPLAYS_ALLOCATION to use a magical VirtualAlloc function for replays instead of allocating small bits of memory and increasing them as more frames are being recorded;
Trees Inspector now shows more details about selected tree;
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;
Volume peak: devices are filtered based on regexps in small_tweaks.ini.
New ac.DataLUT21 and ac.INIConfig:tryGet2DLut() to deal with 2D LUTs;
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;
string.nextEmoji() fixed, new string.codePointAt() method;
Load list of names of original KN5 textures with ac.collectKN5TextureNames();
Load original KN5 materials with ac.collectKN5MaterialProperties();
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;
ac.getAirPressure() and ac.getAirHumidity() are fixed;
ac.ControlButton:boundTo() works properly if button is not bound to anything;
ac.ControlButton:setDisabled(): AC hotkeys can be disabled as well (at least some of them);
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;
New string.pack(), string.packsize() and string.unpack() compatible with Lua 5.3 behavior;
New string.urlCheck(), string.urlNext() and os.parseDate() functions;
New ac.StructItem.explicit() modifier for preserving order of items passed into structure constructors;
New ac.onTrackPointCrossed() for measuring custom sectors;
Functions to work with view and projection matrices, including getting matrices from ac.GeometryShot;
ac.OnlineEvent() got an option to receive messages that could have been sent before app has loaded (also, issue with messed up data when receiving two messages at once fixed);
Time spend on executing Lua callbacks callbacks time set by functions such as render.on() is measured;
Calling ac.store('key', false) clears out a value to fix compatibility with some cars (please keep it mind it’s only meant to store strings or numbers though);
State API:
New fields: ac.getCar().dirt, ac.getSim().weatherConditions, ac.getSim().cameraExposure, ac.getSim().exposureMultiplier;
Field ac.getCar().headlightsColor fixed;
Cars timing and sectors related info in car states online fixed;
ac.getSim().currentSessionTime and ac.getSession().hasAdditionalLap fixed in online races;
New ac.getCarPhysics().wheels[].discCoreTemperature for custom physics brakes;
New ac.getSim().isLinearColorSpaceActive for active linear color space fix;
New ac.getSim().currentVAOMode for current VAO debugging state;
New ac.getSim().cameraJumped will be set to true for a first frame after camera has been teleported;
New ac.getSim().isMakingScreenshot will be set to true if currently accumulating frames for a screenshot;
New shared libraries (to avoid standard library to grow too massive and slow down scripts loading, extra functions are being added like this instead):
`shared/sim/cars: tweak stored car states (could be used to do proper momentum-saving portals, for example);
shared/sim/fireworks: launch fireworks from custom positions;
shared/sim/ghost: create new ghosts, reload them live and more;
shared/utils/chat: share setups in chat, change car color;
shared/utils/steam: access some of Steam API functions;
shared/utils/appshelf: any script can use it to ask user to install a trusted app;
shared/utils/binary: effortless and fast reading and writing binary data;
shared/utils/playing: override info about currently playing music, for example, if your app is playing something;
UI & scene API:
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);
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;
Shader templates updated, ready for linear color space;
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;
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;
ac.SceneReference:ensureMaterialsUnique() shouldn’t leak or cause crashes anymore;
ui.renderShader() respects IMGUI clip area;
ui.addSettings() uses name if ID is not set, for more reliable state saving;
New ui.onChat() allowing to replace entire chat app;
ui.onExclusiveHUD() can return 'apps' to let CSP know it can draw IMGUI apps;
Experimental functions ui.pushAlignment() and ui.popAlignment() for aligning UI without usual complications;
Dumped shader replacements, or replacements collected from a KN5 file, no longer affect CSP functional shaders (such as wipers) by adding a new LEAVE_FUNCTIONAL_SHADERS=1 parameter to config entries;
ui.MediaPlayer: FMOD integration improved (but the option is still hidden), unloading media works better;
New render.BlendMode.OpaqueForced (overriding disabled opaque blending for transparent passes) and render.DepthMode.WriteOnly values;
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;
Physics AI API:
Assign a new spline for a certain AI car (experimental);
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();
New ac.setWindowBackground() for changing background color and optionally painting titles black;
New DARK_HEADER flag for windows if background used is white (title text and icons will be black);
New itemValues: number[] field for ac.getSetupSpinners() for CSP entries using LUTs;
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;
ac.setWeatherLightsRangeFactor(): override default range multiplier based on lights intensity multiplier;
ac.useMinDepthResolution(): change the way depth buffer MSAA is resolved depending on what you want to use it for;
FFB post-processing scripts:
New ac.disableLowSpeedFFBReduction(), just in case;
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;
Small chance of a fatal crash on Lua script unload (if it was using logging or something like that in any disposing functions) fixed;
Car physics scripts are better compatible with AC locking car controls;