Section Count

From Bohemia Interactive Community
Revision as of 01:13, 27 September 2015 by X3KJ (talk | contribs)
Jump to navigation Jump to search

Definition

A section is essentially a combination of material and texture, which contains one specific shader, with it's specific settings and maps.


Example: The model is a cube. If you apply a texturefile A.paa to all faces, your model will have one section. If you apply a material A.rvmat to all faces, you still only have one section. If you apply a texturefile B.paa and/or a material B.rvmat to the face on top of the cube, your model will have 2 sections. If you now apply just texturefile B.paa to the face on the bottom (means the rvmat is still A.rvmat), you will have 3 sections. What matters is not just the file name, but also the path, because the binarization process won't check the content of those paths for similarity.


Ingame, in entire scene that your GPU renders and is displayed on your monitor, every model requires it's own sections. It doesn't matter if it's 20 completely different models with completely different textures and materials on the screen, or if it's 20 copies of the exact same model. This also applies to proxy models.

Example: You have a chair with 2 sections and a house with 10 sections. You chose to make the chair as a seperate .p3d to be able to easily use it multiple times inside a house model . You place 4 chairs inside the house via proxies. Ingame, the scene of the house with the chairs will end up as 10+4*2= 18 sections. If you would not make the chair seperate and instead put it directly into the house.p3d, the scene would have just 10+2= sections.


Sometimes copying and pasting from one p3d to another via Objectbuilder/Oxygen 2 can result in increased section count even if the texture and rvmat match < Guide or link how to fix it>

Impact of Sections

The amount of sections a model has is a big factor in how much CPU ressources it takes to render it.


For every section you have in your model, the GPU needs a seperate instruction, also called "draw-call". A draw-call, in laymans terms, is an Instruction the CPU sends to the GPU to render something with a specific setting. Each section requires a seperate draw-call. That means, the CPU needs to send more instructions if your model has more sections. During that time the GPU has to wait. What is worse is, that one section requires not just one, but multiple draw-calls, because things such as lighting or shadow also require seperate draw-calls per section. So the entire section might be multiplied by 3-6 or more in the end, depending on how complex the scene and lighting is.


Modern GPU's can draw high amount's of polygons per draw call (actual numbers for current hardware are hard to come by), so if they constantly need to wait on the CPU, they can't bring their full power to bear. When there is alot of other CPU intensive stuff going on (lots of AI, complex user-made scripts/missions, etc), the GPU gets even less instructions.

To highlight the impact of section count, a quote from modeller "P1nGa" about a test he did with a Performance Testscript created by JonBons on reddit: you can find some suprising results, like my Minimi Mk3 has almost 5k more verts, than the most common used M249 at the moment, but in almost all of the tests i get 5-10fps better, essentially because the other one has like 13 sections, and mine as 4 . That is 5-10 fps for just one weapon.

Take-Away

  • Pay attention that you don't have excessive amounts of sections in your model
  • Especially try to reduce the section count for low-res LOD as far as possible
  • Don't make excessive use of proxy objects, especially not if they have high section count. Wheels on a tank should under no circumstance be proxied for example.
  • For Buildings or Objects with low specularity, it's best to use Multimaterials. A Tutorial on how to use them can be found here
  • If you have multiple smaller textures for a model (lower then 2048 resolution ) you should think about combining them to 2048 x 2048 or 2048 x 1024 textures (and adjust the UV's of your model accordingly). You can leave a part of the texture black if you dont need it, as this will take only very little space. Note that combining textures to an image of 4096 resolution can result in faster "downscaling" of the Mipmap - resulting in lower image quality then if you would use only 2048 resolution textures.
  • Remember that 1 section more or less on a single model won't ruin the performance. But like with polycount - all things add up. Many player use multiple mods. And if everyone does a sloppy job on optimizing section count it will have a large impact. Another case are total conversions and large mod packages - if you encounter performance problems after you are finished with everything, trying to go back and fix it is alot more time consuming and boring then paying attention to the issue during the creation process of every model.