Skip to content

Instantly share code, notes, and snippets.

@gro-ove
Last active April 6, 2024 18:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gro-ove/9c31ca2b8b5ba6e139cc510ae926e11a to your computer and use it in GitHub Desktop.
Save gro-ove/9c31ca2b8b5ba6e139cc510ae926e11a to your computer and use it in GitHub Desktop.
Changes from 22th of December to 5th of April
  • 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;
  • 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 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.

Lua:

  • Common API:
    • math.perlin() for 1/2/3D-perlin noise;
    • 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;
  • LuaJIT updated with latest upstream changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment