Section Count
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, your model will have 2 sections. If you now apply texturefile B.paa to the face on the bottom, you will have 3 sections, and so on. 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, and during that time the GPU has to wait. What is worse is, that one section require 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.
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.
- 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 - 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.