The new Transport Helicopter arrives along with changes to auto turrets and various other fixes and optimizations
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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 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. 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 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.
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 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. Note that this does not affect RAM usage as crunch texture compression is only applied on disk, not in memory.
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)
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 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.
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.
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 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. 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 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. 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.
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 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.
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. You can use this to do things like power up a generator hooked up to a timer.. hooked up to an autoturret.
- Unity 2019.2.0f1
- Players are automatically authed to placed cupboards
- Benchmark mode fixes
- Added powerline wires to Monument Puzzles
- Added an in-game Screen options menu for resolution, fullscreen and vsync settings
- Client is now using IL2CPP instead of Mono
- Server is available as IL2CPP version on the "release-il2cpp" branch
- World generation is now server authoritative (faster load times, more robust)
- Added doppler shift to some sounds
- Added texture streaming
- Added Transport Helicopter
- Added Horse Leading
- Added Fuel Generator
- Fixed steam refresh overlay not closing after opening bag
- Fixed possible exception when retrieving market prices
- ServerInfo will retry multiple times if failed to get info
- ServerInfo will fail gracefully if failed to get info after multiple attempts
- Fixed titles getting cut off in pie menu
- Fixed loading screen cancel button being 1 pixel smaller than the bar to its left
- Fixed steam friend inconsistencies
- Fixed unexpected palm trees behavior when helicopters would fly over
- Player map position now updates correctly when injured
- Fixed erratic map scrolling when using the left mouse button to drag
- Hotspot visuals now get cleaned up correctly when ent-killing
- Disabling the UI no longer allows you to see through smoke effects
- Can no longer spam drink back to full health
- Completing a tutorial achievement will no longer mark the whole tutorial as complete temporarily
- Fixed item icon staying on screen if inventory is closed while dragging
- Fixed High External Gates not playing SFX correctly
- Fixed compound sometimes spawning underwater
- Fixed exploit using water projectile penetration
- Fixed snapback issues when dismounting while moving fast
- Fixed swimming slightly under the waves not showing underwater properly
- Fixed crashes on AMD Phenom
- Fixed swamp fog too bright at night
- Fixed lighting on some particles (e.g. helicopter damage smoke)
- Fixed NRE on ent kill cargo ship
- Game log is written to output_log.txt in the game install folder again
- Fixed deflated HAB having inflated collision and wrecking minicopters
- Fixed rendering TopBunnies UI element all the time
- Optimized Notices UI layout
- Neatened up Notices UI
- Tweaked "new content" label on main menu
- The map now re-focuses on the player's position when injured
- The console input field now auto-focuses when opening or changing tabs.
- Max value of gc.buffer is now 4096 instead of 2048
- Log warning when doing emergency garbage collection
- Enabled crunch texture compression on workshop skin bundles
- Performance text no longer updates when nothing changed (avoids GC)
- Performance text always prints GC counter for one second after GC runs
- Simplified "perf" convar (1=FPS, 2=frame time, 3=memory, 4=ping, 5=everything)
- Debug Camera: R resets the camera
- Debug Camera: Q/E move the camera vertically
- Debug Camera: Z/C and +/- control zoom
- Debug Camera: Arrow keys control roll
- Debug Camera: Disabled inventory and crafting menus when in debug camera
- Debug Camera: Disabled vehicle controls when in debug camera
- Debug Camera: Disabled noclip control when in debug camera
- Debug Camera: Added debugcamera_save and debugcamera_load (multiple save names are supported)
- Debug Camera: Added debugcamera_autosave and debugcamera_autoload
- Debug Camera: Added camzoomlerp (likecamlerp but for zoom)
- Small maps have large monuments again (excluding launch site and excavator)
- Updated NPC helicopter sounds
- Reduced texture memory footprint (by ~1 GB) via texture streaming
- Reduced mesh memory footprint (by ~700 MB) via model optimizations
- Improved TSSAA and motion blur quality on vegetation and cloth affected by wind
- Optimized high-quality shadow mode = 2, now 25% faster
- Added new very-high-quality shadow mode = 3
- Pressure pads can now be hidden under rugs
- Pressure pads generate a small amount of electricity when stepped on
- Grenades have a more predictable landing position
- F1 grenades have a fuse length of 3 instead of 3.5
- Rocket Launcher need T2 WB( Instead of T3 )
- HV Rockets need T2 WB( Instead of T3 )
- Autoturrets never miss more than 3 shots in a row
- Autoturrets now make use of the electricity system
- Removed Vulkan graphics API
- Removed Linux client