The new Wooden Armour is here, along with the new Simple Handmade Sight, Searchlights, and more.
I finished up work on the Simple Handmade Sight and it is now available in-game at a cost of 6 HQM. This sight slightly inhibits your zoom but gives you a clearer picture of your target. It also is not emissive, so it won’t be much use during the nighttime. Think of it as a middle ground between the iron-sights and the Holo Sight. I’ll be listening to feedback to see if it’s too useless or too overpowered and change it accordingly next week.
Here’s yet another object from rescued from Concept Limboooooo: The Searchlight. Man, it feels like this model has been in-game for years. Anyway, its pretty simple to use: you walk up and press E on it and it will aim where you are aiming. You can turn it on or off and it uses fuel. I’ll probably do a polish pass on it after the patch, to add some nice sound effects and extra features like being able to shoot them out. Enjoy!
Due to a bunch of performance problems, the script that set the plant color based on its hydration level was disabled. I have fixed the script issues and re-enabled it so plants will once again show as dark brown when they are not hydrated. I spent a few days this week attempting to make farming/watering a little more obvious, but I couldn’t get it done in time. Stay tuned. I hope to have it less convoluted and esoteric by next week.
Wooden Armor Added
The updated Wooden Armor has been added to the game. I’d hoped to have a workaround for how the armor floats above the skin when no other clothing is equipped, but it’s a pretty complicated problem to solve. The floating looks bad still, but overall it looks better – and I’ll keep working on a solution behind the scenes.
I mainly focused on improving server performance this week. We’ve identified Unity’s invoke system as one of the slowest things on the server. It’s used to initiate and cancel delayed method calls that are usually triggered by player interactions with items, traps and corpses. Cancelling a single call could take 5ms when there were a lot of entities and players on a server. While the invoke system has to handle a lot of special cases like nested invokes and cancels that make it complex to implement in a well performing way, there’s no real excuse for it to take that long. So I sat down and wrote a replacement.
What used to look like this:
CancelInvoke(“DoSomething”); Invoke(“DoSomething”, delay);
Now looks like this:
CancelInvoke(DoSomething); Invoke(DoSomething, delay);
In addition to it being much faster (nearly free in fact) we also have the advantage of referencing the actual method instead of the method name as a string. This means we get compile time error checking, which for example makes it impossible to call a method that does not exist and therefore helps us write correct code.
As with all optimizations this is an ongoing process and your results may vary. We’ll see how it plays out on the high population servers over the next week and will try to gather as much profiling info as we can to continue improving server performance. That being said, initial results seemed very promising.
I took the opportunity this week to do more culling work:
- Simplify occluder meshes used in building construction to the bare minimum
- Added occluders to more construction pieces; e.g. floor, windowed wall
- Shrunk sleeper culling detection spheres
I also started working on culling lights inside buildings this week, but won’t be able to deliver before next week. Still needs a few days of testing.
After a few weeks of observing culling running stable on DX11, I decided to pull the trigger on support for DX9 and GL. Please report any anomalies you may encounter.
Vegetation Rendering Improvements
I was going through the nature assets this week, to figure out why our vegetation was looking so aliased, and noticed that some textures were not optimally set up. They weren’t looking smoother when distant and anisotropic settings had no effect on them.
They look a lot smoother now that the problem is fixed, especially in movement. This change also brings a few benefits in regards to texture bandwidth and cache utilization.
Bloom Effect Improvements
A while ago I went through all the full-screen effects, which can become quite heavy on low-end hardware, and sacrificed quality a bit in return for better performance. This week I improved bloom smoothness a bit, at both quality levels. A small change with minimal impact in performance. Please note that the change is more noticeable in motion.
The before and after in high-quality mode:
The difference is more dramatic in low-quality mode:
Launch Site Grey Box
Vincent Mayeur Damian Lazarski
We’ve been making steady progress on the Launch Site monument. The general layout of this area is mostly finished and we’ve started to work on detailing the greyboxes to get a better feel of this environment.
The monument is currently split into two sub-areas: one is the pad itself, with an abandoned rocket being the focal point. It contains a series of bunkers and a maze of claustrophobic underground tunnels that will offer high level loot to scavenge, and should also allow for some intense firefights.
The second area is the rocket factory site. It features a large, industrial complex as a centerpiece, that will include an interior filled with broken walkways, rocket parts and beams you will be able to climb. It’s surrounded by a series of fuel silos, warehouses and office buildings, most of which will have accessible interiors. Rooftops and will by connected by a network of fuel pipes and walkways. All in all, this area will have plenty of cover and sniping points which will make the firefights unpredictable.
Last week, I altered the FOV of the viewmodels so they didn’t look as squished when the player sets the FOV to higher values. This didn’t go over very well with the community, so I reverted my changes and the viewmodels now look the same as they did prior to last week’s changes.
I also continued to go over the various viewmodel animations this week to make them feel like they have more weight with less bouncing around. I’ve also been trying to improve the shape of the wrists, as they look pretty bad in certain poses. This required me to re-rig some of the viewmodels so the wrists bend a bit better.
I also tweaked many of the animations so as not to have any clipping (regardless of the FOV setting).
This week I’ve been focusing on improving the music playback system to make it feel a bit more responsive. Right now we’ve got a pretty good base to build off of, but the way we fade layers in and out doesn’t always feel very good. If we’re fading a drum layer in and it comes in between drum hits as a melodic layer fades out, you don’t end up feeling the intensity change when it’s actually happening, and it can feel a little disjointed.
My first swing at improving this is giving us the ability to play short one off stings as part of a transition. These will still be locked to play in time with the music that’s already playing, but they’ll be played on a more granular grid so they should feel tighter. I’m setting this up so we can specify where stings are allowed to play timing wise too (on a 16th note grid), so if we have other percussion going on we can keep stings playing musically in time with those hits instead of just putting them on downbeats or the start of bars.
I want to experiment with pulling most of the heavier drums out of some of the higher intensity clips and moving them entirely into stings too so the really big exciting stuff more directly coincides with in-game events.
I’m also giving us the option to restart musical phrases on intensity changes, which would have sounded kind of clunky before, but should be masked fairly well with stings.
I’m been going over some of the sound design in our existing tracks too. I’m mostly going over the pads right now, because a lot of them are pretty resonant and poke through the rest of the soundscape in game a bit more strongly than I’d like right now. And yes, the remake of the original Rust theme is getting finished up as part of this too.
Spinning Wheel Sounds
I’ve recorded source material and started on design for the Spinner’s sounds this week too (holy crap it was nice to work on something that wasn’t a footstep). Most of the sound from this will come from me lightly touching a frying pan to the platter on a turntable. I held some other metal bits to it in spots where there’s some holes in the top of the platter to get some clicking sounds as well.
While I was recording these I found if I held the pan just right it’d start resonating and I’d get these awesome horror movie bowed metal cymbal type sounds out of the pan, so I ended up recording a bunch of that even though it won’t be part of the spinner sounds (it’ll probably end up in some of the music though).
I did a few tiny polish bits of the footsteps I’ve been working on this week. I ended up adding one more surface type that’s a mix of gravel and larger rocks because the sounds we’re using for plain gravel are a little too high pitched to feel quite right with that ground texture.
This is all ready to go, but I’m having issues with our source control getting stuck while looking for changes in the workspace (likely because there’s a few thousand changed files for this), and I can’t commit unless Plastic can finish find the changes. Hopefully I’ll get it to work before the patch goes out but we might have to wait until next week.
Weapon Mod World Models
World model optimisation continues this week with weapon mods. I’ve also cleaned up prefabs for easier iteration in the future, if needed.
holosight world model lod updates lasersight world model lod updates Muzzleboost world model lod updates Muzzlebrake world model lod updates Silencer world model lod updates Viewmodel FOV changes reverted Updated wooden armor Improved bloom effect quality Improved vegetation rendering Added custom invoke handler (server performance) Optimized mesh building and fixed rare invisible grass issue on DX9 Added pooling support to collectable entities Added pooling support to loot barrels Fixed random ceiling lights being stuck around the world Reenabled MaterialColorLerp script Added Searchlight Added Simple Sight