Stationeers now has in world liquid simulations. Because of the phase change update, liquids became a major part of the game. They were allowed to exist in the world, but they were represented by a foggy steam effect, and they moved around in all dimensions just like a gas. The motivation behind adding realistic fluid movement is an expectation that the game created for itself. Stationeers has the best atmospheric simulation in gaming, and the game deserves to have fluid simulations accompanying it.
Flowing Water
Liquids now flow horizontally and preferentially pool downwards. Lower areas of your base will be prone to flooding when liquid pipes unexpectedly break, or conditions for phase change causes gas to condense around you. Fluids in world have an exaggerated volume, to allow for meaningful interactions with in world liquids to happen. It turns out, it is difficult to collect enough ices to create thousands of litres of water while on a barren lifeless world.
Stationeer's atmospherics operate as 2m*2m*2m cubes that update every half second. This presents limitations in terms of first person fidelity, and propagation speed. For liquids, we wanted to make sure they felt fluid enough to not feel too gamey. We got around many of the issues with grid based spread and flow by utilizing a new physics based solver.
We use a series of CPU driven particles to represent and test paths that fluids want to take. These Physics solver balls allow liquids to drop down ledges, or get sprayed out diagonally, to allow fluids to move multiple squares at a time, all without the same limitations as our .5s tick grid atmospheres. We'll also soon be utilizing this system to better implement smaller liquid interactions such as pipe bursts, sprinklers and ice melting.
Visual effects
All this time, we've been saying liquids instead of water, and thats on purpose. All gasses in Stationeers can condense into liquids. Other fluids such as Liquid oxygen and liquid volatiles all look different in world. Unlike other games, we even allow separate fluids to mix and we accurately blend their colors together to really inform you of the disaster that may be mixing underneath you.
We've also worked significantly on creating effects that make liquids look cool while still matching Stationeer's scale and style. Water spreading has droplets that represent the physics solver fluid simulations. When water is spreading throughout already connected tiles, we analyse the volume, displacement and directional mixing ratios to create flow effects on the surface of the water to represent its movement direction and rate.
Buoyancy
All dynamic things except for entities, such as players and chickens, are buoyant. In the future we might expand this system to have things have different buoyancy or make some objects not be buoyant at all but during this first pass everything behaves the same.
Making fluids meaningful
Interaction
Representing fluids is important in of itself, but there are more game play systems we want to tie into. Vents are currently examples of devices that are aware of the surface level of the water, and will only start mixing with liquids when submerged, as opposed to interacting with the whole grid as normal. In the future we'll be making more devices interact with the fluids specially; such as APCs, transformers, and Batteries shorting out.
Fluids do currently interact with terrain. However, there are lots of edge cases that might cause water loss, or unexpected behavior. Once the new terrain system is done, we'll revisit how liquids interact with voxels, and potential performance improvements. This could eventually lead to us supporting larger liquid structures such as lakes, or weather effects that reflect global condensation like rain.
Liquid Vac
Because liquids dont behave like gasses, small puddles often are left behind when draining areas. We've added the liquid vac as a way to allow players to manually interact with in world water. It has two modes, inwards, and outwards, so you can manually relocate water to another place in the world. We originally had it operate with liquid canisters that could be interchanged, the balance of canister sizes for other gameplay reasons prevented it from being super useful. In the future we plan at looking at a more solutions, such as a being able to attach to a dynamic canister, and having a gas vac variant as well.
Manual Floor Hatch
While testing fluids flooding many of our bases, we kept wanting something that felt like a horizontal version of the manual hatch door. So we've added one so you can unwittingly spin the hatch wheel and dump a flood of water on yourself.
Your support makes these updates possible
https://store.steampowered.com/bundle/2624/Stationeers_Complete_the_Set/
Change Log v0.2.5259.23818
- Fixed incorrect thumbnail for composite wall
- Made vertical sleeper shorter to avoid interference with ceiling
- Made vertical sleeper for Droid shorter to avoid interference with ceiling
- Updated blueprints and colliders for vertical sleeper and vertical droid sleeper.
- Added first pass on in world liquids and 'particle' based liquid solver. Currently, liquids can be lost when pooling on terrain. The exact interaction between liquids and terrain voxels is yet to be decided.
- Fixed Modded worlds with invalid GlobalAtmosphereData will fail to load.
- Added Modded Worlds with an invalid weatherEvent will now fail to load on game data Initialize.
- Deleted a number of now un-used rocket meshes and classes from the old rocket system.
- Changed Condensation Fog effect will now only render when gasses are condensing into liquids in an atmosphere cell.
- Fixed Network Message Dictionary was not regenerated in rev 23691.
- Added missing server checks around some imgui code.
- Added some more server tags around imgui code.
- Fixed Critical game initialisation error for German players. The game data loading was throwing an exception due to an outdated stationpedia page in the german_help.xml
- Added Liquid Solver commands to support Liquids profiling.
- Changed Solar Processing tick to be a unitask (It was still using a unity co-routine).
- Fixed Solar Panel CollisionMask for RayCast had a number of layer enabled that should have been dis-abled.
- Fixed Solar Panels would sometimes not generate any power on dedicated server despite being correctly pointed at the sun. This was due to some objects from the main menu scene not getting disabled on the dedicated server and thus blocking the solar panel ray cast to the sun.
- Refactored AtmosphericEventInstance to be a struct to reduce allocations.
- Some minor optimisations to liquid solver.
- Fixed smelting an ingot would give oops Achievement.
- Simplified Rendering of Liquids in world, its now allocation free and much faster but is limited to drawing 1023 atmospheres.
- removed slot filter type from autolathe
- Fixed hydroponics larry not stacking hay when harvesting from switchgrass.
- Moved some liquid debug logic and changed numbers to use the StringManager.
- Fixed Would get not thirsty prompt when hydration was not full when using drinking fountain.
- Changed Increased speed to use drinking fountain.
- Fixed Missing model for ItemKitRocketLaunchPad. kit model was still using an old rocket model. It has been updated to the correct model.
- Removed bobblehead from thumbnail scene
- Added manual floor hatch to door kit
- Fixed Incorrect shadow distance on window shutters.
- Fixed Missing Material on broken build state of composite window shutter causing loading error on save games.
- Fixed Open and Close animation for the ManualFloorHatch. The door now moves underneath the frame instead of on top of it
- Fixed Solar distance Temperature offset was being applied twice. This was causing Vulcan to get extra very hot during its close approach to Janus.
- Fixed Tanks not showing their MAXPressure in Stationpedia
- Fixed dynamic Canisters in Stationpedia not showing the correct units of the MAXPressure value
- Fixed issue with players being unable to interact with the switches of tools such as the Tablet and the MiningDrill when they didn't have power.
- Fixed owning the EVA Supporters DLC granting access to the marine and hard suit bobbleheads in the printer
- Made liquid visualizer particles work on clients.
- Added first pass on liquid visualizer particles.
- Changed LiquidFlow network update type from volume to grid
- Fixed Reading IsSeeding from a Seedbag using proxy slot would through a null reference exception.
- Fixed Prefab issue on ManualHatch that was breaking loading of Tutorial3.
- Made water pools not spread out if they are under a certain threshold.
- Changed networkupdatetype for liquid flow from grid to statechange.
- Decreased liquid in world render threshold to approx 10 moles.
- Updated underwater camera shader
- Made floor drains and passive vents not take in liquids if they are above the liquid level in their atmosphere.
- moved in world liquid flow rate into a static parameter for now.
- Added ability for liquids in world to have an exaggerated liters per mole ratio to allow reasonable amounts of in game gas to be meaningfully represented in world, currently at x50.
- Fixed animation speed of door to match up with the manual hatch
- Added Liquid Vacuum recipe to tier2 tool printer.
- Added Liquid Vacuum. A tool for cleaning up liquid in your base. It has an inwards and outwards mode setting.
- Added different color visualization of different kinds of liquids
- Fixed liquid solver out of bounds exception when reaching the max number of liquid solvers
- Fixed missing liquid colour for hydrogen and added GetGasColor to be used later for gas particle
- Updated the min render size to be half of what it was. This does mean that it can potentially be hidden bellow floors
- Fixed the usage of a lot of magic numbers and cleaned up the liquid solver file a bit
- Polish pass on Liquid Vacuum sounds and animation.
- Added first pass on showing liquid flow direction
- Added camera effect for being under liquid
- Fixed back face culling being turned on for liquid renderer
- Fixed missing references in the scene
- Updated the flow texture on the water shader
- Fixed possible null ref when resetting liquid flow flags.
- Changed Passive Liquid Inlet mixing behaviour so it works more nicely with the new liquid sim.
- Changed atmos tablet no longer shows volume value of individual gas types of liquids in world.
- Changed all uses of Liquid volume to correctly pass through the scalar function.
- Lowered mole threshold for horizontal liquid solver to 500moles from 1000moles
- Fixed Minimum liquid render threshold now considers InWorldVolumeMultiplier.
- Changed Minimum liquid render height to 12cm.
- Fixed water color alpha was set to zero.
- Fixed liquid shader flickering when interacting with other transparent objects.
- Fixed liquid visualizer particles not taking the color of their liquid.
- Updated flow visualizer texture
- Removed unused test liquid shader.
- Updated liquid flow texture on batched liquid material.
- Removed empty OutlineEffect directory.
- Moved some textures to their appropriate folders.
- Changed passive liquid inlet will now draw from neighbouring grids (up to 6 grids away) if its current grid is empty.
- Changed Liquids in world will now only mix sideways with other liquid neighbours if both grids have rendered liquid.
- Made grow light thicker, so it looks better with wall piece.
- Fixed index out of range exception when max rendered liquid grids is reached.
- Added buoyancy for dynamicThings not including entities. Angular damping has also been added for dynamicThings that are below the water volume threshold for the grid that they reside in.
- Fixed UnderWater camera effect not disabled when returning to main menu.
- Fixed Wind sounds play underwater.
- Changed Active Liquid Outlet atmospheric Logic to Run on OnPreAtmosphere(). This is so any overVolume caused by the process will be resolved in the following liquid mix step.
- Changed Greatly increased the Minimum gas volume for World Atmospheres.
- Added Recache Atmosphere Mixing pressure values after Liquid Mix in MixInWorld().
- Fixed Pressure spikes when liquid solver particles resolved.
- Fixed Large pressure differentials and air movement when liquids are more than one grid deep and being filled from an already full grid.
- Changed When Liquid Solver particles are ripe but un-expired they will only merge with existing atmospheres if it has rendered water.
- Fixed liquid visualizer particles were not being cleared when exiting world.
- Tweaked uv distortion for liquid flow texture.
- Added Placeholder water footstep sounds and underwater ambience sounds.
- Added flow direction force to objects floating in water.
- Added velocity damping to objects floating in water.
- Changed liquid flow direction to use absolute volume difference rather than ratio.
- Added 2nd pass for Water footstep audio and underwater ambience.
- Fixed Breathing sounds play when underwater with helmet open.
- Fixed Able to breath underwater with helmet open.
- Fixed liquid flow looking unnecessarily turbulent. Opposite directional flow will now cancel out.
- Changed IC10 Sleep command to use GameManager.GameTime instead of DateTime.Now.
- Fixed IC10 Sleep Command was not respecting pause state.
- Added Moles per Litre In-World for liquids to Stationpedia.
- Updated Passive Liquid Inlet description.
- Added max liquid render distance to liquid blocks and visualizer particles.
- Fixed an issue with liquid mixing in world where the volume left for gas was different in two different functions causing oscillations.
- Fixed Fake liquid pressure was being used in pipe-networks in some cases where it shouldn't, causing confusing pressure readings when pipe was almost full. Fake liquid pressure now is only used in things/networks that have the prevent state-change flag.
- Fixed Passive Liquid Inlet did not draw from the grid it was in.
- Fixed blueprint for ItemLiquidVacuum
- Fixed liquid solver particles not spawning on dedicated server.