Jump to content

Static Collection - Performance Gains?


Recommended Posts

One o' the wee features I noticed that were added back intae the CK, was the ol' static collections feature frae the GECK days.

 

Me question tho', is does it do anything for performance? Or is it just a high-level ease-of-use shebang, and not a way to manually batch objects together?

Link to comment
Share on other sites

It's not going to be more performance because the game still has to draw just as many verts. In FO3/NV SCOL's Were bad for performance because they were basically mash ups so it was better to use individual models. Partly because the SCOL forces all verts to draw when needed Breaking things back up in FO3/NV prevented this.

 

FO4 is built around SCOL's.

 

At least that is my understanding, I could be wrong.

Link to comment
Share on other sites

There's more to performance than just poly count. Draw calls is the big performance drain in these open world games, especially with the traditional rendering APIS, and doubley (tripley, actually) moreso on AMD CPUs. If static collections merge multiple objects into one mesh, that's quite a reduction in draw calls.

 

'Tis why Fallout 4 uses (a very s*** form of) static batching; merge scene geometry into fewer models, so fewer draw calls are made.

 

Edit: Yo, if this page from the GECK docs is anything to go by, static collections do in fact reduce the number of draw calls issued. http://geck.bethsoft.com/index.php?title=Bethsoft_Tutorial_Static_Collections

 

Now I'm curious to know if reference groups also reduce draw calls.

Edited by FiftyTifty
Link to comment
Share on other sites

I just checked in the editor. Placed around 12 random architecture objects in an empty cell. 54 draw calls.

 

Select all -> Right-click -> Create Static Collection -> 20 draw calls

 

Making a group reference made no diff.

 

 

And aye, draw calls are a huge drain on performance. In Direct3D 11, framerates veer to sub-30 territory at around 6k-6.5k draw calls. If you have a decent intel CPU (AMD CPUs are ~3.5x worse than their equivalently performing intel counterparts), the ceiling is a bit higher, but still pretty gnarly.

 

For reference, at the top of the Corvega factory, on high settings, I was getting 17fps. A dude with an i7 920 was getting 60fps, both of us making around 10k draw calls. I reduce the shadow distance, et voila, a higher framerate since the draw calls have been cut drastically.

 

 

Edit: One of the potential ramifications of this, since you can batch objects straight in the render window, iis that the precombined geometry system seem awfully dumb, at least for us small-scale modders. Granted, a dude designing a whole worldspace would probably prefer to use the precombined geometry because of the two-clicks-and-wait approach to it.

Edited by FiftyTifty
Link to comment
Share on other sites

Right, made a super terrible test (ideal test is that every object is different, to avoid intelligent driver shenanigans, but cba). Take a look.

 

Not a static collection:

 

 

http://i.imgur.com/biSx3k4.png

 

 

 

Is a static collection:

 

 

http://i.imgur.com/5tLHoHY.png

 

 

 

Chuck in AI, lights, not just a bazillion copies of the same 20 meshes, etc., and the performance delta would jump waaaaay higher.

 

Edit: Also, I'm using an HD 7850 2GB. I'm probably gpu limited to the extreme in the second image. If somebody with actual GPU grunt wants to give it a go, I've attached the .esp file.

 

In the console, type: coc AAAAStatic01 to go to the cell with the un-batched objects.

For the batched: coc AAAAStatic02

Edited by FiftyTifty
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...