You’ve all been naughty, but that hasn’t stopped Santa visiting Rust.
I had a little fun the past couple of days and added some holiday themed elements to Rust.
We will probably keep them in-game until the new year. At various points during the day and night, you’ll hear some jingle bells. Look outside and you’ll see some nice big gift boxes. Go ahead and smash them to retrieve a set of presents. If you want, you can unwrap them, or you can save them up to trade in for a larger one.
In addition to things like resources and tool packages, you’ll find some holiday themed items:
- Candy Canes
- Teddy Bears (Comforting!)
If you do find a stocking, hang it near a fire and when you hear the bells ring, you may find something extra inside. I wasn’t planning on adding this stuff, but I just ran with it. I hope it turns out to be fun and you all enjoy it while it lasts!
Bug Fixes & Balance
- Fixed infinite 5.56 Ammo exploit
- Auto Turrets no longer shoot each other
- Auto Turrets can no longer be placed completely under water
- M249 was made much more accurate
- Helicopter crates are now lootable if they happen to land in water
Probably going to take it easy during the holidays, but I’ll be on-call for bug fixes and emergency changes. Happy Holidays, everyone!
I optimized our trees this week. Turns out the biggest performance hit came from tree culling, which in our case was done by the Unity terrain system. I replaced this with a custom culling system and saved more than 2.5ms every frame on my machine.
LOD Bias Exploit
While optimizing tree performance I also took on another issue that has been plaguing us for quite some time. People playing on low graphics settings, specifically extremely low LOD biases, had a significant advantage over other players since trees and bushes turned into billboards or even disappeared far earlier for them. This is now finally fixed.
I added a tree quality slider to the main menu performance options that simplifies the tree geometry, but the billboard and culling distance is now guaranteed to be fair across the board.
Player Damage Verification
Last week I prototyped a system to ignore damage from players that recently received anti-hack violations or intentionally lagged out, but I only enabled it on one official server to test the waters. This system is now enabled by default on all servers and should help make various exploits less abusable. The current configuration is probably too far on the safe side and is mostly meant to prevent a number of high profile networking delay exploits, but I’m planning to punish a bit more loosely once we’re certain everything is working as intended.
After getting rid of the major tree performance bottleneck I started working on a new batching system that will go far further than the current batching we’re doing for the low building LODs and shadow caster meshes. My plan is to be able to batch all levels of detail on all our static meshes (buildings, rocks and potentially even trees) in an easy to use, high performance way. Sadly I didn’t manage to finish it in time for this week’s update, but I wanted to mention it nonetheless since if everything works out this should be a significant step towards improving performance.
- Fixed being unable to upgrade foundations with a turret on them
- Fixed being able to jump higher when standing in water
- Fixed light LOD performance regression from dungeons
- Fixed shelves being unplaceable on certain triangle floors
- Fixed bleeding damage lag exploit
I should really take some time off over the holidays, but knowing myself I imagine I’ll continue working on the new batching system in order to get it out the door early next year.
Continuing on the procgen branch for this week, I finished the new rocks art. But doing the rock models isn’t enough.
You have to place them on the land procedurally in a convincing enough way. So far, I’m a bit limited by how much contextual data I can use when spawning rocks, it is still very much random without a proper scale of chaos by proximity. The ideal generation looking more like this: large rock formations spawn first > then boulders in close proximity > then average and smaller rocks in that proximity. We would then use the data of these to decide where to paint gravel textures and even smaller decor meshes. Anyway, it’ll probably be a little while before it behaves that way. It does look decent at the moment, if a bit too random.
Still on procgen, I’ve re-done some of the terrain textures to have more depth and just generally be more interesting to look at. So far I’ve redone the sand, rock and gravel splats, currently trying out a different dirt splat as well in the mix. On another note, I’m making ocean and river tweaks so that our water looks less out of place and more realistic across all biomes. The rivers are carrying sediments and should reflect that in their look, the ocean isn’t crazy saturated blue anymore, but more of an Atlantic/Baltic sea colour that fits three out of four biomes better.
Speaking of biomes, I am recolouring them at the moment to feel more diverse. Your temperate biome will be white limestone cliffs and grey sands with lush grass, tundra will tend to have darker rock and sand overall, snow with black rock and black sand all that with a hint of blue. What shouldn’t change much is the arid environment, which will keep its Grand Canyon-esque yellow stone colours and golden sand. Previously most of the biomes looked like they were of the arid type and being in anything other than snow biome would feel samey.
And next to all that I took some time to craft your Xmas giftbox art.
If I get the chance, more progen work.
Got around fixing quite a few bugs this week. I ended up tying a few long overdue loose ends anyway, albeit with minimal performance overhead on high-end settings and none on low-end.
To handle one of them in particular I had to come up with a way to rework the water code to make it simpler. Last week we got reports that this bug was affecting AMD GPUs running DX9:
The changes I made were mostly aimed at improving robustness while looking to fix this problem simultaneously. Unfortunately, we were unable to replicate it ourselves so we need someone to confirm to us that this issue is gone. If you have this problem, please hop on the development branch and let us know through the usual channels.
Added the long overdue ocean foam. For now it’s subtle and mostly visible on terrain slopes with higher inclination, in order to avoid getting foam everywhere:
I had this working before but it wasn’t exactly the best. I simplified the transmission code and made it easier to tweak and get decent results.
Complete list of changes
- Fixed a bug causing broken decals on tree trunks
- Fixed “see through wall” bug accidentally introduced the week before
- Fixed “black river” at a distance bug; most noticeable on low quality terrain
- Fixed underwater mask in OSX/GL
- Fixed wave displacement on very shallow, flat water beds
- Major water overhaul to simplify/speedup and fix serious bugs affecting dx9
- Added atmospheric scattering/fog to some particle shaders (e.g. smoke, flames)
- Added first, subtle version of shore foam
- Added transmission code to simulate translucency (e.g. ice, crystals)
- Improved light transmission in speedtree shaders
- Tweaked underwater lighting
- Optimized water refraction
I’m heading off for holidays tomorrow. It isn’t exactly easy to keep playing your own game regularly and still be highly productive on a daily basis — unless you’re a machine — so I’m allocating some of my holiday time to play the game extensively again and socialize a little bit. Hopefully Looking forward to catching up with some of you outstanding folks. Happy holidays!
I went over the remaining third-person running animations to ensure they look natural when looking up/down (same process I did last week for the rifle and two-handed sword).
I also added a new wounded animation for getting shot in the back of the head.
I added some code and modified the player animation controller to include the new wounded animations that I did the past few weeks. They’re all hooked up properly and should play the proper flinch/wounded animation based on the direction/location the player is shot.
I’m going to start animating Tom Butter’s new semi-auto rifle.
I spent most of Monday and Tuesday working on Deuce again, but I have worked on music a bit today. I got some more short loops together and started experimenting with dynamic arrangement and controlling music playback in game.
Right now the plan is to have a bunch of different themes, which are collections of loops of varying intensity that all go together well. Think of a theme as a song. We’ll decide which theme to use by checking things like the weather, what biome you’re in, which monument you’re near (I’d like each dungeon to have its own theme), if you have building privilege/comfort (so we can play something more cozy if you’re at home or near a campfire). We’ll decide which loops in a theme to play by looking at how intense your current situation is (bullets flying by you or having low health would be more intense situations) and we’ll also vary them randomly a bit to keep things a bit more musical and prevent the same loop from playing for two minutes straight. People play Rust in long sessions quite a lot so I think making the music system avoid repetition as much as possible is important.
I’ve also spent a little bit of time on optimization in the sound system. No huge gains here yet, but I’ve got a few more things I want to try out that should help.
More music, more optimization, and hopefully a start on dungeon ambience.
Worked on another concept for our natural environments
We talked about areas of the map that are more dangerous/have better loot looking more intimidating and I think the atmosphere I went for in this image could definitely be used for such an area.
I didn’t get to concepting any additional frame fillers this week, but I’ve been thinking about some more ideas that I’ll show next time.
I finished the black male head earlier this week. The racial variations are really fun to do and I can’t wait to do a bunch of these further down the line.
The rest of the week has been looking into how the clothing works with the new proportions. The new body clips through a lot of the clothing and hats in particular are kind of offset now. It should just be a simple case of going through each model and adjusting the proportions to match the new model but I’m encountering a lot of weird bone mismatches between the files. I’m testing a different method which should solve this issue and just generally be a quicker solution.
More clothes editing.
More two handed throwable weapons this week, namely the pickaxe & salvaged hammer:
More of the same.
Finished off the LODs for the semi-auto rifle and it’s ready to be implemented. I just need to set up the materials in Unity send it off for Goosey to animate! Looking forward to what he has for us with it!
I chose to take a small break from it (I was sick of looking at it), and quickly whipped up a jerry can that Helk has been wanting for a while. And here it is so far! Take a spin!
I’ll be finishing the semi-auto rifle and submitting it for Goosey, doing the LODs for the jerry can, and then onto something else!
I’m kind of floating at the moment. Not wanting to start anything too big because of what we’re planning to do next year. I’m planning to make an end of year blog next week with a review of what we’ve done and what we’re going to do.
We’ve all been taking a look at performance this week. It has taken a beating over the past month or so, and we’ve identified a bunch of optimizations. Andre has covered some of them – as he’s done a lot of work in this area. I’ve optimized the sound modulation stuff so that instead of updating every sound every frame, it updates the sounds on alternate frames. This is a stop gap solution because the sound modulation stuff is pretty heavy right now – so we need to find a better way to manage it.
The rain particles were creating a lot of issues with performance, and should have really been caught earlier – but we don’t really have a system to catch this stuff. In some ways Unity’s profiling tools are awesome, but not being able to get access to any profiling information at runtime limits what we can do. This is something we need to get better at.. so if you feel like something in particular in the game causes performance issues please let us know.
Server performance periodically goes down the shitter. This is a physics issue, and is solved by lowering the amount of physics steps to run per second. This is now lower by default on the server – so we should see less of the 4fps periods. The downside to this is that it makes the physics system less accurate, stuff could fall through floors etc. We haven’t seen any of this though – so please let us know if you do.
Гоша Асланов kindly decompiled the game and sent in a bunch of network optimization suggestions, which I’ve applied. The difference is probably negligible – but it was a cool thing to do so I thought I’d mention it.
We’ve doubled the client physics precision. Movement should feel more responsive.
I fixed a few bugs with rcon. If undefined the rcon port will be the same as the game port. They can be the same because rcon uses tcp and the game uses udp. If you don’t define an ip it will now correctly bind to “any ip”. This should prevent a lot of confusing and agony when setting up rcon on your own servers.
Memory Leak Fix
We’ve updated to Unity 5.4.2 which apparently fixes the memory leak caused by enabling Canvases with scrollpanels. This doesn’t mean Rust is suddenly only going to use 10mb of ram, but ram usage should hopefully stop growing infinitely.
Optimized tree culling and LODing Added tree quality slider to the main menu performance options Fixed vegetation LOD bias exploit Added server side player damage verification Fixed being unable to upgrade foundations with a turret on them Fixed being able to jump higher when standing in water Fixed light LOD performance regression from dungeons Fixed shelves being unplaceable on certain triangle floors Fixed bleeding damage lag exploit Salvaged hammer & pickaxe are now throwable Fixed "see through wall" bug accidentally introduced the week before Fixed wave displacement on very shallow, flat water beds Fixed "black river" at a distance bug; most noticeable on low quality terrain Fixed a bug causing broken decals on tree trunks Added water shoreline foam Added atmospheric scattering/fog to some particle shaders (e.g. smoke, flames) Improved light transmission on vegetation shaders Major water overhaul to simplify/speedup and attempt to fix serious bugs affecting DX9 on some AMD GPUs Fixed infinite 5.56 Ammo exploit Auto Turrets no longer shoot each other Auto Turrets can no longer be placed completely under water M249 was made much more accurate Helicopter crates are now lootable if they happen to land in water Added Small/Medium/Large gifts Added XMas stockings that refill periodically Added Comfort-giving bear deployable Added Candy Cane Added world spawn gifts Other XMas content Added community skins Rcon.port defaults to game port If Rcon.ip is undefined listen to any ip Sound performance tweaks Increased clientside physics step Decreased serverside physics step Updated to Unity 5.4.2 Disabled rain collision (performance)