Full notes
Full PositronX update
Read the full published notes in a cleaner layout. The original post stays linked below.
What changed
- Server
- UI and audio
- Fixes
- Performance
FOV or field of view is a very important feature in FPS games, especially for PC gamers. Its history goes back to the Quake games where a larger field of view was used in multiplayer games as an advantage, allowing you to see more of the surroundings and spot enemies around you. Since this project started on the PC, we’ve always designed the game with options such as FOV in mind for maximum comfort. PositronX by default is set to 90 degrees field of view as it’s common for PC shooter games and it feels alright. In many ways, you could say, it’s optimal. This is how PositronX looks with the default FOV now:
However, soon after releasing on Early Access we started to think about the ranges of FOV for the players to adjust to. We thought it was as simple as coming up with any extremes that still looked good on the monitor, but we soon discovered it’s not quite that simple. Our first setup was from 60 to 110 and it felt fine. The lowest setting was too low for a PC game, but we figured console players would probably want to try out the game themselves and so it was a good incentive to leave that in, while 110 felt good (Doom plays great with 110 FOV). Changing the field of view when using Unreal Engine is a piece of cake, we added all these options and boom, done, we had it and shipped in one of our monthly updates. 60/110 FOV looked like this:
FOV of 60 without corrected projection
FOV of 110 without corrected projection People mostly played with the default (90 degrees) so there was no feedback for a while about it. I think they were either happy with that setting or they didn't even notice the option. Luckily, after a while, the messages started flowing in and were overwhelmingly positive, at least as far as inclusion of FOV slider goes. There was a problem in there, however, that we knew we needed to address. People who used non-standard settings started noticing it. Higher field of view makes the weapons and hands look unnaturally long and flimsy. While we knew about the technical issue, we didn't realize this can influence someone's decision about playing the game (especially since it was an early alpha), yet we soon began reading comments from people who actually decided against giving PositronX a chance because of this. Here's what a larger FOV did to our character and weapons:
Unfortunately, there is nothing out of the box Unreal Engine can offer to help you with this issue, so we had to look for a custom solution that would make things look normal again. We searched for games with a similar problem in the past and we find quite a few ideas on how to solve it. One fix was using the Panini projection of which we were aware since UE4 has some support for it. When applied as a post-processing effect, it made the rendered image look good but there were some artifacts showing up. We couldn't fix those artifacts in a way that would deem the current UE4 post-processing solution as usable in our case. However, after reading multiple articles about it and banging our heads a bit, we finally came to a definitive solution. We would only apply the Panini calculations to our hands and weapons (and a few other elements we later found out we needed to). If we could undo the calculus they've done and input that to our first person hands and weapons (displacements in the vertex shader) we should be good to go. The calculus itself turned out to be something bearable (with the help of a now-deceased game called Unreal Tournament) and looked something like this:
Vertex displacement shader function Once we had that we made a function we used in all our shaders that required it. The final result was that our first person hands and weapons still looked like they were being rendered at 90 degrees while everything else would use the FOV the player setup. This was a huge gain because we could increase our maximum FOV limit to 130. Here is how this looks in the game:
There are still a few drawbacks about this, some of which we fixed in later updates. Because the hands and weapons were visually displaced in the shader, everything related to their in-game location had to use the same projection shader function to work properly (for example, each weapon has a point at the end of the barrel where bullets spawn after being fired). Also, each effect that happens at the start of the weapon barrel (muzzle flashes for example) needed to be using it as well. There were all these sorts of small stuff that needed multiple tries to get it to look good enough to ship. Something that remained to be fixed is the self-shadowing of the weapon onto itself. This is bad now (because of the displacement of the vertices in the shader) and we disabled it. Luckily for us, it’s barely noticeable and it gives us a slight performance boost anyway so it's not a real issue. All in all, it was a nice feature we knew we wanted to have but we weren't aware of the importance of it until feedback came in. The road was bumpy, but we did what we could to give the players the best possible experience while playing PositronX. Thank you for reading this, let us know in the comments if you enjoy this sort of content and would like to know more about the development process in the future :)
Source
Changelog.gg summarizes and formats this update. How we read updates.
