DEVBLOGFriday, August 30, 2019
Transport Helicopter Update
The new Transport Helicopter arrives along with changes to auto turrets and various other fixes and optimizationsTransport HelicopterMaurino Berry
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. It doesn’t use a traditional vehicle seating model and to board the rear you simply walk on board. You’ll have free movement and crouching while it is in flight similar to movement on the cargo ship or Excavator arm. Text doesn’t really do it justice so check out this video :
Merch StoreGarry Newman
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.
This has been a bit of an experiment for us and it’s been a lot of work settling on designs that we’ve happy with. We’ve tried to straddle the line between designs that are gamey and designs that you can’t really tell are from a game.
This is our first batch – so check back and hit us up with any feedback you have for the second round.Horse ImprovementsMaurino Berry
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 so that you can make a horse follow you if it gets stuck somewhere. You can also now place horse troughs indoors so I look forward to seeing many horse garages.
Autoturret ChangesMaurino Berry
The long awaited autoturret changes are finally here.
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. I’ve also added some outputs so that you can hook circuits up to the turret when it has a target, has low ammo, or is out of ammo. I’ve seen some cool things like opening and closing doors based on these conditions.
This might be seen as a nerf, but on the flip side I’ve also made some changes to how their accuracy works. 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.
All in all I think the turrets are in a more fair and much better place now.Fuel GeneratorMaurino Berry
A new source of energy is now available. The Small Fuel Generator runs on low grade fuel and produces 40 power when active. It has inputs for force starting/stopping so that you can have your generator kick in when you run out of battery power. A full tank of fuel (500) should last a few hours.Team ChangesGarry Newman
As anyone that follows our commits page may have noticed, we’ve added about 10 people to the Rust team over the last month.
The prototypes program we had been running had an issue where the studio was divided into a number of smaller teams working towards their own goals, without much supervision or direction.
We decided that this wasn’t the healthiest way to run the company and 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.
The guys that have now joined the Rust team already know Unity like the back of their hand and have hit the ground running. We’re already seeing the benefits of this change internally but you should really see what they’re bringing to the table in a couple of months.Steamworks UpdateGarry Newman
I’ve updated our Steamworks library to fix some incompatibilities with Unity’s IL2CPP mode.
Along with this update you should see that the friends display on the server list is more accurate. It should also fix some issues with non latin strings being returned with the wrong encoding.BenchmarkingGarry Newman
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.
To monitor the PCs without physical access (because only a few of us actually work out of the office) the PCs are plugged into a HDMI video encoder which converts the HDMI input into a video stream that can be accessed over the internet. Then we run NxWitness – which gives everyone live view access to them.
There’s a few reasons for the amount of work that has gone into this.
- I want to make sure that this is something that we look at and rely on
- I don’t want it to fall into disrepair again
- We need to be able to prove our updates don’t make a negative difference
- We need to be able to prove our optimizations make a positive difference
One big thing coming up towards the end of the year is our transition to HDRP (Unity’s newest renderer). We’re hoping firstly that it won’t make performance any worse for anyone, and secondly that it actually improves performance for everyone. This is a way to keep an eye on that.
I’m sure you guys want to run the benchmark and see how your PC does. You can but it’s useless right now, you won’t get any results or anything useful from it. Maybe next patch.Notice OptimizationGarry Newman
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.
So over 6ms to layout the UI. To be fair to Unity we were doing some things here that the UI doesn’t seem to like:
- Using their animation system
- Using their Layout Element component
- Using their Rect Mask 2D component
- Using their Vertical Alignment component
The general rule with Unity’s UI system is that if you want it to perform well don’t use it. After fixing this and writing some pretty simple layout code myself, we got it down to peaking at 0.5ms – which still isn’t great – but is a huge reduction.
I also took the opportunity to clean up the visuals in this area too while keeping things familiar.
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.
I’ve also tried to make the spacing and height match the spacing and height of the vitals underneath.Linux RetirementGarry Newman
The Linux client is retired this patch. You will no longer be able to play Rust natively on Linux. Please read our previous posts for our thought process here.
If you’re a Linux player and would like a refund please make sure you have run the game at least once on Linux within the past year and claim your refund via Steam’s usual methods.
The Linux Server is still accessible and working – we have no plans to change that.Screen SettingsAdam Woolridge
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.
You’ll probably want to give them a quick check the first time you play, to make sure they’re set as you like – remember to hit apply changes!
I’ve since also added the option to set exclusive, borderless and windowed modes, but this won’t be in until the next patch. I know it’s a wanted feature, but there wasn’t enough time to test it for this patch – so there’s no need to ask, it’s coming 🙂
Now that these settings are available in-game, we’ve also been able to ditch Unity’s screen settings popup when starting the game. Hurray!Quality of Life and BugsAdam Woolridge
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 PowerlinesJarryd Campi
I 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.
Vincent and Helk then went through and made a heap of wiring using the tool, so keep an eye out for them next time you’re exploring a monument!
Our client now uses IL2CPP. Unity claims this helps with performance and makes the code harder to decompile. That’s true, to a degree:
- Performance can be better in CPU-heavy tasks like the world generation or entity creation, but for most people it doesn’t really make a difference in the average FPS.
- The entry barrier to create a cheat is now higher and there’s some potential for EAC to implement more advanced detections for hacks that mess with game memory.
For the server things are a bit more complicated since we don’t want to break existing mods. Due to this we’ve decided to keep Mono the default for the server and ship IL2CPP on a separate, optional branch. If you want to try IL2CPP on your server you can switch it to the “release-il2cpp” branch on Steam.Server Authoritative World GenerationAndré Straubmeier
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. Ensuring identical results on all platforms has also been made exceedingly difficult by the switch to IL2CPP.
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 ImprovementsAndré Straubmeier
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.
While I was in there I 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 CompressionAndré Straubmeier
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. Note that this does not affect RAM usage as crunch texture compression is only applied on disk, not in memory.Debug Camera ImprovementsAndré Straubmeier
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 RetirementAndré Straubmeier
With the removal of the Linux client we also no longer support the Vulkan graphics API on Windows. It only caused problems for us with no real performance benefit. If Unity improves the situation in the future we will revisit it.Small Map MonumentsAndré Straubmeier
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 SoundsAlex Rehberg
I revamped some of the sounds for the attack helicopter and the CH47 this month alongside sounds for the new scrap transport helicopter. The flight sounds for the NPC helicopters should sound more natural and dynamic now.
I also wrote a doppler shift system this month and set that up for all the helicopters which makes flybys feel way more awesome.Texture StreamingDiogo Teixeira
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.
This process can sometimes be noticeable, even though it’s invisible in the vast majority of cases, when an object you’re looking first shows up with a low-resolution texture and, just a few moments later, shows a high-resolution texture.
We have enabled streaming on about 1/3rd of all textures, most of which aren’t very large so we we’re only saving roughly 1 GB of memory at the moment. It’s important for us to roll this out now and see how the system behaves on a larger player base. We’ll keep expanding if the system lives up to our expectations.Shadow Quality ChangesDiogo Teixeira
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. Here’s a reminder of what they look like:
However, since not all of us can afford to have those enabled, we took some time to optimize them, improving performance by 25% without sacrificing perceived quality. We also took the opportunity to add an additional shadow quality level 3, heavier and higher quality, for those of you producing high-quality content.
Temporal Anti-aliasing ImprovementsDiogo Teixeira
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. Pieces of cloth being affected by wind were also fixed in the process. Staring at vegetation with TSSAA enabled no longer results in a blurry mess.
The motion blur image effect was also affected and improved by this change. If this bothered you enough to turn off TSSAA of Motion Blur, feel free to give these another shot. Temporal anti-aliasing should improve image quality quite a bit, when compared to other anti-aliasing modes, at a very low cost.
Mesh OptimizationsDiogo Teixeira
Another huge source of memory waste has historically been 3D meshes; they are used them 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.
We will be extending these optimizations to even more models in future updates, saving even more memory. Internally, we’re now working with some new guidelines so that all new content is properly optimized.Rocket Launcher ChangesMaurino Berry
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 ImprovementsMaurino Berry
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 fromPressure Pad ChangesMaurino Berry
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. You can use this to do things like power up a generator hooked up to a timer.. hooked up to an autoturret.Legal Docs UpdateAlistair McFarlane
You can find out more including what exactly has changed at the following link:https://facepunch.com/blog/updated-legal-stuff