Jump to content
The Lotus Eaters: Share Bug Reports and Feedback Here! ×
The Lotus Eaters: Known Issues ×

Performance And Optimization Feedback: What Warframe Needs And Does Not Need


dadaddadada
 Share

Recommended Posts

Part 1: Over-optimization?

I have a bad feeling regarding Warframe performance while playing.
Once upon a time, there used to be a glitch where when you quickly jump out of a cover all the objects behind it that weren't previously visible would take some time to become visible again from the camera position, creating some popping.
Nothing major tho, objects used to take less than a third of a second to reappear.

This insignificant glitch put a question mark in my head:
Is Warframe running early Software Occlusion Culling for EVERY single object in the scene?
I'm not talking about the obvious portal engine needed to globally select the visible tiles.
I'm talking about testing all the props and objects inside the selected visible tiles.

And another, most important one:
Does Warframe even need to do this kind of picky visibility tests?

What I know for sure is that Occlusion culling is the most CPU-expensive among the most popular rendering optimization algorithms:
- Level of Detail (LOD)
- Frustum Culling (FC)
- Occlusion Culling (OC)

Those tests are usually executed in the CPU in an attempt to offload the GPU from redundant work and only make it render only the potentially visible objects.

Warframe, afaik, has all of them up and running. But... Over-optimization IS a thing.
At this point I have the fear that those optimizations are taking too much CPU power and are actually slowing down the game while leaving the GPU sitting there with no work.

I'm not a DE developer and I can't test anything, but I am genuinely concerned and I would like to know If there were performance advantages by disabling the object-level occlusion culling and keeping LOD, FC and the tileset portal engine.

Occlusion culling is a very costly algorithm to run on a game that also needs to manage AI, Network, physics, ray-tracing, animations...
Warframe is constantly on its knees begging for CPU power.
To be honest, the tilesets in Warframe don't have the sheer amount of props and geometric detail to justify anything more advanced than a LOD/FC coupling.

I mean, you are allowed to implement OC in an open-world game in which even a very approximated but quick culler can filter a great deal of geometry from the world, but you have to think alot before putting it in a videogame where at all times there are sceneries at most as big as a concert hall.


Part 2: Static geometry and dynamic geometry.

What I am pretty sure of, is that Warframe is not well balanced regarding what needs most to be optimized.
I feel like Warframe is heavily optimizing the static world. In the distance, objects get heavily distorted because of the LOD applied to them.
Its very ugly and unnecessary, while the waves of enemies at wave 30 of a void defence look all perfectly definite even at long distances.

Enemies can bear a more severe LODding rule, while on the static world side it should be less strict.

Its not only a matter of triangles being put on screen, but also about how many vertices are being transformed to do the ragdolls, animations, collision detection and so on.

I don't even want to imagine the punch in the stomach that 4 full-resolution warframes should be for the system.


Part 3: Less multithreading

Start up Warframe, bring up the Task Manager, make sure the "Threads" tab is visible.
How many threads is Warframe using? From 35 to 50 threads.
Most of those are staying idle and just work sporadically. But c'mon. 35 threads for being in the login screen?

 

 

Part 4: ray-tracing concerns

 

Ammo pickups, blue/red orbs and corpses are being taken into account while calculating ray-tracing. I find particularly annyong that when my carrier picks up a lot of stuff the camera screws up because of the ball of pickups and I won't be able to see anything. This is not much of a problem and barely of performance concern, but it still bugs me out. Like, when there are a lot of pickups on the floor are they really being considered during ray-tracing/bullet impact calculations?

 

 

Ok that was all I had to say. I need some reassurance.

Edited by dadaddadada
Link to comment
Share on other sites

Personally never seen any of the culling techniques outside the odd LOD bug.

 

However, Warframe does have a few tilesets that a quite large. There is the corpus level with the giant chasm down the middle of it, and then there is the giant corpus hanger too.

 

You'd have to optimize for the worst performing scenario wouldn't you?

 

Personally, multithreading (proper or improper) needs to be better exploited. the number of 4 core CPU's (i think) is higher than dual cores if i recall the steam survey figures correctly.

 

However, very good post, more a read for devs, but a good read for a few on the forums nonetheless :)

Link to comment
Share on other sites

Personally never seen any of the culling techniques outside the odd LOD bug.

 

However, Warframe does have a few tilesets that a quite large. There is the corpus level with the giant chasm down the middle of it, and then there is the giant corpus hanger too.

 

You'd have to optimize for the worst performing scenario wouldn't you?

 

Personally, multithreading (proper or improper) needs to be better exploited. the number of 4 core CPU's (i think) is higher than dual cores if i recall the steam survey figures correctly.

 

However, very good post, more a read for devs, but a good read for a few on the forums nonetheless :)

 

Could you please post screens about the tiles you are refering to?

Link to comment
Share on other sites

Could you please post screens about the tiles you are refering to?

re-reading my post i should have said "haven't noticed" instead of "never seen", I know there is object culling for creates and clutter items, as well as general object LOD. But as i say, you'd have to optimize for where Warframe performs worst, no?

 

Got a couple of shots referring to the tilesets though. Included a couple from the dockyards too ;)

warframe2014-07-1702-tdkyj.png

warframe2014-07-1703-q5jk3.png

warframe2014-07-1703-2vpqt.png

warframe2014-07-1703-tyjyi.png

warframe2014-07-1703-98k4w.png

 

As i say, i don't particularly notice the optimizations.And if i recall, Crytek got rid of Character model LOD all together for their game, Ryse.

 

On that note though. If these are CPU bound optimizations, shouldn't better multithreading be a focus? my system barely uses 4 cores....

cpu7rjkf.png

 

EDIT:

I never noticed this before, but, Ray-tracing???

 

Warframe would have to have a renderer out of this world to have been doing that all this time? To the best of my knowledge, Cryengine is one the few engines that use ray-tracing in game, and even then only for reflections, and further still as a DX-11 feature, with Guerilla games joining in with it's killzone launch. Can you elaborate on how Warframe is using ray-tracing?

 

Also keep in mind Warframe is a DX9 based game. It's DX11 feature-set probably only goes as far as pretty lights.

The number of things the GPU can render is limited by what the CPU can tell it to. If you get rid of all culling and have FULL LOD the number of draw calls from the CPU will go up too (remember DX9 based game).

10% hit for optimization is probably better than a 80% hit for the renderer stalling ;)

 

There was a post i saw ages ago on some crumby forum about something similar. i'll try and dig it up, i thought it was a good read :)

 

EDIT: Found it

Ex-Codemasters Dev:

 

 

The DX discussion is an intresting one and if anything gives developers MORE recent to move away from the PC rather than towards it.
DX hasn't so much held back GPU ability as it has cost us more CPU side and more time spent CPU side doing draw calls means less time CPU side to do other things.
 
To give you an idea of the problem right now we have a testbed for our next generation backend which does concurrent display list generation. The test draws 50,000 cubes to the screen with one draw call per cube.
The 360 and the PS3 can run this test, in concurrent mode, at 60fps or 16.6ms per frame.
 
The PC we are testing on is an 4 core/8 thread, 3.2Ghz Xenon with 6gig ram and a NV 470GTX GPU (aka my development machine); the same test runs at ~30fps, or ~30ms per frame FOR THE SAME WORK LOAD.
In fact, originally the concurrent version was running 5ms/frame SLOWER than the single threaded version until I spotted what was going on and reduced our thread count by one to let NV have a whole core to do the work at which point it was beating the single threaded performance by 1ms.
 

(I tested it later on my HD5870, i7 rig at home and once again the multi-threaded performance was 5ms slower due to AMD's drivers).

 

http://forums.tripwireinteractive.com/showthread.php?t=69260

Edited by MillbrookWest
Link to comment
Share on other sites

-autosnip-

 

Nice post. I am pleased with your performance.

 

First off, I'll clarify as needed some points.

 

Ray-tracing

 

I'm not talking about graphic-oriented ray-tracing. I'm talking about bullet path calculations, physics interactions and visibility tests. Call it ray-casting if that best tickles your fancy. Every videogame where you shoot a gun is rocking it, or a variation of it :)

 

Even that insignificantly brief line that connects the camera with its orbit-view point is constantly checking for obstacles in the viewer's way. If it finds one, the camera will be moved closer to the view point the needed amount to surpass the obstacle so it no more blocks the player view. The fact that even energy orbs are being taken into account is instilling doubts in my mind about the level of optimization of said algorithm in Warframe.

 

Drops can be safely relieved from the list of objects to check.

 

My vocabulary today is particularly prolific. I blame U14 hype for this evil. Let's fix that.

 

*gets some sleep*

 

Multithreading

 

Multithreading is always a focus in a game that boots up with 35 threads. But as I said, most of those are and will remain idle most of the time. Now, is this a good or a bad thing? It may be good only if the management is perfect, as you can't trust the OS to handle well such a large amount of threads under constant spinlock madness.

 

4 cores sound more than enough for a game like Warframe to run properly and hey, using always most of a machine's cores is always nice, right? ... right?

 

LODding

 

 

If you get rid of all culling and have FULL LOD the number of draw calls from the CPU will go up too.

 

Not sure If I got it correctly, but the number of draw calls does not depend on the LOD of an object. Either way if you want to render an object with a high or low level of detail it's always one draw call to be casted in both cases.

But more likely, you were refering more on the impact that the absence of culling would bring. Actually, the absence of Occlusion Culling only, because Frustum Culling would be still there in my hypothesis. Frustum Culling is still quick, lightweight and effective.

 

The only way to know is TESTING, testing and more testing. I believe that at this point the testing has been done after this many years of life of the Evolution engine but yo I still have the right to argue about it.

 

Is the overhead of doing Occlusion culling worth the reduction in draw calls? I believe no. Because even the largest tiles in Warframe such as the ones you provided are never going to hit the thousand of objects. 1000 draw calls are peanuts. Even counting enemies and bullets flying around.

 

Is the overhead of doing Occlusion culling worth the reduction in polygon count being processed? I still believe not. Because of in-place LODding, I don't see the need to apply CPU time to early cull-out objects that the GPU could z-test faster than the CPU is to cull them. Particularly, if the tiles have a smaller size compared to an open-world videogame where such tricks are a must.

 

Of course, the worst case scenario are tiles with most objects. Still, I'm not convinced. Even on those big tiles, Occlusion culling would remove a 20%-30% of objects from the rendering pipeline... Not enough. OC is supposed to work on worlds where you can filter 95% of the geometry at any given point.

 

Reminder: did I mention that Frustum Culling is still with us? No? Well now you know ;)

 

 

And if i recall, Crytek got rid of Character model LOD all together for their game, Ryse.

 

This is actually true, even if myself I never dug into the matter. Its something about Xbox being potentially worse/better than PS4 for that particular game. I don't want to worry too much about console things.

Edited by dadaddadada
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...