Version history

From Kitten Space Agency Wiki
Jump to navigation Jump to search

This page contains the entire version history of Kitten Space Agency.


Some releases will include a unofficial codename created by the community, which serve both as a easy way to reference a specific release and as a way quickly identify the most important or relevant features of each release. They are not explicitly required but are handy to have.

Versioning scheme

The current verisoning scheme (as of 21 August 2025) according to Dean Hall is as follows:

Year.Month.Local Build Increment.Git Revision Count

Because the build number depends on the developer who compiled that version of the game, it's not always sequential. The commit number is what matters - 2025.8.14.2125 is is after 2025.8.282.2121, as the commit number is higher.

Pre-alpha

The pre-alpha was originally available only to industry professionals and recognized content creators.

August 2025

Nine versions were released this month.

View versions
v2025.8.17.2088 - "Targeting"
View Changelog
Additions
- Added UI display of currently set Target.
- Added ability to set target of another vehicle.
- Add commented out pbr lighting for point lights.
- Added version number to menu bar so that users known which version they are running easier.
- Added current target and relative inclination between vehicle and burn orbit when a target is set.
Changes
- Darkened the Moon texture to better match its albedo. Realistically the Moon is am even darker brown/grey colour but I've opted for something between what we had and what's realistic for now.
- Fixed 132 byte push constant for planet rendering. Vulkan spec states minimum push constant size is 128 bytes and most AMD cards use this size. This might fix some AMD related issues.
- Adjusted celestial index calculation so the indices set on the planet renderer align with the ego positions passed to the global shader uniforms.
- Changed planet ubo to a dynamic ubo so the current planet index can be safely updated per-frame.
- Fixed thrusters getting stuck on when switching the map on and off.
- Fixed shift-click to set target being processed on button press and create burn being processed on button release causing BOTH to be processed. Burn creation is now also on left button press.
- Changed distance and speed UI info when hovering over celestial objects to be relative to the controlled vehicle when the player is controling a vehicle. Otherwise the speed and distance is relative to the camera (as it was before this change).
- Changed display of celestial object UI box and marker to be always ON if it is the current target of the controlled vehicle. This allows for easier rendevous.
Removals
- Removed PlanetPosition (EGO) from planet push constant and instead fetch it from the global shader uniforms.
View JSON
This version of the game didn't have a JSON file related version history.
v2025.8.33.2091
View Changelog
Additions
- Added patches and orbit lines for vehicles that are not currently followed by that camera will be drawn an 'inactive' color, which by default is grey. This will help make it clear in map view what is followed, controlled, and reduce orbit line clutter.
Changes
- Fix derivatives near poles for terrain mesh height mip selection.
- Revert the more agressive snapping on the terrain meshCollection.
- Change default tonemapper and exposure to Hable.
Removals
- Remove cubemesh storage radius.
View JSON
{
  "build": "2025.8.33.2091",
  "date": "2025-08-18",
  "fromRevision": 2088,
  "toRevision": 2091,
  "commits": [
    {
      "rev": 2089,
      "date": "2025-08-18",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added current target and relative inclination between vehicle and burn orbit when a target is set."
      ]
    },
    {
      "rev": 2090,
      "date": "2025-08-18",
      "author": "Dean Hall",
      "lines": [
        "Added patches and orbit lines for vehicles that are not currently followed by that camera will be drawn an 'inactive' color, which by default is grey. This will help make it clear in map view what is followed, controlled, and reduce orbit line clutter."
      ]
    },
    {
      "rev": 2091,
      "date": "2025-08-18",
      "author": "Ghassen Lahmar",
      "lines": [
        "Fix derivatives near poles for terrain mesh height mip selection",
        "Remove cubemesh storage radius",
        "Revert the more agressive snapping on the terrain meshCollection",
        "Change default tonemapper and exposure to Hable"
      ]
    }
  ]
}

v2025.8.59.2101 - "Failsafe"

View Changelog
Additions
- Added missing tooltip text for the STAR frame NUL ROT button.
- Added Tgt Reference Frame to FlightComputer.
- Added master version checking. This will (by default) automatically be checked on startup, but can also manually be trigged under the 'file' menu. If update is available, and user selects, the download site will be visited. Automatic updates will be handled later. For now only one master server is available, but alternates will be available and users will be able to modify the master server addresses, in the event of company death.
Changes
- Fix ocean-surface z-fighting issues resulting in circles and other patterns appearing on the surface near shores
- Improve ocean performance especially with MSAA by not using late-z
- Changed BALANC to BALNCE on the attitude autopilot panel.
- Limit thruster pulse rate in low thrust mode so it's more obvious what's going on and even finer control is possible.
- Relabel HIGH and LOW to DIRECT and PULSE with updated tooltips.
- Default RCS to DIRECT mode.
- Reduced minimum pulse time on Gemini thrusters which was way too long (real thrusters have transients which we don't currently model, so the real pulse data produces way too much thrust in the game at the moment).
- Refactor Target reference from Vehicle to FlightComputer. Rasoning to my madness - so we can more easily manage and implement the Target reference frame
- Fixed inability to double click to swap to a vehicle due to creating burn nodes eating the click. This does break double clicking for multiwindows but there isn't a quick fix until we have the new ImGui backend.
- Changed set target to NOT run a full burn plan and flight plan update.
Removals
- Remove initializing NLog in logging system
- Removed redundant JSON logging.
View JSON
{
  "build": "2025.8.59.2101",
  "date": "2025-08-19",
  "fromRevision": 2091,
  "toRevision": 2101,
  "commits": [
    {
      "rev": 2092,
      "date": "2025-08-18",
      "author": "Ghassen Lahmar",
      "lines": [
        "Fix ocean-surface z-fighting issues resulting in circles and other patterns appearing on the surface near shores",
        "Improve ocean performance especially with MSAA by not using late-z"
      ]
    },
    {
      "rev": 2093,
      "date": "2025-08-18",
      "author": "gravhoek-rw",
      "lines": [
        "Added missing tooltip text for the STAR frame NUL ROT button.",
        "Changed BALANC to BALNCE on the attitude autopilot panel."
      ]
    },
    {
      "rev": 2094,
      "date": "2025-08-18",
      "author": "gravhoek-rw",
      "lines": [
        "Limit thruster pulse rate in low thrust mode so it's more obvious what's going on and even finer control is possible.",
        "Relabel HIGH and LOW to DIRECT and PULSE with updated tooltips.",
        "Default RCS to DIRECT mode.",
        "Reduced minimum pulse time on Gemini thrusters which was way too long (real thrusters have transients which we don't currently model, so the real pulse data produces way too much thrust in the game at the moment)."
      ]
    },
    {
      "rev": 2095,
      "date": "2025-08-19",
      "author": "brogan",
      "lines": [
        "Remove initializing NLog in logging system"
      ]
    },
    {
      "rev": 2096,
      "date": "2025-08-19",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Refactor Target reference from Vehicle to FlightComputer. Rasoning to my madness - so we can more easily manage and implement the Target reference frame"
      ]
    },
    {
      "rev": 2097,
      "date": "2025-08-19",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added Tgt Reference Frame to FlightComputer."
      ]
    },
    {
      "rev": 2098,
      "date": "2025-08-19",
      "author": "Morrow",
      "lines": [
        "Fixed inability to double click to swap to a vehicle due to creating burn nodes eating the click. This does break double clicking for multiwindows but there isn't a quick fix until we have the new ImGui backend."
      ]
    },
    {
      "rev": 2099,
      "date": "2025-08-19",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Changed set target to NOT run a full burn plan and flight plan update."
      ]
    },
    {
      "rev": 2100,
      "date": "2025-08-19",
      "author": "Rocket",
      "lines": [
        "Added master version checking. This will (by default) automatically be checked on startup, but can also manually be trigged under the 'file' menu. If update is available, and user selects, the download site will be visited. Automatic updates will be handled later. For now only one master server is available, but alternates will be available and users will be able to modify the master server addresses, in the event of company death."
      ]
    },
    {
      "rev": 2101,
      "date": "2025-08-19",
      "author": "Rocket",
      "lines": [
        "Removed redundant JSON logging."
      ]
    }
  ]
}

v2025.8.86.2108

View Changelog
Additions
- Added logic for main engine throttle control, but the throttle is currently set to 1 always until we get a basic UI up.
- Added a minimum throttle setting to the engine XML.
Changes
- Changed Burn marker to appear/disappear in flight at the same time as the orbit/patch lines appear/disappear.
- Changed main engine control from push-to-fire (space) to startup/shutdown (z/x).
- Attempted fix for crashes experienced by folks who have bandicam installed. It seems like they don't handle vkDestroySwapchainKHR() correctly when the passed in swapchain is null (which the vulkan specification states should be supported).
- Fixed if InputActions were removed by developers, settings files would become corrupted. Now deserialize these in a safe way.
- Changed Target SOI rendering to appear/disappear in flight at the same time as the orbit/patch lines appear/disappear.
- Quick adjustment to inter-frame time tracking to use doubles rather than floats. We had an issue with time precision at higher warp - not certain this fixes it but it should help in some cases and doesn't seem to have broken anything.
- Fixed critical issue with version checking that would cause a grey screen if WelcomePopup and ConfigSelectOnStart were enabled, and a new version deployed.
Removals
- None listed.
View JSON
{
  "build": "2025.8.86.2108",
  "date": "2025-08-19",
  "fromRevision": 2101,
  "toRevision": 2108,
  "commits": [
    {
      "rev": 2102,
      "date": "2025-08-19",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Changed Burn marker to appear/disappear in flight at the same time as the orbit/patch lines appear/disappear."
      ]
    },
    {
      "rev": 2103,
      "date": "2025-08-18",
      "author": "gravhoek-rw",
      "lines": [
        "Changed main engine control from push-to-fire (space) to startup/shutdown (z/x).",
        "Added logic for main engine throttle control, but the throttle is currently set to 1 always until we get a basic UI up.",
        "Added a minimum throttle setting to the engine XML."
      ]
    },
    {
      "rev": 2104,
      "date": "2025-08-19",
      "author": "Morrow",
      "lines": [
        "Attempted fix for crashes experienced by folks who have bandicam installed. It seems like they don't handle vkDestroySwapchainKHR() correctly when the passed in swapchain is null (which the vulkan specification states should be supported)."
      ]
    },
    {
      "rev": 2105,
      "date": "2025-08-19",
      "author": "Rocket",
      "lines": [
        "Fixed if InputActions were removed by developers, settings files would become corrupted. Now deserialize these in a safe way."
      ]
    },
    {
      "rev": 2106,
      "date": "2025-08-19",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Changed Target SOI rendering to appear/disappear in flight at the same time as the orbit/patch lines appear/disappear."
      ]
    },
    {
      "rev": 2107,
      "date": "2025-08-18",
      "author": "gravhoek-rw",
      "lines": [
        "Quick adjustment to inter-frame time tracking to use doubles rather than floats. We had an issue with time precision at higher warp - not certain this fixes it but it should help in some cases and doesn't seem to have broken anything."
      ]
    },
    {
      "rev": 2108,
      "date": "2025-08-19",
      "author": "Rocket",
      "lines": [
        "Fixed critical issue with version checking that would cause a grey screen if WelcomePopup and ConfigSelectOnStart were enabled, and a new version deployed."
      ]
    }
  ]
}

v2025.8.100.2112

View Changelog
Additions
- Refactored Cloud and Exhaust Quality settings, so that by default debugging quality settings for upscaling are not included. This is because users may be confused about which settings provide better quality volumetrics. These have been changed to say quality with descriptive words.
Changes
- Update TOML to 6.2.0 with invalid enum dictionary fixes
- Moved the target reference back to the vehicle because we'll need to pass derived data to the flight computer instead. + Pass target data to the flight computer via the nav struct. + Added calculations for the TGT (target) frame of reference.
- Fixed critical issue, when a new update is available and the welcome window is open - the second popup will disable input. This is because both popups are modal - and the first closes the second but leaves modal operation in place. Not popups enforce only one modal one at any time.
Removals
- None listed.
View JSON
{
  "build": "2025.8.100.2112",
  "date": "2025-08-19",
  "fromRevision": 2108,
  "toRevision": 2112,
  "commits": [
    {
      "rev": 2109,
      "date": "2025-08-19",
      "author": "Rian Drake",
      "lines": [
        "Update TOML to 6.2.0 with invalid enum dictionary fixes"
      ]
    },
    {
      "rev": 2110,
      "date": "2025-08-18",
      "author": "gravhoek-rw",
      "lines": [
        "Moved the target reference back to the vehicle because we'll need to pass derived data to the flight computer instead.",
        "Pass target data to the flight computer via the nav struct.",
        "Added calculations for the TGT (target) frame of reference."
      ]
    },
    {
      "rev": 2111,
      "date": "2025-08-19",
      "author": "Dean Hall",
      "lines": [
        "Fixed critical issue, when a new update is available and the welcome window is open - the second popup will disable input. This is because both popups are modal - and the first closes the second but leaves modal operation in place. Not popups enforce only one modal one at any time."
      ]
    },
    {
      "rev": 2112,
      "date": "2025-08-19",
      "author": "Dean Hall",
      "lines": [
        "Refactored Cloud and Exhaust Quality settings, so that by default debugging quality settings for upscaling are not included. This is because users may be confused about which settings provide better quality volumetrics. These have been changed to say quality with descriptive words."
      ]
    }
  ]
}

v2025.8.282.2121

View Changelog
Additions
- Added first pass of changelog recording in project.
- Added tooltips to the navball frame buttons.
Changes
- Update README
- Fixed update checker would trigger for build variations over revision variations, but build variation should only be used where the revision is the same.
- Fixed Asset naming fix for linux.
- Fixed a few editor vulkan warnings.
- Moved "per/s" labels into the toolips for delta-v and speed gauges.
- Replaced navbalt TGT stub code with the correct calculations.
- Corrected target relative distance and speed data displayed under the label.
Removals
- None listed.
View JSON
{
  "build": "2025.8.282.2121",
  "date": "2025-08-20",
  "fromRevision": 2112,
  "toRevision": 2121,
  "commits": [
    {
      "rev": 2113,
      "date": "2025-08-19",
      "author": "gravhoek-rw",
      "lines": [
        "Corrected target relative distance and speed data displayed under the label."
      ]
    },
    {
      "rev": 2114,
      "date": "2025-08-19",
      "author": "gravhoek-rw",
      "lines": [
        "Replaced navball TGT stub code with the correct calculations."
      ]
    },
    {
      "rev": 2115,
      "date": "2025-08-19",
      "author": "gravhoek-rw",
      "lines": [
        "Added tooltips to the navball frame buttons.",
        "Moved \"per/s\" labels into the toolips for delta-v and speed gauges."
      ]
    },
    {
      "rev": 2116,
      "date": "2025-08-20",
      "author": "Morrow",
      "lines": [
        "Fixed a few editor vulkan warnings."
      ]
    },
    {
      "rev": 2117,
      "date": "2025-08-20",
      "author": "Christopher Howlett",
      "lines": [
        "Asset naming fix for linux"
      ]
    },
    {
      "rev": 2118,
      "date": "2025-08-20",
      "author": "Rocket",
      "lines": [
        "Fixed update checker would trigger for build variations over revision variations, but build variation should only be used where the revision is the same."
      ]
    },
    {
      "rev": 2119,
      "date": "2025-08-20",
      "author": "Rian Drake",
      "lines": [
        "Update README"
      ]
    },
    {
      "rev": 2120,
      "date": "2025-08-20",
      "author": "Rocket",
      "lines": [
        "Added first pass of changelog recording in project."
      ]
    }
  ]
}

v2025.8.14.2125 - "Cull Depths"

View Changelog
Additions
- Add terrain GPU frustum culling, save some terrain performance especially with tessellation.
- Added Version History section, that by default will automatically show on boot of a new version.
Changes
- Update ocean level and mask correctly on changes from debug UI.
- Fix agressive terrain culling near camera by using a tolerance for max tesselation displacement in world space.
- Rename ocean-specific culling files and move shared culling functions.
- Fixed build deployment bug where build number would iterate whenever a run within the IDE, not just when publish action was run.
Removals
- None listed.
View JSON
{
  "build": "2025.8.14.2125",
  "fromRevision": 2121,
  "toRevision": 2125,
  "commits": [
    {
      "rev": 2122,
      "date": "2025-08-20",
      "author": "Ghassen Lahmar",
      "lines": [
        "Update ocean level and mask correctly on changes from debug UI",
        "Add terrain GPU frustum culling, save some terrain performance especially with tessellation",
        "Fix agressive terrain culling near camera by using a tolerance for max tesselation displacement in world space",
        "Rename ocean-specific culling files and move shared culling functions"
      ]
    },
    {
      "rev": 2123,
      "date": "2025-08-21",
      "author": "Dean Hall",
      "lines": [
        "Added Version History section, that by default will automatically show on boot of a new version.",
        "Fixed build deployment bug where build number would iterate whenever a run within the IDE, not just when publish action was run."
      ]
    }
  ]
}

v2025.8.19.2133

View Changelog
Additions
- Atmosphere reflections were added for reflection rays which do not intersect the planet (we don't have a good way to do planet reflections yet).
- Add atmosphere reflections to vessels
- Added build process handling so that discord version messages and other webhook payloads will be prepared by the build server, so that this process can be automated.
Changes
- Temporarily disabled the planet renderer ubo dynamic offset if the terrain editor menu is open until I make the GUI work with a dynamic offset.
- Fixed burn marker visibility in map mode and normal camera mode to use the correct orbit to measure when to turn it on and off.
- Fixed a crash when collapsing the map UI menu.
- Simplify the BRUTAL package reference
Removals
- None listed.
View JSON
{
  "build": "2025.8.19.2133",
  "date": "2025-08-21",
  "fromRevision": 2125,
  "toRevision": 2133,
  "commits": [
    {
      "rev": 2126,
      "date": "2025-08-20",
      "author": "Linx-RW",
      "lines": [
        "Temporarily disabled the planet renderer ubo dynamic offset if the terrain editor menu is open until I make the GUI work with a dynamic offset."
      ]
    },
    {
      "rev": 2127,
      "date": "2025-08-21",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed burn marker visibility in map mode and normal camera mode to use the correct orbit to measure when to turn it on and off."
      ]
    },
    {
      "rev": 2128,
      "date": "2025-08-21",
      "author": "GitHub",
      "lines": [
        "Add atmosphere reflections to vessels",
        "Add atmosphere reflections to vessels",
        "Atmosphere reflections were added for reflection rays which do not intersect the planet (we don't have a good way to do planet reflections yet).",
        "This is only enabled when the vessel is inside the atmosphere as when it exits the atmosphere, the atmosphere lut produces incorrect rainbow colors (this is something I'm currently debugging). This means that the atmosphere color is attenuated to zero as we exit the atmosphere.",
        "The stars are also disabled when reflection rays intersect the planet inside the atmosphere, as they look weird if enabled here. The stars are enabled for all reflection angles when we exit the atmosphere."
      ]
    },
    {
      "rev": 2129,
      "date": "2025-08-21",
      "author": "Morrow",
      "lines": [
        "Fixed a crash when collapsing the map UI menu."
      ]
    },
    {
      "rev": 2130,
      "date": "2025-08-21",
      "author": "Rian Drake",
      "lines": [
        "Simplify the BRUTAL package reference"
      ]
    },
    {
      "rev": 2131,
      "date": "2025-08-21",
      "author": "Dean Hall",
      "lines": [
        "Added build process handling so that discord version messages and other webhook payloads will be prepared by the build server, so that this process can be automated."
      ]
    }
  ]
}

v2025.8.20.2136

View Changelog
Additions
- Added Target Frame button to Navball gauge.
Changes
- None listed.
Removals
- Revert commit "add atmosphere reflections to vessels".
- A performance issue has been found with the atmosphere reflections. The commit has been reverted while I investigate this.
View JSON
{
  "build": "2025.8.20.2136",
  "date": "2025-08-21",
  "fromRevision": 2133,
  "toRevision": 2136,
  "commits": [
    {
      "rev": 2134,
      "date": "2025-08-21",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added Target Frame button to Navball gauge."
      ]
    },
    {
      "rev": 2135,
      "date": "2025-08-21",
      "author": "josh",
      "lines": [
        "Revert commit \"add atmosphere reflections to vessels\"",
        "A performance issue has been found with the atmosphere reflections. The commit has been reverted while I investigate this."
      ]
    }
  ]
}

v2025.8.289.2212

View Changelog
Additions
- Added pitch and volume variance to rcs sound.
- Added ability to toggle followed vessel, it's parent and target orbits only on and off to the View menu.
- New ToNearest for time reference displays. Sequentially moves through display instead of based on modularly stickying to a time. For example: Old behavior on a countdown would show ["8 days", "1 week", "6 days"]. New Behavior is ["8 days", "7 days", "6 days"]. I also added a couple decimal places, which could use some tuning if needed. Old behavior is kept under ToNearest2 for perhaps different use cases.
- Added gauge screw instances for use with gauge panels. Not functional, but provides visual difference on panels used with gauges.
- Added a simplistic buoyancy calculation to the physics simulation. Ocean surfaces now support splashdown and apply drag.
- Added a simple predictor sphere to help determine when objects might interact with each other.
- Added density to oceans.
- Added basic support for multiple meshes in a single gltf/glb file. New XML keyword of 'Gltf' (to be expanded in functionality as needed). The Id given to each submesh is based on the name of the mesh in the Gltf file which will need to be set in whatever program you're using to export the gltf/glb. I have an idea for optionally overwriting these Ids in XML with some sort of key/value pairing to make it a bit easier to modify but it seems out of scope for now.
- Added anti-relative-velocity flight computer tracking target.
- Added PatchedConics.TryFindEncounter to find an encounter by matching Astronomical Id.
- Added Intercept Velocity (Relative speed between vehicle and target) to the Transfer Planner UI for the currently selected porkchop entry.
- Added first pass of Target Control panel. This shows data based on selected target, such as relative velocity and distance, as well as the buttons required to configure the autopilot for this. Some rework required for the panel itself.
- Added additional unit (gigameter) to gauge handling to better bridge between KM and AU.
Changes
- Fixed pitch variance not being applied.
- Fixed warp button for burn would not show state, and when clicked would not toggle, just set. Now toggling it will toggle warp to burn on and off.
- Changed so target markers are only drawn for the target of the followed vehicle.
- Changed porkchop to no longer center on the optimal transfer window. Instead it now shows a synodic Period from the current time. Which should cover the optimal transfer time, and allows for earlier transfer selection on the porkchop.
- Changed the porkchop worker to now calculate the full flightplan including potentially invalid transfers that impact the parent body. This does slow down the worker task a little bit. But it now means we can eliminate invalid transfers.
- Changed the porkchop texture to show black pixels for invalid transfers (Where the transfer impacts the parent body before the closest approach).
- Changed Same SOI transfers to no longer calculate Hohmann transfers. Instead it calculates Lambert transfers and displays a porkchop for them as well.
- Fixed issue where same SOI transfers calculated by the transfer planner to a lower orbit were actually going outwards instead of inwards.
- Fixed synodic period calculation in PatchedConics class.
- Changed rendering of closest approach and aN dN markers to target to be the same colour as the orbit line they are relative to.
- Fixed issue where Show Selected Transfer was checked on in the Transfer Window it was not automatically showing the closest approach to the Selected Destination. It will now show this without having to set the target to the destination.
- Fixed the aN and dN lines colour to match the starting orbit and now the text colour.
- Fixed it so you can't set your target to yourself.
- Major refactor of gauge binding system. New DistanceUnit now packs the value to allow better support for other units, such as CM, AU, and LY with smart switching between them.
- Significantly improved burn compute engine cutoff accuracy, especially at high time warp. Previously, neither the engine burn duration in the sim nor the burn computer wakeup time were being properly respected.
- Transition to null rotation when burns automatically cut off to reduce wasted RCS propellant.
- When changing vehicle region, only automatically change navball frame or camera mode if the current modes matched the current region modes. This should reduce the number of unexpected transitions.
- Fix an error where burns would not stay armed when loading saves.
- Integrated Closest approach data with the rendezvous control panel.
- Optimized DigitRoller new unit packing system to be non-allocating.
Removals
- Removed fake tangent data being sent to our PBR shaders as none of our current meshes support it and no one seems to be using it. Can re-add if/when needed.
- Removed some now defunct assets.
- Removed the debug Best Closest Approach, Best dV, overall Best buttons in the transfer planner as these no longer make sense, nor are they required any more.
- Removed the Show Orbits toggle in the transfer planner UI as this can now be done via the View menu.
View JSON
{
  "build": "2025.8.289.2212",
  "date": "2025-08-27",
  "fromRevision": 2197,
  "toRevision": 2212,
  "commits": [
    {
      "rev": 2198,
      "date": "2025-08-27",
      "author": "matthew.caradus",
      "lines": [
        "Added pitch and volume variance to rcs sound.",
        "Fixed pitch variance not being applied."
      ]
    },
    {
      "rev": 2199,
      "date": "2025-08-27",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added ability to toggle followed vessel, it's parent and target orbits only on and off to the View menu."
      ]
    },
    {
      "rev": 2200,
      "date": "2025-08-26",
      "author": "fluxwerkz",
      "lines": [
        "New ToNearest for time reference displays. Sequentially moves through display instead of based on modularly stickying to a time. For example: Old behavior on a countdown would show [\"8 days\", \"1 week\", \"6 days\"]. New Behavior is [\"8 days\", \"7 days\", \"6 days\"]. I also added a couple decimal places, which could use some tuning if needed. Old behavior is kept under ToNearest2 for perhaps different use cases."
      ]
    },
    {
      "rev": 2201,
      "date": "2025-08-27",
      "author": "Rocket",
      "lines": [
        "Added gauge screw instances for use with gauge panels. Not functional, but provides visual difference on panels used with gauges.",
        "Fixed warp button for burn would not show state, and when clicked would not toggle, just set. Now toggling it will toggle warp to burn on and off."
      ]
    },
    {
      "rev": 2202,
      "date": "2025-08-26",
      "author": "gravhoek-rw",
      "lines": [
        "Added a simplistic buoyancy calculation to the physics simulation. Ocean surfaces now support splashdown and apply drag.",
        "Added a simple predictor sphere to help determine when objects might interact with each other.",
        "Added density to oceans."
      ]
    },
    {
      "rev": 2203,
      "date": "2025-08-27",
      "author": "Morrow",
      "lines": [
        "Added basic support for multiple meshes in a single gltf/glb file. New XML keyword of 'Gltf' (to be expanded in functionality as needed). The Id given to each submesh is based on the name of the mesh in the Gltf file which will need to be set in whatever program you're using to export the gltf/glb. I have an idea for optionally overwriting these Ids in XML with some sort of key/value pairing to make it a bit easier to modify but it seems out of scope for now.",
        "Removed fake tangent data being sent to our PBR shaders as none of our current meshes support it and no one seems to be using it. Can re-add if/when needed."
      ]
    },
    {
      "rev": 2204,
      "date": "2025-08-27",
      "author": "Morrow",
      "lines": [
        "Removed some now defunct assets."
      ]
    },
    {
      "rev": 2205,
      "date": "2025-08-26",
      "author": "gravhoek-rw",
      "lines": [
        "Added anti-relative-velocity flight computer tracking target."
      ]
    },
    {
      "rev": 2206,
      "date": "2025-08-27",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Changed so target markers are only drawn for the target of the followed vehicle.",
        "Changed porkchop to no longer center on the optimal transfer window. Instead it now shows a synodic Period from the current time. Which should cover the optimal transfer time, and allows for earlier transfer selection on the porkchop.",
        "Changed the porkchop worker to now calculate the full flightplan including potentially invalid transfers that impact the parent body. This does slow down the worker task a little bit. But it now means we can eliminate invalid transfers.",
        "Changed the porkchop texture to show black pixels for invalid transfers (Where the transfer impacts the parent body before the closest approach).",
        "Changed Same SOI transfers to no longer calculate Hohmann transfers. Instead it calculates Lambert transfers and displays a porkchop for them as well.",
        "Fixed issue where same SOI transfers calculated by the transfer planner to a lower orbit were actually going outwards instead of inwards.",
        "Fixed synodic period calculation in PatchedConics class.",
        "Changed rendering of closest approach and aN dN markers to target to be the same colour as the orbit line they are relative to.",
        "Added PatchedConics.TryFindEncounter to find an encounter by matching Astronomical Id.",
        "Removed the debug Best Closest Approach, Best dV, overall Best buttons in the transfer planner as these no longer make sense, nor are they required any more.",
        "Added Intercept Velocity (Relative speed between vehicle and target) to the Transfer Planner UI for the currently selected porkchop entry.",
        "Removed the Show Orbits toggle in the transfer planner UI as this can now be done via the View menu.",
        "Fixed issue where Show Selected Transfer was checked on in the Transfer Window it was not automatically showing the closest approach to the Selected Destination. It will now show this without having to set the target to the destination."
      ]
    },
    {
      "rev": 2207,
      "date": "2025-08-27",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed the aN and dN lines colour to match the starting orbit and now the text colour."
      ]
    },
    {
      "rev": 2208,
      "date": "2025-08-27",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed it so you can't set your target to yourself."
      ]
    },
    {
      "rev": 2209,
      "date": "2025-08-27",
      "author": "Rocket",
      "lines": [
        "Major refactor of gauge binding system. New DistanceUnit now packs the value to allow better support for other units, such as CM, AU, and LY with smart switching between them.",
        "Added first pass of Target Control panel. This shows data based on selected target, such as relative velocity and distance, as well as the buttons required to configure the autopilot for this. Some rework required for the panel itself."
      ]
    },
    {
      "rev": 2210,
      "date": "2025-08-27",
      "author": "gravhoek-rw",
      "lines": [
        "Significantly improved burn compute engine cutoff accuracy, especially at high time warp. Previously, neither the engine burn duration in the sim nor the burn computer wakeup time were being properly respected.",
        "Transition to null rotation when burns automatically cut off to reduce wasted RCS propellant.",
        "When changing vehicle region, only automatically change navball frame or camera mode if the current modes matched the current region modes. This should reduce the number of unexpected transitions.",
        "Fix an error where burns would not stay armed when loading saves."
      ]
    },
    {
      "rev": 2211,
      "date": "2025-08-27",
      "author": "Rocket",
      "lines": [
        "Added additional unit (gigameter) to gauge handling to better bridge between KM and AU.",
        "Integrated Closest approach data with the rendezvous control panel.",
        "Optimized DigitRoller new unit packing system to be non-allocating."
      ]
    }
  ]
}

v2025.8.292.2234

View Changelog
Additions
- Add ocean PBR functions in preparation for FFT
- Start implementing FFT and add ocean Phillips spectrum for validation (not yet in use), will be replaced by a better spectrum once everything works.
- Add decimals to shader numbers to prevent int issues.
- Added 'mm' option for rollers, to allow display of finer values for close approaches and rendezvous.
- Added tooltips to the Rendezvous Control Panel elements.
- Added ability to set orbit around StellarBody's in the Set Orbit Debu tool.
- Added a second porkchop option to the transfer planner to show a combined dV and Relative Velocity plot.
- Added Relative Velocity to porkchop tooltip.
- Added cursor box to porkchop tooltip.
- Added ability to rescale UI elements in the editor, to make scaling changes much easier.
- Added better support for exporting gauge UI changes into XML to ease the editing process.
Changes
- Increase ocean depth bias to eliminate remaining z-fighting artifacts at some distances
- Move some repeated code to Utils
- Fixed incorrect biome indexing in the terrain shader which would cause texture scrolling in biomes masked by biome control green that have different slope tiling factors to the biome masked by biome control blue.
- Fix atmosphere reflections to use N and R vectors properly.
- Modified PBR shader to turn off celestial shadows via an argument to the function. Editor shouldn't have celestial shadows.
- Fixed burn menu disappearing when zooming out.
- Fixed multiple burns being active simultaneously.
- Optimized GaugeDigit barber pole rendering as I was doing derivative lengths twice (aspect and AA) and using sin + smoothstep. Now significantly more streamlined.
- Optimized GaugeDigit to reduce cost of per-pixel digit rendering, and cleaned up code to make it clearer what each part does.
- Fixed a bug where the transfer planner was excluding all impacts from the porkchop planner, when it should include impacts with the target as being valid.
- Rename Color = Colour -u (sorry to my friends over the pond).
- Minimum radius for our sun's display - never lose the sun again, even at pluto, a fall-off of sunpower (for sun flare/bloom only) based on distance (via screenspace sun radius) with min/max settings. There is a new debug parameter that controls the exponent of that power falloff. Two other important parameters for tweaking appear in sunbloom.frag "radiusToStartScaling" controls the timing of the start of fade and "maxReduction" controls the maximum power of the reduction.
- Fixed Transfer Planner not resetting when the set orbit debug is UI is used.
- Fixed screen resizes not being applied to all viewport cameras.
- Small fix for shadow map buffer alignment
- Fixed set target not setting IsTarget on the targeted astronomical. Which was causing a number of issues, most visible one - the sphere of influence of the target was not being drawn.
- Changed Telemetry panel so that it shows 7 digits, one of which is a decimal place. This helps bridge the gap from KM to GM and beyond.
- Fixed a variety of issues with gauge offsetting where incorrect parent values were being used to generate the UV positions.
- Dramatically decrease the tolerance for Kepler solves. This drives physics handoff errors in high solar orbits down dramatically, but all Kepler solves in the default solar system still seem to be under 10 iterations which is totally acceptable.
- Decrease max default Kepler iterations from 1000 to 50 to limit the damage from the worst-case scenario.
- Decoupled Kepler tolerance from a global value which is most likely to be used for unit testing to prevent unexpected side effects.
Removals
- N/A
View JSON
{
  "build": "2025.8.292.2234",
  "date": "2025-08-28",
  "fromRevision": 2212,
  "toRevision": 2234,
  "commits": [
    {
      "rev": 2213,
      "date": "2025-08-27",
      "author": "Ghassen Lahmar",
      "lines": [
        "Add ocean PBR functions in preparation for FFT",
        "Start implementing FFT and add ocean Phillips spectrum for validation (not yet in use), will be replaced by a better spectrum once everything works",
        "Increase ocean depth bias to eliminate remaining z-fighting artifacts at some distances",
        "Move some repeated code to Utils"
      ]
    },
    {
      "rev": 2214,
      "date": "2025-08-27",
      "author": "Linx-RW",
      "lines": [
        "Fixed incorrect biome indexing in the terrain shader which would cause texture scrolling in biomes masked by biome control green that have different slope tiling factors to the biome masked by biome control blue."
      ]
    },
    {
      "rev": 2215,
      "date": "2025-08-28",
      "author": "JoshRW",
      "lines": [
        "Fix atmosphere reflections to use N and R vectors properly",
        "Add decimals to shader numbers to prevent int issues"
      ]
    },
    {
      "rev": 2216,
      "date": "2025-08-28",
      "author": "Morrow",
      "lines": [
        "Modified PBR shader to turn off celestial shadows via an argument to the function. Editor shouldn't have celestial shadows."
      ]
    },
    {
      "rev": 2217,
      "date": "2025-08-28",
      "author": "Morrow",
      "lines": [
        "Fixed burn menu disappearing when zooming out."
      ]
    },
    {
      "rev": 2218,
      "date": "2025-08-28",
      "author": "Morrow",
      "lines": [
        "Fixed multiple burns being active simultaneously."
      ]
    },
    {
      "rev": 2219,
      "date": "2025-08-28",
      "author": "Rocket",
      "lines": [
        "Added 'mm' option for rollers, to allow display of finer values for close approaches and rendezvous.",
        "Optimized GaugeDigit barber pole rendering as I was doing derivative lengths twice (aspect and AA) and using sin + smoothstep. Now significantly more streamlined."
      ]
    },
    {
      "rev": 2220,
      "date": "2025-08-28",
      "author": "Rocket",
      "lines": [
        "Optimized GaugeDigit to reduce cost of per-pixel digit rendering, and cleaned up code to make it clearer what each part does."
      ]
    },
    {
      "rev": 2221,
      "date": "2025-08-28",
      "author": "Rocket",
      "lines": [
        "Added tooltips to the Rendezvous Control Panel elements."
      ]
    },
    {
      "rev": 2222,
      "date": "2025-08-28",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added ability to set orbit around StellarBody's in the Set Orbit Debu tool."
      ]
    },
    {
      "rev": 2223,
      "date": "2025-08-28",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added a second porkchop option to the transfer planner to show a combined dV and Relative Velocity plot.",
        "Fixed a bug where the transfer planner was excluding all impacts from the porkchop planner, when it should include impacts with the target as being valid."
      ]
    },
    {
      "rev": 2224,
      "date": "2025-08-28",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added Relative Velocity to porkchop tooltip.",
        "Added cursor box to porkchop tooltip."
      ]
    },
    {
      "rev": 2225,
      "date": "2025-08-27",
      "author": "fluxwerkz",
      "lines": [
        "Rename Color = Colour -u (sorry to my friends over the pond)",
        "Minimum radius for our sun's display - never lose the sun again, even at pluto",
        "A fall-off of sunpower (for sun flare/bloom only) based on distance (via screenspace sun radius) with min/max settings. There is a new debug parameter that controls the exponent of that power falloff. Two other important parameters for tweaking appear in sunbloom.frag \"radiusToStartScaling\" controls the timing of the start of fade and \"maxReduction\" controls the maximum power of the reduction"
      ]
    },
    {
      "rev": 2226,
      "date": "2025-08-28",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed Transfer Planner not resetting when the set orbit debug is UI is used."
      ]
    },
    {
      "rev": 2227,
      "date": "2025-08-28",
      "author": "Morrow",
      "lines": [
        "Fixed screen resizes not being applied to all viewport cameras."
      ]
    },
    {
      "rev": 2228,
      "date": "2025-08-28",
      "author": "Dan Southon",
      "lines": [
        "Small fix for shadow map buffer alignment"
      ]
    },
    {
      "rev": 2229,
      "date": "2025-08-28",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed set target not setting IsTarget on the targeted astronomical. Which was causing a number of issues, most visible one - the sphere of influence of the target was not being drawn."
      ]
    },
    {
      "rev": 2230,
      "date": "2025-08-28",
      "author": "Rocket",
      "lines": [
        "Changed Telemetry panel so that it shows 7 digits, one of which is a decimal place. This helps bridge the gap from KM to GM and beyond.",
        "Fixed a variety of issues with gauge offsetting where incorrect parent values were being used to generate the UV positions.",
        "Added ability to rescale UI elements in the editor, to make scaling changes much easier.",
        "Added better support for exporting gauge UI changes into XML to ease the editing process."
      ]
    },
    {
      "rev": 2231,
      "date": "2025-08-27",
      "author": "gravhoek-rw",
      "lines": [
        "Dramatically decrease the tolerance for Kepler solves. This drives physics handoff errors in high solar orbits down dramatically, but all Kepler solves in the default solar system still seem to be under 10 iterations which is totally acceptable.",
        "Decrease max default Kepler iterations from 1000 to 50 to limit the damage from the worst-case scenario."
      ]
    },
    {
      "rev": 2232,
      "date": "2025-08-27",
      "author": "gravhoek-rw",
      "lines": [
        "Decoupled Kepler tolerance from a global value which is most likely to be used for unit testing to prevent unexpected side effects."
      ]
    }
  ]
}

v2025.8.293.2250

View Changelog
Additions
- Added Expiry processing to FlightPlans and BurnPlans. This is because the solver only searches a certain time into the future for encounters. We need to expire them on the first encounter or at the end of the time we searched and recalculate them.
- Added Expiry of transfer planner burn creation if the time passes before the user presses "Create".
- Integrated flight plan expiry into the the inner vehicle update loop.
- Added application always on top setting, that will force the application window to always be on top while running.
- Added default setting to focus the game window on launch to help prevent graphics api buffering issues when multithreaded loading overloads the OS during launch, running out of VRAM and causing crashes.
- Added always on top setting to windows and gauge panels, on by default. This will force detatched windows to be rendered on top of everything, making them much easier to use.
- Added new Engine Control panel. This includes the old total DeltaV roller with updated units and more digits, as well as the propellant, thrust-to-weight-ratio, throttle, and buttons for main engine ignite and main engine shutdown.
Changes
- Switched discord notify to new embed system for testing.
- Fixed the Impact and Encounter hover information Time in: readout was wrong and showing negative values. Victim of cut and paste.
- Fixed SoI sphere gizmo causing burn node gizmos to not draw correctly. This required adding a second pass to the gizmo pass(es) to get the transparency working. The index of the pass the gizmo should be rendered in is now specified by the 'PassIndex' variable. The vast majority of gizmos should currently be in pass 0.
- Fixed an error where the expiry time could be the start of the flight plan if the closest encounter occurred at the start of a patch.
- Fixed an error in Orbit.GetRemainingTimeTo where a negative time could be returned.
- Fixed an issue where patches from last frame were being compared against patches from the current frame and giving false equality checks when trying to create a burn node.
- Fixed issue where not all constructors in FlightPlan were setting the reference Id.
- Fixed issue where a patch was more than one period was causing incorrect orbit points generation and subsequent rendering of the orbit points to be incorrect.
- Fixed missing set flightplan expiry when an impact occurs.
- Fixed the closest approach info vs an actual Encounter info in the Flightplan UI to make it easier to distinguish between closest approaches and encounters.
- Make atmosphere reflection attenuation much slower for vessels. The reflection was changing from atmosphere to stars way too fast when exiting the atmosphere before.
- Fixed target text was not being drawn using shadowed text, so was very hard to read as it was grey.
- Changed the transfer planner porkchop to have a nice color gradient instead of discrete bands.
Removals
- Removed debug code that was causing compile error, as it was no longer being maintained.
View JSON
{
  "build": "2025.8.293.2250",
  "date": "2025-08-29",
  "fromRevision": 2234,
  "toRevision": 2250,
  "commits": [
    {
      "rev": 2235,
      "date": "2025-08-29",
      "author": "Heightmare",
      "lines": [
        "Switched discord notify to new embed system for testing."
      ]
    },
    {
      "rev": 2236,
      "date": "2025-08-29",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added Expiry processing to FlightPlans and BurnPlans. This is because the solver only searches a certain time into the future for encounters. We need to expire them on the first encounter or at the end of the time we searched and recalculate them."
      ]
    },
    {
      "rev": 2237,
      "date": "2025-08-29",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added Expiry of transfer planner burn creation if the time passes before the user presses \"Create\"."
      ]
    },
    {
      "rev": 2238,
      "date": "2025-08-29",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed the Impact and Encounter hover information Time in: readout was wrong and showing negative values. Victim of cut and paste."
      ]
    },
    {
      "rev": 2239,
      "date": "2025-08-29",
      "author": "morrow-rw",
      "lines": [
        "Fixed SoI sphere gizmo causing burn node gizmos to not draw correctly. This required adding a second pass to the gizmo pass(es) to get the transparency working. The index of the pass the gizmo should be rendered in is now specified by the 'PassIndex' variable. The vast majority of gizmos should currently be in pass 0."
      ]
    },
    {
      "rev": 2240,
      "date": "2025-08-28",
      "author": "gravhoek-rw",
      "lines": [
        "Integrated flight plan expiry into the the inner vehicle update loop.",
        "Fixed an error where the expiry time could be the start of the flight plan if the closest encounter occurred at the start of a patch.",
        "Fixed an error in Orbit.GetRemainingTimeTo where a negative time could be returned."
      ]
    },
    {
      "rev": 2241,
      "date": "2025-08-29",
      "author": "Morrow",
      "lines": [
        "Fixed an issue where patches from last frame were being compared against patches from the current frame and giving false equality checks when trying to create a burn node."
      ]
    },
    {
      "rev": 2242,
      "date": "2025-08-29",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed issue where not all constructors in FlightPlan were setting the reference Id.",
        "Fixed issue where a patch was more than one period was causing incorrect orbit points generation and subsequent rendering of the orbit points to be incorrect."
      ]
    },
    {
      "rev": 2243,
      "date": "2025-08-29",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed missing set flightplan expiry when an impact occurs.",
        "Fixed the closest approach info vs an actual Encounter info in the Flightplan UI to make it easier to distinguish between closest approaches and encounters."
      ]
    },
    {
      "rev": 2244,
      "date": "2025-08-29",
      "author": "JoshRW",
      "lines": [
        "Make atmosphere reflection attenuation much slower for vessels. The",
        "reflection was changing from atmosphere to stars way too fast when",
        "exiting the atmosphere before."
      ]
    },
    {
      "rev": 2245,
      "date": "2025-08-29",
      "author": "Rocket",
      "lines": [
        "Added application `always on top` setting, that will force the application window to always be on top while running.",
        "Added default setting to focus the game window on launch to help prevent graphics api buffering issues when multithreaded loading overloads the OS during launch, running out of VRAM and causing crashes.",
        "Added `always on top` setting to windows and gauge panels, on by default. This will force `detatched` windows to be rendered on top of everything, making them much easier to use.",
        "Fixed target text was not being drawn using shadowed text, so was very hard to read as it was grey."
      ]
    },
    {
      "rev": 2246,
      "date": "2025-08-28",
      "author": "gravhoek-rw",
      "lines": [
        "Changed the transfer planner porkchop to have a nice color gradient instead of discrete bands."
      ]
    },
    {
      "rev": 2247,
      "date": "2025-08-29",
      "author": "Rocket",
      "lines": [
        "Removed debug code that was causing compile error, as it was no longer being maintained."
      ]
    },
    {
      "rev": 2248,
      "date": "2025-08-29",
      "author": "Rocket",
      "lines": [
        "Added new Engine Control panel. This includes the old total DeltaV roller with updated units and more digits, as well as the propellant, thrust-to-weight-ratio, throttle, and buttons for main engine ignite and main engine shutdown."
      ]
    }
  ]
}

v2025.8.294.2252

View Changelog
Additions
- N/A
Changes
- Fixed handling of different events (Impact, multiple Encounters, Escape) in patched conics to correctly identify which event comes first and process accordingly.
Removals
- N/A
View JSON
{
  "build": "2025.8.294.2252",
  "date": "2025-08-29",
  "fromRevision": 2250,
  "toRevision": 2252,
  "commits": [
    {
      "rev": 2251,
      "date": "2025-08-29",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed handling of different events (Impact, multiple Encounters, Escape) in patched conics to correctly identify which event comes first and process accordingly."
      ]
    }
  ]
}

v2025.8.24.2263 - "Roller Digits"

View Changelog
Additions
- Added a very small alignment offset for roller digits, almost imperceptible. This aligns them visually with real world rollers, which have a very small alignment variation per digit.
- Added extra digit to rollers on Rendezvous Control panel.
- Added XML parsing and stripping for easier and cleaner export of edited gauge canvases from within in the game.
- Added another significant digit for rendezvous control panel to bridge gap completely from KM to GM and beyond.
Changes
- Fixed digit rollers could heavily overshoot at large warp speeds, causing them to oscillate. Now digit rollers will instead snap at significant simulation speeds to prevent this.
- Fixed aspect ratio not correctly locked during resizing for some gauge panels.
- Fixed planet renderer buffers' alignments.
- Fixed terrain material textures not matching up with the tessellated surface.
- Converted unused mean anomaly at epoch in the set orbit debug menu to time since periapsis which can be used in this case.
- Fixed thrust-to-weight calculation. Previously it was actually exhaust-velocity-to-mass.
- Changed threshold values for time rollers, to provide better readability as the values move through hours, minutes, and to seconds.
- Fixed gauge roller animations would have a weird backwards animation when rolling from 9 to 0. This had a variety of causes and required a complete rewrite of roller animation.
Removals
- Removed Size struct attribute layout for the PlanetUbo and MeshUbo as they are now automatically padded to the minUniformBufferOffsetAlignment.
- Reverted the change to properly handle multiple trajectory events simultaneously because it caused two important regressions (failure to compute trajectories after escapes, failure to show closest approach to target).
View JSON
{
  "build": "2025.8.24.2263",
  "date": "2025-08-30",
  "fromRevision": 2252,
  "toRevision": 2263,
  "commits": [
    {
      "rev": 2253,
      "date": "2025-08-29",
      "author": "Dean Hall",
      "lines": [
        "Fixed digit rollers could heavily overshoot at large warp speeds, causing them to oscillate. Now digit rollers will instead snap at significant simulation speeds to prevent this."
      ]
    },
    {
      "rev": 2254,
      "date": "2025-08-29",
      "author": "Dean Hall",
      "lines": [
        "Fixed aspect ratio not correctly locked during resizing for some gauge panels.",
        "Added a very small alignment offset for roller digits, almost imperceptible. This aligns them visually with real world rollers, which have a very small alignment variation per digit."
      ]
    },
    {
      "rev": 2255,
      "date": "2025-08-29",
      "author": "Linx-RW",
      "lines": [
        "Fixed planet renderer buffers' alignments.",
        "Fixed terrain material textures not matching up with the tessellated surface."
      ]
    },
    {
      "rev": 2256,
      "date": "2025-08-29",
      "author": "Linx-RW",
      "lines": [
        "Removed Size struct attribute layout for the PlanetUbo and MeshUbo as they are now automatically padded to the minUniformBufferOffsetAlignment."
      ]
    },
    {
      "rev": 2257,
      "date": "2025-08-29",
      "author": "gravhoek-rw",
      "lines": [
        "Converted unused mean anomaly at epoch in the set orbit debug menu to time since periapsis which can be used in this case."
      ]
    },
    {
      "rev": 2258,
      "date": "2025-08-29",
      "author": "gravhoek-rw",
      "lines": [
        "Fixed thrust-to-weight calculation. Previously it was actually exhaust-velocity-to-mass."
      ]
    },
    {
      "rev": 2259,
      "date": "2025-08-30",
      "author": "Dean Hall",
      "lines": [
        "Added extra digit to rollers on Rendezvous Control panel.",
        "Added XML parsing and stripping for easier and cleaner export of edited gauge canvases from within in the game."
      ]
    },
    {
      "rev": 2260,
      "date": "2025-08-29",
      "author": "gravhoek-rw",
      "lines": [
        "Reverted the change to properly handle multiple trajectory events simultaneously because it caused two important regressions (failure to compute trajectories after escapes, failure to show closest approach to target)."
      ]
    },
    {
      "rev": 2261,
      "date": "2025-08-30",
      "author": "Dean Hall",
      "lines": [
        "Added another significant digit for rendezvous control panel to bridge gap completely from KM to GM and beyond.",
        "Changed threshold values for time rollers, to provide better readability as the values move through hours, minutes, and to seconds."
      ]
    },
    {
      "rev": 2262,
      "date": "2025-08-30",
      "author": "Dean Hall",
      "lines": [
        "Fixed gauge roller animations would have a weird backwards animation when rolling from 9 to 0. This had a variety of causes and required a complete rewrite of roller animation."
      ]
    }
  ]
}

September 2025

Fifteen versions were released this month.

View versions

v2025.9.2.2270

View Changelog
Additions
- N/A
Changes
- Fixed sign digit rollers were broken as bitfield pack was not correctly configured for them.
- Fixed roller animation was not being applied to unit rollers such as distance and time. Now this is correctly applied, and they will animate between their various unit states as the other rollers do.
- Adjusted how the shadow map mem alignment is working
- Reinstated Orbit degree markers debug UI.
- Changed aN and dN markers and lines to have 50% transparency.
- Fixed bug in relative orbit line drawing where the time was between -1 and 1 second. Amended GetPositivePeriodicTime to handle -1 to 1 second and return zero seconds in this case instead of adding a period.
- Fixed issue where dN and aN lines and markers were being drawn when their positions were outside the start and end anomaly of a patch.
- Changed how shadow map gpu data is assigned to account for new alignments
- Changed mem alignments for godrays and kawase overall bloom renderer
- Renamed shader ubo's for shadow passes
Removals
- Removed all if DEBUG only code from Orbit and TransferPlanner.
- Removed hardcoded struct size for ShadowSystemUbo.
View JSON
{
  "build": "2025.9.2.2270",
  "date": "2025-09-01",
  "fromRevision": 2263,
  "toRevision": 2270,
  "commits": [
    {
      "rev": 2264,
      "date": "2025-08-30",
      "author": "Dean Hall",
      "lines": [
        "Fixed sign digit rollers were broken as bitfield pack was not correctly configured for them.",
        "Fixed roller animation was not being applied to unit rollers such as distance and time. Now this is correctly applied, and they will animate between their various unit states as the other rollers do."
      ]
    },
    {
      "rev": 2265,
      "date": "2025-09-01",
      "author": "Dan Southon",
      "lines": [
        "Adjusted how the shadow map mem alignment is working"
      ]
    },
    {
      "rev": 2266,
      "date": "2025-09-01",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Removed all if DEBUG only code from Orbit and TransferPlanner.",
        "Reinstated Orbit degree markers debug UI.",
        "Changed aN and dN markers and lines to have 50% transparency."
      ]
    },
    {
      "rev": 2267,
      "date": "2025-09-01",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed bug in relative orbit line drawing where the time was between -1 and 1 second. Amended GetPositivePeriodicTime to handle -1 to 1 second and return zero seconds in this case instead of adding a period."
      ]
    },
    {
      "rev": 2268,
      "date": "2025-09-01",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed issue where dN and aN lines and markers were being drawn when their positions were outside the start and end anomaly of a patch."
      ]
    },
    {
      "rev": 2269,
      "date": "2025-09-01",
      "author": "Dan Southon",
      "lines": [
        "Changed how shadow map gpu data is assigned to account for new alignments",
        "Changed mem alignments for godrays and kawase overall bloom renderer",
        "Renamed shader ubo's for shadow passes",
        "Removed hardcoded struct size for ShadowSystemUbo."
      ]
    }
  ]
}

v2025.9.3.2279

View Changelog
Additions
- Added first pass of save window. Available in the File menu option. Double-clicking loads a save. Shows a sortable list of all the saves and allows creation of new ones. Simple text input captured for naming new files. Next steps are content menu and other improvements.
- Added second pass to save/load menu. Allow sorting by any column. Tooltip help indicator lets you know how to use. Deletion and overwriting are available, and subject to confirm popups.
- Added loading confirmation. Now when loading via the save/load menu, you will be prompted if you want to load cancelling the current game.
Changes
- Fix validation errors with ocean rendertarget layouts when MSAA is off
- Fixed planet editor which stopped working after recent buffer alignment changes.
- Fixed normals in the no-push version of PBR rendering being incorrectly transformed when non-identity scale values were in use.
- When in non-debug builds, the shader compiler now optimizes for performance. Interesting to note, glslc seems to default to performance optimizations but libshaderc (whether normally or due to interop shenanigans) defaults to no optimizations.
Removals
- N/A
View JSON
{
  "build": "2025.9.3.2279",
  "date": "2025-09-02",
  "fromRevision": 2270,
  "toRevision": 2279,
  "commits": [
    {
      "rev": 2271,
      "date": "2025-09-01",
      "author": "Ghassen Lahmar",
      "lines": [
        "Fix validation errors with ocean rendertarget layouts when MSAA is off"
      ]
    },
    {
      "rev": 2272,
      "date": "2025-09-01",
      "author": "Linx-RW",
      "lines": [
        "Fixed planet editor which stopped working after recent buffer alignment changes."
      ]
    },
    {
      "rev": 2273,
      "date": "2025-09-02",
      "author": "Morrow",
      "lines": [
        "Fixed normals in the no-push version of PBR rendering being incorrectly transformed when non-identity scale values were in use."
      ]
    },
    {
      "rev": 2274,
      "date": "2025-09-02",
      "author": "Morrow",
      "lines": [
        "When in non-debug builds, the shader compiler now optimizes for performance. Interesting to note, glslc seems to default to performance optimizations but libshaderc (whether normally or due to interop shenanigans) defaults to no optimizations."
      ]
    },
    {
      "rev": 2275,
      "date": "2025-09-02",
      "author": "Rocket",
      "lines": [
        "Added first pass of save window. Available in the `File` menu option. Double-clicking loads a save. Shows a sortable list of all the saves and allows creation of new ones. Simple text input captured for naming new files. Next steps are content menu and other improvements."
      ]
    },
    {
      "rev": 2276,
      "date": "2025-09-02",
      "author": "Rocket",
      "lines": [
        "Added second pass to save/load menu. Allow sorting by any column. Tooltip help indicator lets you know how to use. Deletion and overwriting are available, and subject to confirm popups."
      ]
    },
    {
      "rev": 2277,
      "date": "2025-09-02",
      "author": "Rocket",
      "lines": [
        "Added loading confirmation. Now when loading via the save/load menu, you will be prompted if you want to load cancelling the current game."
      ]
    }
  ]
}

v2025.9.4.2290

View Changelog
Additions
- Added panning and zooming to the ground track window.
- Added ability to preview the porkchop selected transfer flightplan UI window from the Transfer Planner.
- Added missing angular rates for surface velocity and vehicle attitude targets. This should significantly improve tracking performance in these cases.
- Added new Flight Path (FLP), Docking (DOCK), and Target Velocity (TVEL) frames internally to support the new attitude targets.
- Added celestial sprite occlusion. Child moons will occlude their sprites at all distances, when their parent is occluding them from the sun. This is tied with the skybox shadow option, so can be disabled.
- Added size based blending of celestial sprites. This ensures that child objects merge with their parent at great distances, such as child planets merging correctly with their parent when viewing a star from a another solar system.
- Added handling of stellar sprites. The primary body (sun) is now handled like regular a celestial object, allowing rendering of distant stellar systems to be handled by the celestial sprite system. This is blended with the lens flare system.
Changes
- Fixed incorrect amplitude for Earth Erosion modifier.
- Fixed dynamic offset calculation in the planet map exporter.
- Map grid now turns off when UI is toggled off.
- Did another pass on distant celestial rendering to get them closer to how we render our stars.
- All attitude tracking targets now reference the inertial CCI frame internally. This makes the requirement for attitude target angular rates explicit in all cases.
- Split out custom attitude target into its own field which is now required since we still want those to be frame-relative.
- Switched 'toward' and 'away' targets to reference the local up vector instead of the target's up vector.
- Rearranged TGT panel attitude target buttons to more closely follow the convention of the main panel.
- Relabeled the VLF frame on the control panels from VEL to OVEL to try and emphasize that it's orbital velocity.
- Reworded NUL ROT tooltip to clarify that RCS is incapable of perefectly nulling all rotation.
- Fixed tooltips for attitude targets which changed orientation.
- Internally renamed VehicleReferenceFrame.Tgt to VehicleReferenceFrame.Dock. The XML enum value is still Tgt until I figure out how to prevent it from throwing an exception when loading old saves.
- Fix TAIL coordinate frame rotation rates.
- Fixed the TGT-relative NUL ROT button which got missed in my enum change.
- Refined rendering of distant celestial objects and their blending from sprites to spheres. Blending now occurs both on the sprite and the emission of the distant sphere, both occurring prior to rendering very close with spherical billboards.
Removals
- Deleted old Vehicle.DrawAttitudeControlPanel() method since it's now unused.
View JSON
{
  "build": "2025.9.4.2290",
  "date": "2025-09-03",
  "fromRevision": 2279,
  "toRevision": 2290,
  "commits": [
    {
      "rev": 2280,
      "date": "2025-09-02",
      "author": "Linx-RW",
      "lines": [
        "Added panning and zooming to the ground track window."
      ]
    },
    {
      "rev": 2281,
      "date": "2025-09-02",
      "author": "Linx-RW",
      "lines": [
        "Fixed incorrect amplitude for Earth Erosion modifier.",
        "Fixed dynamic offset calculation in the planet map exporter."
      ]
    },
    {
      "rev": 2282,
      "date": "2025-09-03",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added ability to preview the porkchop selected transfer flightplan UI window from the Transfer Planner."
      ]
    },
    {
      "rev": 2283,
      "date": "2025-09-03",
      "author": "Morrow",
      "lines": [
        "Map grid now turns off when UI is toggled off."
      ]
    },
    {
      "rev": 2284,
      "date": "2025-09-03",
      "author": "Morrow",
      "lines": [
        "Did another pass on distant celestial rendering to get them closer to how we render our stars."
      ]
    },
    {
      "rev": 2285,
      "date": "2025-09-02",
      "author": "gravhoek-rw",
      "lines": [
        "All attitude tracking targets now reference the inertial CCI frame internally. This makes the requirement for attitude target angular rates explicit in all cases.",
        "Split out custom attitude target into its own field which is now required since we still want those to be frame-relative.",
        "Added missing angular rates for surface velocity and vehicle attitude targets. This should significantly improve tracking performance in these cases.",
        "Added new Flight Path (FLP), Docking (DOCK), and Target Velocity (TVEL) frames internally to support the new attitude targets.",
        "Switched 'toward' and 'away' targets to reference the local up vector instead of the target's up vector."
      ]
    },
    {
      "rev": 2286,
      "date": "2025-09-02",
      "author": "gravhoek-rw",
      "lines": [
        "Rearranged TGT panel attitude target buttons to more closely follow the convention of the main panel.",
        "Relabeled the VLF frame on the control panels from VEL to OVEL to try and emphasize that it's orbital velocity.",
        "Reworded NUL ROT tooltip to clarify that RCS is incapable of perefectly nulling all rotation.",
        "Fixed tooltips for attitude targets which changed orientation.",
        "Internally renamed VehicleReferenceFrame.Tgt to VehicleReferenceFrame.Dock. The XML enum value is still Tgt until I figure out how to prevent it from throwing an exception when loading old saves.",
        "Deleted old Vehicle.DrawAttitudeControlPanel() method since it's now unused."
      ]
    },
    {
      "rev": 2287,
      "date": "2025-09-02",
      "author": "gravhoek-rw",
      "lines": [
        "Fix TAIL coordinate frame rotation rates."
      ]
    },
    {
      "rev": 2288,
      "date": "2025-09-02",
      "author": "gravhoek-rw",
      "lines": [
        "Fixed the TGT-relative NUL ROT button which got missed in my enum change."
      ]
    },
    {
      "rev": 2289,
      "date": "2025-09-03",
      "author": "Rocket",
      "lines": [
        "Refined rendering of distant celestial objects and their blending from sprites to spheres. Blending now occurs both on the sprite and the emission of the distant sphere, both occurring prior to rendering very close with spherical billboards.",
        "Added celestial sprite occlusion. Child moons will occlude their sprites at all distances, when their parent is occluding them from the sun. This is tied with the skybox shadow option, so can be disabled.",
        "Added size based blending of celestial sprites. This ensures that child objects merge with their parent at great distances, such as child planets merging correctly with their parent when viewing a star from a another solar system.",
        "Added handling of stellar sprites. The primary body (sun) is now handled like regular a celestial object, allowing rendering of distant stellar systems to be handled by the celestial sprite system. This is blended with the lens flare system."
      ]
    }
  ]
}

v2025.9.5.2298

View Changelog
Additions
- N/A
Changes
- Fixed handling of different events (Impact, multiple Encounters, Escape) in patched conics to correctly identify which event comes first and process accordingly. - Second attempt. This time handles closest approaches correctly and after first escape. This fixes the fact that before patched conics logic was not handling impacts, encounters and escapes in the correct time sequence, which it was not necessarily doing correctly before.
- Refactored Input handling, to split the functionality into match and contains. Previously, we were using a single pattern to assess an input action as contains (except for a few hardcoded differences). Now two patterns are available. Existing functionality is split between contains which will allow returning true if that series of keys are active, even if others are (i.e. thrusters), versus if the required series only are (i.e. a toggle).
- Fixed Stabilization toggle would work inconsistently with input actions, as it was handled via a contains pattern, not a match pattern.
- Refactored Input code to use a common struct, rather than an exploded collection of arguments, as this was getting tiresome passing through the action chain. This additional meant that necessary context was often lost, such as which window the input was being provided in.
- Fixed some controls would not work in new windows, as the input context was lost as it was not being passed through. OnKey now requires a common struct, so context is always passed through.
- Fixed control assignments would not be correctly captured. There still exists a bug where they are not being correctly read in, breaking control assignments from load.
- Fixed targeting a celestial object that is not a vehicle such as a planet or moon, will generate a null reference exception. Now you can use the targeting control panel with celestial bodies.
- Changed VehicleUpdateTask to use both a stackalloc and a rented array for Thruster states, to remove allocation occuring per frame. This was a minimal allocation in current testing, but with large numbers of vehicles in the hundreds, or thousands, it would generate significant memory garbage.
Removals
- N/A
View JSON
{
  "build": "2025.9.5.2298",
  "date": "2025-09-04",
  "fromRevision": 2290,
  "toRevision": 2298,
  "commits": [
    {
      "rev": 2291,
      "date": "2025-09-04",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed handling of different events (Impact, multiple Encounters, Escape) in patched conics to correctly identify which event comes first and process accordingly. - Second attempt. This time handles closest approaches correctly and after first escape. This fixes the fact that before patched conics logic was not handling impacts, encounters and escapes in the correct time sequence, which it was not necessarily doing correctly before."
      ]
    },
    {
      "rev": 2292,
      "date": "2025-09-04",
      "author": "Rocket",
      "lines": [
        "Refactored Input handling, to split the functionality into `match` and `contains`. Previously, we were using a single pattern to assess an input action as contains (except for a few hardcoded differences). Now two patterns are available. Existing functionality is split between `contains` which will allow returning true if that series of keys are active, even if others are (i.e. thrusters), versus if the required series only are (i.e. a toggle).",
        "Fixed Stabilization toggle would work inconsistently with input actions, as it was handled via a `contains` pattern, not a `match` pattern."
      ]
    },
    {
      "rev": 2293,
      "date": "2025-09-04",
      "author": "Rocket",
      "lines": [
        "Refactored Input code to use a common struct, rather than an exploded collection of arguments, as this was getting tiresome passing through the action chain. This additional meant that necessary context was often lost, such as which window the input was being provided in.",
        "Fixed some controls would not work in new windows, as the input context was lost as it was not being passed through. OnKey now requires a common struct, so context is always passed through.",
        "Fixed control assignments would not be correctly captured. There still exists a bug where they are not being correctly read in, breaking control assignments from load."
      ]
    },
    {
      "rev": 2294,
      "date": "2025-09-04",
      "author": "Rocket",
      "lines": [
        "Fixed targeting a celestial object that is not a vehicle such as a planet or moon, will generate a null reference exception. Now you can use the targeting control panel with celestial bodies."
      ]
    },
    {
      "rev": 2295,
      "date": "2025-09-04",
      "author": "Rocket",
      "lines": [
        "Changed VehicleUpdateTask to use both a stackalloc and a rented array for Thruster states, to remove allocation occuring per frame. This was a minimal allocation in current testing, but with large numbers of vehicles in the hundreds, or thousands, it would generate significant memory garbage."
      ]
    }
  ]
}

v2025.9.2.2300 - "Nasty RCS"

View Changelog
Additions
- N/A
Changes
- Fixed nasty bug that would cause RCS spam. This was because of a serious issue with the pattern I implemented to avoid allocation. It was filling the span, which would leave garbage values inside. Insidiously, it worked fine for single movements - just not the flight computer control, by pure chance. Refactored to still use a fixed array, but make it nullable. This was a very silly, and dangerous mistake on my part. Credit: Anth for finding.
Removals
- N/A
View JSON
{
  "build": "2025.9.2.2300",
  "date": "2025-09-04",
  "fromRevision": 2298,
  "toRevision": 2300,
  "commits": [
    {
      "rev": 2299,
      "date": "2025-09-04",
      "author": "Dean Hall",
      "lines": [
        "Fixed nasty bug that would cause RCS spam. This was because of a serious issue with the pattern I implemented to avoid allocation. It was filling the span, which would leave garbage values inside. Insidiously, it worked fine for single movements - just not the flight computer control, by pure chance. Refactored to still use a fixed array, but make it nullable. This was a very silly, and dangerous mistake on my part. Credit: Anth for finding."
      ]
    }
  ]
}

v2025.9.6.2317 - "Clustered Lighting"

View Changelog
Additions
- Added planet map rendering to the ground track window.
- Added helper functions for computing the billboard and texture matrices for planet rendering.
- Added a tiny amount of ambient light to the planet map renderer's surface view.
- Added methods to retrieve object Keplerian velocity at a given game time.
- Added keybindings are only serialized if they are different from the default, to ease changes to default keybindings during development. If the user sets a custom binding, it will not be touched - but if the user is using the default binding, it will be updated if the default changes. Credit: Anth.
- Overhauled KSA lighting to utilize clustered lighting which greatly improves performance and increases how many active lights we can have at one time. (was 32 max now with current tests at 1000+) LightCollection to hold the CPU specific light info., LightUtils for functions that help with light calculations., FramePackedVkBuffer to aid in packing lots of data into one buffer and making it easier to work with frames in flight, Tetrahedral based shadow calcs for point lights, reducing how many times the closest objects are required to be re-rendered and thus improving performance in comparison to the traditional cube maps, Shadow atlas to pack shadow maps into one texture., WIP Spotlight shadows (just need to sort out the sampling part), A debug window for lights (holds CPU times, debug visuals and more info on the way).
- Added a simple color darkening for distant celestial sprites depending on the approximate lit fraction of the visible disc. This mostly works seamlessly but does show a little bit of artifacting in the sprite-sphere blend phase.
- Added the first ability to set a spacecraft roll target independently from a pointing target. Currently you can set NORM (behaves as previously), INVERT (rolls 180 degrees from NORM), or ANY (nulls out roll rate but does not try to control roll angle).
- Added First pass on Location music player. Plays music tracks tagged with the current SOI parent ID.
- Added tweaks to distant object rendering. Now blending is much better between sprites and their distant spheres. The minimums have been reduced a bit, and the sun is now better modulated based on its distance, ready to render multiple solar systems at once.
- Added light intensity value
Changes
- Simplified reusable active thruster buffer by removing the interior nullable types and eliminating an unnecessary per-loop data copy.
- Reduced a small amount of duplication in vehicle target navigation code.
- Reduced the curvature strength of the earth erosion terrain modifier.
- Reformatted the DrawLatitude function for readability.
- Fixed hitching at max time warp due to flight plans expiring immediately. This is a stop-gap fix, will look at a more robust flightplan expiry system.
- The flight computer now correctly tracks objects in Keplerian orbits, even at high time warp.
- Fixed a method name spelling error.
- Fix for secondary viewports when moving between windows with different DPI scaling
- Fixed keybindings would not be loaded. This occurred due to changes in TOML serialization. Now saved keybindings will be correctly loaded when set by the user.
- Inverse VP now can be accessed from camera.
- VmaAllocator now in program and can be passed into classes such as FramePackedBuffers.
- Changed the light z-sorting to use a Radix sort instead of purely a less than comparison, improving performance.
- Moved BufferHelpers to Extensions folder.
- Enabled the light PBR calculations to get better visuals.
- Changed cluster selection in shaders from brute force to O(1)
- Renamed LightData.glsl to PunctualLighting.glsl for clarity.
- Changed attenuation calcs to vulkan gltf extension recommendation in preparation to make it easier for designers to curate lights.
- Refactored part of Orbit's GetNearestPoint() logic since it was taking up a significant portion of frame time. Still using the old system for hyperbolic orbits as they need a bit more precision.
- Fixed some GetNearestPoint() logic that was unintentionally behind a null check.
- Fixed light transmitance color being black due to dark side of the planet results in early escape from mesh rendering, causing lights to not be drawn (or their shadows) when a vessel is in the shadow of the planet.
Removals
- Removed light type from flags and promoted to it's own var.
- Removed DescriptorPool from ShadowMapSystem in favor of a passed in one.
View JSON
{
  "build": "2025.9.6.2317",
  "date": "2025-09-05",
  "fromRevision": 2300,
  "toRevision": 2317,
  "commits": [
    {
      "rev": 2301,
      "date": "2025-09-04",
      "author": "gravhoek-rw",
      "lines": [
        "Simplified reusable active thruster buffer by removing the interior nullable types and eliminating an unnecessary per-loop data copy."
      ]
    },
    {
      "rev": 2302,
      "date": "2025-09-04",
      "author": "gravhoek-rw",
      "lines": [
        "Reduced a small amount of duplication in vehicle target navigation code."
      ]
    },
    {
      "rev": 2303,
      "date": "2025-09-04",
      "author": "Linx-RW",
      "lines": [
        "Added planet map rendering to the ground track window.",
        "Added helper functions for computing the billboard and texture matrices for planet rendering.",
        "Added a tiny amount of ambient light to the planet map renderer's surface view.",
        "Reduced the curvature strength of the earth erosion terrain modifier."
      ]
    },
    {
      "rev": 2304,
      "date": "2025-09-04",
      "author": "Linx-RW",
      "lines": [
        "Reformatted the DrawLatitude function for readability."
      ]
    },
    {
      "rev": 2305,
      "date": "2025-09-05",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed hitching at max time warp due to flight plans expiring immediately. This is a stop-gap fix, will look at a more robust flightplan expiry system."
      ]
    },
    {
      "rev": 2306,
      "date": "2025-09-04",
      "author": "gravhoek-rw",
      "lines": [
        "The flight computer now correctly tracks objects in Keplerian orbits, even at high time warp.",
        "Added methods to retrieve object Keplerian velocity at a given game time.",
        "Fixed a method name spelling error."
      ]
    },
    {
      "rev": 2307,
      "date": "2025-09-05",
      "author": "Christopher Howlett",
      "lines": [
        "Fix for secondary viewports when moving between windows with different DPI scaling"
      ]
    },
    {
      "rev": 2308,
      "date": "2025-09-05",
      "author": "Rocket",
      "lines": [
        "Fixed keybindings would not be loaded. This occurred due to changes in TOML serialization. Now saved keybindings will be correctly loaded when set by the user.",
        "Added keybindings are only serialized if they are different from the default, to ease changes to default keybindings during development. If the user sets a custom binding, it will not be touched - but if the user is using the default binding, it will be updated if the default changes. Credit: Anth."
      ]
    },
    {
      "rev": 2309,
      "date": "2025-09-05",
      "author": "GitHub",
      "lines": [
        "Overhauled KSA lighting to utilize clustered lighting which greatly improves performance and increases how many active lights we can have at one time. (was 32 max now with current tests at 1000+)",
        "LightCollection to hold the CPU specific light info.",
        "LightUtils for functions that help with light calculations.",
        "FramePackedVkBuffer to aid in packing lots of data into one buffer and making it easier to work with frames in flight",
        "Tetrahedral based shadow calcs for point lights, reducing how many times the closest objects are required to be re-rendered and thus improving performance in comparison to the traditional cube maps",
        "Shadow atlas to pack shadow maps into one texture.",
        "WIP Spotlight shadows (just need to sort out the sampling part)",
        "A debug window for lights (holds CPU times, debug visuals and more info on the way)",
        "Inverse VP  now can be accessed from camera",
        "Added light intensity value",
        "VmaAllocator now in program and can be passed into classes such as FramePackedBuffers",
        "Changed the light z-sorting to use a Radix sort instead of purely a less than comparison, improving performance.",
        "Moved BufferHelpers to Extensions folder.",
        "Enabled the light PBR calculations to get better visuals.",
        "Changed cluster selection in shaders from brute force to O(1)",
        "Renamed LightData.glsl to PunctualLighting.glsl for clarity",
        "Changed attenuation calcs to vulkan gltf extension recommendation in preparation to make it easier for designers  to curate lights",
        "Removed light type from flags and promoted to it's own var",
        "Removed DescriptorPool from ShadowMapSystem in favor of a passed in one"
      ]
    },
    {
      "rev": 2310,
      "date": "2025-09-05",
      "author": "Morrow",
      "lines": [
        "Refactored part of Orbit's GetNearestPoint() logic since it was taking up a significant portion of frame time. Still using the old system for hyperbolic orbits as they need a bit more precision."
      ]
    },
    {
      "rev": 2311,
      "date": "2025-09-05",
      "author": "Morrow",
      "lines": [
        "Fixed some GetNearestPoint() logic that was unintentionally behind a null check."
      ]
    },
    {
      "rev": 2312,
      "date": "2025-09-05",
      "author": "Rocket",
      "lines": [
        "Fixed light transmitance color being black due to dark side of the planet results in early escape from mesh rendering, causing lights to not be drawn (or their shadows) when a vessel is in the shadow of the planet."
      ]
    },
    {
      "rev": 2313,
      "date": "2025-09-04",
      "author": "gravhoek-rw",
      "lines": [
        "Added a simple color darkening for distant celestial sprites depending on the approximate lit fraction of the visible disc. This mostly works seamlessly but does show a little bit of artifacting in the sprite-sphere blend phase."
      ]
    },
    {
      "rev": 2314,
      "date": "2025-09-04",
      "author": "gravhoek-rw",
      "lines": [
        "Added the first ability to set a spacecraft roll target independently from a pointing target. Currently you can set NORM (behaves as previously), INVERT (rolls 180 degrees from NORM), or ANY (nulls out roll rate but does not try to control roll angle)."
      ]
    },
    {
      "rev": 2315,
      "date": "2025-09-05",
      "author": "matthew.caradus",
      "lines": [
        "Added First pass on Location music player. Plays music tracks tagged with the current SOI parent ID."
      ]
    },
    {
      "rev": 2316,
      "date": "2025-09-05",
      "author": "Rocket",
      "lines": [
        "Added tweaks to distant object rendering. Now blending is much better between sprites and their distant spheres. The minimums have been reduced a bit, and the sun is now better modulated based on its distance, ready to render multiple solar systems at once."
      ]
    }
  ]
}

v2025.9.8.2336

View Changelog
Additions
- Implemented blackrack's edge tessellation heuristic into the terrain tessellation eval shader.
- Added Sample accurate music scheduling for SOI music system. When SyncPoints are specified in a music file the LocationMusicPlayer will switch tracks at the next available sync point. If none are added the music will switch directly.
- Added nuget package MathNet.Numerics to use for Eigen value calcuations.
- Added ConjunctionAssessment class containing new closest approach method to solve: Conjunction Assessment Thnrough Chebyshev Polynomials (CATCH). This is the new core math for solving closest approaches and encounters. On the surface the player will not notice much diference after this change, but it is more efficient and accurate than the old solver. It sets us up to make further improvements and changes in the closest approach calculations and visuals.
- Added Id string to PatchedConics and related data so that we have a backwards lookup to what Astronomical the Patch is for. Before this we only had the Parent body reference for the Patch Orbit.
Changes
- Fix culling thread group count on one dimension exceeding the min guaranteed by Vulkan spec
- Clamp distant celestial sprite shadowing factor - previously it was possible for it to become greater than one.
- Moved edge tessellation heuristic from OceanTessControl.tesc to TessellationFuncs.glsl.
- Separated Biplanar texture sampling function into a version with a standard texture sample and one with a textureGrad sample.
- Expanded manual control lockout system to be more fine-grained and issue precisely-worded alerts in all cases where manual inputs are disregarded.
- Manual engine ignition is explicitly turned off in auto-burn mode to prevent a leftover manual ignition from overriding auto-burn engine shutdown.
- Fixed a bug where distant celestial rendering was setting bad depth values causing all downstream rendering to be culled.
- Updated the assignment of shadow tiles to lights, as some lights were rendering depth when they should not be.
- Changed porkchop worker to split it's work further into four more worker tasks.
- Renamed ClosestPoints struct to Encounter.
- Changed PatchedConic.TryFindEncounter to TryFindEncounters and returns an array of all encounters with the body asked for. As there may be more than one.
- Changed CheckUpdateEncounter replacing the old closest approach solver/logic with new CATCH logic.
- Fixed issue in setting closest distance info on porkchop plots to ensure we are setting it for the target astronomical.
- Fixed encounters are now possible with non-orbiting objects. EG: Sol aka The Sun aka a Star.
- Corrected main engine plume and audio to match the actual engine thrust rather than the manual throttle setting. This was incorrect in the case where the manual input was set differently to the auto-burn control.
- Renamed Vehicle.GetThrottle() to Vehicle.GetManualThrottle() to avoid future confusion.
- Renamed two ThrusterState fields and added brief docs to clarify their meanings.
- Set navball frame when toggling on/off auto burn mode.
- The burn computer will no longer ignite the main engine until the thrust direction is nearly aligned with the burn direction. This avoids burning in the wrong direction if auto burn is activated too late.
- Modify closest approach search to clamp to half of the primary orbit.
- Raise default search polynomial order to 16.
- Fixed There could be an occasional burst of wind noise when transitioning in and out of atmospheric flight.
Removals
- Removed scaling and offset of point lights for thrusters to fix issues with sim speeds below 1x.
- Removed redundant old closest approach solver code.
View JSON
{
  "build": "2025.9.8.2336",
  "date": "2025-09-09",
  "fromRevision": 2317,
  "toRevision": 2336,
  "commits": [
    {
      "rev": 2318,
      "date": "2025-09-05",
      "author": "Ghassen Lahmar",
      "lines": [
        "Fix culling thread group count on one dimension exceeding the min guaranteed by Vulkan spec"
      ]
    },
    {
      "rev": 2319,
      "date": "2025-09-05",
      "author": "gravhoek-rw",
      "lines": [
        "Clamp distant celestial sprite shadowing factor - previously it was possible for it to become greater than one."
      ]
    },
    {
      "rev": 2320,
      "date": "2025-09-05",
      "author": "Linx-RW",
      "lines": [
        "Implemented blackrack's edge tessellation heuristic into the terrain tessellation eval shader.",
        "Moved edge tessellation heuristic from OceanTessControl.tesc to TessellationFuncs.glsl."
      ]
    },
    {
      "rev": 2321,
      "date": "2025-09-07",
      "author": "Linx-RW",
      "lines": [
        "Separated Biplanar texture sampling function into a version with a standard texture sample and one with a textureGrad sample."
      ]
    },
    {
      "rev": 2322,
      "date": "2025-09-07",
      "author": "gravhoek-rw",
      "lines": [
        "Expanded manual control lockout system to be more fine-grained and issue precisely-worded alerts in all cases where manual inputs are disregarded.",
        "Manual engine ignition is explicitly turned off in auto-burn mode to prevent a leftover manual ignition from overriding auto-burn engine shutdown."
      ]
    },
    {
      "rev": 2323,
      "date": "2025-09-08",
      "author": "Dan Southon",
      "lines": [
        "Removed scaling and offset of point lights for thrusters to fix issues with sim speeds below 1x"
      ]
    },
    {
      "rev": 2324,
      "date": "2025-09-08",
      "author": "Morrow",
      "lines": [
        "Fixed a bug where distant celestial rendering was setting bad depth values causing all downstream rendering to be culled."
      ]
    },
    {
      "rev": 2325,
      "date": "2025-09-08",
      "author": "matthew.caradus",
      "lines": [
        "Added Sample accurate music scheduling for SOI music system. When SyncPoints are specified in a music file the LocationMusicPlayer will switch tracks at the next available sync point. If none are added the music will switch directly."
      ]
    },
    {
      "rev": 2326,
      "date": "2025-09-08",
      "author": "Dan Southon",
      "lines": [
        "Updated the assignment of shadow tiles to lights, as some lights were rendering depth when they should not be."
      ]
    },
    {
      "rev": 2327,
      "date": "2025-09-08",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added nuget package MathNet.Numerics to use for Eigen value calcuations.",
        "Added ConjunctionAssessment class containing new closest approach method to solve: Conjunction Assessment Thnrough Chebyshev Polynomials (CATCH).",
        "This is the new core math for solving closest approaches and encounters. On the surface the player will not notice much diference after this change, but it is more efficient and accurate than the old solver.",
        "It sets us up to make further improvements and changes in the closest approach calculations and visuals.",
        "Added Id string to PatchedConics and related data so that we have a backwards lookup to what Astronomical the Patch is for. Before this we only had the Parent body reference for the Patch Orbit.",
        "Changed porkchop worker to split it's work further into four more worker tasks.",
        "Renamed ClosestPoints struct to Encounter.",
        "Changed PatchedConic.TryFindEncounter to TryFindEncounters and returns an array of all encounters with the body asked for. As there may be more than one.",
        "Changed CheckUpdateEncounter replacing the old closest approach solver/logic with new CATCH logic.",
        "Removed redundant old closest approach solver code.",
        "Fixed issue in setting closest distance info on porkchop plots to ensure we are setting it for the target astronomical.",
        "Fixed encounters are now possible with non-orbiting objects. EG: Sol aka The Sun aka a Star."
      ]
    },
    {
      "rev": 2328,
      "date": "2025-09-08",
      "author": "gravhoek-rw",
      "lines": [
        "Corrected main engine plume and audio to match the actual engine thrust rather than the manual throttle setting. This was incorrect in the case where the manual input was set differently to the auto-burn control."
      ]
    },
    {
      "rev": 2329,
      "date": "2025-09-08",
      "author": "gravhoek-rw",
      "lines": [
        "Renamed Vehicle.GetThrottle() to Vehicle.GetManualThrottle() to avoid future confusion."
      ]
    },
    {
      "rev": 2330,
      "date": "2025-09-08",
      "author": "gravhoek-rw",
      "lines": [
        "Renamed two ThrusterState fields and added brief docs to clarify their meanings."
      ]
    },
    {
      "rev": 2331,
      "date": "2025-09-08",
      "author": "gravhoek-rw",
      "lines": [
        "Set navball frame when toggling on/off auto burn mode."
      ]
    },
    {
      "rev": 2332,
      "date": "2025-09-08",
      "author": "gravhoek-rw",
      "lines": [
        "The burn computer will no longer ignite the main engine until the thrust direction is nearly aligned with the burn direction. This avoids burning in the wrong direction if auto burn is activated too late."
      ]
    },
    {
      "rev": 2333,
      "date": "2025-09-08",
      "author": "gravhoek-rw",
      "lines": [
        "Modify closest approach search to clamp to half of the primary orbit.",
        "Raise default search polynomial order to 16."
      ]
    },
    {
      "rev": 2334,
      "date": "2025-09-09",
      "author": "matthew.caradus",
      "lines": [
        "Fixed There could be an occasional burst of wind noise when transitioning in and out of atmospheric flight."
      ]
    }
  ]
}

v2025.9.9.2364

View Changelog
Additions
- Preparation for soft shadows.
- Added a constructor for spotlights for sanitizing values.
- Added first pass on a spot light part. Still need to handle emissives and conditional rendering during the depth pass.
- Animate ocean waves using FFT, extract normals and sideways displacement from FFT data.
- Perform FFT in compute shader groupshared memory using Stockham's algorithm.
- Implement the ocean spectrum from the paper "A unified directional spectrum for long and short wind-driven waves", will add Jonswap spectrum later.
- Use multiple FFT cascades at different scales to minimize tiling and performance cost.
- Add specialization constants info to ComputePipelineWrapper
- Proof of concept RCS light animation based on VolumetricExhaust Emissive Curve
- Re-added missing mesh file declaration for the apollo burn thruster mesh.
- Added very basic emissive map support for our PBR mesh rendering. Currently just applied to the 'no push constants' shader version as we're switching over to the instanced rendering only anyways.
- Show the actual closest approach with the targeted object. Previously we were only showing the first approach.
- Added a light system gpu settings for controlling cluster counts, bias, and clipping planes from cpu.
- Added code to filter out "closest approaches" with very large range rates. These are not actual closest approaches, just minimum distances within the allowed time bounds.
- Added gemini6a as a nearby target for gemini7.
- Added ability to use Transfer Planner to create transfers to other planets whilst in Solar orbit.
- Added separation of Closest Approaches from actual Encounters.
- Restored closest approach range rate filter.
Changes
- Fix for planet shadowing when the camera is at a negative altitudes.
- Allow large gerstner and FFT waves to be combined. Not polished, just for a showcase/example of how to combined different wave data.
- Fix remaining ocean surface jittering
- Optimize atmosphere reflections to only sample LUTS when intersecting the atomsphere. This was a quick optimization that didn't take much effort.
- Converted light system to dynamic instancing, making it easier to create lights on the fly.
- Optimized the light clusters by reducing the clipping planes. Lights past a certain depth are basically not visible so we might as well avoid calculations in the void.
- Fixed inter-planetary Transfer Planner calculations so they are now closer to where they should be. Need some more work to actually iterate on them to hit the target SOI. But we are now going in the correct direction.
- Fixed wrong squash merge conflict resolution for OrbitalTransfers class.
- Fixed manual Burn created on parent orbit move to vehicle orbit.
- Small fix for when lights instances are cleared. It was causing the debug window to show incorrect data.
- Renamed Cluster to LightCluster to be more descriptive
- Fixed a second case where we were only showing the first encounter rather than the closest.
- Adjusted wording and verbosity on patched conic start/end UI markers to improve clarity.
- Improved range rate encounter filter for small closest approach values.
- Fixed another case of incomplete encounter searching.
- Display physics debug overlay info for all vehicles in the nearby vicinity, not just the current vehicle.
- Fix problem with version detection
- Changed patched conics processing to only capture actual encounter information when calculating new flight plans and burn plans.
- Changed Vehicle Set Target processing to now capture closest approach data only to the set target.
- Changed Encounter and Closest approach processing to ensure we only search and show encounters or approaches between the patch start and end times.
- Changed the number of Polynomials to use in CATCH for closest approach processing in the transfer planner. This saves a lot of time and the closest approach value isn't as critical in the transfer planner, it is not used to determine the actual encounters.
- Fixed orbit line drawing culling on hyperbolic trajectories on the parent or grandparent celestial too early. This was causing potential hyperbolic eject trajectories subsequent to escape from a moon to not being drawn until the camera was quite far away.
- Fixed to ensure that flight plan expiry is also set based on closest approach windows searched for target as well. This has changed due to changes to split encounters from closest approaches earlier today.
- Split out per-vehicle data from the overall update loop in VehicleUpdateTask. This is the first step towards solving multiple vehicles in the same loop.
Removals
- Removed override closest approach checkbox and associated code from Transfer Planner as it is no longer relevant.
- Removed vehicle update flags since they are no longer needed.
View JSON
None found in Game Data.

v2025.9.10.2376

View Changelog
Additions
- Added WIP soft shadow sampling for point and spot lights
- Added ValueIn(time unit) to SimTime struct to return the time in the passed in time unit.
- Added Minutes, Hours, Weeks, Months, Years properties to SimTime struct to return the value in each unit.
- Added ToNearest( time unit) to TimeSpanReference to return formatted time in the requested time unit for display to UI.
- Added dropdown to set time unit to Transfer Planner UI. All Times shown in the Transfer Planner will be displayed in the selected time unit.
- Added output of Hohmann transfer time and minimum/maximum transfer time sliders. Allows the player to now set the minimum and maximum time of flight (between the source and destination) before asking for a porkchop plot.The Transfer planner will now create porkchops for the selected minimum and maximum transfer time range set by the player.
- Added Re-Calculate button and functionality to Transfer Planner UI.
- Added initial complex crater terrain modifier.
- Added R16 texture support to CubicHermiteSpline.
- Added Voronoi functions.
- Added some procedural complex craters to the Moon for testing.
- Added simple smooth blend between adjacent craters.
- Added CPU-side complex craters modifier to ensure collisions work for them.
- Added FormatBytes to ByteEx to return a string suffixing the short form e.g. B, KB, MB, etc.
- Added debug defines to enable/disable punctual lighting glsl tests.
- Added SimpleCraters terrain modifier. This is just ComplexCraters without any of the ring, radial or inner noises and models smaller impacts.
- Added per-crater seed which randomizes the ring and radial noises to make them unique per crater.
-
Changes
- Fixed potential issue in hyperbolic orbits GetTrueAnomaly (From mean anomaly) diverging in Newton-Raphson iteration when f-prime is very small. Also, added fallback to bisection if Newton-Raphson fails on hyperbolic orbits to find True Anomaly from Mean anomaly.
- Fixed bug in ImGuiHelper.BeginColumns - one overload not calculating column widths correctly.
- Expanded terrain modifier float params by an extra 4.
- Updated the Moon's normal map to include the new craters.
- Optimized complex craters modifier.
- Improved complex craters ring and radial noise.
- Moved EvaluateModifierLUT from Celestial.cs to ProceduralModifiersRenderData.cs and added R16 support.
- Fixed CPU-side curve LUT evaluation not linearly interpolating between values.
- Fixed garbage allocations coming from normal map decoding.
- Fix Vulkan errors when using atmosphere luts for reflections. The errors were fixed by transitioning the luts before and after using them.
- Rename "planetShaders" to "shaders" in Vehicle.cs
- Changed Find Closest approach / encounter code to first do a geometry test to set the start and end range closer to the expected time of encounter. This has sped this part of the process up two-fold.
- LightSystem buffer byte sizes now visible in debug window.
- Adjusted PointLight and SpotLight constructors to take in Flags instead of adding multiple bool params.
- Converted light system debug sections for timers and cluster info to tables.
- Changed how subpart rotates lights to be consistent with other TransformReferences.
- Corrected ortho normal of spot light gizmo to stop the cone from shrinking at certain rotations.
- Fixed calculation of burn duration and ignition time for burn UI to incorporate user set throttle setting.
Removals
- Removed unused glsl code in PunctualLighting.
- Revert "* Fixed calculation of burn duration and ignition time for burn UI to incorporate user set throttle setting, This reverts commit 37e946ef3005bf5ea9479130bc183b8815d24a15.
View JSON
{
  "build": "2025.9.10.2376",
  "date": "2025-09-16",
  "fromRevision": 2364,
  "toRevision": 2376,
  "commits": [
    {
      "rev": 2365,
      "date": "2025-09-12",
      "author": "Dan Southon",
      "lines": [
        "Added WIP soft shadow sampling for point and spot lights"
      ]
    },
    {
      "rev": 2366,
      "date": "2025-09-12",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed potential issue in hyperbolic orbits GetTrueAnomaly (From mean anomaly) diverging in Newton-Raphson iteration when f-prime is very small. Also, added fallback to bisection if Newton-Raphson fails on hyperbolic orbits to find True Anomaly from Mean anomaly.",
        "Fixed bug in ImGuiHelper.BeginColumns - one overload not calculating column widths correctly.",
        "Added ValueIn(time unit) to SimTime struct to return the time in the passed in time unit.",
        "Added Minutes, Hours, Weeks, Months, Years properties to SimTime struct to return the value in each unit.",
        "Added ToNearest( time unit) to TimeSpanReference to return formatted time in the requested time unit for display to UI.",
        "Added dropdown to set time unit to Transfer Planner UI. All Times shown in the Transfer Planner will be displayed in the selected time unit.",
        "Added output of Hohmann transfer time and minimum/maximum transfer time sliders. Allows the player to now set the minimum and maximum time of flight (between the source and destination) before asking for a porkchop plot.The Transfer planner will now create porkchops for the selected minimum and maximum transfer time range set by the player."
      ]
    },
    {
      "rev": 2367,
      "date": "2025-09-12",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added Re-Calculate button and functionality to Transfer Planner UI."
      ]
    },
    {
      "rev": 2368,
      "date": "2025-09-13",
      "author": "Linx-RW",
      "lines": [
        "Added initial complex crater terrain modifier.",
        "Added R16 texture support to CubicHermiteSpline.",
        "Added Voronoi functions.",
        "Expanded terrain modifier float params by an extra 4."
      ]
    },
    {
      "rev": 2369,
      "date": "2025-09-14",
      "author": "Linx-RW",
      "lines": [
        "Added some procedural complex craters to the Moon for testing.",
        "Updated the Moon's normal map to include the new craters.",
        "Optimized complex craters modifier.",
        "Improved complex craters ring and radial noise.",
        "Added simple smooth blend between adjacent craters.",
        "Added CPU-side complex craters modifier to ensure collisions work for them.",
        "Moved EvaluateModifierLUT from Celestial.cs to ProceduralModifiersRenderData.cs and added R16 support.",
        "Fixed CPU-side curve LUT evaluation not linearly interpolating between values.",
        "Fixed garbage allocations coming from normal map decoding."
      ]
    },
    {
      "rev": 2370,
      "date": "2025-09-15",
      "author": "josh",
      "lines": [
        "Fix Vulkan errors when using atmosphere luts for reflections. The errors were fixed by transitioning the luts before and after using them."
      ]
    },
    {
      "rev": 2371,
      "date": "2025-09-15",
      "author": "JoshRW",
      "lines": [
        "Rename \"planetShaders\" to \"shaders\" in Vehicle.cs"
      ]
    },
    {
      "rev": 2372,
      "date": "2025-09-15",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Changed Find Closest approach / encounter code to first do a geometry test to set the start and end range closer to the expected time of encounter. This has sped this part of the process up two-fold."
      ]
    },
    {
      "rev": 2373,
      "date": "2025-09-15",
      "author": "Dan Southon",
      "lines": [
        "LightSystem buffer byte sizes now visible in debug window.",
        "Added FormatBytes to ByteEx to return a string suffixing the short form e.g. B, KB, MB, etc.",
        "Added debug defines to enable/disable punctual lighting glsl tests.",
        "Adjusted PointLight and SpotLight constructors to take in Flags instead of adding multiple bool params.",
        "Converted light system debug sections for timers and cluster info to tables.",
        "Changed how subpart rotates lights to be consistent with other TransformReferences.",
        "Corrected ortho normal of spot light gizmo to stop the cone from shrinking at certain rotations.",
        "Removed unused glsl code in PunctualLighting."
      ]
    },
    {
      "rev": 2374,
      "date": "2025-09-15",
      "author": "Linx-RW",
      "lines": [
        "Added SimpleCraters terrain modifier. This is just ComplexCraters without any of the ring, radial or inner noises and models smaller impacts.",
        "Added per-crater seed which randomizes the ring and radial noises to make them unique per crater."
      ]
    },
    {
      "rev": 2375,
      "date": "2025-09-16",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed calculation of burn duration and ignition time for burn UI to incorporate user set throttle setting."
      ]
    },
    {
      "rev": 2376,
      "date": "2025-09-16",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Revert \"* Fixed calculation of burn duration and ignition time for burn UI to incorporate user set throttle setting.\"",
        "This reverts commit 37e946ef3005bf5ea9479130bc183b8815d24a15."
      ]
    }
  ]
}

v2025.9.2.2383

View Changelog
Additions
- Add cloud shadows to terrain and ocean, approximate the volumetric shadows by sampling a single slice of the volumetric layer.
- Added missing override for GetStateVectorsAt( game time) to Vehicle class.
- Show distance and time of flight on closest approach markers.
Changes
- Changed git to use csharp diffs for csharp files. Diffs are a bit cleaner for those using CLI git.
- Fixed ability to add burn to parent body orbit line and then transfer it to the controlled vehicle flight plan. This was removed when the gizmo was updated a few months back.
- Fixed so we don't actually need an actual encounter with our target body to transfer a burn from the parent orbit to the vehicle's flight plan.
- Fixed incorrect Ap Pe overlap check in find encounters and removed this overlap check from Find closest approaches, because we don't want it for encounters. They may not overlap for a closest encounter.
- Fixed find closest approach to actually search the correct overlap points and merge into one search where it makes sense.
Removals
- N/A
View JSON
{
  "build": "2025.9.2.2383",
  "date": "2025-09-18",
  "fromRevision": 2376,
  "toRevision": 2383,
  "commits": [
    {
      "rev": 2377,
      "date": "2025-09-16",
      "author": "Morrow",
      "lines": [
        "Changed git to use csharp diffs for csharp files. Diffs are a bit cleaner for those using CLI git."
      ]
    },
    {
      "rev": 2378,
      "date": "2025-09-16",
      "author": "Ghassen Lahmar",
      "lines": [
        "Add cloud shadows to terrain and ocean, approximate the volumetric shadows by sampling a single slice of the volumetric layer"
      ]
    },
    {
      "rev": 2379,
      "date": "2025-09-17",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed ability to add burn to parent body orbit line and then transfer it to the controlled vehicle flight plan. This was removed when the gizmo was updated a few months back.",
        "Added missing override for GetStateVectorsAt( game time) to Vehicle class."
      ]
    },
    {
      "rev": 2380,
      "date": "2025-09-17",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed so we don't actually need an actual encounter with our target body to transfer a burn from the parent orbit to the vehicle's flight plan."
      ]
    },
    {
      "rev": 2381,
      "date": "2025-09-16",
      "author": "gravhoek-rw",
      "lines": [
        "Show distance and time of flight on closest approach markers."
      ]
    },
    {
      "rev": 2382,
      "date": "2025-09-17",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed incorrect Ap Pe overlap check in find encounters and removed this overlap check from Find closest approaches, because we don't want it for encounters. They may not overlap for a closest encounter.",
        "Fixed find closest approach to actually search the correct overlap points and merge into one search where it makes sense."
      ]
    }
  ]
}

v2025.9.12.2399

View Changelog
Additions
- Add checkbox option for vessel reflections. Reflections are cheap now, but may become expensive later on with more meshes.
- Add shader specialization constant support to RenderTechnique.cs. I had this code handy from trying to use specialization constants for the reflection settings, so I decided to paste it in here for when we need it later.
- Added a timeout and timeout handling on porkchop worker tasks.
- Added MathEx.ToOrbitAngle TrueAnomaly overload to change angle and return a TrueAnomaly.
- Added int PatchedConics.ClosestApproachesTo(id) to return number of closest approaches to another object by id.
- Initial pass on part trees. Parts can now be modified by grouped branches of the tree.
Changes
- Early exit from terrain shader when guaranteed to be hidden by ocean to save performance
- Reduce register pressure and improve performance on terrain shader by accumulating sampled textures immediately instead of holding per-biome temporary values
- Refactor cloud shadows code
- Fix cloud shadows OFF setting applying LOW settings
- Move repeating code to get the fractional part of a double3 to Utils
- Move terrain/ocean early exit earlier to the culling to save more performance when terrain is guaranteed to be hidden by ocean
- Fix terrain still early exiting when ocean is disabled
- Fix vessel reflections showing when the stars or atmosphere was turned off.
- Corrected Titan physical atmosphere characteristics from HASI data.
- Fixed maffs for FindClosestPoints - which was actually just an initial guess, and actually was literally the line of nodes. So renamed it to FindLineOfNodes and simplified it.
- Fixed some of the logic when looking for closest approaches to use two initial guesses a bit more methodically and ensure we are clamping to the patch start and end times. Also consolidate to one search if the two initial guesses are within one orbital period (tMax value).
- Fixed UI display of double.MaxValue in EndTime of patches in the flight Plan UI and instead replaced with (Infinity) text in this case.
- Changed UI display to show multiple closest approaches if they are within 2 x minimum distance range.
- Fixed creating burn on parent orbit not changing the parent orbit line colour. Fixed this by cloining the parent orbit for our burn patch rather than using the parent's orbit itself. PRobably better if we do this anyway, because we don't want to accidentally change the parent's orbit. Although, that could lead to some fun exploits.
- Fixed missing push constants when renderering instanced meshes.
- Burn node dragging no longer culls drag points if the mouse gets too far from the orbit. This should make dragging feel much smoother.
- Fixed issue where we end up on a straight orbit with low energy being incorrectly defined as hyperbolic. This was causing NaNs for calculation of state vectors. This case was found by Raiz around Titan where currently Titan does not rotate.
- Fixed incorrect formula for the hyperbolic semi-latus rectum.
- Fixed a case where the new eccentricity formulation could become NaN.
- Fixed hovering over apoapsis and periapsis markers not working in some situations.
- Periapsis and apoapsis markers are now shown for all patches for the controlled vehicle's trajectory and planned trajectory.
- Optimize reflections to only run atmosphere calculations when inside the atmosphere
- Fixed single search parameters for finding close encounters, was incorrectly missing some.
- Fixed search range for finding close encounters potentially being Infinity when both orbits are hyperbolic.
- Fixed incorrect handling of timeout on transfer planner UI not canceling running tasks.
Removals
- N/A
View JSON
{
  "build": "2025.9.12.2399",
  "date": "2025-09-18",
  "fromRevision": 2383,
  "toRevision": 2399,
  "commits": [
    {
      "rev": 2384,
      "date": "2025-09-17",
      "author": "Ghassen Lahmar",
      "lines": [
        "Early exit from terrain shader when guaranteed to be hidden by ocean to save performance",
        "Reduce register pressure and improve performance on terrain shader by accumulating sampled textures immediately instead of holding per-biome temporary values",
        "Refactor cloud shadows code",
        "Fix cloud shadows OFF setting applying LOW settings",
        "Move repeating code to get the fractional part of a double3 to Utils"
      ]
    },
    {
      "rev": 2385,
      "date": "2025-09-17",
      "author": "Ghassen Lahmar",
      "lines": [
        "Move terrain/ocean early exit earlier to the culling to save more performance when terrain is guaranteed to be hidden by ocean",
        "Fix terrain still early exiting when ocean is disabled"
      ]
    },
    {
      "rev": 2386,
      "date": "2025-09-15",
      "author": "JoshRW",
      "lines": [
        "Add checkbox option for vessel reflections. Reflections are cheap now, but may become expensive later on with more meshes.",
        "Fix vessel reflections showing when the stars or atmosphere was turned off."
      ]
    },
    {
      "rev": 2387,
      "date": "2025-09-16",
      "author": "JoshRW",
      "lines": [
        "Add shader specialization constant support to RenderTechnique.cs. I",
        "had this code handy from trying to use specialization constants for the",
        "reflection settings, so I decided to paste it in here for when we need",
        "it later."
      ]
    },
    {
      "rev": 2388,
      "date": "2025-09-17",
      "author": "gravhoek-rw",
      "lines": [
        "Corrected Titan physical atmosphere characteristics from HASI data."
      ]
    },
    {
      "rev": 2389,
      "date": "2025-09-18",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed maffs for FindClosestPoints - which was actually just an initial guess, and actually was literally the line of nodes. So renamed it to FindLineOfNodes and simplified it.",
        "Fixed some of the logic when looking for closest approaches to use two initial guesses a bit more methodically and ensure we are clamping to the patch start and end times. Also consolidate to one search if the two initial guesses are within one orbital period (tMax value).",
        "Fixed UI display of double.MaxValue in EndTime of patches in the flight Plan UI and instead replaced with (Infinity) text in this case.",
        "Changed UI display to show multiple closest approaches if they are within 2 x minimum distance range.",
        "Added a timeout and timeout handling on porkchop worker tasks.",
        "Added MathEx.ToOrbitAngle TrueAnomaly overload to change angle and return a TrueAnomaly.",
        "Added int PatchedConics.ClosestApproachesTo(id) to return number of closest approaches to another object by id."
      ]
    },
    {
      "rev": 2390,
      "date": "2025-09-18",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed creating burn on parent orbit not changing the parent orbit line colour. Fixed this by cloining the parent orbit for our burn patch rather than using the parent's orbit itself. PRobably better if we do this anyway, because we don't want to accidentally change the parent's orbit. Although, that could lead to some fun exploits."
      ]
    },
    {
      "rev": 2391,
      "date": "2025-09-18",
      "author": "Morrow",
      "lines": [
        "Initial pass on part trees. Parts can now be modified by grouped branches of the tree.",
        "Fixed missing push constants when renderering instanced meshes."
      ]
    },
    {
      "rev": 2392,
      "date": "2025-09-18",
      "author": "Morrow",
      "lines": [
        "Burn node dragging no longer culls drag points if the mouse gets too far from the orbit. This should make dragging feel much smoother."
      ]
    },
    {
      "rev": 2393,
      "date": "2025-09-18",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed issue where we end up on a straight orbit with low energy being incorrectly defined as hyperbolic. This was causing NaNs for calculation of state vectors. This case was found by Raiz around Titan where currently Titan does not rotate."
      ]
    },
    {
      "rev": 2394,
      "date": "2025-09-17",
      "author": "gravhoek-rw",
      "lines": [
        "Fixed incorrect formula for the hyperbolic semi-latus rectum."
      ]
    },
    {
      "rev": 2395,
      "date": "2025-09-17",
      "author": "gravhoek-rw",
      "lines": [
        "Fixed a case where the new eccentricity formulation could become NaN."
      ]
    },
    {
      "rev": 2396,
      "date": "2025-09-17",
      "author": "gravhoek-rw",
      "lines": [
        "Fixed hovering over apoapsis and periapsis markers not working in some situations.",
        "Periapsis and apoapsis markers are now shown for all patches for the controlled vehicle's trajectory and planned trajectory."
      ]
    },
    {
      "rev": 2397,
      "date": "2025-09-18",
      "author": "josh",
      "lines": [
        "Optimize reflections to only run atmosphere calculations when inside the atmosphere"
      ]
    },
    {
      "rev": 2398,
      "date": "2025-09-18",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed single search parameters for finding close encounters, was incorrectly missing some.",
        "Fixed search range for finding close encounters potentially being Infinity when both orbits are hyperbolic.",
        "Fixed incorrect handling of timeout on transfer planner UI not canceling running tasks."
      ]
    }
  ]
}

v2025.9.3.2404

View Changelog
Additions
- Sub part models now render to the light system shadow maps
Changes
- Fade volumetric cloud shadows to 2d cloud shadows when zooming out
- Sample cloud noise mips correctly for all cloud types when raymarching, small performance improvement
- Fixed more issues with merging of two searches into one on closest approach calculations.
- Fixed issue where CATCH was trying to solve a zero time interval due to double precision issue, So now we just go over the time interval, which doesn't hurt us, and also means CATCH doesn't grind to a halt trying to find EigenValues on infinity values.
- Fixed a case where zero eccentricity could cause a divide-by-zero.
Removals
- Remove TODO comment about reflections wanting to intersect the moon surface
View JSON
{
  "build": "2025.9.3.2404",
  "date": "2025-09-20",
  "fromRevision": 2399,
  "toRevision": 2404,
  "commits": [
    {
      "rev": 2400,
      "date": "2025-09-18",
      "author": "Ghassen Lahmar",
      "lines": [
        "Fade volumetric cloud shadows to 2d cloud shadows when zooming out",
        "Sample cloud noise mips correctly for all cloud types when raymarching, small performance improvement"
      ]
    },
    {
      "rev": 2401,
      "date": "2025-09-19",
      "author": "JoshRW",
      "lines": [
        "Remove TODO comment about reflections wanting to intersect the moon surface"
      ]
    },
    {
      "rev": 2402,
      "date": "2025-09-19",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed more issues with merging of two searches into one on closest approach calculations.",
        "Fixed issue where CATCH was trying to solve a zero time interval due to double precision issue, So now we just go over the time interval, which doesn't hurt us, and also means CATCH doesn't grind to a halt trying to find EigenValues on infinity values."
      ]
    },
    {
      "rev": 2403,
      "date": "2025-09-18",
      "author": "gravhoek-rw",
      "lines": [
        "Fixed a case where zero eccentricity could cause a divide-by-zero."
      ]
    },
    {
      "rev": 2404,
      "date": "2025-09-20",
      "author": "Dan Southon",
      "lines": [
        "Sub part models now render to the light system shadow maps"
      ]
    }
  ]
}

v2025.9.13.2415

View Changelog
Additions
- Added gradient evaluation to CubicHermiteSpline.
- Added gradient voronoi noise function.
- Added simple craters gradient function (stage 1).
- Added 'Gradient' map type to the planet map exporter.
- GetHeightMetersAt() in HeightFuncs.glsl now returns the gradient as well as the height value.
- Added Eroded Craters modifier.
- Added shader logic and CPU logic for the new eroded craters modifier.
- Added a gradient visualisation to the planet exporter which computes the surface normal from the planet gradient rather than by using central differences. This will be useful for validating whether modifier gradients are correct.
Changes
- Fixed making additional modfolders would cause an exception. This was caused by the async loading task being embedded inside the load for a modfolder, meaning multiple instances were generated when multiple modfolders exists. This has been moved outside. Next task is to split 'core' into submods to allow easier total conversion mods and better data separation down the line.
- Changed terrain modifier LUT from R16 storing value to R16G16 storing value and gradient.
- Fixed derivative/gradient miscalculation in the Simplex Noise library where subsequent octave gradients were not being rescaled by the new frequency.
- Changed procedural modifier LUT format from R16G16Unorm to R16G16SFloat to allow negative values for cubic hermite spline derivatives.
- Fixed errors in the simplex noise library where the gradient was incorrectly scaled.
- Improved gradient calculation in the erosion function. Not yet sure if this is correct but it's a decent approximation.
- Corrected modifier gradients by scaling by the celestial radius reciprocal. Not all modifiers return correct gradients yet but this scaling was missing.
- Adjusted existing Erosion modifiers on Earth and Mars to respect the changes to the Erosion function.
- Fixed calculation of Argument of Periapsis when creating orbits where our Ascending Node is in the plane. In this case we must use the two dimension equation.
- Fixed planet map exporter not disposing gradient map resources.
- Fixed planet map exporter always opening with 4096 x 2048 resolution. Now defaults to 1024 x 512 unless a different viewport size is provided.
Removals
- N/A
View JSON
{
  "build": "2025.9.13.2415",
  "date": "2025-09-23",
  "fromRevision": 2404,
  "toRevision": 2415,
  "commits": [
    {
      "rev": 2405,
      "date": "2025-09-22",
      "author": "rocket2guns",
      "lines": [
        "Fixed making additional modfolders would cause an exception. This was caused by the async loading task being embedded inside the load for a modfolder, meaning multiple instances were generated when multiple modfolders exists. This has been moved outside. Next task is to split 'core' into submods to allow easier total conversion mods and better data separation down the line."
      ]
    },
    {
      "rev": 2406,
      "date": "2025-09-17",
      "author": "Linx-RW",
      "lines": [
        "Added gradient evaluation to CubicHermiteSpline.",
        "Changed terrain modifier LUT from R16 storing value to R16G16 storing value and gradient."
      ]
    },
    {
      "rev": 2407,
      "date": "2025-09-17",
      "author": "Linx-RW",
      "lines": [
        "Added gradient voronoi noise function.",
        "Added simple craters gradient function (stage 1).",
        "Added 'Gradient' map type to the planet map exporter.",
        "GetHeightMetersAt() in HeightFuncs.glsl now returns the gradient as well as the height value."
      ]
    },
    {
      "rev": 2408,
      "date": "2025-09-20",
      "author": "Linx-RW",
      "lines": [
        "Fixed derivative/gradient miscalculation in the Simplex Noise library where subsequent octave gradients were not being rescaled by the new frequency."
      ]
    },
    {
      "rev": 2409,
      "date": "2025-09-22",
      "author": "Linx-RW",
      "lines": [
        "Changed procedural modifier LUT format from R16G16Unorm to R16G16SFloat to allow negative values for cubic hermite spline derivatives.",
        "Added Eroded Craters modifier."
      ]
    },
    {
      "rev": 2410,
      "date": "2025-09-22",
      "author": "Linx-RW",
      "lines": [
        "Added shader logic and CPU logic for the new eroded craters modifier.",
        "Fixed errors in the simplex noise library where the gradient was incorrectly scaled.",
        "Improved gradient calculation in the erosion function. Not yet sure if this is correct but it's a decent approximation.",
        "Corrected modifier gradients by scaling by the celestial radius reciprocal. Not all modifiers return correct gradients yet but this scaling was missing."
      ]
    },
    {
      "rev": 2411,
      "date": "2025-09-22",
      "author": "Linx-RW",
      "lines": [
        "Added a gradient visualisation to the planet exporter which computes the surface normal from the planet gradient rather than by using central differences. This will be useful for validating whether modifier gradients are correct.",
        "Adjusted existing Erosion modifiers on Earth and Mars to respect the changes to the Erosion function."
      ]
    },
    {
      "rev": 2412,
      "date": "2025-09-23",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed calculation of Argument of Periapsis when creating orbits where our Ascending Node is in the plane. In this case we must use the two dimension equation."
      ]
    },
    {
      "rev": 2413,
      "date": "2025-09-23",
      "author": "Linx-RW",
      "lines": [
        "Fixed planet map exporter not disposing gradient map resources.",
        "Fixed planet map exporter always opening with 4096 x 2048 resolution. Now defaults to 1024 x 512 unless a different viewport size is provided."
      ]
    }
  ]
}

v2025.9.4.2429

View Changelog
Additions
- Added buttons to Transfer Planner under the Porkchop plot that allows the user to fine tune the selected porkchop point up/down/left/right one index at a time.
- New combined sun shadow system in preparation for vessels casting shadows onto terrain.
- New depth renderer for vehicles.
- Added early exits for sub part instance rendering.
- Added Vehicle Max Render Distance to Constants.
- Added hard shadows only toggle for light system.
- Added new bool flag to the astronomical body template "TidallyLocked" which is false by default. For bodies that have this defined as true they will not have their rotation period automatically calculated and set at startup to match their orbital period so that they are tidally locked.
- Added WIP vessel shadows on terrain (currently clips too early/they are only visible when very close to the ground)
Changes
- Fixed issue where Transfer Planner was picking up mouse clicks even when the mouse was outside it's window. This caused the selected point to be changed and be drawn outside of the transfer planner window.
- Fixed issue with porkchop best and select points markers being drawn above other overlapping UI windows.
- Fixed further improvements to the transfer planner to adjust our Lambert solutions for our porkchop to ensure we get an encounter (sometimes it misses, due to imprecisions in the methods we are using to convert the hyperboic escape velocity back to the starting orbit, and that assumes near circular orbit). This is a placeholder brute force adjustement. A further iteration is needed to replace this method with a gradient descent method to allow us to solve the encounter in a more methodical method that will also allow us to solve the encounter end to create a solution to a user defined ending altitude/radius.
- Converted all usages of the old sun shadow systems to now utilize the new system.
- Fixed discontinuities in erosion modifier value and gradients.
- Fixed issue where satellites (moons) in the solar system were not correctly tidally locked in their rotation period.
- Reapply "* Fixed calculation of burn duration and ignition time for burn UI to incorporate user set throttle setting." Throttle setting is only considered when the FlightComputer is in Manual mode. In Automatic Mode throttle is currently set at 100% for the UI calculations and the burn regardless of what the user has set it too.
- Moved the shader layouts for shadows out of the common glsl and added them to each frag/comp shader that used them, allowing for better control over.
- Changed the shadows glsl calculations to require parameters for a shadow struct uniform and texture.
- Fixed areas in full shadow when they are out of the shadow map.
- Adjusted max shadow distance for vessel shadow map
- Fixed ground track and planet exporter window gradient texture using r32f on the shader side rather than rgba8. This fixes a validation error and also the ground track view opening after a delay.
Removals
- Deleted teleport states from the vehicle update task. We now directly modify the orbit in the UI context when the workers are shut down and this is safe to do.
- Removed old sun shadow renderers.
- Removed unneeded lighting/shadows includes from vert shaders.
View JSON
{
  "build": "2025.9.4.2429",
  "date": "2025-09-27",
  "fromRevision": 2415,
  "toRevision": 2429,
  "commits": [
    {
      "rev": 2416,
      "date": "2025-09-15",
      "author": "gravhoek-rw",
      "lines": [
        "Deleted teleport states from the vehicle update task. We now directly modify the orbit in the UI context when the workers are shut down and this is safe to do."
      ]
    },
    {
      "rev": 2417,
      "date": "2025-09-24",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed issue where Transfer Planner was picking up mouse clicks even when the mouse was outside it's window. This caused the selected point to be changed and be drawn outside of the transfer planner window."
      ]
    },
    {
      "rev": 2418,
      "date": "2025-09-24",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed issue with porkchop best and select points markers being drawn above other overlapping UI windows."
      ]
    },
    {
      "rev": 2419,
      "date": "2025-09-24",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added buttons to Transfer Planner under the Porkchop plot that allows the user to fine tune the selected porkchop point up/down/left/right one index at a time."
      ]
    },
    {
      "rev": 2420,
      "date": "2025-09-24",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed further improvements to the transfer planner to adjust our Lambert solutions for our porkchop to ensure we get an encounter (sometimes it misses, due to imprecisions in the methods we are using to convert the hyperboic escape velocity back to the starting orbit, and that assumes near circular orbit). This is a placeholder brute force adjustement. A further iteration is needed to replace this method with a gradient descent method to allow us to solve the encounter in a more methodical method that will also allow us to solve the encounter end to create a solution to a user defined ending altitude/radius."
      ]
    },
    {
      "rev": 2421,
      "date": "2025-09-24",
      "author": "Dan Southon",
      "lines": [
        "New combined sun shadow system in preparation for vessels casting shadows onto terrain.",
        "New depth renderer for vehicles.",
        "Added early exits for sub part instance rendering.",
        "Added Vehicle Max Render Distance to Constants.",
        "Added hard shadows only toggle for light system.",
        "Converted all usages of the old sun shadow systems to now utilize the new system.",
        "Removed old sun shadow renderers."
      ]
    },
    {
      "rev": 2422,
      "date": "2025-09-24",
      "author": "Linx-RW",
      "lines": [
        "Fixed discontinuities in erosion modifier value and gradients."
      ]
    },
    {
      "rev": 2423,
      "date": "2025-09-25",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added new bool flag to the astronomical body template \"TidallyLocked\" which is false by default. For bodies that have this defined as true they will not have their rotation period automatically calculated and set at startup to match their orbital period so that they are tidally locked.",
        "Fixed issue where satellites (moons) in the solar system were not correctly tidally locked in their rotation period."
      ]
    },
    {
      "rev": 2424,
      "date": "2025-09-25",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Reapply \"* Fixed calculation of burn duration and ignition time for burn UI to incorporate user set throttle setting.\"",
        "Throttle setting is only considered when the FlightComputer is in Manual mode. In Automatic Mode throttle is currently set at 100% for the UI calculations and the burn regardless of what the user has set it too."
      ]
    },
    {
      "rev": 2425,
      "date": "2025-09-25",
      "author": "Dan Southon",
      "lines": [
        "Moved the shader layouts for shadows out of the common glsl and added them to each frag/comp shader that used them, allowing for better control over.",
        "Changed the shadows glsl calculations to require parameters for a shadow struct uniform and texture.",
        "Removed unneeded lighting/shadows includes from vert shaders."
      ]
    },
    {
      "rev": 2426,
      "date": "2025-09-25",
      "author": "Dan Southon",
      "lines": [
        "Added WIP vessel shadows on terrain (currently clips too early/they are only visible when very close to the ground)",
        "Fixed areas in full shadow when they are out of the shadow map."
      ]
    },
    {
      "rev": 2427,
      "date": "2025-09-25",
      "author": "Dan Southon",
      "lines": [
        "Adjusted max shadow distance for vessel shadow map"
      ]
    },
    {
      "rev": 2428,
      "date": "2025-09-25",
      "author": "Linx-RW",
      "lines": [
        "Fixed ground track and planet exporter window gradient texture using r32f on the shader side rather than rgba8. This fixes a validation error and also the ground track view opening after a delay."
      ]
    }
  ]
}

v2025.9.5.2441

View Changelog
Additions
- Added right clicking on parts to show info on it.
- Added message for swapping to orbit camera from free camera so players get consistent feedback.
- Integrated Brutal.Texture into KSA
- Added KTX ITexture abstractions for KTX2 support
- Added unit tests where needed
Changes
- Changed how the map gains control of the keyboard for offsetting the camera by adding an 'active' boolean rather than solely relying on a nullable check to make it less confusing to find the current vehicle. This fixes a few inconsistencies with orbit markers not being drawn when they should. As a byproduct, this enables the vehicle UI in map mode whether or not you are actively controlling the vehicle you are following. I'm not 100% sure which way I like more so I'll leave it for now and see how people feel.
- Fixed SoI's being drawn when they are targets of vehicles that are not currently followed. SoIs will still be drawn if the 'ShowSphereOfInfluence' flag is set if we want to display SoIs of other vehicle targets but showing all targets seems like an oversight.
- Fixed the map recenter logic immediately focusing on the controlled vehicle rather than recentering to the currently focused astronomical first.
- Fixed being unable to close burn menus.
- Fix for some situations where you can hover over an orbit line before the start or after the end of the orbit.
- Fixup Gemini RoughMetalAO textures. The textures had been modified while debugging a while ago, so I updated them using a SketchFab model. They seem to look correct now.
- Updated existing KSA texture code to use Brutal.Texture
- Updated Brutal.Framework in KSA to 25.9.3.1
- Fixed incorrect shadowing past the max clipping plane
Removals
- Removed map mode from the camera mode shift hotkey.
View JSON
{
  "build": "2025.9.5.2441",
  "date": "2025-09-29",
  "fromRevision": 2429,
  "toRevision": 2441,
  "commits": [
    {
      "rev": 2430,
      "date": "2025-09-29",
      "author": "Morrow",
      "lines": [
        "Added right clicking on parts to show info on it."
      ]
    },
    {
      "rev": 2431,
      "date": "2025-09-29",
      "author": "Morrow",
      "lines": [
        "Changed how the map gains control of the keyboard for offsetting the camera by adding an 'active' boolean rather than solely relying on a nullable check to make it less confusing to find the current vehicle. This fixes a few inconsistencies with orbit markers not being drawn when they should. As a byproduct, this enables the vehicle UI in map mode whether or not you are actively controlling the vehicle you are following. I'm not 100% sure which way I like more so I'll leave it for now and see how people feel."
      ]
    },
    {
      "rev": 2432,
      "date": "2025-09-29",
      "author": "Morrow",
      "lines": [
        "Removed map mode from the camera mode shift hotkey."
      ]
    },
    {
      "rev": 2433,
      "date": "2025-09-29",
      "author": "Morrow",
      "lines": [
        "Added message for swapping to orbit camera from free camera so players get consistent feedback."
      ]
    },
    {
      "rev": 2434,
      "date": "2025-09-29",
      "author": "Morrow",
      "lines": [
        "Fixed SoI's being drawn when they are targets of vehicles that are not currently followed. SoIs will still be drawn if the 'ShowSphereOfInfluence' flag is set if we want to display SoIs of other vehicle targets but showing all targets seems like an oversight."
      ]
    },
    {
      "rev": 2435,
      "date": "2025-09-29",
      "author": "Morrow",
      "lines": [
        "Fixed the map recenter logic immediately focusing on the controlled vehicle rather than recentering to the currently focused astronomical first."
      ]
    },
    {
      "rev": 2436,
      "date": "2025-09-29",
      "author": "Morrow",
      "lines": [
        "Fixed being unable to close burn menus."
      ]
    },
    {
      "rev": 2437,
      "date": "2025-09-29",
      "author": "Morrow",
      "lines": [
        "Fix for some situations where you can hover over an orbit line before the start or after the end of the orbit."
      ]
    },
    {
      "rev": 2438,
      "date": "2025-09-26",
      "author": "JoshRW",
      "lines": [
        "Fixup Gemini RoughMetalAO textures. The textures had been modified while debugging a while ago, so I updated them using a SketchFab model. They seem to look correct now."
      ]
    },
    {
      "rev": 2439,
      "date": "2025-09-29",
      "author": "GitHub",
      "lines": [
        "Integrated Brutal.Texture into KSA",
        "Updated existing KSA texture code to use Brutal.Texture",
        "Updated Brutal.Framework in KSA to 25.9.3.1",
        "Added KTX ITexture abstractions for KTX2 support",
        "Added unit tests where needed"
      ]
    },
    {
      "rev": 2440,
      "date": "2025-09-29",
      "author": "Dan Southon",
      "lines": [
        "Fixed incorrect shadowing past the max clipping plane"
      ]
    }
  ]
}

October 2025

Ten versions were released this month.


View versions

v2025.10.5.2476

View Changelog
Additions
- Added a shadow sample type selector (Hard, PCF, PCSS)
- Added ability to close part menu by right clicking again on the part.
- Added some handling to differentiate between right click actions and right click dragging.
- Added ColorAlphaReference. This is separate from ColorReference but can be merged in the future.
- Added ImGui helper DrawColor4
- Added modifier colour support. The pipeline and refactor is in place; only a few modifiers currently output colour. Modifier colours are built up in premultiplied alpha space then converted to straight alpha and blended with the planet's colour map.
- Added a simple bicubic texture sampling function, unused for now.
- Added first set of RCS Thruster parts.
- Added ability in code to mark a Burn instance as no longer valid. And the worker process - when applying changes will delete invalid Burns. This allows and enforces changes to persistent data to occur at the correct time.
- The Burn UI now provides better UX and feedback on what the DV is from the Parent Orbit (where the burn is located) and the actual DV and time that the burn will require to meet the burn from the parking orbit.
- Initial implementation of Thin Film Interference. Currently implemented on all rockets, will be updated to be masked when assets are ready. Thin Film Interference is an optical effect which results in a rainbow-like colorshift around surfaces such as heated metal and glass.
- Added SharedFrag shader file, for common shader code that can only compile in the fragment shader, such as dFdx/dFdy.
- Added Game Sim Speed to UI
- Added Game Elapsed Time to UI
- Added Warp to next SOI change event button to UI to allow user to warp to next encounter or SOI exit event in their flightplan.
- Added terrain debug settings to adjust the minimum and maximum heights for the currently selected planet.
- Created new shared glsl 'SamplingFunctions' and moved the existing sampling functions out of Shared.glsl.
- Added ktx2 to LFS tracking.
- Added analytical derivatives for the complex craters modifier.
- Added background to the game speed UI component.
- Added seconds to the elapsed Game Time UI.
- Vessel shadows now affect direct lighting on clouds (not the in-scatter yet)
- Added shadow derivative receiver plane bias
- Added shadow normal offset to aid removing shadow acne
- Adapted how the PCSS to reduce shadow acne
- Only limit throttle-up due to time warp, not auto burn status.
Changes
- Reduced performance costs of sun shadow calcs and PCSS is a work in progress.
- Defaulted to percentage-closer soft shadows using poisson sampling
- Moved pre-generated poisson disc to separate glsl
- Fixed incorrect modifier amplitudes for hybrid multifractal noise on Luna and sand dunes on Earth
- Updated the planet texture exporter to include generated colour in the preview and export.
- Moved modifier functions to new ModifiersCommon.glsl.
- Updated SubPart creation to respect a template's custom transforms.
- Fixed and enhanced the "Parent Eject Burn" functionality. This includes projecting and displaying the full flightplan from parking orbit when creating and manipulating a parent eject burn.
- Renamed ReflectionPushConstants to PBRPushConstants due to including non-reflection values.
- Fixed calculation of max time value used for Conjunction Assessment when Finding Closest Approach when both orbits we are testing are unbound. This was a TODO, prior to this if both orbits are unbound no closest approach assessment was being made.
- Fixed broken burn input fields in UI that I broke when making "Parent Eject Burn" changes yesterday.
- Updated NormalMap calculations to fix an error with how tangents are interpolated, currently only applied to vessel shader.
- Fixed bug where auto warp to buttons were not respecting if they were disabled or not.
- Switch ocean from mesh to screen-space at high altitude: Fix occasional z-fighting issues resulting in concentric circles at some distances, and better support Casper's new height data sets
- Simplify how ocean shore filtering is handled at high altitude by using the heightmap directly - KTX2 Heightmaps
- Replaced Earth's heightmap with the latest GEBCO 2025 topo-bathemetry data and rescaled the elevation range appropriately.
- Converted Earth and Moon heightmaps to 16 bit (R16Unorm) single channel KTX2.
- Updated Earth's diffuse map to be more biased towards land at shorelines to help prevent ocean colour leaking onto land.
- Fixed incorrect Moon elevation ranges.
- Fixed CPU-side terrain sampling lerping between 0 and max height rather than min height and max height.
- Replaced Mars' heightmap with an R16Unorm version and set its terrain minimum and maximum elevations to their real values.
- Updated the normal maps for the Moon and Mars to match their new elevation ranges.
- Adjusted the altitude height curve for the complex craters modifier to work with the new Moon elevation range.
- Fixed interface windows would be too narrow when operating at certain sizes with a smaller font.
- Fixed game speed gauge (and other gauges) not animating when sim speed is zero.
- Fixed location points on the planet to only render the UI box if they are visible to the camera. Also added ability to hover over the location boxes to display the location Name UI text.
- Fixed some normal mapping problems. The new parts no longer have their tangents inverted.
- Combined descriptor for sun shadow maps
- Reworked generic Tree structure into a Part-specific tree in preparation for moving aggregate lists like thrusters into it.
- Fixed ejection burn dV display for normal and outward components.
- Updated RCS thruster part textures.
- Moved thruster definitions from the top-level vehicle into parts. This immediately deduplicates a bunch of XML.
- Moved all thruster-related structs into the new PartTree where the parallel indices can be managed correctly. This also eliminates the duplicate SubPartThrusters list that used to exist.
Removals
- Delete old Gemini textures. The textures have been fixed, so the old ones are no longer needed for reference.
- Disabled vma usage to reduce VRAM overhead
View JSON
{
  "build": "2025.10.5.2476",
  "date": "2025-10-09",
  "fromRevision": 2441,
  "toRevision": 2476,
  "commits": [
    {
      "rev": 2442,
      "date": "2025-09-29",
      "author": "Dan Southon",
      "lines": [
        "Reduced performance costs of sun shadow calcs and PCSS is a work in progress.",
        "Added a shadow sample type selector (Hard, PCF, PCSS)"
      ]
    },
    {
      "rev": 2443,
      "date": "2025-09-30",
      "author": "Morrow",
      "lines": [
        "Added ability to close part menu by right clicking again on the part.",
        "Added some handling to differentiate between right click actions and right click dragging."
      ]
    },
    {
      "rev": 2444,
      "date": "2025-09-30",
      "author": "Dan Southon",
      "lines": [
        "Defaulted to percentage-closer soft shadows using poisson sampling",
        "Moved pre-generated poisson disc to separate glsl"
      ]
    },
    {
      "rev": 2445,
      "date": "2025-10-01",
      "author": "Linx-RW",
      "lines": [
        "Added ColorAlphaReference. This is separate from ColorReference but can be merged in the future."
      ]
    },
    {
      "rev": 2446,
      "date": "2025-10-01",
      "author": "Linx-RW",
      "lines": [
        "Added ImGui helper DrawColor4"
      ]
    },
    {
      "rev": 2447,
      "date": "2025-10-01",
      "author": "Linx-RW",
      "lines": [
        "Fixed incorrect modifier amplitudes for hybrid multifractal noise on Luna and sand dunes on Earth"
      ]
    },
    {
      "rev": 2448,
      "date": "2025-10-01",
      "author": "Linx-RW",
      "lines": [
        "Added modifier colour support. The pipeline and refactor is in place; only a few modifiers currently output colour. Modifier colours are built up in premultiplied alpha space then converted to straight alpha and blended with the planet's colour map.",
        "Added a simple bicubic texture sampling function, unused for now.",
        "Updated the planet texture exporter to include generated colour in the preview and export.",
        "Moved modifier functions to new ModifiersCommon.glsl."
      ]
    },
    {
      "rev": 2449,
      "date": "2025-10-01",
      "author": "morrow-rw",
      "lines": [
        "Added first set of RCS Thruster parts.",
        "Updated SubPart creation to respect a template's custom transforms."
      ]
    },
    {
      "rev": 2450,
      "date": "2025-10-01",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added ability in code to mark a Burn instance as no longer valid. And the worker process - when applying changes will delete invalid Burns. This allows and enforces changes to persistent data to occur at the correct time.",
        "Fixed and enhanced the \"Parent Eject Burn\" functionality. This includes projecting and displaying the full flightplan from parking orbit when creating and manipulating a parent eject burn.",
        "The Burn UI now provides better UX and feedback on what the DV is from the Parent Orbit (where the burn is located) and the actual DV and time that the burn will require to meet the burn from the parking orbit."
      ]
    },
    {
      "rev": 2451,
      "date": "2025-10-01",
      "author": "RWMax",
      "lines": [
        "Initial implementation of Thin Film Interference. Currently implemented on all rockets, will be updated to be masked when assets are ready. Thin Film Interference is an optical effect which results in a rainbow-like colorshift around surfaces such as heated metal and glass.",
        "Renamed ReflectionPushConstants to PBRPushConstants due to including non-reflection values."
      ]
    },
    {
      "rev": 2452,
      "date": "2025-10-02",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed calculation of max time value used for Conjunction Assessment when Finding Closest Approach when both orbits we are testing are unbound. This was a TODO, prior to this if both orbits are unbound no closest approach assessment was being made."
      ]
    },
    {
      "rev": 2453,
      "date": "2025-10-02",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed broken burn input fields in UI that I broke when making \"Parent Eject Burn\" changes yesterday."
      ]
    },
    {
      "rev": 2454,
      "date": "2025-10-03",
      "author": "RWMax",
      "lines": [
        "Updated NormalMap calculations to fix an error with how tangents are interpolated, currently only applied to vessel shader.",
        "Added SharedFrag shader file, for common shader code that can only compile in the fragment shader, such as dFdx/dFdy."
      ]
    },
    {
      "rev": 2455,
      "date": "2025-10-02",
      "author": "JoshRW",
      "lines": [
        "Delete old Gemini textures. The textures have been fixed, so the old",
        "ones are no longer needed for reference."
      ]
    },
    {
      "rev": 2456,
      "date": "2025-10-03",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added Game Sim Speed to UI",
        "Added Game Elapsed Time to UI"
      ]
    },
    {
      "rev": 2457,
      "date": "2025-10-03",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed bug where auto warp to buttons were not respecting if they were disabled or not.",
        "Added Warp to next SOI change event button to UI to allow user to warp to next encounter or SOI exit event in their flightplan."
      ]
    },
    {
      "rev": 2458,
      "date": "2025-10-03",
      "author": "Ghassen Lahmar",
      "lines": [
        "Switch ocean from mesh to screen-space at high altitude: Fix occasional z-fighting issues resulting in concentric circles at some distances, and better support Casper's new height data sets",
        "Simplify how ocean shore filtering is handled at high altitude by using the heightmap directly"
      ]
    },
    {
      "rev": 2459,
      "date": "2025-10-03",
      "author": "GitHub",
      "lines": [
        "KTX2 Heightmaps",
        "Replaced Earth's heightmap with the latest GEBCO 2025 topo-bathemetry data and rescaled the elevation range appropriately.",
        "Converted Earth and Moon heightmaps to 16 bit (R16Unorm) single channel KTX2.",
        "Added terrain debug settings to adjust the minimum and maximum heights for the currently selected planet.",
        "Updated Earth's diffuse map to be more biased towards land at shorelines to help prevent ocean colour leaking onto land.",
        "Created new shared glsl 'SamplingFunctions' and moved the existing sampling functions out of Shared.glsl.",
        "Fixed incorrect Moon elevation ranges.",
        "Fixed CPU-side terrain sampling lerping between 0 and max height rather than min height and max height.",
        "Added ktx2 to LFS tracking.",
        "Replaced Mars' heightmap with an R16Unorm version and set its terrain minimum and maximum elevations to their real values.",
        "Updated the normal maps for the Moon and Mars to match their new elevation ranges."
      ]
    },
    {
      "rev": 2460,
      "date": "2025-10-03",
      "author": "Linx-RW",
      "lines": [
        "Added analytical derivatives for the complex craters modifier.",
        "Adjusted the altitude height curve for the complex craters modifier to work with the new Moon elevation range."
      ]
    },
    {
      "rev": 2461,
      "date": "2025-10-05",
      "author": "Rocket",
      "lines": [
        "Fixed interface windows would be too narrow when operating at certain sizes with a smaller font."
      ]
    },
    {
      "rev": 2462,
      "date": "2025-10-07",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed game speed gauge (and other gauges) not animating when sim speed is zero."
      ]
    },
    {
      "rev": 2463,
      "date": "2025-10-07",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added background to the game speed UI component."
      ]
    },
    {
      "rev": 2464,
      "date": "2025-10-07",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed location points on the planet to only render the UI box if they are visible to the camera. Also added ability to hover over the location boxes to display the location Name UI text."
      ]
    },
    {
      "rev": 2465,
      "date": "2025-10-07",
      "author": "Morrow",
      "lines": [
        "Fixed some normal mapping problems. The new parts no longer have their tangents inverted."
      ]
    },
    {
      "rev": 2466,
      "date": "2025-10-07",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added seconds to the elapsed Game Time UI."
      ]
    },
    {
      "rev": 2467,
      "date": "2025-10-07",
      "author": "Dan Southon",
      "lines": [
        "Combined descriptor for sun shadow maps",
        "Vessel shadows now affect direct lighting on clouds (not the in-scatter yet)",
        "Added shadow derivative receiver plane bias",
        "Added shadow normal offset to aid removing shadow acne",
        "Adapted how the PCSS to reduce shadow acne"
      ]
    },
    {
      "rev": 2468,
      "date": "2025-10-08",
      "author": "gravhoek-rw",
      "lines": [
        "Reworked generic Tree structure into a Part-specific tree in preparation for moving aggregate lists like thrusters into it."
      ]
    },
    {
      "rev": 2469,
      "date": "2025-10-08",
      "author": "gravhoek-rw",
      "lines": [
        "Fixed ejection burn dV display for normal and outward components."
      ]
    },
    {
      "rev": 2470,
      "date": "2025-10-08",
      "author": "gravhoek-rw",
      "lines": [
        "Only limit throttle-up due to time warp, not auto burn status."
      ]
    },
    {
      "rev": 2471,
      "date": "2025-10-08",
      "author": "gravhoek-rw",
      "lines": [
        "Revert previous commit due to a broken cherry pick."
      ]
    },
    {
      "rev": 2472,
      "date": "2025-10-08",
      "author": "gravhoek-rw",
      "lines": [
        "Only limit throttle due to time warp, not auto-burn status."
      ]
    },
    {
      "rev": 2473,
      "date": "2025-10-08",
      "author": "Morrow",
      "lines": [
        "Updated RCS thruster part textures."
      ]
    },
    {
      "rev": 2474,
      "date": "2025-10-08",
      "author": "Dan Southon",
      "lines": [
        "Disabled vma usage to reduce VRAM overhead"
      ]
    },
    {
      "rev": 2475,
      "date": "2025-10-08",
      "author": "gravhoek-rw",
      "lines": [
        "Moved thruster definitions from the top-level vehicle into parts. This immediately deduplicates a bunch of XML.",
        "Moved all thruster-related structs into the new PartTree where the parallel indices can be managed correctly. This also eliminates the duplicate SubPartThrusters list that used to exist."
      ]
    }
  ]
}

v2025.10.6.2497

View Changelog
Additions
- Added the second half of new gemini thruster parts. All of them will still need explicit thruster XML definitions but meshes are in properly.
- Added prerequisite latest Visual C++ Redist to the readme file as this is needed to run KSA Project.
- Added passage hatch part.
- Added first set of fuel tank parts.
- Added medium service module part.
- Added a quick and dirty routine to remap thruster key bindings based on part position and orientation.
- Regenerate flight computer vehicle config data when a vehicle is edited.
- Recompute bounding sphere radius when a vehicle is edited.
- Added debug visualizers for the sun shadow frustums, visible when the debug window is open
Changes
- Fixed the accidental change I made to the altitude roller UI width.
- Fixed subpart rotations not being initialized properly in some cases.
- Properly handle part transforms in thruster definitions.
- Moved unused source files to source folder so they were not taking up space in the build, roughly 1GB of files.
- Fixed an issue where we were missing an orbit point from our orbit line rendering for patches with start and end TA not default.
- Settings resolution maximums now apply to DDS files and 16-bit channel PNG/JPGs. KTX is still unresized for the time being.,
- Rationalized two GenerateSpacedPoints methods (one for bound and one for unbound) into one method.
- Moved engine definitions from vehicles to parts.
- Merged thrusters and engines for most runtime purposes.
- Renamed thruster to rocket in several instances where the object could either be a thruster or an engine.
- Resized all terrain textures to more appropriate resolutions.
- Improved Earth's cliff texture blending.
- Optimized the default mesh collection. Number of triangles reduced from ~5 million to ~1.6 million. The new mesh collection halves in resolution every log2 meters from the surface which means each LOD should be the same size on the screen, eliminating subpixel triangles that were previously harming performance from orbit.
- Some adjustments to the game time and sim speed UI to make it more consistent.
- Some more tweaks to the game time UI layout. Dean can fix it if he still doesn't like it.
- Adjusted the timeout on the transfer planner worker tasks to allow a bit longer especially when it's calculating transfers to the outer planets on slower machines.
- Fixed the font scale in the game time UI.
- Stabilized shadow volumes for vessels and adjusted planet volumes.
Removals
- Removed unused Mars diffuse and normal maps.
View JSON
{
  "build": "2025.10.6.2497",
  "date": "2025-10-10",
  "fromRevision": 2476,
  "toRevision": 2497,
  "commits": [
    {
      "rev": 2477,
      "date": "2025-10-09",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed the accidental change I made to the altitude roller UI width."
      ]
    },
    {
      "rev": 2478,
      "date": "2025-10-09",
      "author": "Morrow",
      "lines": [
        "Added the second half of new gemini thruster parts. All of them will still need explicit thruster XML definitions but meshes are in properly."
      ]
    },
    {
      "rev": 2479,
      "date": "2025-10-09",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added prerequisite latest Visual C++ Redist to the readme file as this is needed to run KSA Project."
      ]
    },
    {
      "rev": 2480,
      "date": "2025-10-09",
      "author": "Morrow",
      "lines": [
        "Fixed subpart rotations not being initialized properly in some cases."
      ]
    },
    {
      "rev": 2481,
      "date": "2025-10-09",
      "author": "gravhoek-rw",
      "lines": [
        "Properly handle part transforms in thruster definitions."
      ]
    },
    {
      "rev": 2482,
      "date": "2025-10-09",
      "author": "Rocket",
      "lines": [
        "Moved unused source files to source folder so they were not taking up space in the build, roughly 1GB of files."
      ]
    },
    {
      "rev": 2483,
      "date": "2025-10-09",
      "author": "Morrow",
      "lines": [
        "Added passage hatch part."
      ]
    },
    {
      "rev": 2484,
      "date": "2025-10-09",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed an issue where we were missing an orbit point from our orbit line rendering for patches with start and end TA not default."
      ]
    },
    {
      "rev": 2485,
      "date": "2025-10-09",
      "author": "Morrow",
      "lines": [
        "Settings resolution maximums now apply to DDS files and 16-bit channel PNG/JPGs. KTX is still unresized for the time being."
      ]
    },
    {
      "rev": 2486,
      "date": "2025-10-09",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Rationalized two GenerateSpacedPoints methods (one for bound and one for unbound) into one method."
      ]
    },
    {
      "rev": 2487,
      "date": "2025-10-09",
      "author": "gravhoek-rw",
      "lines": [
        "Moved engine definitions from vehicles to parts.",
        "Merged thrusters and engines for most runtime purposes.",
        "Renamed thruster to rocket in several instances where the object could either be a thruster or an engine."
      ]
    },
    {
      "rev": 2488,
      "date": "2025-10-09",
      "author": "Linx-RW",
      "lines": [
        "Resized all terrain textures to more appropriate resolutions.",
        "Improved Earth's cliff texture blending.",
        "Removed unused Mars diffuse and normal maps."
      ]
    },
    {
      "rev": 2489,
      "date": "2025-10-09",
      "author": "Linx-RW",
      "lines": [
        "Optimized the default mesh collection. Number of triangles reduced from ~5 million to ~1.6 million. The new mesh collection halves in resolution every log2 meters from the surface which means each LOD should be the same size on the screen, eliminating subpixel triangles that were previously harming performance from orbit."
      ]
    },
    {
      "rev": 2490,
      "date": "2025-10-10",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Some adjustments to the game time and sim speed UI to make it more consistent."
      ]
    },
    {
      "rev": 2491,
      "date": "2025-10-10",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Some more tweaks to the game time UI layout. Dean can fix it if he still doesn't like it.",
        "Adjusted the timeout on the transfer planner worker tasks to allow a bit longer especially when it's calculating transfers to the outer planets on slower machines."
      ]
    },
    {
      "rev": 2492,
      "date": "2025-10-10",
      "author": "Morrow",
      "lines": [
        "Added first set of fuel tank parts."
      ]
    },
    {
      "rev": 2493,
      "date": "2025-10-10",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed the font scale in the game time UI."
      ]
    },
    {
      "rev": 2494,
      "date": "2025-10-10",
      "author": "Morrow",
      "lines": [
        "Added medium service module part."
      ]
    },
    {
      "rev": 2495,
      "date": "2025-10-10",
      "author": "gravhoek-rw",
      "lines": [
        "Added a quick and dirty routine to remap thruster key bindings based on part position and orientation.",
        "Regenerate flight computer vehicle config data when a vehicle is edited.",
        "Recompute bounding sphere radius when a vehicle is edited."
      ]
    },
    {
      "rev": 2496,
      "date": "2025-10-10",
      "author": "Dan Southon",
      "lines": [
        "Stabilized shadow volumes for vessels and adjusted planet volumes.",
        "Added debug visualizers for the sun shadow frustums, visible when the debug window is open"
      ]
    }
  ]
}

v2025.10.8.2502

View Changelog
Additions
- Add textures to control the ocean's wind speed and color locally, local variations in wind speed are reflected in the distant sunglint seen from space
- Add Jonswap "Joint North Sea Wave Project" ocean spectrum
- Add basic ocean foam with controllable amount/strength
- Make the number of FFT cascades easy to change
- Added new mesh collection 'EarthScaleMesh', unused for now.
Changes
- Split VolumetricExhaustReference data from Instance data into VolumetricExhaustInstance. Now we do not need to clone all data for each volumetric exhaust. Instead we create an instance for each with a reference to the single reference data required.
- Fixed bug where deserializing a save with burns that have a parent of a non-IOrbiting astronomical (ie. The Sun) will throw an exception and fail to deserialize.
- Fixed so we only show closest approaches within 1.5x the closest opverall approach distance to reduce the number of approaches displayed in the UI.
- Fixed measuring of distance from vehicle to instead use distance to camera to display the celestial boxes and names in the UI.
- Improve ocean shading, generate physically accurate roughness values based on the Atlas presentation and the paper "Linear Efficient Antialiased Displacement and Reflectance Mapping"
- Improve ocean sky reflections
- Tweak ocean colors
- Fix mip level counts for ocean FFTs and cloud noise
- Scroll ocean cascades correctly, fix occasional reset/jump when moving long distances
- Tweak ocean mesh settings for higher subdivisions and more defined waves near the camera
- Fix artifacts due to atmospheric scattering when looking at closeups of ocean surface
- Moved mesh collections to Core/MeshCollections.
- Renamed DefaultMeshes to DefaultMeshCollection.
Removals
- N/A
View JSON
{
  "build": "2025.10.8.2502",
  "date": "2025-10-14",
  "fromRevision": 2497,
  "toRevision": 2502,
  "commits": [
    {
      "rev": 2498,
      "date": "2025-10-13",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Split VolumetricExhaustReference data from Instance data into VolumetricExhaustInstance. Now we do not need to clone all data for each volumetric exhaust. Instead we create an instance for each with a reference to the single reference data required."
      ]
    },
    {
      "rev": 2499,
      "date": "2025-10-13",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed bug where deserializing a save with burns that have a parent of a non-IOrbiting astronomical (ie. The Sun) will throw an exception and fail to deserialize.",
        "Fixed so we only show closest approaches within 1.5x the closest opverall approach distance to reduce the number of approaches displayed in the UI.",
        "Fixed measuring of distance from vehicle to instead use distance to camera to display the celestial boxes and names in the UI."
      ]
    },
    {
      "rev": 2500,
      "date": "2025-10-13",
      "author": "Ghassen Lahmar",
      "lines": [
        "Improve ocean shading, generate physically accurate roughness values based on the Atlas presentation and the paper \"Linear Efficient Antialiased Displacement and Reflectance Mapping\"",
        "Add textures to control the ocean's wind speed and color locally, local variations in wind speed are reflected in the distant sunglint seen from space",
        "Add Jonswap \"Joint North Sea Wave Project\" ocean spectrum",
        "Add basic ocean foam with controllable amount/strength",
        "Improve ocean sky reflections",
        "Make the number of FFT cascades easy to change",
        "Tweak ocean colors",
        "Fix mip level counts for ocean FFTs and cloud noise",
        "Scroll ocean cascades correctly, fix occasional reset/jump when moving long distances",
        "Tweak ocean mesh settings for higher subdivisions and more defined waves near the camera",
        "Fix artifacts due to atmospheric scattering when looking at closeups of ocean surface"
      ]
    },
    {
      "rev": 2501,
      "date": "2025-10-13",
      "author": "Linx-RW",
      "lines": [
        "Moved mesh collections to Core/MeshCollections.",
        "Renamed DefaultMeshes to DefaultMeshCollection.",
        "Added new mesh collection 'EarthScaleMesh', unused for now."
      ]
    }
  ]
}

v2025.10.8.2530 - "Phobos"

View Changelog
Additions
- Added Destroy console command to destroy and remove a vehicle from the simulation.
- Added ability to circularise elliptical orbits at Apoapsis or Periapsis to the Transfer Planner.
- Added Phobos
- Added mesh collection "AsteroidScaleMesh" for very small celestial bodies.
- Added variable terrain detail fade start and fade end values, useful when configuring tiny celestial bodies.
- Added terrain materials for Phobos.
- Added medium capsule part.
- Add ocean readback and a way to query wave heights.
- Added runtime part thumbnail rendering on game load.
- Added thumbnail mipmaps.
- Added ThumbnailReference for data driven curation
- Added part selector buttons using the thumbnails for the VehicleEditor
- Add atmosphere start altitude setting to atmosphereReference
Changes
- Mesh abstraction changes that allow for buffer packing
- Removed unused renderers
- Fixed Orbit line colours in additional camera windows not using the colours as per what is being followed. ie: followed vehicle orbit lines where being drawin the in inactive colour instead of the active colour in camera windows other than the main window.
- Fixed UI display of orbiting objects names and details so that it now also displays in additional camera windows, not just the main window.
- Fix broken RCS exhaust transient startup and shutdown animations
- Fix volumetric exhausts receiving shadows at the wrong position/depth
- Fixed cursor pos update when hovering on any window, not just main window.
- Fixed hovering UI details update when hovering over an astronomical in any camera window, not just main window.
- Fixed some of the logic around deciding whether to drawn ORbital Lines and markers when not following a vehicle and checking if the viewport we are drawing in is in Mapnode (not just the main viewport).
- Fixed small tweak to last commit to ensure we aren't always drawing orbit lines and markers for the followed vehicle and still obey the distance from camera and camera mode rules.
- Fixed CubeMesh generation code, which was causing artifacts for high subdivision counts.
- Fixed distant sphere renderer not sampling the planet's normal map.
- Fixed planet mesh collection always trying to use the Default mesh in the mesh data pass, which would cause the planet to disappear if trying to render with a different mesh.
- Better ocean mesh settings taking advantage of the mesh generator fix, more detail in ocean geometry and small waves can now be seen up-close
- Allow ocean mesh to snap independently of terrain mesh
- Run all FFTs in a single dispatch for better performance
- Generate FFT mipmaps in a single pass compute shader instead of multiple iterative blits for better performance
- Reduce ocean shader register usage for better performance
- Use a localized ocean color map for earth, algal blooms and other color variations can now be seen from space
- Fix landmasses disappearing when changing water properties from the UI
- Rename OptimizedMeshes to OceanMeshes
- Bandaid fix to stop the camera shifting while moving parts in the editor.
- Fixed no longer deleting burns that are in the future from another burn when the earlier burn is changed. Future burns will still be deleted if an earlier burn is deleted. But now they will be adjusted if the earlier burn is only moved or changed.
- Replaced one of the default geminis with new version using new parts. Thrusters need some work still. The new parts may need a big rotation to match coordinate spaces properly.
- Fixed Earth terrain material displacements that were too high.
- Adjusted the detail fade altitudes for Earth to improve the transition from orbit to surface with the new mesh collection.
- Updates to Brutal.Core 0.3.1. Multiple texture changes.
- Updated texture GPU upload code to be more robust over more formats
- Updated to Brutal.Core 0.3.1
- Made texture quality level scaling work over many more texture formats
- Numerous bug fixes.
- Fixed orbit and object highlight being stuck on when the cursor mode is changed (i.e. while rotating the camera).
- Tweak ocean color
- Fixed crash when there's no nearby celestial for the Ocean Renderer readback to reference.
- Fixed SubPartModelRenderer.DepthData updating descriptors during bind
- Split PoolExecutionCompletedSemaphore into an array of one per frame in flight to weed out a potential synchronization issue with the CommandBufferPool.
- Adjusted thumbnail scissors
- Adapted part bound calculation to factor in subpart matrices
- Match atmosphere and dust storm start altitudes on Mars to new terrain data which goes below the mean radius
- Fix scattering artifacts on planets that are close but not rendering detailed terrain by using the analytic sphere surface position for scattering
- Fix error when disabling then re-enabling height queries
- Rescaled terrain materials tiling to proper scales relative to the craft. We have the mesh density to be able to represent proper terrain textures at appropriate scales now.
- Fixed CPU height sampling still using the old heightmap sampling function, it now matches the shader.
- Fixed an off-by-half texel error in the CPU bilinear height map sampling function.
Removals
- Removed unused renderers
View JSON
{
  "build": "2025.10.10.2530",
  "date": "2025-10-22",
  "fromRevision": 2502,
  "toRevision": 2530,
  "commits": [
    {
      "rev": 2503,
      "date": "2025-10-14",
      "author": "Hanan Finnerty",
      "lines": [
        "Mesh abstraction changes that allow for buffer packing",
        "Removed unused renderers"
      ]
    },
    {
      "rev": 2504,
      "date": "2025-10-14",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed Orbit line colours in additional camera windows not using the colours as per what is being followed. ie: followed vehicle orbit lines where being drawin the in inactive colour instead of the active colour in camera windows other than the main window."
      ]
    },
    {
      "rev": 2505,
      "date": "2025-10-14",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed UI display of orbiting objects names and details so that it now also displays in additional camera windows, not just the main window."
      ]
    },
    {
      "rev": 2506,
      "date": "2025-10-14",
      "author": "Ghassen Lahmar",
      "lines": [
        "Fix broken RCS exhaust transient startup and shutdown animations",
        "Fix volumetric exhausts receiving shadows at the wrong position/depth"
      ]
    },
    {
      "rev": 2507,
      "date": "2025-10-15",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added Destroy console command to destroy and remove a vehicle from the simulation."
      ]
    },
    {
      "rev": 2508,
      "date": "2025-10-15",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed cursor pos update when hovering on any window, not just main window.",
        "Fixed hovering UI details update when hovering over an astronomical in any camera window, not just main window."
      ]
    },
    {
      "rev": 2509,
      "date": "2025-10-15",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed some of the logic around deciding whether to drawn ORbital Lines and markers when not following a vehicle and checking if the viewport we are drawing in is in Mapnode (not just the main viewport)."
      ]
    },
    {
      "rev": 2510,
      "date": "2025-10-15",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed small tweak to last commit to ensure we aren't always drawing orbit lines and markers for the followed vehicle and still obey the distance from camera and camera mode rules."
      ]
    },
    {
      "rev": 2511,
      "date": "2025-10-16",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added ability to circularise elliptical orbits at Apoapsis or Periapsis to the Transfer Planner."
      ]
    },
    {
      "rev": 2512,
      "date": "2025-10-16",
      "author": "Maxwell Johnson",
      "lines": [
        "Fixed CubeMesh generation code, which was causing artifacts for high subdivision counts."
      ]
    },
    {
      "rev": 2513,
      "date": "2025-10-15",
      "author": "Linx-RW",
      "lines": [
        "Fixed distant sphere renderer not sampling the planet's normal map.",
        "Fixed planet mesh collection always trying to use the Default mesh in the mesh data pass, which would cause the planet to disappear if trying to render with a different mesh."
      ]
    },
    {
      "rev": 2514,
      "date": "2025-10-16",
      "author": "Linx-RW",
      "lines": [
        "Added Phobos.",
        "Added mesh collection \"AsteroidScaleMesh\" for very small celestial bodies.",
        "Added variable terrain detail fade start and fade end values, useful when configuring tiny celestial bodies.",
        "Added terrain materials for Phobos."
      ]
    },
    {
      "rev": 2515,
      "date": "2025-10-17",
      "author": "Ghassen Lahmar",
      "lines": [
        "Better ocean mesh settings taking advantage of the mesh generator fix, more detail in ocean geometry and small waves can now be seen up-close",
        "Allow ocean mesh to snap independently of terrain mesh",
        "Run all FFTs in a single dispatch for better performance",
        "Generate FFT mipmaps in a single pass compute shader instead of multiple iterative blits for better performance",
        "Reduce ocean shader register usage for better performance",
        "Use a localized ocean color map for earth, algal blooms and other color variations can now be seen from space",
        "Fix landmasses disappearing when changing water properties from the UI",
        "Rename OptimizedMeshes to OceanMeshes"
      ]
    },
    {
      "rev": 2516,
      "date": "2025-10-20",
      "author": "Morrow",
      "lines": [
        "Bandaid fix to stop the camera shifting while moving parts in the editor."
      ]
    },
    {
      "rev": 2517,
      "date": "2025-10-20",
      "author": "Morrow",
      "lines": [
        "Added medium capsule part."
      ]
    },
    {
      "rev": 2518,
      "date": "2025-10-20",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed no longer deleting burns that are in the future from another burn when the earlier burn is changed. Future burns will still be deleted if an earlier burn is deleted. But now they will be adjusted if the earlier burn is only moved or changed."
      ]
    },
    {
      "rev": 2519,
      "date": "2025-10-20",
      "author": "Morrow",
      "lines": [
        "Replaced one of the default geminis with new version using new parts. Thrusters need some work still. The new parts may need a big rotation to match coordinate spaces properly."
      ]
    },
    {
      "rev": 2520,
      "date": "2025-10-20",
      "author": "Linx-RW",
      "lines": [
        "Fixed Earth terrain material displacements that were too high.",
        "Adjusted the detail fade altitudes for Earth to improve the transition from orbit to surface with the new mesh collection."
      ]
    },
    {
      "rev": 2521,
      "date": "2025-10-20",
      "author": "AaronRKB",
      "lines": [
        "Updates to Brutal.Core 0.3.1. Multiple texture changes.",
        "Updated texture GPU upload code to be more robust over more formats",
        "Updated to Brutal.Core 0.3.1",
        "Made texture quality level scaling work over many more texture formats",
        "Numerous bug fixes."
      ]
    },
    {
      "rev": 2522,
      "date": "2025-10-20",
      "author": "Morrow",
      "lines": [
        "Fixed orbit and object highlight being stuck on when the cursor mode is changed (i.e. while rotating the camera)."
      ]
    },
    {
      "rev": 2523,
      "date": "2025-10-20",
      "author": "Ghassen Lahmar",
      "lines": [
        "Add ocean readback and a way to query wave heights",
        "Tweak ocean color"
      ]
    },
    {
      "rev": 2524,
      "date": "2025-10-21",
      "author": "Morrow",
      "lines": [
        "Fixed crash when there's no nearby celestial for the Ocean Renderer readback to reference."
      ]
    },
    {
      "rev": 2525,
      "date": "2025-10-21",
      "author": "Morrow",
      "lines": [
        "Added runtime part thumbnail rendering on game load",
        "Added thumbnail mipmaps",
        "Added ThumbnailReference for data driven curation",
        "Added part selector buttons using the thumbnails for the VehicleEditor",
        "Fixed SubPartModelRenderer.DepthData updating descriptors during bind"
      ]
    },
    {
      "rev": 2526,
      "date": "2025-10-21",
      "author": "Linx-RW",
      "lines": [
        "Split PoolExecutionCompletedSemaphore into an array of one per frame in flight to weed out a potential synchronization issue with the CommandBufferPool."
      ]
    },
    {
      "rev": 2527,
      "date": "2025-10-21",
      "author": "Dan Southon",
      "lines": [
        "Adjusted thumbnail scissors",
        "Adapted part bound calculation to factor in subpart matrices"
      ]
    },
    {
      "rev": 2528,
      "date": "2025-10-21",
      "author": "Ghassen Lahmar",
      "lines": [
        "Add atmosphere start altitude setting to atmosphereReference",
        "Match atmosphere and dust storm start altitudes on Mars to new terrain data which goes below the mean radius",
        "Fix scattering artifacts on planets that are close but not rendering detailed terrain by using the analytic sphere surface position for scattering",
        "Fix error when disabling then re-enabling height queries"
      ]
    },
    {
      "rev": 2529,
      "date": "2025-10-21",
      "author": "Linx-RW",
      "lines": [
        "Rescaled terrain materials tiling to proper scales relative to the craft. We have the mesh density to be able to represent proper terrain textures at appropriate scales now.",
        "Fixed CPU height sampling still using the old heightmap sampling function, it now matches the shader.",
        "Fixed an off-by-half texel error in the CPU bilinear height map sampling function."
      ]
    }
  ]
}

v2025.10.11.2540

View Changelog
Additions
- Add optional feature to color match clouds to terrain, use on Mars to match dust storms locally to the ground color
- Add a per-planet max cloud shadows altitude setting
- Added support for gltf parent node transforms for meshes. It shouldn't change anything right now but may make rotating things easier later. If your mesh is rotated all weird all of a sudden this is why but I think I got them all.
- Added preparation code for thumbnail editor
Changes
- Fixed issue with modifying burns causing subsequent burns to be drawn in the wrong locations.
- Rationalized data in Burn class. Removed references to OrbitPointCce and PatchedConic. These can be determined when required instead of storing references.
- Fixed backwards matrix multiplication causing subpart-part-vehicle transforms to be out of order. This fixes the new part thrusters not lining up correctly visually. Fixes for the automapping being incorrect coming with proper model rotations SoonTM.
- Fix seams on cloud shadow main texture derivatives, most visible on Mars, use the same methods as Planet.frag
- Tweak dust storm settings
- Sample mips in 2d clouds shader
- Soft-fade cloud shadows when terrain approaches cloud top
- Fixed incorrect visible area calculation for the Default mesh collection.
-Changed the fly camera minimum terrain height to 2 meters now that we can better visually represent this scale.
- Fixed windowed screen size being offset by the OS window decorations.
- Fixed a small spelling mistake in the description of the invert button on the RCS UI.
- Fixed orientation of new gemini parts. The autokeymapping should be oriented correctly. This does not change the current requirement to toggle the editor for the autokeymap to take effect. Should be my next change.
- Changed calculation of mesh vertex position mins and maxs to use gltf's rather than be recalculated.
- Changed auto keymapping for RCS to effect both in editor as well as when there is no control manually set.
- Added preparation code for thumbnail editor
- Adjusted access modifiers for some functions in program to be public for editor usage.
- Moved Transitionlmage func for Atmosphere LUTs from Program to the Atmosphere Renderer
Removals
- N/A
View JSON
{
  "build": "2025.10.11.2540",
  "date": "2025-10-23",
  "fromRevision": 2530,
  "toRevision": 2540,
  "commits": [
    {
      "rev": 2531,
      "date": "2025-10-22",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed issue with modifying burns causing subsequent burns to be drawn in the wrong locations.",
        "Rationalized data in Burn class. Removed references to OrbitPointCce and PatchedConic. These can be determined when required instead of storing references."
      ]
    },
    {
      "rev": 2532,
      "date": "2025-10-22",
      "author": "Morrow",
      "lines": [
        "Fixed backwards matrix multiplication causing subpart->part->vehicle transforms to be out of order. This fixes the new part thrusters not lining up correctly visually. Fixes for the automapping being incorrect coming with proper model rotations SoonTM."
      ]
    },
    {
      "rev": 2533,
      "date": "2025-10-22",
      "author": "Ghassen Lahmar",
      "lines": [
        "Add optional feature to color match clouds to terrain, use on Mars to match dust storms locally to the ground color",
        "Add a per-planet max cloud shadows altitude setting",
        "Fix seams on cloud shadow main texture derivatives, most visible on Mars, use the same methods as Planet.frag",
        "Tweak dust storm settings",
        "Sample mips in 2d clouds shader",
        "Soft-fade cloud shadows when terrain approaches cloud top"
      ]
    },
    {
      "rev": 2534,
      "date": "2025-10-22",
      "author": "Linx-RW",
      "lines": [
        "Fixed incorrect visible area calculation for the Default mesh collection.",
        "Changed the fly camera minimum terrain height to 2 meters now that we can better visually represent this scale."
      ]
    },
    {
      "rev": 2535,
      "date": "2025-10-23",
      "author": "Morrow",
      "lines": [
        "Fixed windowed screen size being offset by the OS window decorations."
      ]
    },
    {
      "rev": 2536,
      "date": "2025-10-23",
      "author": "Morrow",
      "lines": [
        "Fixed a small spelling mistake in the description of the 'invert' button on the RCS UI."
      ]
    },
    {
      "rev": 2537,
      "date": "2025-10-23",
      "author": "Morrow",
      "lines": [
        "Added support for gltf parent node transforms for meshes. It shouldn't change anything right now but may make rotating things easier later. If your mesh is rotated all weird all of a sudden this is why but I think I got them all.",
        "Fixed orientation of new gemini parts. The autokeymapping should be oriented correctly. This does not change the current requirement to toggle the editor for the autokeymap to take effect. Should be my next change.",
        "Changed calculation of mesh vertex position mins and maxs to use gltf's rather than be recalculated."
      ]
    },
    {
      "rev": 2538,
      "date": "2025-10-23",
      "author": "Morrow",
      "lines": [
        "Changed auto keymapping for RCS to effect both in editor as well as when there is no control manually set."
      ]
    },
    {
      "rev": 2539,
      "date": "2025-10-23",
      "author": "Dan Southon",
      "lines": [
        "Added preparation code for thumbnail editor",
        "Adjusted access modifiers for some functions in program to be public for editor usage.",
        "Moved TransitionImage func for Atmosphere LUTs from Program to the Atmosphere Renderer"
      ]
    }
  ]
}

v2025.10.12.2547

View Changelog
Additions
- N/A
Changes
- Render an ambient atmosphere LUT to make sampling ambient in clouds and ocean cheaper
- Change cloud shadows textures to sampledImages to save on samplers
- Rescaled Phobos' terrain textures to appropriate real scales.
- Increased the resolution of the asteroid scale mesh.
- Reduced the tiling on Mars' Sand material.
- Defaulted the distant sphere metallic and roughness values to those in planet.frag.
- Rationalized some more data in Burn Flightplans. Removed unnecessary need for first patch to be copied into each burn's flightplan.
- Fixed deleting of future burns when you delete an earlier burn. Now that we have decoupled all the data, you can happily delete burns in any order and all existing burns will simply stay on the Time that they were created and move to your current flightplan.
- Updated some tweaked textures for the medium capsule part.
- Fix mismatch between initialSpectrums image format and descriptor
Removals
- N/A
View JSON
{
  "build": "2025.10.12.2547",
  "date": "2025-10-24",
  "fromRevision": 2540,
  "toRevision": 2547,
  "commits": [
    {
      "rev": 2541,
      "date": "2025-10-23",
      "author": "Ghassen Lahmar",
      "lines": [
        "Render an ambient atmosphere LUT to make sampling ambient in clouds and ocean cheaper",
        "Change cloud shadows textures to sampledImages to save on samplers"
      ]
    },
    {
      "rev": 2542,
      "date": "2025-10-23",
      "author": "Linx-RW",
      "lines": [
        "Rescaled Phobos' terrain textures to appropriate real scales.",
        "Increased the resolution of the asteroid scale mesh.",
        "Reduced the tiling on Mars' Sand material.",
        "Defaulted the distant sphere metallic and roughness values to those in planet.frag."
      ]
    },
    {
      "rev": 2543,
      "date": "2025-10-24",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Rationalized some more data in Burn Flightplans. Removed unnecessary need for first patch to be copied into each burn's flightplan."
      ]
    },
    {
      "rev": 2544,
      "date": "2025-10-24",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed deleting of future burns when you delete an earlier burn. Now that we have decoupled all the data, you can happily delete burns in any order and all existing burns will simply stay on the Time that they were created and move to your current flightplan."
      ]
    },
    {
      "rev": 2545,
      "date": "2025-10-24",
      "author": "Morrow",
      "lines": [
        "Updated some tweaked textures for the medium capsule part."
      ]
    },
    {
      "rev": 2546,
      "date": "2025-10-24",
      "author": "Ghassen Lahmar",
      "lines": [
        "Fix mismatch between initialSpectrums image format and descriptor"
      ]
    }
  ]
}

v2025.10.13.2554

View Changelog
Additions
- Add ocean height info to physics debug displays.
- First cut of putting vehicles on rails when splashed down on dynamic waves. This works well in most situations but breaks if you swap to a vehicle in orbit of the same celestial because the wave height sampler returns erratic answers - need to solve this case.
- Added two new vehicle situations: sailing and floating.
- Added the first main fuel tank part and engine part.
- Added both new parts to the default gemini.
Changes
- Flipped detailFadeInStart and detailFadeInEnd to better represent how the parameters work.
- Changed the normals used for lighting in the mesh shader
- Fixed issue where the show/hide orbit lines toggles were not being respected correctly and was dependant on the parent bodies setting to show orbit lines or not.
- Fixed issue where duplicate burns were being generated by one click.
- Fixed issue where subsequent burns being added after a previous one that has no delta-V was causing the burn to not be added and errors being written to console.
Removals
- N/A
View JSON
{
  "build": "2025.10.13.2554",
  "date": "2025-10-28",
  "fromRevision": 2547,
  "toRevision": 2554,
  "commits": [
    {
      "rev": 2548,
      "date": "2025-10-26",
      "author": "Linx-RW",
      "lines": [
        "Flipped detailFadeInStart and detailFadeInEnd to better represent how the parameters work."
      ]
    },
    {
      "rev": 2549,
      "date": "2025-10-22",
      "author": "gravhoek-rw",
      "lines": [
        "Add ocean height info to physics debug displays."
      ]
    },
    {
      "rev": 2550,
      "date": "2025-10-26",
      "author": "gravhoek-rw",
      "lines": [
        "First cut of putting vehicles on rails when splashed down on dynamic waves. This works well in most situations but breaks if you swap to a vehicle in orbit of the same celestial because the wave height sampler returns erratic answers - need to solve this case.",
        "Added two new vehicle situations: sailing and floating."
      ]
    },
    {
      "rev": 2551,
      "date": "2025-10-28",
      "author": "Morrow",
      "lines": [
        "Added the first main fuel tank part and engine part.",
        "Added both new parts to the default gemini."
      ]
    },
    {
      "rev": 2552,
      "date": "2025-10-28",
      "author": "Dan Southon",
      "lines": [
        "Changed the normals used for lighting in the mesh shader"
      ]
    },
    {
      "rev": 2553,
      "date": "2025-10-28",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed issue where the show/hide orbit lines toggles were not being respected correctly and was dependant on the parent bodies setting to show orbit lines or not.",
        "Fixed issue where duplicate burns were being generated by one click.",
        "Fixed issue where subsequent burns being added after a previous one that has no delta-V was causing the burn to not be added and errors being written to console."
      ]
    }
  ]
}

v2025.10.13.2573

View Changelog
Additions
- Added SubPart XML flag for what SubParts should be gimbaled in an engine part.
- Added RocketState variable for the physics thread to update an engine's gimbal.
- Added SubPart support for rendering with gimbal rotations.
- Add shader hot reloader. The reloader can be turned on in the settings menu under "Graphics -> Debug -> Shader hot reloading". The code is integrated into the ModLibrary shader loading code. When a shader file is changed in the project directory, the file is copied into the runtime directory. Currently, only the shader files in the project directory are supported, not the files in the runtime directory (this will be fixed soon). Include files are also handled by reloading all dependencies.
- Add shader compiler include resolve callbacks.
- Add file watcher.
- Add filepath and Content path utility code.
- Bindless texture support added
Changes
- Fixed issue where burn markers where not being drawn if they were subsequent burns on the same patch.
- Fixed confusion by only allowing player to create burns for the currently controlled vehicle.
- Use the atmosphere LUTs on the terrain to add atmospheric transmittance, ambient, and a plausible environment specular
- Fade out wave height queries away from projection origin
- Don't change the wave seed on applying graphics settings
- Improved craft collision with terrain using the Erosion modifier.
- Fixed Decal modifier rotating arbitrarily about the surface normal vector when varying the longitude.
- Fixed confusion by only allowing player to create burns for the currently controlled vehicle. (missed a file from last commit)
- Fixed burns not matching themselves to the correct patch.
- Fixed patch colour for burn patches not being set to the parent patch colour shade.
- Fixed patch colour darkening for each subsequent patch.
- Increased the amplitude of Earth's sand dunes.
- Updated the Brutal.Vulkan package to version 0.1.1, this is a huge refactor that affects almost everything Vulkan related in the project.
- Fix ModLibrary using Windows only path separators.
- Changed default controlled vehicle to the New Gemini craft, the one that utilizes our first parts. Includes a helper function to figure out the orbit camera settings.
- Fixed burn patches should apply BurnPatchColor
- Rename "Vessel reflections" graphics checkbox to "Vessel ambient lighting".
- NuGet warning NU1507 is now suppressed from logging. It is a harmless warning and can effectively be ignored.
Removals
- Deleting unused rendering code
- Delete ShaderPaths.cs. We have been using the ModLibrary to load shaders instead, so this file is redundant.
View JSON
{
  "build": "2025.10.5.2573",
  "date": "2025-10-30",
  "fromRevision": 2554,
  "toRevision": 2573,
  "commits": [
    {
      "rev": 2555,
      "date": "2025-10-28",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed issue where burn markers where not being drawn if they were subsequent burns on the same patch."
      ]
    },
    {
      "rev": 2556,
      "date": "2025-10-28",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed confusion by only allowing player to create burns for the currently controlled vehicle."
      ]
    },
    {
      "rev": 2557,
      "date": "2025-10-29",
      "author": "morrow-rw",
      "lines": [
        "Added SubPart XML flag for what SubParts should be gimbaled in an engine Part.",
        "Added RocketState variable for the physics thread to update an engine's gimbal.",
        "Added SubPart support for rendering with gimbal rotations."
      ]
    },
    {
      "rev": 2558,
      "date": "2025-10-28",
      "author": "Ghassen Lahmar",
      "lines": [
        "Use the atmosphere LUTs on the terrain to add atmospheric transmittance, ambient, and a plausible environment specular",
        "Fade out wave height queries away from projection origin",
        "Don't change the wave seed on applying graphics settings"
      ]
    },
    {
      "rev": 2559,
      "date": "2025-10-28",
      "author": "Linx-RW",
      "lines": [
        "Improved craft collision with terrain using the Erosion modifier.",
        "Fixed Decal modifier rotating arbitrarily about the surface normal vector when varying the longitude."
      ]
    },
    {
      "rev": 2560,
      "date": "2025-10-29",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed confusion by only allowing player to create burns for the currently controlled vehicle. (missed a file from last commit)"
      ]
    },
    {
      "rev": 2561,
      "date": "2025-10-29",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed burns not matching themselves to the correct patch."
      ]
    },
    {
      "rev": 2562,
      "date": "2025-10-29",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed patch colour for burn patches not being set to the parent patch colour shade.",
        "Fixed patch colour darkening for each subsequent patch."
      ]
    },
    {
      "rev": 2563,
      "date": "2025-10-29",
      "author": "Linx-RW",
      "lines": [
        "Increased the amplitude of Earth's sand dunes."
      ]
    },
    {
      "rev": 2564,
      "date": "2025-10-30",
      "author": "GitHub",
      "lines": [
        "Updated the Brutal.Vulkan package to version 0.1.1, this is a huge refactor that affects almost everything Vulkan related in the project."
      ]
    },
    {
      "rev": 2565,
      "date": "2025-10-30",
      "author": "JoshRW",
      "lines": [
        "Add shader hot reloader. The reloader can be turned on in the settings menu under \"Graphics -> Debug -> Shader hot reloading\". The code is integrated into the ModLibrary shader loading code. When a shader file is changed in the project directory, the file is copied into the runtime directory. Currently, only the shader files in the project directory are supported, not the files in the runtime directory (this will be fixed soon). Include files are also handled by reloading all dependencies.",
        "Add shader compiler include resolve callbacks.",
        "Add file watcher.",
        "Add filepath and Content path utility code.",
        "Fix ModLibrary using Windows only path separators."
      ]
    },
    {
      "rev": 2566,
      "date": "2025-10-30",
      "author": "rocket2guns",
      "lines": [
        "Changed default controled vehicle to the New Gemini craft, the one that utilizes our first parts. Includes a helper function to figure out the orbit camera settings."
      ]
    },
    {
      "rev": 2567,
      "date": "2025-10-30",
      "author": "Hanan Finnerty",
      "lines": [
        "Bindless texture support added"
      ]
    },
    {
      "rev": 2568,
      "date": "2025-10-30",
      "author": "Hanan Finnerty",
      "lines": [
        "Deleting unused rendering code"
      ]
    },
    {
      "rev": 2569,
      "date": "2025-10-30",
      "author": "josh",
      "lines": [
        "Delete ShaderPaths.cs. We have been using the ModLibrary to load shaders instead, so this file is redundant."
      ]
    },
    {
      "rev": 2570,
      "date": "2025-10-30",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed burn patches should apply BurnPatchColor"
      ]
    },
    {
      "rev": 2571,
      "date": "2025-10-30",
      "author": "JoshRW",
      "lines": [
        "Rename \"Vessel reflections\" graphics checkbox to \"Vessel ambient lighting\"."
      ]
    },
    {
      "rev": 2572,
      "date": "2025-10-30",
      "author": "Maxwell Johnson",
      "lines": [
        "NuGet warning NU1507 is now suppressed from logging. It is a harmless warning and can effectively be ignored."
      ]
    }
  ]
}


v2025.10.13.2584

View Changelog
Additions
- Added first pass XML representation for part trees/hierarchies.
- Added support for thin film interference masks. This allows us to create thin film maps for specific parts, or disable it if no map is provided.
- Added a final message when loading to avoid false positive reports of errors that happen after the last loading message and before the first frame.
Changes
- Optimized MergeEncounters to use stackalloc and rented array for provided encounters, this can run a lot when engine is firing or physics is conducted. This will matter much more later, when many vessels exist and for interactions with large numbers of potential encounters such as around jupiter-like planets.
- Optimized MergeEncounters second pass, changed the initial EncounterInfo from a list to a rented array. This means that there is now no list allocations when assessing encounters with celestial bodies.
- Optimized id Comparison in flightplan. Now instead of using the string, the hash is used. This will be much faster at scale. A more generic solution will be implemented later. This commit should be reverted if it causes issues.
- Fixed display of orbit lines and UI markers to respect the show orbit flag and if the astronomical is set to the target of the currently controlled vehicle it will always show regardless of the show orbit flag.
- Previously Mesh.frag/vert were legacy shaders, and MeshNoPush.frag/vert were the main shaders used for vessels. MeshNoPush.frag/vert has now been renamed to Mesh.frag/vert and the original Mesh.frag/vert shaders have been deleted.

Consolidated MeshFragCommon.glsl into Mesh.frag.

- Fixed applying the "Darkening" to the subsequent patch orbit colours twice. We should only do it once. Cause that was making things really hard to see.
- Fixed simulation metrics were being reset each frame, breaking debugging completely. This may cause serious issues when simulation degrades. This will be fixed when brutal is updated to provide LastTickTime and a function to get the max value.
- Turned off initialization of the asset reloader when disabled as it was crashing production builds. The builds should no longer crash.
Removals
- Removed PbrMeshRenderTechnique, this is a legacy system and should not be used anymore.
View JSON
{
  "build": "2025.10.6.2584",
  "date": "2025-10-30",
  "fromRevision": 2573,
  "toRevision": 2584,
  "commits": [
    {
      "rev": 2574,
      "date": "2025-10-30",
      "author": "Morrow",
      "lines": [
        "Added first pass XML representation for part trees/hierarchies."
      ]
    },
    {
      "rev": 2575,
      "date": "2025-10-30",
      "author": "rocket2guns",
      "lines": [
        "Optimized MergeEncounters to use stackalloc and rented array for provided encounters, this can run a lot when engine is firing or physics is conducted. This will matter much more later, when many vessels exist and for interactions with large numbers of potential encounters such as around jupiter-like planets."
      ]
    },
    {
      "rev": 2576,
      "date": "2025-10-30",
      "author": "rocket2guns",
      "lines": [
        "Optimized MergeEncounters second pass, changed the initial EncounterInfo from a list to a rented array. This means that there is now no list allocations when assessing encounters with celestial bodies."
      ]
    },
    {
      "rev": 2577,
      "date": "2025-10-30",
      "author": "rocket2guns",
      "lines": [
        "Optimized id Comparison in flightplan. Now instead of using the string, the hash is used. This will be much faster at scale. A more generic solution will be implemented later. This commit should be reverted if it causes issues."
      ]
    },
    {
      "rev": 2578,
      "date": "2025-10-30",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed display of orbit lines and UI markers to respect the show orbit flag and if the astronomical is set to the target of the currently controlled vehicle it will always show regardless of the show orbit flag."
      ]
    },
    {
      "rev": 2579,
      "date": "2025-10-30",
      "author": "Maxwell Johnson",
      "lines": [
        "Added support for thin film interference masks. This allows us to create thin film maps for specific parts, or disable it if no map is provided.",
        "Removed PbrMeshRenderTechnique, this is a legacy system and should not be used anymore.",
        "Previously Mesh.frag/vert were legacy shaders, and MeshNoPush.frag/vert were the main shaders used for vessels. MeshNoPush.frag/vert has now been renamed to Mesh.frag/vert and the original Mesh.frag/vert shaders have been deleted.",
        "Consolidated MeshFragCommon.glsl into Mesh.frag."
      ]
    },
    {
      "rev": 2580,
      "date": "2025-10-30",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed applying the \"Darkening\" to the subsequent patch orbit colours twice. We should only do it once. Cause that was making things really hard to see."
      ]
    },
    {
      "rev": 2581,
      "date": "2025-10-30",
      "author": "rocket2guns",
      "lines": [
        "Fixed simulation metrics were being reset each frame, breaking debugging completely. This may cause serious issues when simulation degrades. This will be fixed when brutal is updated to provide LastTickTime and a function to get the max value."
      ]
    },
    {
      "rev": 2582,
      "date": "2025-10-30",
      "author": "Morrow",
      "lines": [
        "Turned off initialization of the asset reloader when disabled as it was crashing production builds. The builds should no longer crash.",
        "Added a final message when loading to avoid false positive reports of errors that happen after the last loading message and before the first frame."
      ]
    }
  ]
}

v2025.10.10.2613

View Changelog
Additions
- Trialing an adaptive filter count on PCSS (may help with GPU performance but needs more testing)
- Added current gravitation to the celestial info window.
- Added delete button to part menus (accessible by right clicking on the part) in debug vehicle editor.
- Added texture size setting LightSystem shadow atlas.
- Added cached metric function.
- Added a hard cap to light count (512 for now).
Changes
- Fix vessel reflections showing Earth when teleporting to the Moon. The issue was the planet shader data not updating after teleporting and moving away from the planet.
- Change shader hot reloading checkbox text to warn against using it on a build version of the game. This text will be removed once the bug is fixed later.
- Fixed display of Ap and Pe markers on Burn patches.
- Smoothed out the scaling of the sun shadow volume for planets Visual improvements on PCF, the range was too large.
- Fix issue with dust storms drawing over craft in certain orbits
- Moved temporary metrics reset point to after we collect job metrics. This was preventing simulation speed descaling from functioning.
- Disable shader hot reloader for production builds. This is a temporary fix for the shader reloader crash, and a proper fix will be implemented soon.
- Fixed Burn edit UI not appearing once you have completed the Burn or it was in the past and no longer on the flightplan.
- Fixed opacity and fading on orbit patches to be more obvious and to include Burn - Burn patches.
- Optimized use of string looking for id when doing encounters, standardized to use of IOrbiting as the implication is clearer and cleaner, and then used Hash for comparison instead of string.
- Fixed flight plan exceptions were being written to dev console, not to game console.
- Fixed so you can no longer create a Burn on an invalid timeline part of a patch/flightplan. EG: Clicking on the original patch after another Burn.
- Optimized FindClosestApproaches first pass, moved timeRanges to use stackalloc and avoid unnecessary allocation. Much more to follow.
- Swapped the 'positive' direction burn node mesh from a cone to a cone with a little tail. The reverse is still just a cone.
- Increased color contrast between 'positive' and 'negative' burn node handles.
- Optimized Chebyshev Polynomial Catch Conjunction Assessment to utilize stackalloc instead of Lists. This is heavily utilized for encounters, so runs a lot on the simulation. This change will dramatically reduce both the allocation cost and execution cost of the function, by utilizing buffers. Still returning a List, will be switched to a rented array.
- Slightly decreased the contrast between 'positive' and 'negative' burn node handles. We had a non-colorblind person come look at it.
- Optimized Catch Candidates to be returned as a rented array, avoiding allocation costs when evaluating encounters. Next step will be to migrate last phase of Encounters to be a rented array, rather than lists. Dynamic Celestial objects evaluate this both when changing their orbits, but also as they progress through. So this optimization will benefit significantly, especially with lots of dynamic objects.
- Fixed thin film interference appearing brighter on darker materials, due to how it was getting mixed into the diffuse.
- Reduced down the LightSystem shadow slots to 16 (drastically improves performance ).
- Centered the vehicle's camera when leaving the editor and loading.
- Job metric changes (#72).
- Reduce garbage in metrics collection.
- Fixed job timing for rare case.
- Updated to framework 25.10.0.5.
- Improved light priorities based on screen influence, distance and intensity
- Optimized IJK matrix generation. Implemented static caching of precomputed IJK coefficients keyed by N. The matrix is built only on first request and reused on subsequent calls, eliminating repeated cosine and scaling computations. Benchmark test case runtime improved from approximately 9 ms to 2.5 ms after this change (with other optimizations applied).
Removals
- Removed VRAM estimation as it was completely broken and reporting every user did not have enough VRAM to run that system, regardless of how much they have.
View JSON
{
  "build": "2025.10.10.2613",
  "date": "2025-10-31",
  "fromRevision": 2584,
  "toRevision": 2613,
  "commits": [
    {
      "rev": 2585,
      "date": "2025-10-30",
      "author": "JoshRW",
      "lines": [
        "Fix vessel reflections showing Earth when teleporting to the Moon. The issue was the planet shader data not updating after teleporting and moving away from the planet."
      ]
    },
    {
      "rev": 2586,
      "date": "2025-10-30",
      "author": "JoshRW",
      "lines": [
        "Change shader hot reloading checkbox text to warn against using it on a build version of the game. This text will be removed once the bug is fixed later."
      ]
    },
    {
      "rev": 2587,
      "date": "2025-10-30",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed display of Ap and Pe markers on Burn patches."
      ]
    },
    {
      "rev": 2588,
      "date": "2025-10-30",
      "author": "Dan Southon",
      "lines": [
        "Smoothed out the scaling of the sun shadow volume for planets",
        "Visual improvements on PCF, the range was too large.",
        "Trialing an adaptive filter count on PCSS (may help with GPU performance but needs more testing)"
      ]
    },
    {
      "rev": 2589,
      "date": "2025-10-30",
      "author": "Ghassen Lahmar",
      "lines": [
        "Fix issue with dust storms drawing over craft in certain orbits"
      ]
    },
    {
      "rev": 2590,
      "date": "2025-10-30",
      "author": "gravhoek-rw",
      "lines": [
        "Added current gravitation to the celestial info window."
      ]
    },
    {
      "rev": 2591,
      "date": "2025-10-30",
      "author": "gravhoek-rw",
      "lines": [
        "Moved temporary metrics reset point to _after_ we collect job metrics. This was preventing simulation speed descaling from functioning."
      ]
    },
    {
      "rev": 2592,
      "date": "2025-10-31",
      "author": "JoshRW",
      "lines": [
        "Disable shader hot reloader for production builds. This is a temporary fix for the shader reloader crash, and a proper fix will be implemented soon."
      ]
    },
    {
      "rev": 2593,
      "date": "2025-10-31",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed Burn edit UI not appearing once you have completed the Burn or it was in the past and no longer on the flightplan."
      ]
    },
    {
      "rev": 2594,
      "date": "2025-10-31",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed opacity and fading on orbit patches to be more obvious and to include Burn - Burn patches."
      ]
    },
    {
      "rev": 2595,
      "date": "2025-10-31",
      "author": "rocket2guns",
      "lines": [
        "Optimized use of string looking for id when doing encounters, standardized to use of IOrbiting as the implication is clearer and cleaner, and then used Hash for comparison instead of string."
      ]
    },
    {
      "rev": 2596,
      "date": "2025-10-31",
      "author": "rocket2guns",
      "lines": [
        "Fixed flight plan exceptions were being written to dev console, not to game console."
      ]
    },
    {
      "rev": 2597,
      "date": "2025-10-31",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Fixed so you can no longer create a Burn on an invalid timeline part of a patch/flightplan. EG: Clicking on the original patch after another Burn."
      ]
    },
    {
      "rev": 2598,
      "date": "2025-10-31",
      "author": "rocket2guns",
      "lines": [
        "Optimized FindClosestApproaches first pass, moved timeRanges to use stackalloc and avoid unnecessary allocation. Much more to follow."
      ]
    },
    {
      "rev": 2599,
      "date": "2025-10-31",
      "author": "Morrow",
      "lines": [
        "Swapped the 'positive' direction burn node mesh from a cone to a cone with a little tail. The reverse is still just a cone."
      ]
    },
    {
      "rev": 2600,
      "date": "2025-10-31",
      "author": "Morrow",
      "lines": [
        "Increased color contrast between 'positive' and 'negative' burn node handles."
      ]
    },
    {
      "rev": 2601,
      "date": "2025-10-31",
      "author": "rocket2guns",
      "lines": [
        "Optimized Chebyshev Polynomial Catch Conjunction Assessment to utilize stackalloc instead of Lists. This is heavily utilized for encounters, so runs a lot on the simulation. This change will dramatically reduce both the allocation cost and execution cost of the function, by utilizing buffers. Still returning a List, will be switched to a rented array."
      ]
    },
    {
      "rev": 2602,
      "date": "2025-10-31",
      "author": "Morrow",
      "lines": [
        "Slightly decreased the contrast between 'positive' and 'negative' burn node handles. We had a non-colorblind person come look at it."
      ]
    },
    {
      "rev": 2603,
      "date": "2025-10-31",
      "author": "Morrow",
      "lines": [
        "Added delete button to part menus (accessible by right clicking on the part) in debug vehicle editor."
      ]
    },
    {
      "rev": 2604,
      "date": "2025-10-31",
      "author": "rocket2guns",
      "lines": [
        "Optimized Catch Candidates to be returned as a rented array, avoiding allocation costs when evaluating encounters. Next step will be to migrate last phase of Encounters to be a rented array, rather than lists. Dynamic Celestial objects evaluate this both when changing their orbits, but also as they progress through. So this optimization will benefit significantly, especially with lots of dynamic objects."
      ]
    },
    {
      "rev": 2605,
      "date": "2025-10-31",
      "author": "Maxwell Johnson",
      "lines": [
        "Fixed thin film interference appearing brighter on darker materials, due to how it was getting mixed into the diffuse."
      ]
    },
    {
      "rev": 2606,
      "date": "2025-10-31",
      "author": "Dan Southon",
      "lines": [
        "Added texture size setting LightSystem shadow atlas.",
        "Reduced down the LightSystem shadow slots to 16 (drastically improves performance )"
      ]
    },
    {
      "rev": 2607,
      "date": "2025-10-31",
      "author": "Morrow",
      "lines": [
        "Centered the vehicle's camera when leaving the editor and loading."
      ]
    },
    {
      "rev": 2608,
      "date": "2025-10-31",
      "author": "GitHub",
      "lines": [
        "Job metric changes (#72)",
        "Reduce garbage in metrics collection",
        "Fixed job timing for rare case",
        "Updated to framework 25.10.0.5",
        "Added cached metric function"
      ]
    },
    {
      "rev": 2609,
      "date": "2025-10-31",
      "author": "Dan Southon",
      "lines": [
        "Improved light priorities based on screen influence, distance and intensity"
      ]
    },
    {
      "rev": 2610,
      "date": "2025-10-31",
      "author": "Dan Southon",
      "lines": [
        "Added a hard cap to light count (512 for now)"
      ]
    },
    {
      "rev": 2611,
      "date": "2025-10-31",
      "author": "rocket2guns",
      "lines": [
        "Optimized IJK matrix generation. Implemented static caching of precomputed IJK coefficients keyed by N. The matrix is built only on first request and reused on subsequent calls, eliminating repeated cosine and scaling computations. Benchmark test case runtime improved from approximately 9 ms to 2.5 ms after this change (with other optimizations applied)."
      ]
    },
    {
      "rev": 2612,
      "date": "2025-10-31",
      "author": "rocket2guns",
      "lines": [
        "Removed VRAM estimation as it was completely broken and reporting every user did not have enough VRAM to run that system, regardless of how much they have."
      ]
    }
  ]
}


November 2025

Two versions have been released this month.


View versions

v2025.11.2.2620

View Changelog
Additions
- Use a better Jupiter texture, in preparation for Jupiter volumetrics
- Use the atmosphere ambient LUT for the vessel diffuse ambient instead of using a single sample of the sky LUT, reduces reflective/metallic look on matte parts in the absence of a pre-filtered environment reflection method
- Initial porting of external biome tool to KSA.
- Added erosion to Mars.
- Added GradientStrength parameter to procedural modifiers for artificially scaling the terrain gradient.
- Added the Max filter stage to the biome map exporter.
Changes
- Lowered the curvature of Earth's erosion.
- Fixed white-screen graphical error caused by rare div-by-zero in the procedural modifiers code.
- Updated Mars' normal map.
Removals
- Removed the old sand dunes from Mars and replaced them with the newer version.
View JSON
{
  "build": "2025.11.2.2620",
  "date": "2025-11-02",
  "fromRevision": 2613,
  "toRevision": 2620,
  "commits": [
    {
      "rev": 2614,
      "date": "2025-10-31",
      "author": "Ghassen Lahmar",
      "lines": [
        "Use the atmosphere ambient LUT for the vessel diffuse ambient instead of using a single sample of the sky LUT, reduces reflective/metallic look on matte parts in the absence of a pre-filtered environment reflection method"
      ]
    },
    {
      "rev": 2615,
      "date": "2025-10-30",
      "author": "Ghassen Lahmar",
      "lines": [
        "Use a better Jupiter texture, in preparation for Jupiter volumetrics"
      ]
    },
    {
      "rev": 2616,
      "date": "2025-10-31",
      "author": "Linx-RW",
      "lines": [
        "Initial porting of external biome tool to KSA.",
        "Lowered the curvature of Earth's erosion."
      ]
    },
    {
      "rev": 2617,
      "date": "2025-11-01",
      "author": "Linx-RW",
      "lines": [
        "Added erosion to Mars.",
        "Fixed white-screen graphical error caused by rare div-by-zero in the procedural modifiers code.",
        "Added GradientStrength parameter to procedural modifiers for artificially scaling the terrain gradient."
      ]
    },
    {
      "rev": 2618,
      "date": "2025-11-01",
      "author": "Linx-RW",
      "lines": [
        "Added the Max filter stage to the biome map exporter."
      ]
    },
    {
      "rev": 2619,
      "date": "2025-11-01",
      "author": "Linx-RW",
      "lines": [
        "Removed the old sand dunes from Mars and replaced them with the newer version.",
        "Updated Mars' normal map."
      ]
    }
  ]
}

v2025.11.3.2634 - "Sound of Music"

View Changelog
Additions
- Added biome exporter shader: GenerateKernelSizes.comp.
- Added biome exporter shader: VariantMaxFilter.comp.
- Added biome exporter shader: VariantBoxBlurFilter.comp.
- Added save functionality to the biome map exporter, which saves as PNG.
- Added WIP WarpedHybridMultifractal procedural terrain modifier.
- Added first pass for SOI music for Earth, Moon, Sun, Mars and Jupiter.
- Added disposing of renderer resources to the biome map exporter.
- Added Kitten Eva class. This could be the start of something big. For now a kitten is based on Vehicle class. This could change over time as things progress.
- Added thin film interference maps to some subparts.
- Added KittenEva template changes so we can have Kittens.
- Added light system shadows toggle
- Added IsUserTyping flag to GameSettings to block input while editing text fields. This should prevent console settings (e.g. OnBoot/OnLoad) from canceling prematurely when typing.
- Added first pass for SOI music for Earth, Moon, Sun, Mars and Jupiter.
Changes
- Moved biome exporter image processing functions to compute shaders.
- Fixed mars mesh snapping too infrequently and causing the highest density region to sometimes be too far from the camera.
- Compressed diffuse/PBR/thin film texture maps to DDS BC1.
- Increased thin film interference intensity, to make the effect more visible when using custom masks.
- Fixed missing settings checks for shadows in GameSettings constructor copy and IsChanged functions.
- Namespace clean up
- Changed invalid parts of flightplan/burnplan orbits draw in Inactive Orbit color to make it a better UX experience.
Removals
- Removed unused OnFrame and Render function calls to the biome exporter from PlanetRenderer.
View JSON
{
  "build": "2025.11.3.2634",
  "date": "2025-11-03",
  "fromRevision": 2620,
  "toRevision": 2634,
  "commits": [
    {
      "rev": 2621,
      "date": "2025-11-02",
      "author": "Linx-RW",
      "lines": [
        "Added biome exporter shader: GenerateKernelSizes.comp.",
        "Added biome exporter shader: VariantMaxFilter.comp.",
        "Added biome exporter shader: VariantBoxBlurFilter.comp.",
        "Moved biome exporter image processing functions to compute shaders.",
        "Added save functionality to the biome map exporter, which saves as PNG.",
        "Removed unused OnFrame and Render function calls to the biome exporter from PlanetRenderer."
      ]
    },
    {
      "rev": 2622,
      "date": "2025-11-02",
      "author": "Linx-RW",
      "lines": [
        "Added WIP WarpedHybridMultifractal procedural terrain modifier.",
        "Fixed mars mesh snapping too infrequently and causing the highest density region to sometimes be too far from the camera."
      ]
    },
    {
      "rev": 2623,
      "date": "2025-11-02",
      "author": "Linx-RW",
      "lines": [
        "Added disposing of renderer resources to the biome map exporter."
      ]
    },
    {
      "rev": 2624,
      "date": "2025-11-03",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added Kitten Eva class. This could be the start of something big. For now a kitten is based on Vehicle class. This could change over time as things progress."
      ]
    },
    {
      "rev": 2625,
      "date": "2025-11-03",
      "author": "morrow-rw",
      "lines": [
        "Added thin film interference maps to some subparts."
      ]
    },
    {
      "rev": 2626,
      "date": "2025-11-03",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Added KittenEva template changes so we can have Kittens."
      ]
    },
    {
      "rev": 2627,
      "date": "2025-11-03",
      "author": "Morrow",
      "lines": [
        "Compressed diffuse/PBR/thin film texture maps to DDS BC1."
      ]
    },
    {
      "rev": 2628,
      "date": "2025-11-03",
      "author": "Maxwell Johnson",
      "lines": [
        "Increased thin film interference intensity, to make the effect more visible when using custom masks."
      ]
    },
    {
      "rev": 2629,
      "date": "2025-11-03",
      "author": "Dan Southon",
      "lines": [
        "Added light system shadows toggle",
        "Fixed missing settings checks for shadows in GameSettings constructor copy and IsChanged functions."
      ]
    },
    {
      "rev": 2630,
      "date": "2025-11-03",
      "author": "Dan Southon",
      "lines": [
        "Added IsUserTyping flag to GameSettings to block input while editing text fields. This should prevent console settings (e.g. OnBoot/OnLoad) from canceling prematurely when typing."
      ]
    },
    {
      "rev": 2631,
      "date": "2025-11-03",
      "author": "Dan Southon",
      "lines": [
        "Namespace clean up"
      ]
    },
    {
      "rev": 2632,
      "date": "2025-11-03",
      "author": "JPLRepoRocketwerkz",
      "lines": [
        "Changed invalid parts of flightplan/burnplan orbits draw in Inactive Orbit color to make it a better UX experience."
      ]
    },
    {
      "rev": 2633,
      "date": "2025-11-03",
      "author": "matthew.caradus",
      "lines": [
        "Added first pass for SOI music for Earth, Moon, Sun, Mars and Jupiter."
      ]
    }
  ]
}

See also