Transport Helicopter Update | Rust Devblog

Just the TL:DR – Full post with images here

Transport Helicopter

The Scrap Transport Helicopter has arrived! It’s not as nimble as the Minicopter but boy you can fit a lot of people in the back.

Text doesn’t really do it justice so check out the video above:

Merch Store

Our merch store opened last week. I appreciate that a lot of you are nakeds so won’t be interested, but we’ve got hoodies, tshirts, hats, cups.

Horse Improvements

Horses now use a queue update system instead of simply simulating less often on the server. What this means for you is that they should feel much, much more responsive (like they did when they were first introduced) except without all the server overhead. I’ve also added a rudimentary ‘leading’ system.

Autoturret Changes

Autoturrets no longer have their own power source and instead must use the electricity system. They need 10 power to operate, without it, they simply turn off.

You won’t be able to ‘drain’ a turret like you used to be able to. They still use ammo and will stop firing when they’re empty, but they’re not going to miss more than 3 shots ever. Those ‘sweet spots’ people would hunt for to make the turret shoot 350 rounds at a rock are a thing of the past.

Fuel Generator

The Small Fuel Generator runs on low grade fuel and produces 40 power when active.

Team Changes

We’ve added about 10 people to the Rust team over the last month.

We decided we’d be better off as one big team. So I took the decision to cancel all the prototypes we were working on and throw everyone together into the Rust team. I still believe that prototyping is important — it just shouldn’t be a full time job – so we’ll be trying to do hack weeks every 6 months or so as a team.

Steamworks Update

I’ve updated our Steamworks library to fix some incompatibilities with Unity’s IL2CPP mode.

Benchmarking

I’ve been setting our benchmarking rigs back up and getting the benchmarking system working properly again.

We have a few gaming rigs of varying power that update the game from SteamCmd, run a benchmark and report the results.

Notice Optimization

The team noticed that the notices down the right, above the vitals, were causing a lot of UI Layout activity, which was leading to performance spikes and issues.

The most important/relevant notices should now be nearer the bottom. The pickup notices are recoloured to be more noticeable and stay around a few seconds longer.

Linux Retirement

The Linux client is retired this patch. You will no longer be able to play Rust natively on Linux. The Linux Server is still accessible and working – we have no plans to change that.

Screen Settings

I’ve added a new screen settings panel to the in-game options menu, allowing you to set resolution, fullscreen and vsync settings without the need to restart the game.

Quality of Life and Bugs

I’m working through a huge list of fixes and QOL improvements. Most of my recent changes are coming next patch, but for this patch it’s a mix of map, exploit and QOL stuff. Check the changelist for details.

Monument Powerlines

Added a new editor tool this month to let us quickly and easily make wire connections – similar to how you wire things up in-game, but in the Unity editor. The goal for this tool was to quickly let our Art team wire up connections in monuments to hopefully communicate puzzle mechanics in a clearer way. Now instead of relying on guides online, you should be able to follow the wires from a switch to see what it unlocks.

IL2CPP

Our client now uses IL2CPP. Unity claims this helps with performance and makes the code harder to decompile.

Server Authoritative World Generation

A major problem with our world generation has been that we had to be really careful about changes affecting the end result and causing an involuntary wipe.

To solve this problem the placement of all game objects is now server authoritative, meaning clients get a list of prefabs to spawn and just create the world from that. To save bandwidth we still generate the terrain mesh locally, but breaking this by accident is nearly impossible. A nice side effect is that the initial server join when no map is cached locally should now be quite a bit faster.

Garbage Collection Improvements

We’ve made some adjustments to the garbage collection buffer:

  • Max buffer size is now 4GB (from 2GB)
  • Added console message when an emergency garbage collection is done
  • Show a GC indicator in the bottom left corner of the screen whenever a collection is done

The idea behind the forced indicator is that we can immediately tell when a garbage collection is responsible for a frame rate drop when someone sends us a video. This saves us the trouble of trying to replicate the performance drop and we can instead spend that time on further minimizing dynamic memory allocations and therefore garbage collection frequency.

Also simplified the “perf” convar. Here’s a list of what the values do now:

  1. = Only display FPS
  2. = Also display frame time
  3. = Also display memory usage
  4. = Also display ping
  5. = Also display invokes / tasks / skins if they are not zero

Garbage collection stats are now only shown as part of the forced GC indicator when there was a garbage collection in the last second, independent of what the “perf” convar is set to.

Workshop Skin Compression

We’ve enabled crunch texture compression for all workshop skins that are shipped with the game. This greatly reduces the game install size (by about 8GB) and lessens the impact future skin releases have on the update download size.

Debug Camera Improvements

We made some useful changes to the debug camera for server admins and content creators:

  • R resets the camera
  • Q/E move the camera vertically
  • Z/C and +/- control zoom
  • Arrow keys control roll
  • Disabled inventory and crafting menus when in debug camera
  • Disabled vehicle controls when in debug camera
  • Disabled noclip control when in debug camera
  • Added debugcamera_save and debugcamera_load (multiple save names are supported)
  • Added debugcamera_autosave and debugcamera_autoload
  • Added camzoomlerp (likecamlerp but for zoom)

Vulkan Retirement

With the removal of the Linux client we also no longer support the Vulkan graphics API on Windows.

Small Map Monuments

After last month’s changes we got a lot of feedback from server owners that relied on 3000 size maps with large monuments. As a compromise we have removed the launch site and the excavator from those maps, but added back the other large monuments. As before 3500 size maps and larger still have all monuments.

Helicopter Sounds

Revamped some of the sounds for the attack helicopter and the CH47 this month alongside sounds for the new scrap transport helicopter.

Texture Streaming

Both system and video memory usage have been a concern for us for a couple of years now. We keep adding new content at a rapid pace, which would eventually become unsustainable without texture streaming.

This month we upgraded to Unity 2019.2 in order to finally be able to take advantage of this feature which Unity introduced a couple of versions back. This system will progressively load and unload texture mips from disk based on whether they are currently visible from the camera.

Shadow Quality Changes

If you’re familiar with our graphics settings you will notice that there’s a shadow quality option. For those of us that like to be immersed in this game, turning it up to level 2 will result in softer, more realistic shadows.

Temporal Anti-aliasing Improvements

Ever since we added temporal anti-aliasing, “TSSAA” option now in graphics options / image effects, we’ve had a bit of trouble with vegetation where it would look blurry with wind animation. The reason for this is that we were avoiding a motion vector pass, required for TSSAA to work properly, due to their performance impact.

In the latest version of Unity, however, the performance hit now seems negligible, so we went ahead and added proper support for vegetation motion vectors.

Mesh Optimizations

Another huge source of memory waste has historically been 3D meshes; they are used on nearly everything that’s visible in the game. In Rust, mesh memory footprint has been around 1/3rd of the footprint taken by textures, which is extremely high by any reasonable standard.

This month we took a deep dive into our model/mesh production approach and started making a few improvements to how mesh memory is optimized and shared between different systems, such as rendering, physics and navigation. We only applied these optimizations on a subset of our models and were already able to save around ~700 MB, which represents roughly a 35% reduction in overall mesh memory usage. Additionally, since our meshes are now tightly packed in video memory they also render faster.

Rocket Launcher Changes

No one was really using the rocket launcher and they definitely weren’t using it for PvP. To help promote its usage I’ve changed the Workbench Tier to 2 instead of 3 as well as reduced its cost. The HV rockets are also more lethal against players and vehicles and have also been reduced to Workbench 2. HV rockets are also cheaper and no longer require explosives.

Grenade Improvements

I’ve revisited grenade physics and reduced the bounciness of their physics material so that their resting position should be more predictable. This should help with countering turrets. I’ve also shortened the fuse of the F1 grenade from 3.5 to 3 seconds making them more lethal and harder to escape from.

Pressure Pad Changes

Pressure pad was totally useless before, now it’s only half useless. You can easily hide them under any kind of rug now and they will actually produce a signal for half a second when pressed on even if they aren’t powered.

Just the TL:DR – Full post with images here