- SurfacesFX: experimental module replacing physics for gravel, sand and grass (more interesting things are coming soon);
- 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;
- YEBIS replacement:
- Default/sensitometric tonemapping function adjusted to be more accurate;
- Auto-exposure is a lot closer to YEBIS version now;
- Optional linear color space:
- 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;
- 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);
- 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 bindings to control audio playback.
Extended physics:
- General:
- 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).
Fixes:
- Wheel positions for remote cars with cosmic suspension fixed;
- ExtraFX: motion blur messing up fast spinning wheels on some cars fixed, a couple of fixes for overall shading;
- ExtraFX: volumetric lights no longer require fog blur to work;
- GamepadFX: Mobile script fixed, now points to a new Expo snack (couldn’t get the old one to update properly);
- Keyboard controls: braking should work when wheels are in the air;
- Astronomical computations precision fixed, now matching eclipses and all that;
- Chat settings saving fixed;
- Cars spawn with randomly oriented wheels;
- Nearby spawned skidmarks snap themselves to the actual visual meshes based on local area heightmap;
- OBS integration fixed;
- Transition between shadow cascades improved;
- GrassFX: updated and fixed shading, smoother shadows;
- CSP previews config ZIP can be placed to “Documents\AC\cfg\extension” for CSP to use it instead;
- Compatibility with latest ReShade fixed;
- Fake car shadows reprojection got more stable;
- New trees are drawn in more detail further when making a screenshot;
- Extended track physics no longer messes up AIs;
- Body flex: better compatibility with anti-roll bars;
- Fake shadows from wheels are aligned with fake shadows from the car itself;
- Occasional error with problems to find replays when starting from CM shouldn’t happen anymore;
- AC will no longer load files from data folder if data.acd is present but files are missing from it;
- Extra G/H/I/J keyboard bindings work now;
- Textures loading is more reliable, can handle malformed DDS files or generate missing MIPs properly again;
- Car cameras checkboxes in general settings fixed (some combinations were disabling too much);
- ExtraFX emissives are compatible with digital LEDs merging;
- Bending version of
smCarPaint
shader casts shadows properly; - Mesh compression option fixed;
- Wings no longer break in Quick Pits Menu if unedited (recent CSP regression);
- Computing AABB from collider meshes works even if meshes are shifted (fixes CSP previews and more);
- Live reloading for video configuration fixed;
- Custom penalties assigned from chat tools fixed;
- Heating intensity for braking disks adjusted;
- Default track altitude is set to 294 m for races with new update;
- BC7 texture compression (those two optimization options in general settings) is a lot more GPU-friendly;
- Mesh deduplication no longer causes GPU hang ups with some hardware in VR;
- CSP integrity verification (
[EXTRA_TWEAKS] VERIFY_CSP_INTEGRITY=1
in extended server settings) fixed; - Issues with AIs driving worse or choosing wrong AI spline (recent CSP regression) fixed;
- Timezone sanity fix updated;
- YEBIS: setting exposure to 0 works (making screen black, but it beats ignoring the change switching to 0% and leading to unpredictable behavior);
- AC would never move mouse pointer anymore unless its window is in foreground;
- Pro view fixed;
- INIpp parser can handle
\r
symbol properly; - A couple of regressions stopping some of PaintShop functions from working fixed;
- Messages about AC physics loop being late shouldn’t appear in log.txt anymore to save a bit of time;
- TTS for chat messages fixed;
- Few adjustments for sparks behavior and visuals, more light cast with ExtraFX;
- TyresFX: issues with guessed values being asymmetric fixed, defaults take visual wheel offsets into account;
- Distance for a car to count as focused with free camera increased from 3 to 5 meters;
- Rain AI trajectories no longer cause a crash on certain tracks;
- New driver tags respect option of old ones to draw a tag for a focused car;
- Normalizing mirrors UV works well with RainFX;
- AC shutdown is a bit more graceful now;
- A couple of fixes to get AI spline recording to work;
- Extended car physics: tyres without thermal LUTs work again;
- Car hazards blinking period fixed;
- Shaking headlights shake more with damage;
- Braking trace particles don’t break with resolution changes;
- AC no longer crashes if there was an error when trying to load cached AI splines metadata, metadata properly updates if AI spline changed;
- Multiple entries in lods.ini referring to the same model will be collapsed into one;
- Tyre width missing or set to 0 no longer causes TyresFX to stop function and tyre mesh to disappear;
- Referring to car textures by name from configs or Lua is now case-independent;
- Tyre rays don’t see wall meshes as double-sided (CSP regression a few versions ago);
- Caustics brightness with custom WeatherFX styles is fixed;
- Config “yebisest.ini” is properly ignored now, the module will always be active;
- Enabling autopilot no longer changes amount of fuel in car;
- Disabling autopilot restores automatic shifting state;
- 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);
- Few smaller fixes and optimizations.
Configs and tools:
- 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 withRefractionMatte = 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.
Lua:
- Common API:
math.perlin()
for 1/2/3D-perlin noise;- New
ac.DataLUT21
andac.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, newstring.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()
andac.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;
- New
- Physics API:
- New
ac.resetColliderWears()
function; ac.disableCarCollisions()
works online;
- New
- 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;
- Effects of
- 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;
- Switch to linear color space with
- 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;
- LuaJIT updated with latest upstream changes.