Sorry, but the patch has been delayed to Friday. Here’s devblog 142 to tide you all over until then. Our New Year’s resolution is to add harbours, improve performance, and wipe the servers.
Harbours Are In
Vincent Mayeur Damian Lazarski
The harbours are in. They will offer loot for the early game fresh spawns, fewer opportunities for snipers compared to previous monuments, and escaping from the area via the ocean. Most of our art is done for these new areas, and we already improved some of the previous monuments using it. However there may be blockers left here and there that we will iron out over the coming days.
Unity’s profiler is pretty broad: it’ll tell you how many vertices you’re drawing, but not really what’s it’s drawing. This is an issue when we know we’re drawing a shitload of triangles, but we’re never really too sure what proportion of triangles is being drawn by what.
So I made a tool. You can run it in game, by typing renderinfo in the console. It’ll pop up an external application and list a bunch of stats. It records every renderer in the scene, then you can group them by mesh or entity, then order them by total vertices. Which has proven really useful to us. Here’s an example:
Here we can see that there are 67 Pookie Bears in the scene, and all of them are being drawn. Turns out Pookie isn’t being distance culled, and it hasn’t got an LOD.
You can also see other problems further down, like five visible torches are 12k vertices. Even though one of them is 330 meters away. Which leads us to find that a bunch of these held and world models don’t have LOD models, or have abnormally high vertex counts.
This has given us a significant list of performance issues to fix. For example, Alex discovered that the Eoka Pistols LODs are configured backwards, so the further away you are from it the more detailed it becomes.
We’ve opened a Trello for it here, so you can see how we’re fighting the fight.
I put out a group of new skins yesterday. As you’ve probably noticed, the price of the new skins is quite low. We did this last week too, and it ended up making pretty much the same amount of money as when they were all randomly medium and highly priced. This seems to be a good trade-off between making money for the skin’s authors and making a lot of people happy, so we’re going to continue this.
An issue is that people want their bought skins to be worth trading and selling after we stop selling them, so I’m thinking that the prices of the skins will be based on their age: skins released this week will be in our item store for $1. Skins released last week will go up to $2. This should mean that the prices of skins steadily rise until it makes more sense for people to buy them off the market, at which point they can be retired from our store to make room for more skins. Just an idea. Let me know what you think.
Holiday Content Disabled
I hope you all had a good holiday and a happy new year. The holiday content has been disabled for another year.
We discovered a pretty major performance bug with particles: when campfires, furnaces, lanterns and ceiling lights were ‘off’, they were still costing almost as much as if they were all on. This included when they were out of range as well. This is because we simply turned off their emission and assumed Unity would do the rest. Turns out this isn’t the case and it’s still doing a bunch of math and logic it shouldn’t be doing. I’ve changed this up so that particle systems that are off, or are too far away no longer incur any CPU cost. This should provide a minor performance increase as you could always ‘see’ several dozen campfires or furnaces no matter where you were on a populated map.
Rendering Optimizations – Instancing
Garry pulled the team together to address performance and we’re starting to get some results. I started by tackling hardware instancing by modifying the shaders to support it. This is a feature that was introduced recently by Unity that allows us to render a bunch of objects at once, the only requirement is that they share the same material and only a few properties change between them.
We started by supporting biome rocks, although some other assets are also taking advantage of it. Next week we’ll be expanding this capability to as many assets as we can.
Please note that these changes are aimed at reducing CPU overhead, not GPU, which is where we are heavily bound at the moment. However, this means you are more likely to notice the improvements if you have a powerful GPU.
There have been a couple of exploits making the rounds that allowed cheat developers to mess up some server side code by sending NaN values to the server. This could in one instance be used to get the server to calculate the new player health as NaN, which essentially rendered the player invincible. Those exploits are now fixed.
I fixed various building exploits related to tunnels and caves and addressed an issue that allowed people to place the high external wall in a way that you could get inside the wall from below.
Viewmodel Animation Tweaks
I decided to fix the way the player was holding some of the weapons in first-person. Some players have commented that the supporting hand looks a little off, because all of his fingers aren’t gripping the gun. I corrected that, as well as tweaked a bunch of animations so they’re more punchy and less floaty.
I finished the new revolver model and started rigging it for animation. Here’s what it looks like so far.
I’ve continued on the bear rework this week, and started on the low poly. Bears are weird things, and their range of motion is pretty remarkable. They’re primarily quadrupeds, but frequently stand on two legs so I wanted to ensure that the mesh had the correct geometry to support both states. Here’s a WIP of how the different states might look.
I did a little bit of testing on how the fur could work too. Before Christmas we’d discussed a couple of options for fur. This is the handmade failsafe option, or the option we use if other options don’t work well. It might never be used, but it’s good to know that if all else fails we’ve still got a decent method of making fur.
I’ve primarily been working on a second pass over animal sounds this week. The bear is mostly done and is sounding a lot better now. Its footsteps don’t sound like a shitty drum machine and the growls sound way more full and detailed now. Those are still my voice, but I’ve picked up way nicer mics than what I recorded the source for the original bear growls with, and that’s made a huge difference to how they sound once they’re processed.
I discovered that the running animations that play when a bear is turning were missing the events that trigger footstep sounds which is part of the reason bears have been so sneaky. We use a blend tree to smoothly blend between the straight running and turning running animations, and previously animation events in layers that were fully blended out would still trigger, but Unity fixed that at some point and I think we just haven’t added events since that happened. I’m including the fix for this this week even though I’m not putting the new bear sounds in yet.
I’ve also done a bit more ambience polish this week. Nothing crazy there really, just trying to get some of the background loops to feel a little less static and more detailed.
I sorted the bug that some of you crafty fuckers were using to make pumpkin lag-switch towers with, tightened up the voice limiting on bullet flybys so that shotgun shots don’t sound quite so crazy, and I also removed the convar to disable sound occlusion this week.
Slowly fade in death screen instead of suddenly appearing Added renderinfo diagnostic command (windows) Fixed torch worldmodel high vert count Fixed hatchet worldmodel high vert count Fix burlap phys impact voice limiting Stricter voice limiting on bullet flybys Fix bear footsteps not playing when a bear is running and turning Sound occlusion can't be disabled via the console Ambience polish Added harbor monuments to the world generation Updated various monument assets Building optimizations Gib optimizations Fixed tree base snow piles not culling Fixed bypassing forced shadows with console Fixed bunker room building exploits Fixed god mode exploit Fixed construction creation message exploits Fixed high external wall placement exploit Added object instancing optimizations Fixed player rock LODs Added Distance Culling to Beds Added Distance Culling to Pookie Added Distance Culling to Rock Fixed ParticleSystems eating up cpu when disabled