The chaps at Facepunch have asked me to summarise their updates for the people who hate the written word. Here's what the latest brings.
I started work on the prerelease branch. I’ve ripped out some of the XP stuff, and you’ll notice is everything is unlocked by default now. Enjoy it while you can because next week is all about adding the actual component entities and rebalancing the crafting recipies accordingly.
On the prerelease branch, we’ve added a system that allows us to respawn the barricades you would see after a fresh wipe. It’s currently set up so that when a loot box spawns in a room we can close the door and barricade it, giving the player a visual indication that there's something inside. The player can then break the barricade down to access the door. We’re probably going to have to experiment with the placement of these so players cannot identify respawn times from a long distance (think roof campers), and we’d also like to add different tiers of barricades, so better tools were required to gain access, but as a first pass it works pretty good.
We were hit by a zero day vulnerability in our networking solution RakNet towards the end of the weekend. This allowed attackers to deadlock the network processing thread which made the server kick all players and reject any new connection attempts. After some nighttime debugging we finally found and fixed the exploit on Monday morning and released a mandatory server update. Sorry for any downtimes you may have encountered, but this one was not in our hands.
I got back on performance this week and kicked things off by rewriting our terrain carving triggers as promised in last week’s devblog. This really helps with the performance of projectiles and player culling, which were huge bottlenecks on highly populated servers. I also optimized smaller areas like prefab pooling, object instantiation, level of detail updates and dynamic memory allocations. Most of those only yield small improvements on their own but things do add up. I have one more significant optimization for player spawning ready to go but it needs some more testing and will go live with next week’s update.
Added some specialized volume triggers to disable water within certain bounds. This will help Vince exclude water rendering in underground areas like caves and tunnels. However, we’re leaving the possibility open for underground pockets of water.
I took some time to have a look at our broken tree shading this week. It was looking way too saturated and brighter than it should. Even though it turned out to be a simple material specular configuration problem, I took the opportunity to add a few safeguards and optimize the shader for cases where certain inputs are not used.
I spent the last couple weeks finishing off the MP5. This is the final model, ready to be animated.
Not a big update from me this week. A lot of work has gone into dressing the various rooms already created. I also got to think about the types of caves I will design for the update: I’m going to create a decent amount of layouts, from easy and small to large and difficult caves.
I started designing a first one, and will add any missing rooms as I go. One of the challenges is to do a lot of caves layout with a relatively small amount of rooms whilst fighting repetition. More about this next week.
After putting the Lighthouse to rest I began working on some industrial props. Since we’ll be needing a good amount of assets to spice up the world of Rust, I’ve decided to have a look at some new workflow techniques which would help us speed things up without compromising visual fidelity.
I’ve decided to take a closer look at Substance Designer and began working on a set of material presets. Essentially, the idea is to build up a library of materials that will simply require a mesh to be plugged into it and will output a fully textured prop.
So far I’ve had some decent results. I’ve made two different presets that come with a variety of additional sliders that allow for controlling the amount of rust, dust, damage, weathering, etc. While it took me a little while to set them up, having a decent library of those presets would greatly speed up texturing work later on.
Here’s some examples of the same prop with different material settings:
Work continues on the new Hazmat Suit. I've spent this week mostly finalising the feel of the rubbery suit and working into some of the small details. There's a lot of detail, but I'm making good progress with it and should be on track to have the high poly finished up by the end of next week.
I had an itch to program a bit this week, so I worked on something I’ve been wanting to do for a while now: sound occlusion! Essentially this just means sounds play back differently when there’s something between you and the sound. I wanted to be able to muffle occluded sounds instead of just dropping the volume or not playing them. We will likely do those things for some sounds though, depending on what feels best for a given sound.
A low-pass filter is the perfect tool for this job, but Unity’s stock low-pass filter kind of sucks. A low-pass filter cuts off all higher frequency sound above a certain point which is called the cutoff frequency (it lets the lows pass through). There’s also this thing called resonance which gives a volume boost to stuff that sits right around the cut-off frequency, which is cool for synthesizers, but sounds really unnatural and bad in this environment. Unity’s low-pass filter will not allow you to turn the resonance all the way off so I made my own simple one-pole low-pass filter. Here’s a little clip showing the Unity filter opening and closing twice, and then my filter opening and closing twice over the same running water sound. The resonance is more noticeable when the filter is mostly closed.
Once the filter was working, I dug into the occlusion system. I’ve got the basics working now and I think it feels pretty good! We can only occlude things with the low-pass filter right now, but I’m going to allow occlusion to change volume or prevent a sound from playing altogether next. After that it just needs a bit of cleanup, optimization, and testing! Here’s a sample video of a campfire’s sound being occluded:
newAdded log when server is fully started (helpful for server problem diagnosis) newAdded refresh_stability console command (helpful for debugging) removedRemoved building blocked chat message when trying to build while building blocked fixedFixed AMD R9 half-screen darkening fixedFixed tree lighting desaturation fixedFixed viewport resize breaking water when reflections are enabled updatedOptimized terrain carving triggers significantly (better projectile and culling perf) updatedOptimized various small inefficiencies in prefab pooling and the LOD grid updatedOptimized client side network update events to reduce entity streaming stuttering updatedEliminated needless string reallocation from object creation (better perf, less GC) updatedEliminated some minor dynamic memory allocations (less GC) updatedStone gate gibs are no longer the incorrect wood gate ones